diff --git a/button.lua b/button.lua new file mode 100644 index 0000000..3597f3a --- /dev/null +++ b/button.lua @@ -0,0 +1,81 @@ +local self = {} + +local buttons = {} + +function self.get(index) + return buttons[index] +end + +function self.kget(key) + for _, v in ipairs(buttons) do + if v.name == key then + return v + end + end +end + +local buttonId +local function insertButton(tab, f) + buttonId = buttonId + 1 + f.press = (self.kget(f.name) or {press = 1}).press + return table.insert(tab, f) +end +function self.createButtons() + local s = {} + buttonId = 0 + + --[[ + insertButton(s, { + x = outerpadding, + y = love.graphics.getHeight() - outerpadding - fontHeight * 4 - padding * 2 - 32, + size = 32, + name = 'clipboard', + displayname = 'Copy to Clipboard' + }) + ]] + + buttons = s +end + +function self.update(dt) + for i, v in ipairs(buttons) do + local mx, my = love.mouse.getPosition() + + local targetsize = 1 + if mx > v.x and mx < v.x + v.size and my > v.y and my < v.y + v.size then + if love.mouse.isDown(1) then + targetsize = 0.8 + else + targetsize = 0.95 + end + end + + v.press = mix(v.press, targetsize, dt * 12) + end +end + +function self.render() + local mx, my = love.mouse.getPosition() + + for i, v in ipairs(buttons) do + local x, y, w, h = v.x, v.y, v.size, v.size + + w = w * v.press + h = h * v.press + x = x + (v.size - w) / 2 + y = y + (v.size - h) / 2 + + local hovering = mx > x and mx < x + w and my > y and my < y + h and dropdown.openDropdown == 0 + local clicking = hovering and love.mouse.isDown(1) + + love.graphics.setColor(0, 0, 0, 1) + if hovering or dragging then + love.graphics.setColor(0.2, 0.2, 0.3, 1) + end + love.graphics.rectangle('fill', x, y, w, h) + love.graphics.setColor(1, 1, 1, 1) + love.graphics.rectangle('line', x, y, w, h) + end +end + +return self \ No newline at end of file diff --git a/main.lua b/main.lua index 1d41e88..fdbe5d7 100644 --- a/main.lua +++ b/main.lua @@ -11,6 +11,7 @@ ease = require 'ease' slider = require 'slider' dropdown = require 'dropdown' graph = require 'graph' +button = require 'button' modes = { preview = 1, @@ -22,6 +23,7 @@ modes = { function createUI() dropdown.createDropdowns() slider.createSliders() + button.createButtons() end require 'util' -- exports into global table @@ -49,6 +51,7 @@ function love.update(dt) graph.update(dt) slider.update(dt) dropdown.update(dt) + button.update(dt) end function love.draw() @@ -65,6 +68,8 @@ function love.draw() love.graphics.setColor(0.2, 0.2, 0.3, 1) love.graphics.print('Box of Eases by oatmealine', outerpadding, sh - fontHeight - outerpadding) + button.render() + slider.render() dropdown.render()