mirror of
https://github.com/airstruck/luigi.git
synced 2025-12-19 10:26:43 +00:00
53 lines
1.3 KiB
Lua
53 lines
1.3 KiB
Lua
local Widget = require((...):gsub('%.[^.]*$', ''))
|
|
|
|
local Slider = Widget:extend()
|
|
|
|
function Slider:constructor (layout, data)
|
|
Widget.constructor(self, layout, data)
|
|
|
|
self.value = 0.5
|
|
|
|
self:onPressDrag(function (event)
|
|
local x1, y1, x2, y2 = self:getRectangle(true, true)
|
|
self.value = (event.x - x1) / (x2 - x1)
|
|
if self.value < 0 then self.value = 0 end
|
|
if self.value > 1 then self.value = 1 end
|
|
end)
|
|
|
|
self:onDisplay(function (event)
|
|
local x1, y1, x2, y2 = self:getRectangle(true, true)
|
|
local padding = self.padding or 0
|
|
|
|
local sx1 = math.floor(x1 + self.value * (x2 - x1) - padding) + 0.5
|
|
local sy1 = math.floor(y1 + padding) + 0.5
|
|
local sx2 = padding * 2
|
|
local sy2 = y2 - y1 - padding
|
|
|
|
love.graphics.push('all')
|
|
|
|
love.graphics.setColor(self.outline)
|
|
|
|
love.graphics.rectangle('fill',
|
|
x1,
|
|
y1 + ((y2 - y1) / 2),
|
|
x2 - x1,
|
|
padding
|
|
)
|
|
|
|
love.graphics.setColor(self.background)
|
|
|
|
love.graphics.rectangle('fill', sx1, sy1, sx2, sy2)
|
|
|
|
love.graphics.setColor(self.outline)
|
|
|
|
love.graphics.rectangle('line', sx1, sy1, sx2, sy2)
|
|
|
|
love.graphics.pop()
|
|
|
|
return false
|
|
end)
|
|
|
|
end
|
|
|
|
return Slider
|