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 def update
recalculate_if_size_changed recalculate_if_size_changed
if @style.dirty?
@style.mark_clean!
stylize
end
end end
def button_down(id) def button_down(id)

View File

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