local Time = require"time" local loveframes = require"loveframes" local Clock = require"clock" -- TODO delete this when the skin is done function setupSkin(fontsize) local font = love.graphics.newFont(fontsize) loveframes.basicfont = font loveframes.config["ACTIVESKIN"] = "Blue" local skin = loveframes.GetActiveSkin() skin.controls.smallfont = font loveframes.RegisterTemplate({ name = "Clock", properties = { numberbox = { height = fontsize+10 }, textinput = { width = font:getWidth("999")+10 }, collapsiblecategory = { height = fontsize+10, closedheight = fontsize+10 } } }) end function love.load() if arg[#arg] == "-debug" then require("mobdebug").start() end loveframes.SetActiveSkin("Clock") local fontsize = love.graphics.getHeight() / 20 -- setupSkin(fontsize) local margin = love.graphics.getHeight() / 20 local diameter = love.graphics.getHeight() - 2 * margin local offset = diameter/2 + margin local clockTransform = love.math.newTransform(offset, offset) local clock = Clock:new(nil, diameter, clockTransform) local column2X = diameter + 2*margin local timeInputs = loveframes.Create("panel") :SetY(30) local hourBox = loveframes.Create("numberbox") :SetMinMax(1, 12) :SetValue(12) :SetParent(timeInputs) timeInputs:SetHeight(hourBox:GetHeight()) loveframes.Create("text") :SetText(":") :SetParent(timeInputs):SetX(80) local minuteBox = loveframes.Create("numberbox") :SetMinMax(0, 59) :SetValue(0) :SetParent(timeInputs) :SetX(100) :SetZeroPad(true) local controls = loveframes.Create("collapsiblecategory") :SetPos(column2X, margin) :SetObject(timeInputs) controls.OnOpenedClosed = function() if controls:GetOpen() then controls:SetText("Hide time") else controls:SetText("Show time") end end controls:OnOpenedClosed() hourBox.OnValueChanged = function() local t = Time:new(hourBox:GetValue(), minuteBox:GetValue()) clock:setTime(t) end minuteBox.OnValueChanged = hourBox.OnValueChanged local function updateInputNoCallback(input, value) local callback = input.OnValueChanged input.OnValueChanged = nil input:SetValue(value) input.OnValueChanged = callback end clock.onSetHands = function(time) local h, m = time:get() updateInputNoCallback(hourBox, h) updateInputNoCallback(minuteBox, math.floor(m)) end local exitNote = "Press \"Esc\" to exit." local exitNoteWidth = love.graphics.getWidth() - column2X - margin local exitNoteFont = love.graphics.newFont(fontsize) local _, wraps = exitNoteFont:getWrap(exitNote, exitNoteWidth) local exitNoteY = love.graphics.getHeight() - table.maxn(wraps) * exitNoteFont:getHeight() - margin love.graphics.setBackgroundColor(0.02,0.53,0.77) function love.mousemoved(x, y, dx, dy, istouch) clock:movemouse(x, y) end -- todo mousepressed & mousereleased function love.mousepressed(x, y, button, istouch, presses) clock:pressmouse(x, y, button) loveframes.mousepressed(x, y, button) end function love.mousereleased(x, y, button, istouch, presses) clock:releasemouse(button) loveframes.mousereleased(x, y, button) end function love.draw() loveframes.draw() clock:draw() love.graphics.printf(exitNote, exitNoteFont, column2X, exitNoteY, exitNoteWidth) end end function love.keypressed(key, scancode, isrepeat) if scancode == "escape" then love.event.quit() end loveframes.keypressed(key, isrepeat) end function love.keyreleased(key) loveframes.keyreleased(key) end function love.textinput(text) loveframes.textinput(text) end function love.update(dt) loveframes.update(dt) end