class Nyle::Screen

Screen

Attributes

height[R]
status[R]
width[R]

Public Class Methods

new(width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT, bgcolor: :WHITE, trace: false) click to toggle source
Calls superclass method
# File lib/nyle/screen.rb, line 41
def initialize(width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT, bgcolor: :WHITE, trace: false)
  super()
  @width         = width
  @height        = height
  @trace         = trace
  @bgcolor       = bgcolor
  @running_count = 0
  @status        = nil

  Nyle.module_eval {
    _set_screen_size(width, height)
  }

  # Draw to 'CairoContext' of ImageSurface once, and copy to 'CairoContext' of DrawingArea
  @canvas = Cairo::ImageSurface.new(@width, @height)

  self.signal_connect(:configure_event) do |widget, event|
    ;   # For resizing and so on
  end

  self.signal_connect(:draw) do |widget, cairo_context|
    Nyle.module_eval {
      _update_mouse_state
      _update_key_state
    }
    # Draw to 'CairoContext' of ImageSurface
    Cairo::Context.new(@canvas) do |cr|
      Nyle.module_eval {
        _set_cr(cr)
      }
      unless @trace                       # If not trace, clear screen each time
        Nyle.save do
          Nyle.cr.set_operator(Cairo::Operator::CLEAR)
          Nyle.cr.paint
        end
      end
      update
      draw
    end
    # Copy to 'CairoContext' of DrawingArea
    Nyle.module_eval {
      _set_cr(cairo_context)
    }
    Nyle.cr.set_source_color(@bgcolor)
    Nyle.cr.paint
    Nyle.cr.set_source(@canvas, 0, 0)
    Nyle.cr.paint
    @running_count += 1
  end

  # Need not only :pointer_motion but also :button_press and :button_release
  self.add_events([:button_press_mask,
                   :button_release_mask,
                   :pointer_motion_mask])

  # Signal handler for mouse position
  self.signal_connect(:motion_notify_event) do |widget, event|
    Nyle.module_eval {
      _set_mouse_pos(event.x.to_i, event.y.to_i)
    }
    false
  end
end

Public Instance Methods

clear_screen() click to toggle source

Clear

# File lib/nyle/screen.rb, line 106
def clear_screen
  Nyle.save do
    Nyle.cr.set_operator(Cairo::Operator::CLEAR)
    Nyle.cr.paint
  end
end
draw() click to toggle source
# File lib/nyle/screen.rb, line 131
def draw    ; end
resume() click to toggle source
# File lib/nyle/screen.rb, line 133
def resume  ; end
setup() click to toggle source
# File lib/nyle/screen.rb, line 134
def setup   ; end
show_all(title: nil, interval: nil) click to toggle source

When single screen, create frame to show self

# File lib/nyle/screen.rb, line 114
def show_all(title: nil, interval: nil)
  f = Nyle::Frame.new(@width, @height)
  f.set_current(self)
  f.show_all({title: title, interval: interval})
  f
end
start(*args) click to toggle source

Syntax sugar for starting Nyle aplication

# File lib/nyle/screen.rb, line 122
def start(*args)
  self.setup
  self.show_all(*args)
  Nyle.main
end
suspend() click to toggle source
# File lib/nyle/screen.rb, line 132
def suspend ; end
update() click to toggle source

Abstract methods to be overriden

# File lib/nyle/screen.rb, line 130
def update  ; end