class Fidgit::ScrollWindow

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method Fidgit::Composite::new
# File lib/fidgit/elements/scroll_window.rb, line 18
def initialize(options = {})
  options = {
    scroll_bar_thickness: default(:scroll_bar_thickness),
  }.merge! options

  super(options)

  @grid = grid num_columns: 2, padding: 0, spacing: 0 do
    @view = scroll_area(owner: self, width: options[:width], height: options[:height])
    @spacer = label '', padding: 0, width: 0, height: 0
  end

  @scroll_bar_v = VerticalScrollBar.new(owner: self, width: options[:scroll_bar_thickness], align_v: :fill)
  @scroll_bar_h = HorizontalScrollBar.new(owner: self, height: options[:scroll_bar_thickness], align_h: :fill)
end

Public Instance Methods

content() click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 5
def content; @view.content; end
content_height() click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 14
def content_height; @view.content.height; end
content_width() click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 13
def content_width; @view.content.width; end
height=(value) click to toggle source
Calls superclass method
# File lib/fidgit/elements/scroll_window.rb, line 16
def height=(value); super(value); end
offset_x() click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 6
def offset_x; @view.offset_x; end
offset_x=(value) click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 7
def offset_x=(value); @view.offset_x = value; end
offset_y() click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 8
def offset_y; @view.offset_y; end
offset_y=(value) click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 9
def offset_y=(value); @view.offset_y = value; end
view_height() click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 12
def view_height; @view.height; end
view_width() click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 11
def view_width; @view.width; end
width=(value) click to toggle source
Calls superclass method
# File lib/fidgit/elements/scroll_window.rb, line 15
def width=(value); super(value); end

Protected Instance Methods

layout() click to toggle source
Calls superclass method
# File lib/fidgit/elements/scroll_window.rb, line 35
def layout
  # Prevent recursive layouts.
  return if @in_layout

  @in_layout = true

  if @view
    # Constrain the values of the offsets.
    @view.offset_x = @view.offset_x
    @view.offset_y = @view.offset_y

    if content_height > view_height
      unless @scroll_bar_v.parent
        @view.send(:rect).width -= @scroll_bar_v.width
        @grid.remove @spacer
        @grid.insert 1, @scroll_bar_v
      end
    else
      if @scroll_bar_v.parent
        @view.send(:rect).width += @scroll_bar_v.width
        @grid.remove @scroll_bar_v
        @grid.insert 1, @spacer
      end
    end

    if content_width > view_width
      unless @scroll_bar_h.parent
        @view.send(:rect).height -= @scroll_bar_h.height
        @grid.add @scroll_bar_h
      end
    else
      if @scroll_bar_h.parent
        @view.send(:rect).height += @scroll_bar_h.height
        @grid.remove @scroll_bar_h
      end
    end
  end

  super

  @in_layout = false
end
post_init_block(&block) click to toggle source
# File lib/fidgit/elements/scroll_window.rb, line 79
def post_init_block(&block)
  @view.content.with(&block)
end