mirror of
https://github.com/cyberarm/cyberarm_engine.git
synced 2026-05-06 16:08:16 +00:00
Fixed Element's x and y position offset by their containers margin_left and/or margin_top, fixed containers 'inheriting' their parents and/or grandparents margin_left/top causing them to have an outer_height greater than it should be (needs a little more work.)
This commit is contained in:
@@ -62,32 +62,32 @@ module CyberarmEngine
|
|||||||
|
|
||||||
def update
|
def update
|
||||||
# TOP
|
# TOP
|
||||||
@top.x = @element.x + @element.styled(:border_thickness_left)
|
@top.x = @element.x + @element.styled(:margin_left) + @element.styled(:border_thickness_left)
|
||||||
@top.y = @element.y
|
@top.y = @element.y + @element.styled(:margin_top)
|
||||||
@top.z = @element.z
|
@top.z = @element.z
|
||||||
|
|
||||||
@top.width = @element.width - @element.styled(:border_thickness_left)
|
@top.width = @element.width - @element.styled(:border_thickness_left)
|
||||||
@top.height = @element.styled(:border_thickness_top)
|
@top.height = @element.styled(:border_thickness_top)
|
||||||
|
|
||||||
# RIGHT
|
# RIGHT
|
||||||
@right.x = @element.x + @element.width
|
@right.x = @element.x + @element.styled(:margin_left) + @element.width
|
||||||
@right.y = @element.y + @element.styled(:border_thickness_top)
|
@right.y = @element.y + @element.styled(:margin_top) + @element.styled(:border_thickness_top)
|
||||||
@right.z = @element.z
|
@right.z = @element.z
|
||||||
|
|
||||||
@right.width = -@element.styled(:border_thickness_right)
|
@right.width = -@element.styled(:border_thickness_right)
|
||||||
@right.height = @element.height - @element.styled(:border_thickness_top)
|
@right.height = @element.height - @element.styled(:border_thickness_top)
|
||||||
|
|
||||||
# BOTTOM
|
# BOTTOM
|
||||||
@bottom.x = @element.x
|
@bottom.x = @element.x + @element.styled(:margin_left)
|
||||||
@bottom.y = @element.y + @element.height
|
@bottom.y = @element.y + @element.styled(:margin_top) + @element.height
|
||||||
@bottom.z = @element.z
|
@bottom.z = @element.z
|
||||||
|
|
||||||
@bottom.width = @element.width - @element.styled(:border_thickness_right)
|
@bottom.width = @element.width - @element.styled(:border_thickness_right)
|
||||||
@bottom.height = -@element.styled(:border_thickness_bottom)
|
@bottom.height = -@element.styled(:border_thickness_bottom)
|
||||||
|
|
||||||
# LEFT
|
# LEFT
|
||||||
@left.x = @element.x
|
@left.x = @element.x + @element.styled(:margin_left)
|
||||||
@left.y = @element.y
|
@left.y = @element.y + @element.styled(:margin_top)
|
||||||
@left.z = @element.z
|
@left.z = @element.z
|
||||||
|
|
||||||
@left.width = @element.styled(:border_thickness_left)
|
@left.width = @element.styled(:border_thickness_left)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ module CyberarmEngine
|
|||||||
@visible = !@options.key?(:visible) ? true : @options[:visible]
|
@visible = !@options.key?(:visible) ? true : @options[:visible]
|
||||||
@tip = @options[:tip] || ""
|
@tip = @options[:tip] || ""
|
||||||
|
|
||||||
|
@debug = @options[:debug]
|
||||||
@debug_color = @options[:debug_color].nil? ? Gosu::Color::RED : @options[:debug_color]
|
@debug_color = @options[:debug_color].nil? ? Gosu::Color::RED : @options[:debug_color]
|
||||||
|
|
||||||
@style = Style.new(options)
|
@style = Style.new(options)
|
||||||
@@ -124,8 +125,8 @@ module CyberarmEngine
|
|||||||
|
|
||||||
@background_nine_slice_canvas.image = img
|
@background_nine_slice_canvas.image = img
|
||||||
|
|
||||||
@background_nine_slice_canvas.x = @x
|
@background_nine_slice_canvas.x = @x + styled(:margin_left)
|
||||||
@background_nine_slice_canvas.y = @y
|
@background_nine_slice_canvas.y = @y + styled(:margin_top)
|
||||||
@background_nine_slice_canvas.z = @z
|
@background_nine_slice_canvas.z = @z
|
||||||
@background_nine_slice_canvas.width = width
|
@background_nine_slice_canvas.width = width
|
||||||
@background_nine_slice_canvas.height = height
|
@background_nine_slice_canvas.height = height
|
||||||
@@ -324,9 +325,12 @@ module CyberarmEngine
|
|||||||
@border_canvas&.draw
|
@border_canvas&.draw
|
||||||
|
|
||||||
render
|
render
|
||||||
|
|
||||||
|
debug_draw if @debug
|
||||||
end
|
end
|
||||||
|
|
||||||
def debug_draw
|
def debug_draw
|
||||||
|
return if @debug == false # allow elements to opt out of debug drawing, makes debugging some things easier.
|
||||||
return if CyberarmEngine.const_defined?("GUI_DEBUG_ONLY_ELEMENT") && self.class == GUI_DEBUG_ONLY_ELEMENT
|
return if CyberarmEngine.const_defined?("GUI_DEBUG_ONLY_ELEMENT") && self.class == GUI_DEBUG_ONLY_ELEMENT
|
||||||
|
|
||||||
Gosu.draw_line(
|
Gosu.draw_line(
|
||||||
@@ -374,8 +378,8 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def hit?(x, y)
|
def hit?(x, y)
|
||||||
x.between?(@x, @x + width) &&
|
x.between?(@x + styled(:margin_left), @x + styled(:margin_left) + width) &&
|
||||||
y.between?(@y, @y + height)
|
y.between?(@y + styled(:margin_top), @y + styled(:margin_top) + height)
|
||||||
end
|
end
|
||||||
|
|
||||||
def width
|
def width
|
||||||
@@ -516,8 +520,8 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update_background
|
def update_background
|
||||||
@background_canvas&.x = @x
|
@background_canvas&.x = @x + styled(:margin_left)
|
||||||
@background_canvas&.y = @y
|
@background_canvas&.y = @y + styled(:margin_top)
|
||||||
@background_canvas&.z = @z
|
@background_canvas&.z = @z
|
||||||
@background_canvas&.width = width
|
@background_canvas&.width = width
|
||||||
@background_canvas&.height = height
|
@background_canvas&.height = height
|
||||||
@@ -545,8 +549,8 @@ module CyberarmEngine
|
|||||||
def update_background_image
|
def update_background_image
|
||||||
return unless @background_image_canvas
|
return unless @background_image_canvas
|
||||||
|
|
||||||
@background_image_canvas.x = @x
|
@background_image_canvas.x = @x + styled(:margin_left)
|
||||||
@background_image_canvas.y = @y
|
@background_image_canvas.y = @y + styled(:margin_top)
|
||||||
@background_image_canvas.z = @z
|
@background_image_canvas.z = @z
|
||||||
@background_image_canvas.width = width
|
@background_image_canvas.width = width
|
||||||
@background_image_canvas.height = height
|
@background_image_canvas.height = height
|
||||||
|
|||||||
@@ -79,16 +79,16 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def render
|
def render
|
||||||
Gosu.clip_to(
|
# Gosu.clip_to(
|
||||||
@x + styled(:border_thickness_left) + styled(:padding_left),
|
# @x - 1 + styled(:margin_left) + styled(:border_thickness_left) + styled(:padding_left),
|
||||||
@y + styled(:border_thickness_top) + styled(:padding_top),
|
# @y - 1 + styled(:margin_top) + styled(:border_thickness_top) + styled(:padding_top),
|
||||||
content_width + 1,
|
# content_width + 1,
|
||||||
content_height + 1
|
# content_height + 1
|
||||||
) do
|
# ) do
|
||||||
Gosu.translate(@scroll_position.x, @scroll_position.y) do
|
Gosu.translate(@scroll_position.x, @scroll_position.y) do
|
||||||
@children.each(&:draw)
|
@children.each(&:draw)
|
||||||
end
|
end
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
def debug_draw
|
def debug_draw
|
||||||
@@ -126,8 +126,8 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update_child_element_visibity(child)
|
def update_child_element_visibity(child)
|
||||||
child.element_visible = child.x >= (@x - @scroll_position.x) - child.width && child.x <= (@x - @scroll_position.x) + width &&
|
child.element_visible = child.x >= ((styled(:margin_left) + @x) - @scroll_position.x) - child.width && child.x <= ((styled(:margin_left) + @x) - @scroll_position.x) + width &&
|
||||||
child.y >= (@y - @scroll_position.y) - child.height && child.y <= (@y - @scroll_position.y) + height
|
child.y >= ((styled(:margin_top) + @y) - @scroll_position.y) - child.height && child.y <= ((styled(:margin_top) + @y) - @scroll_position.y) + height
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_scroll
|
def update_scroll
|
||||||
@@ -182,8 +182,20 @@ module CyberarmEngine
|
|||||||
_width = dimensional_size(@style.width, :width)
|
_width = dimensional_size(@style.width, :width)
|
||||||
_height = dimensional_size(@style.height, :height)
|
_height = dimensional_size(@style.height, :height)
|
||||||
|
|
||||||
@width = _width || (@children.map { |c| c.x + c.outer_width }.max || 0).floor
|
width_correction = 0
|
||||||
@height = _height || (@children.map { |c| c.y + c.outer_height }.max || 0).floor
|
height_correction = 0
|
||||||
|
o = self
|
||||||
|
while (par = o&.parent)
|
||||||
|
if o.is_a?(Container)
|
||||||
|
width_correction += o.styled(:margin_left) + o.styled(:padding_left)
|
||||||
|
height_correction += o.styled(:margin_top) + o.styled(:padding_top)
|
||||||
|
end
|
||||||
|
|
||||||
|
o = par.parent
|
||||||
|
end
|
||||||
|
|
||||||
|
@width = _width || (@children.map { |c| c.x + c.outer_width }.max.to_f - width_correction).floor
|
||||||
|
@height = _height || (@children.map { |c| c.y + c.outer_height }.max.to_f - height_correction).floor
|
||||||
end
|
end
|
||||||
|
|
||||||
# FIXME: Correctly handle alignment when element has siblings
|
# FIXME: Correctly handle alignment when element has siblings
|
||||||
@@ -213,8 +225,8 @@ module CyberarmEngine
|
|||||||
# t = Gosu.milliseconds
|
# t = Gosu.milliseconds
|
||||||
# Move children to parent after positioning
|
# Move children to parent after positioning
|
||||||
@children.each do |child|
|
@children.each do |child|
|
||||||
child.x += (@x + styled(:border_thickness_left)) - styled(:margin_left)
|
child.x += (@x + styled(:border_thickness_left))
|
||||||
child.y += (@y + styled(:border_thickness_top)) - styled(:margin_top)
|
child.y += (@y + styled(:border_thickness_top))
|
||||||
|
|
||||||
child.stylize
|
child.stylize
|
||||||
child.recalculate
|
child.recalculate
|
||||||
@@ -258,8 +270,8 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def position_on_current_line(element) # Flow
|
def position_on_current_line(element) # Flow
|
||||||
element.x = element.styled(:margin_left) + @current_position.x
|
element.x = @current_position.x
|
||||||
element.y = element.styled(:margin_top) + @current_position.y
|
element.y = @current_position.y
|
||||||
|
|
||||||
@current_position.x += element.outer_width
|
@current_position.x += element.outer_width
|
||||||
end
|
end
|
||||||
@@ -275,18 +287,18 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def position_on_next_line(element) # Flow
|
def position_on_next_line(element) # Flow
|
||||||
@current_position.x = styled(:margin_left) + styled(:padding_left)
|
@current_position.x = 0
|
||||||
@current_position.y += tallest_neighbor(element, @current_position.y).outer_height
|
@current_position.y += tallest_neighbor(element, @current_position.y).outer_height
|
||||||
|
|
||||||
element.x = element.styled(:margin_left) + @current_position.x
|
element.x = @current_position.x
|
||||||
element.y = element.styled(:margin_top) + @current_position.y
|
element.y = @current_position.y
|
||||||
|
|
||||||
@current_position.x += element.outer_width
|
@current_position.x += element.outer_width
|
||||||
end
|
end
|
||||||
|
|
||||||
def move_to_next_line(element) # Stack
|
def move_to_next_line(element) # Stack
|
||||||
element.x = element.styled(:margin_left) + @current_position.x
|
element.x = @current_position.x
|
||||||
element.y = element.styled(:margin_top) + @current_position.y
|
element.y = @current_position.y
|
||||||
|
|
||||||
@current_position.y += element.outer_height
|
@current_position.y += element.outer_height
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -62,10 +62,10 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def position_handle
|
def position_handle
|
||||||
@handle.x = @x + @handle.styled(:margin_left) + styled(:padding_left) + styled(:border_thickness_left) +
|
@handle.x = styled(:margin_left) + @x + @handle.styled(:margin_left) + styled(:padding_left) + styled(:border_thickness_left) +
|
||||||
((content_width - @handle.outer_width) * (@value - @range.min) / (@range.max - @range.min).to_f)
|
((content_width - @handle.outer_width) * (@value - @range.min) / (@range.max - @range.min).to_f)
|
||||||
|
|
||||||
@handle.y = @y + @handle.styled(:margin_top) + styled(:border_thickness_top) + styled(:padding_top)
|
@handle.y = styled(:margin_top) + @y + @handle.styled(:margin_top) + styled(:border_thickness_top) + styled(:padding_top)
|
||||||
end
|
end
|
||||||
|
|
||||||
def draw
|
def draw
|
||||||
|
|||||||
@@ -62,21 +62,21 @@ module CyberarmEngine
|
|||||||
@width = _width || @text_width.floor
|
@width = _width || @text_width.floor
|
||||||
@height = _height || @text_height.floor
|
@height = _height || @text_height.floor
|
||||||
|
|
||||||
@text.y = styled(:border_thickness_top) + styled(:padding_top) + @y
|
@text.y = styled(:margin_top) + styled(:border_thickness_top) + styled(:padding_top) + @y
|
||||||
@text.z = @z + 3
|
@text.z = @z + 3
|
||||||
|
|
||||||
if (text_alignment = @options[:text_align] || @options[:text_h_align])
|
if (text_alignment = @options[:text_align] || @options[:text_h_align])
|
||||||
case text_alignment
|
case text_alignment
|
||||||
when :left
|
when :left
|
||||||
@text.x = styled(:border_thickness_left) + styled(:padding_left) + @x
|
@text.x = styled(:margin_left) + styled(:border_thickness_left) + styled(:padding_left) + @x
|
||||||
when :center
|
when :center
|
||||||
@text.x = if @text_width <= width
|
@text.x = if @text_width <= width
|
||||||
@x + width / 2 - @text_width / 2
|
@x + styled(:margin_left) + width / 2 - @text_width / 2
|
||||||
else # Act as left aligned
|
else # Act as left aligned
|
||||||
styled(:border_thickness_left) + styled(:padding_left) + @x
|
styled(:margin_left) + styled(:border_thickness_left) + styled(:padding_left) + @x
|
||||||
end
|
end
|
||||||
when :right
|
when :right
|
||||||
@text.x = @x + outer_width - (@text_width + styled(:border_thickness_right) + styled(:padding_right))
|
@text.x = @x + styled(:margin_left) + outer_width - (@text_width + styled(:border_thickness_right) + styled(:padding_right))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -84,12 +84,12 @@ module CyberarmEngine
|
|||||||
case vertical_alignment
|
case vertical_alignment
|
||||||
when :center
|
when :center
|
||||||
@text.y = if @text_height <= height
|
@text.y = if @text_height <= height
|
||||||
@y + height / 2 - @text_height / 2
|
@y + styled(:margin_top) + height / 2 - @text_height / 2
|
||||||
else
|
else
|
||||||
styled(:border_thickness_top) + styled(:padding_top) + @y
|
styled(:margin_top) + styled(:border_thickness_top) + styled(:padding_top) + @y
|
||||||
end
|
end
|
||||||
when :bottom
|
when :bottom
|
||||||
@text.y = @y + outer_height - (@text_height + styled(:border_thickness_bottom) + styled(:padding_bottom))
|
@text.y = @y + styled(:margin_top) + outer_height - (@text_height + styled(:border_thickness_bottom) + styled(:padding_bottom))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ module CyberarmEngine
|
|||||||
border_thickness border_thickness_left border_thickness_right border_thickness_top border_thickness_bottom
|
border_thickness border_thickness_left border_thickness_right border_thickness_top border_thickness_bottom
|
||||||
padding padding_left padding_right padding_top padding_bottom
|
padding padding_left padding_right padding_top padding_bottom
|
||||||
margin margin_left margin_right margin_top margin_bottom
|
margin margin_left margin_right margin_top margin_bottom
|
||||||
|
aspect_ratio
|
||||||
|
|
||||||
fraction_background scroll fill text_wrap v_align h_align delay tag font text_size
|
fraction_background scroll fill text_wrap v_align h_align delay tag font text_size
|
||||||
image_width image_height
|
image_width image_height
|
||||||
|
|||||||
Reference in New Issue
Block a user