From 228322451622455d64989ada6353e9dfa3dffbc9 Mon Sep 17 00:00:00 2001 From: Brandon Dyck Date: Mon, 15 Apr 2024 19:51:42 -0600 Subject: [PATCH] Align clock face and mouse inputs to center of screen --- clock.lua | 8 +++---- main.lua | 68 ++++++++++++++++++++++++++++++------------------------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/clock.lua b/clock.lua index 0a55981..e47876e 100644 --- a/clock.lua +++ b/clock.lua @@ -47,7 +47,7 @@ local function drawFaceCanvas(r, lineWidth) local canvas = love.graphics.newCanvas(2*r,2*r) love.graphics.setCanvas(canvas) love.graphics.push("all") - love.graphics.translate(r, r) + love.graphics.translate(r,r) local rbezel = r-lineWidth/2 love.graphics.setColor(YELLOW) love.graphics.circle("fill", 0, 0, rbezel) @@ -89,9 +89,9 @@ end local Clock = {} Clock.__index = Clock -function Clock:new(time, diameter) +function Clock:new(time, diameter, transform) local radius = diameter and diameter/2 or 300 - local transform = love.math.newTransform(radius, radius) + transform = transform or love.math.newTransform() local lineWidth = radius/200 local c = { time = (time or Time:new()), @@ -118,8 +118,8 @@ function Clock:draw() local _, m = self.time:get() local h = self.time:getHoursSinceTwelve() love.graphics.push("all") - love.graphics.draw(self.faceCanvas) love.graphics.applyTransform(self.transform) + love.graphics.draw(self.faceCanvas, -self.radius, -self.radius) self.minuteHand:draw(m / 60) self.hourHand:draw(h / 12) love.graphics.pop() diff --git a/main.lua b/main.lua index 0392dc1..c257e3b 100644 --- a/main.lua +++ b/main.lua @@ -1,38 +1,9 @@ + local Time = require"time" local loveframes = require"loveframes" - local Clock = require"clock" -local clock = Clock:new(nil, love.graphics.getHeight()) -local controls = loveframes.Create("panel"):SetPos(10,10) -local toggleTime = loveframes.Create("checkbox"):SetParent(controls):SetPos(0,0) -toggleTime:SetText("Show time") -local hourBox = loveframes.Create("numberbox"):SetMinMax(1, 12):SetValue(12) -hourBox:SetParent(controls):SetPos(0,30) -local minuteBox = loveframes.Create("numberbox"):SetMinMax(0, 59):SetValue(0) -loveframes.Create("text"):SetText(":"):SetParent(controls):SetPos(80,30) -minuteBox:SetParent(controls):SetPos(100,30) - -function setClock() - local t = Time:new(hourBox:GetValue(), minuteBox:GetValue()) - clock:setTime(t) -end -hourBox.OnValueChanged = setClock -minuteBox.OnValueChanged = setClock - -function updateInputNoCallback(input, value) - callback = input.onValueChanged - input.onValueChanged = nil - input:SetValue(value) - input.onValueChanged = callback -end - -function updateInputs(time) - local h, m = time:get() - updateInputNoCallback(hourBox, h) - updateInputNoCallback(minuteBox, math.floor(m)) -end -clock.onSetHands = updateInputs +local clock function love.mousemoved(x, y, dx, dy, istouch) clock:movemouse(x, y) @@ -62,6 +33,41 @@ function love.textinput(text) end function love.load() + if arg[#arg] == "-debug" then require("mobdebug").start() end + + local clockTransform = love.math.newTransform(love.graphics.getWidth()/2, love.graphics.getHeight()/2) + clock = Clock:new(nil, love.graphics.getHeight(), clockTransform) + + local controls = loveframes.Create("panel"):SetPos(10,10) + local toggleTime = loveframes.Create("checkbox"):SetParent(controls):SetPos(0,0) + toggleTime:SetText("Show time") + local hourBox = loveframes.Create("numberbox"):SetMinMax(1, 12):SetValue(12) + hourBox:SetParent(controls):SetPos(0,30) + local minuteBox = loveframes.Create("numberbox"):SetMinMax(0, 59):SetValue(0) + loveframes.Create("text"):SetText(":"):SetParent(controls):SetPos(80,30) + minuteBox:SetParent(controls):SetPos(100,30) + + function setClock() + local t = Time:new(hourBox:GetValue(), minuteBox:GetValue()) + clock:setTime(t) + end + hourBox.OnValueChanged = setClock + minuteBox.OnValueChanged = setClock + + function updateInputNoCallback(input, value) + callback = input.onValueChanged + input.onValueChanged = nil + input:SetValue(value) + input.onValueChanged = callback + end + + function updateInputs(time) + local h, m = time:get() + updateInputNoCallback(hourBox, h) + updateInputNoCallback(minuteBox, math.floor(m)) + end + clock.onSetHands = updateInputs + love.graphics.setBackgroundColor(0.02,0.53,0.77) end