From b1b8fc85565a7c7e1f7680f0a51e610202a60448 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Sun, 18 Jun 2023 14:18:15 -0500 Subject: [PATCH] Cache scroll width/height --- lib/cyberarm_engine/ui/element.rb | 10 +++++++--- lib/cyberarm_engine/ui/elements/container.rb | 3 +++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/cyberarm_engine/ui/element.rb b/lib/cyberarm_engine/ui/element.rb index dd23d5c..90ca6e2 100644 --- a/lib/cyberarm_engine/ui/element.rb +++ b/lib/cyberarm_engine/ui/element.rb @@ -411,10 +411,14 @@ module CyberarmEngine end def scroll_width - @children.sum(&:outer_width) + return @cached_scroll_width if @cached_scroll_width && is_a?(Container) + + @cached_scroll_width = @children.sum(&:outer_width) end def scroll_height + return @cached_scroll_height if @cached_scroll_height && is_a?(Container) + if is_a?(CyberarmEngine::Element::Flow) return 0 if @children.size.zero? @@ -435,9 +439,9 @@ module CyberarmEngine pairs_ << a_ unless pairs_.last == a_ - pairs_.sum { |pair| + @style.padding_top + @style.border_thickness_top + pair.map(&:outer_height).max } + @style.padding_bottom + @style.border_thickness_bottom + @cached_scroll_height = pairs_.sum { |pair| + @style.padding_top + @style.border_thickness_top + pair.map(&:outer_height).max } + @style.padding_bottom + @style.border_thickness_bottom else - @style.padding_top + @style.border_thickness_top + @children.sum(&:outer_height) + @style.padding_bottom + @style.border_thickness_bottom + @cached_scroll_height = @style.padding_top + @style.border_thickness_top + @children.sum(&:outer_height) + @style.padding_bottom + @style.border_thickness_bottom end end diff --git a/lib/cyberarm_engine/ui/elements/container.rb b/lib/cyberarm_engine/ui/elements/container.rb index 6eeca36..592baea 100644 --- a/lib/cyberarm_engine/ui/elements/container.rb +++ b/lib/cyberarm_engine/ui/elements/container.rb @@ -173,6 +173,9 @@ module CyberarmEngine old_width = @width old_height = @height + @cached_scroll_width = nil + @cached_scroll_height = nil + if is_root? @width = @style.width = window.width @height = @style.height = window.height