mirror of
https://github.com/cyberarm/cyberarm_engine.git
synced 2025-12-15 20:52:35 +00:00
Remove need to do a full gui recalc 3 or more times for the layout to work (current implementation slows things down a bit, but seems more reliable then brute forcing 3x+)
This commit is contained in:
@@ -578,6 +578,20 @@ module CyberarmEngine
|
||||
@gui_state != nil
|
||||
end
|
||||
|
||||
def child_of?(element)
|
||||
return element == self if is_root?
|
||||
return false unless element.is_a?(Container)
|
||||
return true if element.children.find { |child| child == self }
|
||||
|
||||
element.children.find { |child| child.child_of?(element) if child.is_a?(Container) }
|
||||
end
|
||||
|
||||
# def parent_of?(element)
|
||||
# return true if element.children.find { |child| child == self }
|
||||
|
||||
# element.children.find { |child| child.parent}
|
||||
# end
|
||||
|
||||
def focus(_)
|
||||
warn "#{self.class}#focus was not overridden!"
|
||||
|
||||
|
||||
@@ -36,17 +36,17 @@ module CyberarmEngine
|
||||
def build
|
||||
@block.call(self) if @block
|
||||
|
||||
root.gui_state.request_recalculate
|
||||
root.gui_state.request_recalculate_for(self)
|
||||
end
|
||||
|
||||
def add(element)
|
||||
@children << element
|
||||
|
||||
root.gui_state.request_recalculate
|
||||
root.gui_state.request_recalculate_for(self)
|
||||
end
|
||||
|
||||
def remove(element)
|
||||
root.gui_state.request_recalculate if @children.delete(element)
|
||||
root.gui_state.request_recalculate_for(self) if @children.delete(element)
|
||||
end
|
||||
|
||||
def clear(&block)
|
||||
@@ -59,7 +59,7 @@ module CyberarmEngine
|
||||
|
||||
CyberarmEngine::Element::Container.current_container = old_container
|
||||
|
||||
root.gui_state.request_recalculate
|
||||
root.gui_state.request_recalculate_for(self)
|
||||
end
|
||||
|
||||
def append(&block)
|
||||
@@ -70,7 +70,7 @@ module CyberarmEngine
|
||||
|
||||
CyberarmEngine::Element::Container.current_container = old_container
|
||||
|
||||
root.gui_state.request_recalculate
|
||||
root.gui_state.request_recalculate_for(self)
|
||||
end
|
||||
|
||||
def render
|
||||
@@ -236,6 +236,15 @@ module CyberarmEngine
|
||||
self.scroll_top = -@scroll_position.y
|
||||
@scroll_target_position.y = @scroll_position.y
|
||||
|
||||
# NOTE: Experiment for removing need to explicitly call gui_state#recalculate at least 3 times for layout to layout...
|
||||
if old_width != @width || old_height != @height
|
||||
if @parent
|
||||
root.gui_state.request_recalculate_for(@parent)
|
||||
else
|
||||
root.gui_state.request_recalculate
|
||||
end
|
||||
end
|
||||
|
||||
root.gui_state.request_repaint if @width != old_width || @height != old_height
|
||||
end
|
||||
|
||||
|
||||
@@ -81,8 +81,6 @@ module CyberarmEngine
|
||||
if @pending_recalculate_request
|
||||
Stats.frame.start_timing(:gui_recalculate)
|
||||
@root_container.recalculate
|
||||
@root_container.recalculate
|
||||
@root_container.recalculate
|
||||
|
||||
@pending_recalculate_request = false
|
||||
|
||||
@@ -91,6 +89,7 @@ module CyberarmEngine
|
||||
|
||||
Stats.frame.start_timing(:gui_element_recalculate_requests)
|
||||
|
||||
# puts "PENDING REQUESTS: #{@pending_element_recalculate_requests.size}" if @pending_element_recalculate_requests.size.positive?
|
||||
@pending_element_recalculate_requests.each(&:recalculate)
|
||||
@pending_element_recalculate_requests.clear
|
||||
|
||||
|
||||
Reference in New Issue
Block a user