mirror of
https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile.git
synced 2025-01-08 17:33:09 +08:00
Update simple button module
This commit is contained in:
@@ -17,7 +17,9 @@ local function checkColorTableValidation(C)
|
||||
end
|
||||
|
||||
---@class BUTTON.button
|
||||
---@field name? string # Name of the button, will be used to show
|
||||
---@field text? string # Name of the button, will be used to show
|
||||
---@field textOrientation? "center"|"justify"|"left"|"right"
|
||||
---
|
||||
---@field x? number # Position of the button (x, y, w, h)
|
||||
---@field y? number # Position of the button (x, y, w, h)
|
||||
---@field w? number # Position of the button (x, y, w, h)
|
||||
@@ -42,8 +44,8 @@ end
|
||||
---@field draw? function
|
||||
---@field update? function
|
||||
local button = {
|
||||
name = "NEW BUTTON",
|
||||
x = 0, y = 0, w = 1, h = 1, r = 0,
|
||||
textOrientation = "center",
|
||||
r = 0,
|
||||
|
||||
backgroundColor = {0,0,0,0},
|
||||
hoverColor = {1,1,1,0.5},
|
||||
@@ -76,7 +78,15 @@ function button:draw()
|
||||
|
||||
love.graphics.setColor(self.textColor)
|
||||
love.graphics.setFont(self.font)
|
||||
love.graphics.printf(self.name, self.x, self.y + (self.h * 0.5) - (self.font:getHeight() * 0.5), self.w, "center")
|
||||
|
||||
local lineAmount
|
||||
do
|
||||
local _, t = self.font:getWrap(self.text, self.w)
|
||||
lineAmount = #t
|
||||
end
|
||||
local textHeight = self.font:getHeight() * (lineAmount * 0.5)
|
||||
local textPos = self.y + (self.h * 0.5) - textHeight
|
||||
love.graphics.printf(self.text, self.x, textPos, self.w, self.textOrientation)
|
||||
|
||||
love.graphics.setColor(self.borderColor)
|
||||
love.graphics.rectangle('line', self.x, self.y, self.w, self.h, self.r)
|
||||
@@ -112,15 +122,16 @@ local BUTTON = {}
|
||||
---@return nil
|
||||
---Validate the provided data, will be called by ``BUTTON.new`` and ``BUTTON.setDefaultOption``<br>
|
||||
---***WARNING! THIS FUNCTION WILL RAISE EXCEPTION IF DATA IS INVALID!***
|
||||
function BUTTON.checkDataValidation(D, safe)
|
||||
function BUTTON.checkDataValidation(D)
|
||||
-- <SAFE TO IGNORE>
|
||||
assert(type(D.name) == "string" or (safe and D.name == nil) == "string","[name] is missing, or you just passed an empty data?")
|
||||
assert(type(D.text) == "string" == "string","[text] is missing, or you just passed an empty data?")
|
||||
|
||||
assert( type(D.x) == "number" or (safe and D.x == nil), "[x] must be a integer")
|
||||
assert( type(D.y) == "number" or (safe and D.y == nil), "[y] must be a integer")
|
||||
assert((type(D.w) == "number" and D.w > 0) or (safe and D.w == nil), "[w] must be a positive integer")
|
||||
assert((type(D.h) == "number" and D.h > 0) or (safe and D.h == nil), "[h] must be a positive integer")
|
||||
assert(type(D.x) == "number" , "[x] must be a integer")
|
||||
assert(type(D.y) == "number" , "[y] must be a integer")
|
||||
assert(type(D.w) == "number" and D.w > 0, "[w] must be a positive integer")
|
||||
assert(type(D.h) == "number" and D.h > 0, "[h] must be a positive integer")
|
||||
-- </>
|
||||
assert(table.contains({"center","justify","left","right"}, D.textOrientation) or D.textOrientation == nil, "[borderJoin] must be 'bevel', 'miter' or 'none")
|
||||
|
||||
assert((type(D.r) == "number" and D.r >= 0 and D.r <= D.w * 0.5 and D.r <= D.h * 0.5) or D.r == nil, "[r] must be a positive integer and cannot larger than half of button's width and half of button's height")
|
||||
assert((type(D.borderWidth) == "number" and D.borderWidth > 0) or D.borderWidth == nil, "[borderWidth] must be a postive integer")
|
||||
@@ -139,7 +150,9 @@ function BUTTON.checkDataValidation(D, safe)
|
||||
end
|
||||
|
||||
---@class BUTTON.newData
|
||||
---@field name string # Name of the button, will be used to show
|
||||
---@field text string # Name of the button, will be used to show
|
||||
---@field textOrientation? "center"|"justify"|"left"|"right"
|
||||
---
|
||||
---@field x number # Position of the button (x, y, w, h)
|
||||
---@field y number # Position of the button (x, y, w, h)
|
||||
---@field w number # Position of the button (x, y, w, h)
|
||||
@@ -169,8 +182,9 @@ end
|
||||
---Create a new button, provide you a table with 4 functions inside: draw and update, press and release<br>
|
||||
---You need to put them into intended callbacks :)
|
||||
function BUTTON.new(D)
|
||||
BUTTON.checkDataValidation(D)
|
||||
return setmetatable(D, button)
|
||||
local B = setmetatable(D, button)
|
||||
BUTTON.checkDataValidation(B)
|
||||
return B
|
||||
end
|
||||
|
||||
---@param D BUTTON.button
|
||||
@@ -180,7 +194,7 @@ function BUTTON.setDefaultOption(D)
|
||||
if button[k] ~= nil then
|
||||
button[k] = v
|
||||
else
|
||||
error("There is no "..k.." parameter in BUTTON!")
|
||||
error("Parameter named ["..k.."] is not existed or cannot be set default value, in BUTTON!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user