Class: Chamomile::Layout::Horizontal

Inherits:
Base
  • Object
show all
Defined in:
lib/chamomile/layout/horizontal.rb

Instance Method Summary collapse

Constructor Details

#initialize(align: :top) ⇒ Horizontal

Returns a new instance of Horizontal.



6
7
8
9
# File 'lib/chamomile/layout/horizontal.rb', line 6

def initialize(align: :top)
  @align    = align
  @children = []
end

Instance Method Details

#add(child) ⇒ Object



11
12
13
14
# File 'lib/chamomile/layout/horizontal.rb', line 11

def add(child)
  @children << child
  self
end

#render(width:, height:) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/chamomile/layout/horizontal.rb', line 16

def render(width:, height:)
  return "" if @children.empty?

  explicit  = @children.select { |c| c.respond_to?(:explicit_width?) && c.explicit_width? }
  flexible  = @children - explicit

  used = explicit.sum { |c| c.resolved_width(width) }
  flex_width = flexible.empty? ? 0 : (width - used) / flexible.size

  parts = @children.map do |child|
    w = explicit.include?(child) ? child.resolved_width(width) : flex_width
    child.render(width: w, height: height)
  end

  Chamomile.horizontal(parts, align: @align)
end