lib/cyberarm_engine/ui/elements/container.rb in cyberarm_engine-0.14.0 vs lib/cyberarm_engine/ui/elements/container.rb in cyberarm_engine-0.15.0

- old
+ new

@@ -2,18 +2,18 @@ class Element class Container < Element include Common attr_accessor :stroke_color, :fill_color - attr_reader :children, :gui_state - attr_reader :scroll_x, :scroll_y + attr_reader :children, :gui_state, :scroll_x, :scroll_y def initialize(options = {}, block = nil) @gui_state = options.delete(:gui_state) super - @scroll_x, @scroll_y = 0, 0 + @scroll_x = 0 + @scroll_y = 0 @scroll_speed = 10 @text_color = options[:color] @children = [] @@ -46,10 +46,35 @@ def render Gosu.clip_to(@x, @y, width, height) do @children.each(&:draw) end + + if false # DEBUG + Gosu.flush + + Gosu.draw_line( + x, y, Gosu::Color::RED, + x + outer_width, y, Gosu::Color::RED, + Float::INFINITY + ) + Gosu.draw_line( + x + outer_width, y, Gosu::Color::RED, + x + outer_width, y + outer_height, Gosu::Color::RED, + Float::INFINITY + ) + Gosu.draw_line( + x + outer_width, y + outer_height, Gosu::Color::RED, + x, y + outer_height, Gosu::Color::RED, + Float::INFINITY + ) + Gosu.draw_line( + x, outer_height, Gosu::Color::RED, + x, y, Gosu::Color::RED, + Float::INFINITY + ) + end end def update @children.each(&:update) end @@ -83,17 +108,18 @@ if is_root? @width = @style.width = window.width @height = @style.height = window.height else - @width, @height = 0, 0 + @width = 0 + @height = 0 _width = dimensional_size(@style.width, :width) - _height= dimensional_size(@style.height,:height) + _height = dimensional_size(@style.height, :height) - @width = _width ? _width : (@children.map {|c| c.x + c.outer_width }.max || 0).round - @height = _height ? _height : (@children.map {|c| c.y + c.outer_height}.max || 0).round + @width = _width || (@children.map { |c| c.x + c.outer_width }.max || 0).round + @height = _height || (@children.map { |c| c.y + c.outer_height }.max || 0).round end # Move child to parent after positioning @children.each do |child| child.x += (@x + @style.border_thickness_left) - style.margin_left @@ -113,57 +139,55 @@ raise "Not overridden" end def max_width _width = dimensional_size(@style.width, :width) - _width ? outer_width : window.width - (@parent ? @parent.style.margin_right + @style.margin_right : @style.margin_right) + if _width + outer_width + else + window.width - (@parent ? @parent.style.margin_right + @style.margin_right : @style.margin_right) + end end def fits_on_line?(element) # Flow p [@options[:id], @width] if @options[:id] @current_position.x + element.outer_width <= max_width && - @current_position.x + element.outer_width <= window.width + @current_position.x + element.outer_width <= window.width end def position_on_current_line(element) # Flow element.x = element.style.margin_left + @current_position.x element.y = element.style.margin_top + @current_position.y - element.recalculate - @current_position.x += element.outer_width @current_position.x = @style.margin_left if @current_position.x >= max_width end - def tallest_neighbor(querier, y_position) # Flow + def tallest_neighbor(querier, _y_position) # Flow response = querier @children.each do |child| response = child if child.outer_height > response.outer_height break if child == querier end - return response + response end def position_on_next_line(child) # Flow @current_position.x = @style.margin_left @current_position.y += tallest_neighbor(child, @current_position.y).outer_height child.x = child.style.margin_left + @current_position.x child.y = child.style.margin_top + @current_position.y - child.recalculate - @current_position.x += child.outer_width end def move_to_next_line(element) # Stack element.x = element.style.margin_left + @current_position.x element.y = element.style.margin_top + @current_position.y - element.recalculate - @current_position.y += element.outer_height end # def mouse_wheel_up(sender, x, y) # @children.each {|c| c.y -= @scroll_speed} @@ -174,20 +198,20 @@ # @children.each {|c| c.y += @scroll_speed} # @children.each {|c| c.recalculate} # end def value - @children.map {|c| c.class}.join(", ") + @children.map { |c| c.class }.join(", ") end def to_s "#{self.class} x=#{x} y=#{y} width=#{width} height=#{height} children=#{@children.size}" end - def write_tree(indent = "", index = 0) + def write_tree(indent = "", _index = 0) puts self - indent = indent + " " + indent += " " @children.each_with_index do |child, i| print "#{indent}#{i}: " if child.is_a?(Container) child.write_tree(indent)