class BasicScrollingArea

Constants

SCROLLING_AREA_HEIGHT
SCROLLING_AREA_PADDING_X
SCROLLING_AREA_PADDING_Y
SCROLLING_AREA_WIDTH

Public Class Methods

new() click to toggle source
# File examples/basic_scrolling_area.rb, line 11
def initialize
  @x = SCROLLING_AREA_PADDING_X
  @y = SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y
  create_gui
  Glimmer::LibUI.timer(0.01) do
    @x += SCROLLING_AREA_PADDING_X
    @y = [[@y + rand(SCROLLING_AREA_PADDING_Y*4)*(rand(2) == 0 ? -1 : 1), SCROLLING_AREA_PADDING_Y].max, SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y].min
    @graph.content { # re-open @graph's content and add a line
      line(@x, @y)
    }
    # if there is a need to enlarge scrolling area, call `@scrolling_area.set_size(new_width, new_height)`
    # Note that `#scroll_to` does not seem to work on Linux, but normal scrolling does.
    @scrolling_area.scroll_to(@x - (SCROLLING_AREA_WIDTH/2), @y) # 3rd and 4th arguments for width and height are assumed as those of main window by default if not supplied
    # return false to stop timer once @x exceeds scrolling area width - padding
    false if @x >= (SCROLLING_AREA_WIDTH - SCROLLING_AREA_PADDING_X*2)
  end
end

Public Instance Methods

create_gui() click to toggle source
# File examples/basic_scrolling_area.rb, line 63
def create_gui
  @main_window = window('Basic Scrolling Area', SCROLLING_AREA_WIDTH / 2, SCROLLING_AREA_HEIGHT) {
    resizable false
    
    @scrolling_area = scrolling_area(SCROLLING_AREA_WIDTH, SCROLLING_AREA_HEIGHT) { # double width of window enables horizontal scrolling
      x_axis
      y_axis
      
      @graph = figure(SCROLLING_AREA_PADDING_X, SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y) {
        stroke :blue, thickness: 2
      }
    }
  }
end
launch() click to toggle source
# File examples/basic_scrolling_area.rb, line 29
def launch
  @main_window.show
end
x_axis() click to toggle source
# File examples/basic_scrolling_area.rb, line 33
def x_axis
  polyline(SCROLLING_AREA_PADDING_X, SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y, SCROLLING_AREA_WIDTH - SCROLLING_AREA_PADDING_X*2, SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y) {
    stroke :black, thickness: 3
  }
  
  ((SCROLLING_AREA_WIDTH - SCROLLING_AREA_PADDING_X*4) / SCROLLING_AREA_PADDING_X).times do |x_multiplier|
    x = x_multiplier*SCROLLING_AREA_PADDING_X + SCROLLING_AREA_PADDING_X*2
    y = SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y
    
    polyline(x, y, x, y + SCROLLING_AREA_PADDING_Y/2) {
      stroke :black, thickness: 2
    }
  end
end
y_axis() click to toggle source
# File examples/basic_scrolling_area.rb, line 48
def y_axis
  polyline(SCROLLING_AREA_PADDING_X, SCROLLING_AREA_PADDING_Y, SCROLLING_AREA_PADDING_X, SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y) {
    stroke :black, thickness: 3
  }
  
  ((SCROLLING_AREA_HEIGHT - SCROLLING_AREA_PADDING_Y*3) / SCROLLING_AREA_PADDING_Y).times do |y_multiplier|
    x = SCROLLING_AREA_PADDING_X
    y = y_multiplier*SCROLLING_AREA_PADDING_Y + SCROLLING_AREA_PADDING_Y*2
    
    polyline(x, y, x - SCROLLING_AREA_PADDING_X/2, y) {
      stroke :black, thickness: 2
    }
  end
end