144 lines
3.9 KiB
Lua
144 lines
3.9 KiB
Lua
|
|
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
|
|
|