From 4b25d724b533af028d17a64bdd5cb741bfb3958f Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Mon, 13 Jan 2020 20:13:03 -0600 Subject: [PATCH] Improved shoes-iness; no longer need to pass clear blocks an element to parent to, todo: replace global var with something else. --- lib/cyberarm_engine/ui/dsl.rb | 9 ++++++--- lib/cyberarm_engine/ui/elements/container.rb | 6 +++++- lib/cyberarm_engine/ui/gui_state.rb | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/cyberarm_engine/ui/dsl.rb b/lib/cyberarm_engine/ui/dsl.rb index 81a9e5c..0b53ea7 100644 --- a/lib/cyberarm_engine/ui/dsl.rb +++ b/lib/cyberarm_engine/ui/dsl.rb @@ -76,7 +76,7 @@ module CyberarmEngine end private def element_parent - self.is_a?(CyberarmEngine::Element::Container) ? self : @containers.last + $__current_container__ end private def container(klass, options = {}, &block) @@ -85,10 +85,13 @@ module CyberarmEngine _container = klass.new(options, block) - @containers << _container + old_parent = element_parent + $__current_container__ = _container + _container.build _container.parent.add(_container) - @containers.pop + + $__current_container__ = old_parent return _container end diff --git a/lib/cyberarm_engine/ui/elements/container.rb b/lib/cyberarm_engine/ui/elements/container.rb index 2bf454c..2ade6bd 100644 --- a/lib/cyberarm_engine/ui/elements/container.rb +++ b/lib/cyberarm_engine/ui/elements/container.rb @@ -2,7 +2,6 @@ module CyberarmEngine class Element class Container < Element include Common - include CyberarmEngine::DSL attr_accessor :stroke_color, :fill_color attr_reader :children, :gui_state @@ -35,8 +34,13 @@ module CyberarmEngine def clear(&block) @children.clear + old_container = $__current_container__ + + $__current_container__ = self block.call(self) if block + $__current_container__ = old_container + recalculate root.gui_state.request_recalculate end diff --git a/lib/cyberarm_engine/ui/gui_state.rb b/lib/cyberarm_engine/ui/gui_state.rb index f403a3e..6098f23 100644 --- a/lib/cyberarm_engine/ui/gui_state.rb +++ b/lib/cyberarm_engine/ui/gui_state.rb @@ -12,7 +12,7 @@ module CyberarmEngine @root_container = Element::Stack.new(gui_state: self) @game_objects << @root_container - @containers = [@root_container] + $__current_container__ = @root_container @active_width = window.width @active_height = window.height