From d735edaec01b044b813198e31206a16cbb2c1461 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Sat, 21 Mar 2026 22:42:57 -0500 Subject: [PATCH] Make changing an element's styles trigger element to re-stylize --- lib/cyberarm_engine/ui/element.rb | 5 +++++ lib/cyberarm_engine/ui/style.rb | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/lib/cyberarm_engine/ui/element.rb b/lib/cyberarm_engine/ui/element.rb index b4ece42..fca3221 100644 --- a/lib/cyberarm_engine/ui/element.rb +++ b/lib/cyberarm_engine/ui/element.rb @@ -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) diff --git a/lib/cyberarm_engine/ui/style.rb b/lib/cyberarm_engine/ui/style.rb index 29e8ae7..54966de 100644 --- a/lib/cyberarm_engine/ui/style.rb +++ b/lib/cyberarm_engine/ui/style.rb @@ -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