clocktoy/main.lua

151 lines
3.9 KiB
Lua

local Time = require"time"
local loveframes = require"loveframes"
local Clock = require"clock"
local clock
local exitNote
local inputSource
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.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
-- 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)
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)
function controls:OnOpenedClosed()
if self:GetOpen() then
self:SetText("Hide time")
else
self:SetText("Show time")
end
end
controls:OnOpenedClosed()
local function setClock()
local t = Time:new(hourBox:GetValue(), minuteBox:GetValue())
clock:setTime(t)
end
hourBox.OnValueChanged = setClock
minuteBox.OnValueChanged = setClock
local function updateInputNoCallback(input, value)
local callback = input.OnValueChanged
input.OnValueChanged = nil
input:SetValue(value)
input.OnValueChanged = callback
end
local function updateInputs(time)
local h, m = time:get()
updateInputNoCallback(hourBox, h)
updateInputNoCallback(minuteBox, math.floor(m))
end
clock.onSetHands = updateInputs
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)
local function draw()
loveframes.draw()
clock:draw()
love.graphics.printf(exitNote, exitNoteFont, column2X, exitNoteY, exitNoteWidth)
end
love.draw = draw
end
function love.update(dt)
loveframes.update(dt)
end