Docs changes

This commit is contained in:
Robert Jelic
2025-02-24 23:54:07 +01:00
parent a98475a442
commit a3cc685620
21 changed files with 188 additions and 133 deletions

View File

@@ -31,22 +31,23 @@ BaseElement.defineProperty(BaseElement, "name", {default = "", type = "string"})
--- @property eventCallbacks table BaseElement The event callbacks for the element
BaseElement.defineProperty(BaseElement, "eventCallbacks", {default = {}, type = "table"})
---@private
function BaseElement.defineEvent(class, eventName, requiredEvent)
if not rawget(class, '_eventConfigs') then
class._eventConfigs = {}
end
class._eventConfigs[eventName] = {
requires = requiredEvent and requiredEvent or eventName
}
end
---@private
function BaseElement.registerEventCallback(class, callbackName, ...)
local methodName = callbackName:match("^on") and callbackName or "on"..callbackName
local events = {...}
local mainEvent = events[1]
class[methodName] = function(self, ...)
for _, sysEvent in ipairs(events) do
if not self._registeredEvents[sysEvent] then
@@ -58,22 +59,19 @@ function BaseElement.registerEventCallback(class, callbackName, ...)
end
end
--- Creates a new BaseElement instance
--- @shortDescription Creates a new BaseElement instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return table The newly created BaseElement instance
--- @usage local element = BaseElement.new()
---@private
function BaseElement.new()
local self = setmetatable({}, BaseElement):__init()
return self
end
--- Initializes the BaseElement instance
--- @shortDescription Initializes the BaseElement instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return table self The initialized instance
---@protected
function BaseElement:init(props, basalt)
self._props = props
self._values.id = uuid()
@@ -112,9 +110,9 @@ function BaseElement:init(props, basalt)
return self
end
--- Post initialization
--- @shortDescription Post initialization
--- @return table self The BaseElement instance
---@protected
function BaseElement:postInit()
if(self._props)then
for k,v in pairs(self._props)do
@@ -197,11 +195,11 @@ function BaseElement:fireEvent(event, ...)
return self
end
--- Handles all events
--- @shortDescription Handles all events
--- @param event string The event to handle
--- @vararg any The arguments for the event
--- @return boolean? handled Whether the event was handled
--- @protected
function BaseElement:dispatchEvent(event, ...)
if self[event] then
return self[event](self, ...)
@@ -209,11 +207,11 @@ function BaseElement:dispatchEvent(event, ...)
return self:handleEvent(event, ...)
end
--- The default event handler for all events
--- @shortDescription The default event handler for all events
--- @param event string The event to handle
--- @vararg any The arguments for the event
--- @return boolean? handled Whether the event was handled
--- @protected
function BaseElement:handleEvent(event, ...)
return false
end

View File

@@ -28,6 +28,7 @@ end})
--- @shortDescription Creates a new Frame instance
--- @return BaseFrame object The newly created Frame instance
--- @usage local element = BaseFrame.new()
--- @private
function BaseFrame.new()
local self = setmetatable({}, BaseFrame):__init()
self.set("term", term.current())
@@ -35,18 +36,17 @@ function BaseFrame.new()
return self
end
--- Initializes the Frame instance
--- @shortDescription Initializes the Frame instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return table self The initialized instance
--- @protected
function BaseFrame:init(props, basalt)
Container.init(self, props, basalt)
self.set("type", "BaseFrame")
return self
end
--- Renders a multiBlit to the render Object
--- @shortDescription Renders a multiBlit to the render Object
--- @param x number The x position to render to
--- @param y number The y position to render to
@@ -55,41 +55,42 @@ end
--- @param text string The text to render
--- @param fg string The foreground color
--- @param bg string The background color
--- @protected
function BaseFrame:multiBlit(x, y, width, height, text, fg, bg)
if(x<1)then width = width + x - 1; x = 1 end
if(y<1)then height = height + y - 1; y = 1 end
self._render:multiBlit(x, y, width, height, text, fg, bg)
end
--- Renders a text with a foreground color to the render Object
--- @shortDescription Renders a text with a foreground color to the render Object
--- @param x number The x position to render to
--- @param y number The y position to render to
--- @param text string The text to render
--- @param fg colors The foreground color
--- @protected
function BaseFrame:textFg(x, y, text, fg)
if x < 1 then text = string.sub(text, 1 - x); x = 1 end
self._render:textFg(x, y, text, fg)
end
--- Renders a text with a background color to the render Object
--- @shortDescription Renders a text with a background color to the render Object
--- @param x number The x position to render to
--- @param y number The y position to render to
--- @param text string The text to render
--- @param bg colors The background color
--- @protected
function BaseFrame:textBg(x, y, text, bg)
if x < 1 then text = string.sub(text, 1 - x); x = 1 end
self._render:textBg(x, y, text, bg)
end
--- Renders a text with a foreground and background color to the render Object
--- @shortDescription Renders a text with a foreground and background color to the render Object
--- @param x number The x position to render to
--- @param y number The y position to render to
--- @param text string The text to render
--- @param fg string The foreground color
--- @param bg string The background color
--- @protected
function BaseFrame:blit(x, y, text, fg, bg)
if x < 1 then
text = string.sub(text, 1 - x)
@@ -109,13 +110,18 @@ function BaseFrame:setCursor(x, y, blink, color)
self._render:setCursor(x, y, blink, color)
end
---@private
--- @shortDescription Handles mouse up events
--- @param button number The button that was released
--- @param x number The x position of the mouse
--- @param y number The y position of the mouse
--- @protected
function BaseFrame:mouse_up(button, x, y)
Container.mouse_up(self, button, x, y)
Container.mouse_release(self, button, x, y)
end
---@private
--- @shortDescription Resizes the Frame
--- @protected
function BaseFrame:term_resize()
local width, height = self.get("term").getSize()
if(width == self.get("width") and height == self.get("height")) then
@@ -127,8 +133,8 @@ function BaseFrame:term_resize()
self._renderUpdate = true
end
--- Renders the Frame
--- @shortDescription Renders the Frame
--- @protected
function BaseFrame:render()
if(self._renderUpdate) then
if self._render ~= nil then

View File

@@ -12,13 +12,12 @@ Button.__index = Button
---@property text string Button Button text
Button.defineProperty(Button, "text", {default = "Button", type = "string", canTriggerRender = true})
---@event mouse_click The event that is triggered when the button is clicked
Button.defineEvent(Button, "mouse_click")
Button.defineEvent(Button, "mouse_up")
--- Creates a new Button instance
--- @shortDescription Creates a new Button instance
--- @return table self The created instance
--- @private
function Button.new()
local self = setmetatable({}, Button):__init()
self.set("width", 10)
@@ -27,17 +26,17 @@ function Button.new()
return self
end
--- Initializes the Button instance
--- @shortDescription Initializes the Button instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @protected
function Button:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Button")
end
--- Renders the Button
--- @shortDescription Renders the Button
--- @protected
function Button:render()
VisualElement.render(self)
local text = self.get("text")

View File

@@ -31,29 +31,29 @@ Checkbox.defineProperty(Checkbox, "autoSize", {default = true, type = "boolean"}
Checkbox.defineEvent(Checkbox, "mouse_click")
--- Creates a new Checkbox instance
--- @shortDescription Creates a new Checkbox instance
--- @return Checkbox self The created instance
--- @protected
function Checkbox.new()
local self = setmetatable({}, Checkbox):__init()
return self
end
--- Initializes the Checkbox instance
--- @shortDescription Initializes the Checkbox instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @protected
function Checkbox:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Checkbox")
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean Clicked Whether the event was handled
--- @protected
function Checkbox:mouse_click(button, x, y)
if VisualElement.mouse_click(self, button, x, y) then
self.set("checked", not self.get("checked"))
@@ -63,8 +63,8 @@ function Checkbox:mouse_click(button, x, y)
return false
end
--- Renders the Checkbox
--- @shortDescription Renders the Checkbox
--- @protected
function Checkbox:render()
VisualElement.render(self)

View File

@@ -83,15 +83,16 @@ end
--- Creates a new Container instance
--- @shortDescription Creates a new Container instance
--- @return Container self The new container instance
--- @private
function Container.new()
local self = setmetatable({}, Container):__init()
return self
end
--- Initializes the Container instance
--- @shortDescription Initializes the Container instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @protected
function Container:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Container")
@@ -337,7 +338,7 @@ end
--- @vararg any The event arguments
--- @return boolean handled Whether the event was handled
--- @return table child? The child that handled the event
function Container:callChildrenEvents(visibleOnly, event, ...)
function Container:callChildrenEvent(visibleOnly, event, ...)
local children = visibleOnly and self.get("visibleChildrenEvents") or self.get("childrenEvents")
if children[event] then
local events = children[event]
@@ -351,27 +352,27 @@ function Container:callChildrenEvents(visibleOnly, event, ...)
return false
end
--- Default handler for events
--- @shortDescription Default handler for events
--- @param event string The event to handle
--- @vararg any The event arguments
--- @return boolean handled Whether the event was handled
--- @protected
function Container:handleEvent(event, ...)
VisualElement.handleEvent(self, event, ...)
local args = convertMousePosition(self, event, ...)
return self:callChildrenEvents(false, event, table.unpack(args))
return self:callChildrenEvent(false, event, table.unpack(args))
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Container:mouse_click(button, x, y)
if VisualElement.mouse_click(self, button, x, y) then
local args = convertMousePosition(self, "mouse_click", button, x, y)
local success, child = self:callChildrenEvents(true, "mouse_click", table.unpack(args))
local success, child = self:callChildrenEvent(true, "mouse_click", table.unpack(args))
if(success)then
self.set("focusedChild", child)
return true
@@ -382,16 +383,16 @@ function Container:mouse_click(button, x, y)
return false
end
--- Handles mouse up events
--- @shortDescription Handles mouse up events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Container:mouse_up(button, x, y)
if VisualElement.mouse_up(self, button, x, y) then
local args = convertMousePosition(self, "mouse_up", button, x, y)
local success, child = self:callChildrenEvents(true, "mouse_up", table.unpack(args))
local success, child = self:callChildrenEvent(true, "mouse_up", table.unpack(args))
if(success)then
return true
end
@@ -399,27 +400,27 @@ function Container:mouse_up(button, x, y)
return false
end
--- Handles mouse release events
--- @shortDescription Handles mouse release events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @protected
function Container:mouse_release(button, x, y)
VisualElement.mouse_release(self, button, x, y)
local args = convertMousePosition(self, "mouse_release", button, x, y)
self:callChildrenEvents(false, "mouse_release", table.unpack(args))
self:callChildrenEvent(false, "mouse_release", table.unpack(args))
end
--- Handles mouse move events
--- @shortDescription Handles mouse move events
--- @param _ number unknown
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Container:mouse_move(_, x, y)
if VisualElement.mouse_move(self, _, x, y) then
local args = convertMousePosition(self, "mouse_move", _, x, y)
local success, child = self:callChildrenEvents(true, "mouse_move", table.unpack(args))
local success, child = self:callChildrenEvent(true, "mouse_move", table.unpack(args))
if(success)then
return true
end
@@ -427,16 +428,16 @@ function Container:mouse_move(_, x, y)
return false
end
--- Handles mouse drag events
--- @shortDescription Handles mouse drag events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Container:mouse_drag(button, x, y)
if VisualElement.mouse_drag(self, button, x, y) then
local args = convertMousePosition(self, "mouse_drag", button, x, y)
local success, child = self:callChildrenEvents(true, "mouse_drag", table.unpack(args))
local success, child = self:callChildrenEvent(true, "mouse_drag", table.unpack(args))
if(success)then
return true
end
@@ -444,15 +445,15 @@ function Container:mouse_drag(button, x, y)
return false
end
--- Handles mouse scroll events
--- @shortDescription Handles mouse scroll events
--- @param direction number The direction of the scroll
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Container:mouse_scroll(direction, x, y)
local args = convertMousePosition(self, "mouse_scroll", direction, x, y)
local success, child = self:callChildrenEvents(true, "mouse_scroll", table.unpack(args))
local success, child = self:callChildrenEvent(true, "mouse_scroll", table.unpack(args))
if(success)then
return true
end
@@ -462,10 +463,10 @@ function Container:mouse_scroll(direction, x, y)
return false
end
--- Handles key events
--- @shortDescription Handles key events
--- @param key number The key that was pressed
--- @return boolean handled Whether the event was handled
--- @protected
function Container:key(key)
if self.get("focusedChild") then
return self.get("focusedChild"):dispatchEvent("key", key)
@@ -473,10 +474,10 @@ function Container:key(key)
return true
end
--- Handles char events
--- @shortDescription Handles char events
--- @param char string The character that was pressed
--- @return boolean handled Whether the event was handled
--- @protected
function Container:char(char)
if self.get("focusedChild") then
return self.get("focusedChild"):dispatchEvent("char", char)
@@ -484,10 +485,10 @@ function Container:char(char)
return true
end
--- Handles key up events
--- @shortDescription Handles key up events
--- @param key number The key that was released
--- @return boolean handled Whether the event was handled
--- @protected
function Container:key_up(key)
if self.get("focusedChild") then
return self.get("focusedChild"):dispatchEvent("key_up", key)
@@ -495,7 +496,6 @@ function Container:key_up(key)
return true
end
--- Draws multiple lines of text, fg and bg strings, it is usually used in the render loop
--- @shortDescription Draws multiple lines of text, fg and bg strings
--- @param x number The x position to draw the text
--- @param y number The y position to draw the text
@@ -505,6 +505,7 @@ end
--- @param fg string The foreground color of the text
--- @param bg string The background color of the text
--- @return Container self The container instance
--- @protected
function Container:multiBlit(x, y, width, height, text, fg, bg)
local w, h = self.get("width"), self.get("height")
@@ -517,13 +518,13 @@ function Container:multiBlit(x, y, width, height, text, fg, bg)
return self
end
--- Draws a line of text and fg as color, it is usually used in the render loop
--- @shortDescription Draws a line of text and fg as color
--- @param x number The x position to draw the text
--- @param y number The y position to draw the text
--- @param text string The text to draw
--- @param fg color The foreground color of the text
--- @return Container self The container instance
--- @protected
function Container:textFg(x, y, text, fg)
local w, h = self.get("width"), self.get("height")
@@ -538,13 +539,13 @@ function Container:textFg(x, y, text, fg)
return self
end
--- Draws a line of text and bg as color, it is usually used in the render loop
--- @shortDescription Draws a line of text and bg as color
--- @param x number The x position to draw the text
--- @param y number The y position to draw the text
--- @param text string The text to draw
--- @param bg color The background color of the text
--- @return Container self The container instance
--- @protected
function Container:textBg(x, y, text, bg)
local w, h = self.get("width"), self.get("height")
@@ -559,7 +560,6 @@ function Container:textBg(x, y, text, bg)
return self
end
--- Draws a line of text and fg and bg as colors, it is usually used in the render loop
--- @shortDescription Draws a line of text and fg and bg as colors
--- @param x number The x position to draw the text
--- @param y number The y position to draw the text
@@ -567,6 +567,7 @@ end
--- @param fg string The foreground color of the text
--- @param bg string The background color of the text
--- @return Container self The container instance
--- @protected
function Container:blit(x, y, text, fg, bg)
local w, h = self.get("width"), self.get("height")
@@ -587,8 +588,8 @@ function Container:blit(x, y, text, fg, bg)
return self
end
--- Renders the container
--- @shortDescription Renders the container
--- @protected
function Container:render()
VisualElement.render(self)
if not self.get("childrenSorted")then
@@ -608,9 +609,7 @@ function Container:render()
end
end
--- Destroys the container and its children
--- @shortDescription Destroys the container and its children
--- @return Container self The container instance
--- @private
function Container:destroy()
for _, child in ipairs(self._values.children) do
child:destroy()

View File

@@ -22,7 +22,7 @@ Dropdown.defineProperty(Dropdown, "dropSymbol", {default = "\31", type = "string
--- Creates a new Dropdown instance
--- @shortDescription Creates a new Dropdown instance
--- @return Dropdown self The newly created Dropdown instance
--- @usage local dropdown = Dropdown.new()
--- @private
function Dropdown.new()
local self = setmetatable({}, Dropdown):__init()
self.set("width", 16)
@@ -31,23 +31,23 @@ function Dropdown.new()
return self
end
--- Initializes the Dropdown instance
--- @shortDescription Initializes the Dropdown instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Dropdown self The initialized instance
--- @protected
function Dropdown:init(props, basalt)
List.init(self, props, basalt)
self.set("type", "Dropdown")
return self
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Dropdown:mouse_click(button, x, y)
if not VisualElement.mouse_click(self, button, x, y) then return false end
@@ -96,8 +96,8 @@ function Dropdown:mouse_click(button, x, y)
return false
end
--- Renders the Dropdown
--- @shortDescription Renders the Dropdown
--- @protected
function Dropdown:render()
VisualElement.render(self)

View File

@@ -232,10 +232,9 @@ local function updateLayout(self, direction, spacing, justifyContent, wrap)
self.set("flexUpdateLayout", false)
end
--- Creates a new Flexbox instance
--- @shortDescription Creates a new Flexbox instance
--- @return Flexbox object The newly created Flexbox instance
--- @usage local element = Flexbox.new("myId", basalt)
--- @private
function Flexbox.new()
local self = setmetatable({}, Flexbox):__init()
self.set("width", 12)
@@ -247,11 +246,11 @@ function Flexbox.new()
return self
end
--- Initializes the Flexbox instance
--- @shortDescription Initializes the Flexbox instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Flexbox self The initialized instance
--- @protected
function Flexbox:init(props, basalt)
Container.init(self, props, basalt)
self.set("type", "Flexbox")
@@ -275,10 +274,10 @@ function Flexbox:addChild(element)
return self
end
--- Removes a child element from the flexbox
--- @shortDescription Removes a child element from the flexbox
--- @param element Element The child element to remove
--- @return Flexbox self The flexbox instance
--- @protected
function Flexbox:removeChild(element)
Container.removeChild(self, element)
@@ -307,9 +306,9 @@ function Flexbox:addLineBreak()
return self
end
--- Renders the flexbox and its children
--- @shortDescription Renders the flexbox and its children
--- @return Flexbox self The flexbox instance
--- @protected
function Flexbox:render()
if(self.get("flexUpdateLayout"))then
updateLayout(self, self.get("flexDirection"), self.get("flexSpacing"), self.get("flexJustifyContent"), self.get("flexWrap"))

View File

@@ -10,7 +10,7 @@ Frame.__index = Frame
--- Creates a new Frame instance
--- @shortDescription Creates a new Frame instance
--- @return Frame self The newly created Frame instance
--- @usage local frame = Frame.new()
--- @private
function Frame.new()
local self = setmetatable({}, Frame):__init()
self.set("width", 12)
@@ -20,11 +20,11 @@ function Frame.new()
return self
end
--- Initializes the Frame instance
--- @shortDescription Initializes the Frame instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Frame self The initialized instance
--- @protected
function Frame:init(props, basalt)
Container.init(self, props, basalt)
self.set("type", "Frame")

View File

@@ -18,11 +18,20 @@ Image.defineProperty(Image, "currentFrame", {default = 1, type = "number", canTr
---@property metadata table {} Image metadata (version, palette, etc)
Image.defineProperty(Image, "metadata", {default = {}, type = "table"})
--- Creates a new Image instance
--- @shortDescription Creates a new Image instance
--- @return Image self The newly created Image instance
--- @private
function Image.new()
local self = setmetatable({}, Image):__init()
return self
end
--- @shortDescription Initializes the Image instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Image self The initialized instance
--- @protected
function Image:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Image")
@@ -30,7 +39,9 @@ function Image:init(props, basalt)
end
--- Loads a bimg format image
--- @shortDescription Loads a bimg format image
--- @param bimgData table The bimg image data
--- @return Image self The Image instance
function Image:loadBimg(bimgData)
if type(bimgData) ~= "table" then return self end
@@ -57,6 +68,7 @@ function Image:loadBimg(bimgData)
end
--- Gets pixel information at position
--- @shortDescription Gets pixel information at position
--- @param x number X position
--- @param y number Y position
--- @return number? fg Foreground color
@@ -80,6 +92,7 @@ function Image:getPixelData(x, y)
end
--- Sets character at position
--- @shortDescription Sets character at position
--- @param x number X position
--- @param y number Y position
--- @param char string Single character to set
@@ -107,6 +120,7 @@ function Image:setChar(x, y, char)
end
--- Sets foreground color at position
--- @shortDescription Sets foreground color at position
--- @param x number X position
--- @param y number Y position
--- @param color number Color value (0-15)
@@ -134,6 +148,7 @@ function Image:setFg(x, y, color)
end
--- Sets background color at position
--- @shortDescription Sets background color at position
--- @param x number X position
--- @param y number Y position
--- @param color number Color value (0-15)
@@ -161,6 +176,7 @@ function Image:setBg(x, y, color)
end
--- Sets all properties at position
--- @shortDescription Sets all properties at position
--- @param x number X position
--- @param y number Y position
--- @param char string? Character to set (optional)
@@ -173,6 +189,9 @@ function Image:setPixel(x, y, char, fg, bg)
return self
end
--- Advances to the next frame in the animation
--- @shortDescription Advances to the next frame in the animation
--- @return Image self The Image instance
function Image:nextFrame()
if not self.get("metadata").animation then return end
@@ -185,6 +204,8 @@ function Image:nextFrame()
return self
end
--- @shortDescription Renders the Image
--- @protected
function Image:render()
VisualElement.render(self)

View File

@@ -31,10 +31,9 @@ Input.defineEvent(Input, "mouse_click")
Input.defineEvent(Input, "key")
Input.defineEvent(Input, "char")
--- Creates a new Input instance
--- @shortDescription Creates a new Input instance
--- @return Input object The newly created Input instance
--- @usage local element = Input.new("myId", basalt)
--- @private
function Input.new()
local self = setmetatable({}, Input):__init()
self.set("width", 8)
@@ -42,21 +41,21 @@ function Input.new()
return self
end
--- Initializes the Input instance
--- @shortDescription Initializes the Input instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Input self The initialized instance
--- @protected
function Input:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Input")
return self
end
--- Handles char events
--- @shortDescription Handles char events
--- @param char string The character that was typed
--- @return boolean handled Whether the event was handled
--- @protected
function Input:char(char)
if not self.get("focused") then return false end
local text = self.get("text")
@@ -74,10 +73,10 @@ function Input:char(char)
return true
end
--- Handles key events
--- @shortDescription Handles key events
--- @param key number The key that was pressed
--- @return boolean handled Whether the event was handled
--- @protected
function Input:key(key)
if not self.get("focused") then return false end
local pos = self.get("cursorPos")
@@ -113,26 +112,26 @@ function Input:key(key)
return true
end
--- Handles focus events
--- @shortDescription Handles focus events
--- @protected
function Input:focus()
VisualElement.focus(self)
self:updateRender()
end
--- Handles blur events
--- @shortDescription Handles blur events
--- @protected
function Input:blur()
VisualElement.blur(self)
self:updateRender()
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Input:mouse_click(button, x, y)
if VisualElement.mouse_click(self, button, x, y) then
local relX, relY = self:getRelativePosition(x, y)
@@ -145,6 +144,7 @@ end
--- Updates the input's viewport
--- @shortDescription Updates the input's viewport
--- @return Input self The updated instance
function Input:updateViewport()
local width = self.get("width")
local cursorPos = self.get("cursorPos")
@@ -161,10 +161,11 @@ function Input:updateViewport()
if viewOffset > textLength - width then
self.set("viewOffset", math.max(0, textLength - width))
end
return self
end
--- Renders the input element
--- @shortDescription Renders the input element
--- @protected
function Input:render()
local text = self.get("text")
local viewOffset = self.get("viewOffset")

View File

@@ -33,7 +33,7 @@ end})
--- Creates a new Label instance
--- @shortDescription Creates a new Label instance
--- @return Label self The newly created Label instance
--- @usage local label = Label.new()
--- @private
function Label.new()
local self = setmetatable({}, Label):__init()
self.set("z", 3)
@@ -47,6 +47,7 @@ end
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Label self The initialized instance
--- @protected
function Label:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Label")
@@ -62,8 +63,8 @@ function Label:getWrappedText()
return wrappedText
end
--- Renders the Label
--- @shortDescription Renders the Label by drawing its text content
--- @protected
function Label:render()
VisualElement.render(self)
local text = self.get("text")

View File

@@ -27,7 +27,7 @@ List.defineEvent(List, "mouse_scroll")
--- Creates a new List instance
--- @shortDescription Creates a new List instance
--- @return List self The newly created List instance
--- @usage local list = List.new()
--- @private
function List.new()
local self = setmetatable({}, List):__init()
self.set("width", 16)
@@ -37,11 +37,11 @@ function List.new()
return self
end
--- Initializes the List instance
--- @shortDescription Initializes the List instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return List self The initialized instance
--- @protected
function List:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "List")
@@ -99,12 +99,12 @@ function List:getSelectedItems()
return selected
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events
--- @param button number The mouse button that was clicked
--- @param x number The x-coordinate of the click
--- @param y number The y-coordinate of the click
--- @return boolean Whether the event was handled
--- @protected
function List:mouse_click(button, x, y)
if button == 1 and self:isInBounds(x, y) and self.get("selectable") then
local _, index = self:getRelativePosition(x, y)
@@ -140,12 +140,12 @@ function List:mouse_click(button, x, y)
return false
end
--- Handles mouse scroll events
--- @shortDescription Handles mouse scroll events
--- @param direction number The direction of the scroll (1 for down, -1 for up)
--- @param x number The x-coordinate of the scroll
--- @param y number The y-coordinate of the scroll
--- @return boolean Whether the event was handled
--- @protected
function List:mouse_scroll(direction, x, y)
if self:isInBounds(x, y) then
local offset = self.get("offset")
@@ -185,8 +185,8 @@ function List:scrollToTop()
return self
end
--- Renders the list
--- @shortDescription Renders the list
--- @protected
function List:render()
VisualElement.render(self)

View File

@@ -15,7 +15,7 @@ Menu.defineProperty(Menu, "separatorColor", {default = colors.gray, type = "numb
--- Creates a new Menu instance
--- @shortDescription Creates a new Menu instance
--- @return Menu self The newly created Menu instance
--- @usage local menu = Menu.new()
--- @private
function Menu.new()
local self = setmetatable({}, Menu):__init()
self.set("width", 30)
@@ -24,11 +24,11 @@ function Menu.new()
return self
end
--- Initializes the Menu instance
--- @shortDescription Initializes the Menu instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Menu self The initialized instance
--- @protected
function Menu:init(props, basalt)
List.init(self, props, basalt)
self.set("type", "Menu")
@@ -58,8 +58,8 @@ function Menu:setItems(items)
return List.setItems(self, listItems)
end
--- Renders the menu
--- @shortDescription Renders the menu horizontally with proper spacing and colors
--- @protected
function Menu:render()
VisualElement.render(self)
local currentX = 1
@@ -87,12 +87,12 @@ function Menu:render()
end
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events and item selection
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean Whether the event was handled
--- @protected
function Menu:mouse_click(button, x, y)
if not VisualElement.mouse_click(self, button, x, y) then return false end
if(self.get("selectable") == false) then return false end

View File

@@ -113,10 +113,9 @@ function BasaltProgram:stop()
end
--- Creates a new Program instance
--- @shortDescription Creates a new Program instance
--- @return Program object The newly created Program instance
--- @usage local element = Program.new("myId", basalt)
--- @private
function Program.new()
local self = setmetatable({}, Program):__init()
self.set("z", 5)
@@ -125,11 +124,11 @@ function Program.new()
return self
end
--- Initializes the Program instanceProperty
--- @shortDescription Initializes the Program instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Program self The initialized instance
--- @protected
function Program:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Program")
@@ -150,11 +149,11 @@ function Program:execute(path)
return self
end
--- Handles all incomming events
--- @shortDescription Handles all incomming events
--- @param event string The event to handle
--- @param ... any The event arguments
--- @return any result The event result
--- @protected
function Program:dispatchEvent(event, ...)
local program = self.get("program")
local result = VisualElement.dispatchEvent(self, event, ...)
@@ -170,8 +169,8 @@ function Program:dispatchEvent(event, ...)
return result
end
--- Gets called when the element gets focused
--- @shortDescription Gets called when the element gets focused
--- @protected
function Program:focus()
if(VisualElement.focus(self))then
local program = self.get("program")
@@ -183,8 +182,8 @@ function Program:focus()
end
end
--- Renders the program
--- @shortDescription Renders the program
--- @protected
function Program:render()
VisualElement.render(self)
local program = self.get("program")

View File

@@ -16,7 +16,7 @@ ProgressBar.defineProperty(ProgressBar, "progressColor", {default = colors.black
--- Creates a new ProgressBar instance
--- @shortDescription Creates a new ProgressBar instance
--- @return ProgressBar self The newly created ProgressBar instance
--- @usage local progressBar = ProgressBar.new()
--- @private
function ProgressBar.new()
local self = setmetatable({}, ProgressBar):__init()
self.set("width", 10)
@@ -24,18 +24,18 @@ function ProgressBar.new()
return self
end
--- Initializes the ProgressBar instance
--- @shortDescription Initializes the ProgressBar instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return ProgressBar self The initialized instance
--- @protected
function ProgressBar:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "ProgressBar")
end
--- Renders the ProgressBar
--- @shortDescription Renders the progress bar with filled portion and optional percentage text
--- @protected
function ProgressBar:render()
VisualElement.render(self)
local width = self.get("width")

View File

@@ -46,7 +46,7 @@ Scrollbar.defineEvent(Scrollbar, "mouse_scroll")
--- Creates a new Scrollbar instance
--- @shortDescription Creates a new Scrollbar instance
--- @return Scrollbar self The newly created Scrollbar instance
--- @usage local scrollbar = Scrollbar.new()
--- @private
function Scrollbar.new()
local self = setmetatable({}, Scrollbar):__init()
self.set("width", 1)
@@ -54,11 +54,11 @@ function Scrollbar.new()
return self
end
--- Initializes the Scrollbar instance
--- @shortDescription Initializes the Scrollbar instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Scrollbar self The initialized instance
--- @protected
function Scrollbar:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Scrollbar")
@@ -106,12 +106,12 @@ local function getRelativeScrollPosition(self, x, y)
return self.get("orientation") == "vertical" and relY or relX
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events
--- @param button number The mouse button clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean Whether the event was handled
--- @protected
function Scrollbar:mouse_click(button, x, y)
if VisualElement.mouse_click(self, button, x, y) then
local size = getScrollbarSize(self)
@@ -132,12 +132,12 @@ function Scrollbar:mouse_click(button, x, y)
end
end
--- Handles mouse drag events
--- @shortDescription Handles mouse drag events
--- @param button number The mouse button being dragged
--- @param x number The x position of the drag
--- @param y number The y position of the drag
--- @return boolean Whether the event was handled
--- @protected
function Scrollbar:mouse_drag(button, x, y)
if(VisualElement.mouse_drag(self, button, x, y))then
local size = getScrollbarSize(self)
@@ -156,12 +156,12 @@ function Scrollbar:mouse_drag(button, x, y)
end
end
--- Handles mouse scroll events
--- @shortDescription Handles mouse scroll events
--- @param direction number The scroll direction (1 for up, -1 for down)
--- @param x number The x position of the scroll
--- @param y number The y position of the scroll
--- @return boolean Whether the event was handled
--- @protected
function Scrollbar:mouse_scroll(direction, x, y)
if not self:isInBounds(x, y) then return false end
direction = direction > 0 and -1 or 1
@@ -174,8 +174,8 @@ function Scrollbar:mouse_scroll(direction, x, y)
return true
end
--- Renders the Scrollbar
--- @shortDescription Renders the scrollbar
--- @protected
function Scrollbar:render()
VisualElement.render(self)

View File

@@ -25,7 +25,7 @@ Slider.defineEvent(Slider, "mouse_up")
--- Creates a new Slider instance
--- @shortDescription Creates a new Slider instance
--- @return Slider self The newly created Slider instance
--- @usage local slider = Slider.new()
--- @private
function Slider.new()
local self = setmetatable({}, Slider):__init()
self.set("width", 8)
@@ -34,11 +34,11 @@ function Slider.new()
return self
end
--- Initializes the Slider instance
--- @shortDescription Initializes the Slider instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Slider self The initialized instance
--- @protected
function Slider:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Slider")
@@ -55,12 +55,12 @@ function Slider:getValue()
return math.floor((step - 1) * (max / (maxSteps - 1)))
end
--- Handles mouse click events
--- @shortDescription Updates slider position on mouse click
--- @param button number The mouse button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Slider:mouse_click(button, x, y)
if button == 1 and self:isInBounds(x, y) then
local relX, relY = self:getRelativePosition(x, y)
@@ -74,12 +74,12 @@ function Slider:mouse_click(button, x, y)
end
Slider.mouse_drag = Slider.mouse_click
--- Handles mouse release events
--- @shortDescription Handles mouse release events
--- @param button number The mouse button that was released
--- @param x number The x position of the release
--- @param y number The y position of the release
--- @return boolean handled Whether the event was handled
--- @protected
function Slider:mouse_scroll(direction, x, y)
if self:isInBounds(x, y) then
local step = self.get("step")
@@ -90,8 +90,8 @@ function Slider:mouse_scroll(direction, x, y)
end
end
--- Renders the slider
--- @shortDescription Renders the slider with track and handle
--- @protected
function Slider:render()
VisualElement.render(self)
local width = self.get("width")

View File

@@ -32,7 +32,7 @@ Table.defineEvent(Table, "mouse_scroll")
--- Creates a new Table instance
--- @shortDescription Creates a new Table instance
--- @return Table self The newly created Table instance
--- @usage local table = Table.new()
--- @private
function Table.new()
local self = setmetatable({}, Table):__init()
self.set("width", 30)
@@ -41,11 +41,11 @@ function Table.new()
return self
end
--- Initializes the Table instance
--- @shortDescription Initializes the Table instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Table self The initialized instance
--- @protected
function Table:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Table")
@@ -72,12 +72,12 @@ function Table:sortData(columnIndex)
return self
end
--- Handles mouse click events
--- @shortDescription Handles header clicks for sorting and row selection
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Table:mouse_click(button, x, y)
if not VisualElement.mouse_click(self, button, x, y) then return false end
@@ -110,12 +110,12 @@ function Table:mouse_click(button, x, y)
return true
end
--- Handles mouse scroll events
--- @shortDescription Handles scrolling through the table data
--- @param direction number The scroll direction (-1 up, 1 down)
--- @param x number The x position of the scroll
--- @param y number The y position of the scroll
--- @return boolean handled Whether the event was handled
--- @protected
function Table:mouse_scroll(direction, x, y)
local data = self.get("data")
local height = self.get("height")
@@ -127,8 +127,8 @@ function Table:mouse_scroll(direction, x, y)
return true
end
--- Renders the table
--- @shortDescription Renders the table with headers, data and scrollbar
--- @protected
function Table:render()
VisualElement.render(self)

View File

@@ -33,6 +33,7 @@ TextBox.defineEvent(TextBox, "mouse_scroll")
--- Creates a new TextBox instance
--- @shortDescription Creates a new TextBox instance
--- @return TextBox self The newly created TextBox instance
--- @private
function TextBox.new()
local self = setmetatable({}, TextBox):__init()
self.set("width", 20)
@@ -40,11 +41,11 @@ function TextBox.new()
return self
end
--- Initializes the TextBox instance
--- @shortDescription Initializes the TextBox instance
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return TextBox self The initialized instance
--- @protected
function TextBox:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "TextBox")
@@ -55,6 +56,7 @@ end
--- @shortDescription Adds a new syntax highlighting pattern
--- @param pattern string The regex pattern to match
--- @param color colors The color to apply
--- @return TextBox self The TextBox instance
function TextBox:addSyntaxPattern(pattern, color)
table.insert(self.get("syntaxPatterns"), {pattern = pattern, color = color})
return self
@@ -134,20 +136,20 @@ function TextBox:updateViewport()
return self
end
--- Handles character input
--- @shortDescription Handles character input
--- @param char string The character that was typed
--- @return boolean handled Whether the event was handled
--- @protected
function TextBox:char(char)
if not self.get("editable") or not self.get("focused") then return false end
insertChar(self, char)
return true
end
--- Handles key events
--- @shortDescription Handles key events
--- @param key number The key that was pressed
--- @return boolean handled Whether the event was handled
--- @protected
function TextBox:key(key)
if not self.get("editable") or not self.get("focused") then return false end
local lines = self.get("lines")
@@ -184,12 +186,12 @@ function TextBox:key(key)
return true
end
--- Handles mouse scroll events
--- @shortDescription Handles mouse scroll events
--- @param direction number The scroll direction
--- @param x number The x position of the scroll
--- @param y number The y position of the scroll
--- @return boolean handled Whether the event was handled
--- @protected
function TextBox:mouse_scroll(direction, x, y)
if self:isInBounds(x, y) then
local scrollY = self.get("scrollY")
@@ -207,12 +209,12 @@ function TextBox:mouse_scroll(direction, x, y)
return false
end
--- Handles mouse click events
--- @shortDescription Handles mouse click events
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function TextBox:mouse_click(button, x, y)
if VisualElement.mouse_click(self, button, x, y) then
local relX, relY = self:getRelativePosition(x, y)
@@ -274,8 +276,8 @@ local function applySyntaxHighlighting(self, line)
return text, colors
end
--- Renders the TextBox
--- @shortDescription Renders the TextBox with syntax highlighting
--- @protected
function TextBox:render()
VisualElement.render(self)

View File

@@ -34,7 +34,7 @@ Tree.defineEvent(Tree, "mouse_scroll")
--- Creates a new Tree instance
--- @shortDescription Creates a new Tree instance
--- @return Tree self The newly created Tree instance
--- @usage local tree = Tree.new()
--- @private
function Tree.new()
local self = setmetatable({}, Tree):__init()
self.set("width", 30)
@@ -48,6 +48,7 @@ end
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return Tree self The initialized instance
--- @protected
function Tree:init(props, basalt)
VisualElement.init(self, props, basalt)
self.set("type", "Tree")
@@ -106,6 +107,7 @@ end
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean handled Whether the event was handled
--- @protected
function Tree:mouse_click(button, x, y)
if VisualElement.mouse_click(self, button, x, y) then
local relX, relY = self:getRelativePosition(x, y)
@@ -136,12 +138,12 @@ function Tree:onSelect(callback)
return self
end
--- Handles mouse scroll events
--- @shortDescription Handles mouse scroll events for vertical scrolling
--- @param direction number The scroll direction (1 for up, -1 for down)
--- @param x number The x position of the scroll
--- @param y number The y position of the scroll
--- @return boolean handled Whether the event was handled
--- @protected
function Tree:mouse_scroll(direction, x, y)
if VisualElement.mouse_scroll(self, direction, x, y) then
local flatNodes = flattenTree(self.get("nodes"), self.get("expandedNodes"))
@@ -167,8 +169,8 @@ function Tree:getNodeSize()
return width, height
end
--- Renders the tree
--- @shortDescription Renders the tree with nodes, selection and scrolling
--- @protected
function Tree:render()
VisualElement.render(self)

View File

@@ -110,22 +110,21 @@ local max, min = math.max, math.min
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @return VisualElement object The newly created VisualElement instance
--- @usage local element = VisualElement.new("myId", basalt)
--- @private
function VisualElement.new()
local self = setmetatable({}, VisualElement):__init()
return self
end
--- Initializes the VisualElement instance
--- @shortDescription Initializes a new visual element with properties
--- @param props table The properties to initialize the element with
--- @param basalt table The basalt instance
--- @protected
function VisualElement:init(props, basalt)
BaseElement.init(self, props, basalt)
self.set("type", "VisualElement")
end
--- Draws multiple characters at once with colors
--- @shortDescription Multi-character drawing with colors
--- @param x number The x position to draw
--- @param y number The y position to draw
@@ -134,6 +133,7 @@ end
--- @param text string The text to draw
--- @param fg string The foreground color
--- @param bg string The background color
--- @protected
function VisualElement:multiBlit(x, y, width, height, text, fg, bg)
local xElement, yElement = self:calculatePosition()
x = x + xElement - 1
@@ -141,12 +141,12 @@ function VisualElement:multiBlit(x, y, width, height, text, fg, bg)
self.parent:multiBlit(x, y, width, height, text, fg, bg)
end
--- Draws text with foreground color
--- @shortDescription Draws text with foreground color
--- @param x number The x position to draw
--- @param y number The y position to draw
--- @param text string The text char to draw
--- @param fg color The foreground color
--- @protected
function VisualElement:textFg(x, y, text, fg)
local xElement, yElement = self:calculatePosition()
x = x + xElement - 1
@@ -154,12 +154,12 @@ function VisualElement:textFg(x, y, text, fg)
self.parent:textFg(x, y, text, fg)
end
--- Draws text with background color
--- @shortDescription Draws text with background color
--- @param x number The x position to draw
--- @param y number The y position to draw
--- @param text string The text char to draw
--- @param bg color The background color
--- @protected
function VisualElement:textBg(x, y, text, bg)
local xElement, yElement = self:calculatePosition()
x = x + xElement - 1
@@ -167,13 +167,13 @@ function VisualElement:textBg(x, y, text, bg)
self.parent:textBg(x, y, text, bg)
end
--- Draws text with both foreground and background colors
--- @shortDescription Draws text with both colors
--- @param x number The x position to draw
--- @param y number The y position to draw
--- @param text string The text char to draw
--- @param fg string The foreground color
--- @param bg string The background color
--- @protected
function VisualElement:blit(x, y, text, fg, bg)
local xElement, yElement = self:calculatePosition()
x = x + xElement - 1
@@ -200,12 +200,12 @@ function VisualElement:isInBounds(x, y)
y >= yPos and y <= yPos + height - 1
end
--- Handles a mouse click event
--- @shortDescription Handles a mouse click event
--- @param button number The button that was clicked
--- @param x number The x position of the click
--- @param y number The y position of the click
--- @return boolean clicked Whether the element was clicked
--- @protected
function VisualElement:mouse_click(button, x, y)
if self:isInBounds(x, y) then
self.set("clicked", true)
@@ -215,12 +215,12 @@ function VisualElement:mouse_click(button, x, y)
return false
end
--- Handles a mouse up event
--- @shortDescription Handles a mouse up event
--- @param button number The button that was released
--- @param x number The x position of the release
--- @param y number The y position of the release
--- @return boolean release Whether the element was released on the element
--- @protected
function VisualElement:mouse_up(button, x, y)
if self:isInBounds(x, y) then
self.set("clicked", false)
@@ -230,16 +230,22 @@ function VisualElement:mouse_up(button, x, y)
return false
end
--- Handles a mouse release event
--- @shortDescription Handles a mouse release event
--- @param button number The button that was released
--- @param x number The x position of the release
--- @param y number The y position of the release
--- @protected
function VisualElement:mouse_release(button, x, y)
self:fireEvent("mouse_release", button, self:getRelativePosition(x, y))
self.set("clicked", false)
end
---@shortDescription Handles a mouse move event
---@param _ number unknown
---@param x number The x position of the mouse
---@param y number The y position of the mouse
---@return boolean hover Whether the mouse has moved over the element
--- @protected
function VisualElement:mouse_move(_, x, y)
if(x==nil)or(y==nil)then
return
@@ -260,6 +266,12 @@ function VisualElement:mouse_move(_, x, y)
return false
end
--- @shortDescription Handles a mouse scroll event
--- @param direction number The scroll direction
--- @param x number The x position of the scroll
--- @param y number The y position of the scroll
--- @return boolean scroll Whether the element was scrolled
--- @protected
function VisualElement:mouse_scroll(direction, x, y)
if(self:isInBounds(x, y))then
self:fireEvent("mouse_scroll", direction, self:getRelativePosition(x, y))
@@ -268,6 +280,12 @@ function VisualElement:mouse_scroll(direction, x, y)
return false
end
--- @shortDescription Handles a mouse drag event
--- @param button number The button that was clicked while dragging
--- @param x number The x position of the drag
--- @param y number The y position of the drag
--- @return boolean drag Whether the element was dragged
--- @protected
function VisualElement:mouse_drag(button, x, y)
if(self.get("clicked"))then
self:fireEvent("mouse_drag", button, self:getRelativePosition(x, y))
@@ -276,19 +294,23 @@ function VisualElement:mouse_drag(button, x, y)
return false
end
--- Handles a focus event
--- @shortDescription Handles a focus event
--- @protected
function VisualElement:focus()
self:fireEvent("focus")
end
--- Handles a blur event
--- @shortDescription Handles a blur event
--- @protected
function VisualElement:blur()
self:fireEvent("blur")
self:setCursor(1,1, false)
end
--- Calculates the position of the element relative to its parent
--- @shortDescription Calculates the position of the element
--- @return number x The x position
--- @return number y The y position
function VisualElement:calculatePosition()
local x, y = self.get("x"), self.get("y")
if not self.get("ignoreOffset") then
@@ -305,6 +327,8 @@ end
--- @shortDescription Returns the absolute position of the element
---@param x? number x position
---@param y? number y position
---@return number x The absolute x position
---@return number y The absolute y position
function VisualElement:getAbsolutePosition(x, y)
local xPos, yPos = self.get("x"), self.get("y")
if(x ~= nil) then
@@ -329,7 +353,8 @@ end
--- @shortDescription Returns the relative position of the element
---@param x? number x position
---@param y? number y position
---@return number, number
---@return number x The relative x position
---@return number y The relative y position
function VisualElement:getRelativePosition(x, y)
if (x == nil) or (y == nil) then
x, y = self.get("x"), self.get("y")
@@ -345,21 +370,24 @@ function VisualElement:getRelativePosition(x, y)
y - (elementY - 1) - (parentY - 1)
end
--- Sets the cursor position
--- @shortDescription Sets the cursor position
--- @param x number The x position of the cursor
--- @param y number The y position of the cursor
--- @param blink boolean Whether the cursor should blink
--- @param color number The color of the cursor
--- @return VisualElement self The VisualElement instance
--- @protected
function VisualElement:setCursor(x, y, blink, color)
if self.parent then
local absX, absY = self:getAbsolutePosition(x, y)
absX = max(self.get("x"), min(absX, self.get("width") + self.get("x") - 1))
return self.parent:setCursor(absX, absY, blink, color)
end
return self
end
--- Renders the element
--- @shortDescription Renders the element
--- @protected
function VisualElement:render()
if(not self.get("backgroundEnabled"))then
return