Make changing an element's styles trigger element to re-stylize

This commit is contained in:
2026-03-21 22:42:57 -05:00
parent d2440b50a1
commit d735edaec0
2 changed files with 27 additions and 0 deletions

View File

@@ -333,6 +333,11 @@ module CyberarmEngine
def update
recalculate_if_size_changed
if @style.dirty?
@style.mark_clean!
stylize
end
end
def button_down(id)

View File

@@ -19,6 +19,7 @@ module CyberarmEngine
class StyleData
def initialize(hash = {})
@hash = hash
@dirty = false
end
%i[
@@ -38,6 +39,8 @@ module CyberarmEngine
@hash[item]
end
define_method(:"#{item}=") do |value|
@dirty = true if @hash[item] != value
@hash[item] = value
end
end
@@ -46,6 +49,14 @@ module CyberarmEngine
def default
nil
end
def dirty?
@dirty
end
def mark_clean!
@dirty = false
end
end
class Style < StyleData
@@ -58,7 +69,18 @@ module CyberarmEngine
@active = StyleData.new(hash[:active] || {})
@disabled = StyleData.new(hash[:disabled] || {})
@substyles = [@hover, @active, @disabled]
super
end
def dirty?
@dirty || @substyles.any?(&:dirty?)
end
def mark_clean!
@substyles.each(&:mark_clean!)
@dirty = false
end
end
end