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)