- Updated theme plugin to support changing themes on runtime

- Added 4 themes
- Added Cache System for States
This commit is contained in:
Robert Jelic
2025-11-05 13:56:19 +01:00
parent e4ee937f0f
commit 71d23ee9a2
11 changed files with 304 additions and 46 deletions

View File

@@ -101,6 +101,7 @@ function BaseElement:init(props, basalt)
self.basalt = basalt
self._registeredEvents = {}
self._registeredStates = {}
self._cachedActiveStates = nil
local currentClass = getmetatable(self).__index
@@ -142,6 +143,7 @@ function BaseElement:postInit()
return self
end
self._postInitialized = true
self._modifiedProperties = {}
if(self._props)then
for k,v in pairs(self._props)do
self.set(k, v)
@@ -234,6 +236,7 @@ function BaseElement:setState(stateName, priority)
states[stateName] = priority or 0
self.set("states", states)
self._cachedActiveStates = nil
return self
end
@@ -246,6 +249,7 @@ function BaseElement:unsetState(stateName)
if states[stateName] ~= nil then
states[stateName] = nil
self.set("states", states)
self._cachedActiveStates = nil
end
return self
end
@@ -282,6 +286,11 @@ end
--- @shortDescription Gets all active states
--- @return table states Array of {name, priority} sorted by priority
function BaseElement:getActiveStates()
-- Return cached version if available
if self._cachedActiveStates then
return self._cachedActiveStates
end
local states = self.get("states")
local result = {}
@@ -291,6 +300,7 @@ function BaseElement:getActiveStates()
table.sort(result, function(a, b) return a.priority > b.priority end)
self._cachedActiveStates = result
return result
end

View File

@@ -29,7 +29,6 @@ function Frame.new()
self.class = Frame
self.set("width", 12)
self.set("height", 6)
self.set("background", colors.gray)
self.set("z", 10)
return self
end

View File

@@ -37,7 +37,6 @@ function Label.new()
local self = setmetatable({}, Label):__init()
self.class = Label
self.set("z", 3)
self.set("foreground", colors.black)
self.set("backgroundEnabled", false)
return self
end
@@ -49,10 +48,6 @@ end
--- @protected
function Label:init(props, basalt)
VisualElement.init(self, props, basalt)
if(self.parent)then
self.set("background", self.parent.get("background"))
self.set("foreground", self.parent.get("foreground"))
end
self.set("type", "Label")
return self
end

View File

@@ -71,7 +71,6 @@ function List.new()
self.set("width", 16)
self.set("height", 8)
self.set("z", 5)
self.set("background", colors.gray)
return self
end