class Cura::Termbox::Adapter

Cura adapter for Termbox.

Public Instance Methods

cleanup() click to toggle source
Calls superclass method
# File lib/cura/termbox/adapter.rb, line 67
def cleanup
  ::Termbox.tb_shutdown

  super
end
clear() click to toggle source
# File lib/cura/termbox/adapter.rb, line 59
def clear
  ::Termbox.tb_clear
end
hide_cursor() click to toggle source
# File lib/cura/termbox/adapter.rb, line 77
def hide_cursor
  ::Termbox.tb_set_cursor(::Termbox::TB_HIDE_CURSOR, ::Termbox::TB_HIDE_CURSOR)
end
peek_event(milliseconds) click to toggle source
# File lib/cura/termbox/adapter.rb, line 88
def peek_event(milliseconds)
  event = ::Termbox::Event.new
  ::Termbox.tb_peek_event(event, milliseconds)

  convert_termbox_event_to_cura_event(event)
end
poll_event() click to toggle source
# File lib/cura/termbox/adapter.rb, line 81
def poll_event
  event = ::Termbox::Event.new
  ::Termbox.tb_poll_event(event)

  convert_termbox_event_to_cura_event(event)
end
present() click to toggle source
# File lib/cura/termbox/adapter.rb, line 63
def present
  ::Termbox.tb_present
end
set_cursor(x, y) click to toggle source
# File lib/cura/termbox/adapter.rb, line 73
def set_cursor(x, y)
  ::Termbox.tb_set_cursor(x, y)
end
setup() click to toggle source
Calls superclass method
# File lib/cura/termbox/adapter.rb, line 41
def setup
  case ::Termbox.tb_init
    when ::Termbox::TB_EUNSUPPORTED_TERMINAL then raise Termbox::Error::UnsupportedTerminal
    when ::Termbox::TB_EFAILED_TO_OPEN_TTY   then raise Termbox::Error::FailedToOpenTTY
    when ::Termbox::TB_EPIPE_TRAP_ERROR      then raise Termbox::Error::PipeTrapError
  end

  if defined?(::Termbox::TB_INPUT_MOUSE) # TODO: I don't like this =[
    ::Termbox.tb_select_input_mode(::Termbox::TB_INPUT_ESC | ::Termbox::TB_INPUT_MOUSE)
  else
    ::Termbox.tb_select_input_mode(::Termbox::TB_INPUT_ESC)
  end
  # ::Termbox.tb_select_output_mode(::Termbox::TB_OUTPUT_216)
  ::Termbox.tb_select_output_mode(::Termbox::TB_OUTPUT_256)

  super
end

Protected Instance Methods

convert_termbox_control_key_to_cura_event(key) click to toggle source
# File lib/cura/termbox/adapter.rb, line 127
def convert_termbox_control_key_to_cura_event(key)
  case key
    # when ::Termbox::TB_KEY_CTRL_2                  then Event::KeyDown.new( name: :"2", control: true ) # clash with 'CTRL_TILDE'
    # when ::Termbox::TB_KEY_CTRL_3                  then Event::KeyDown.new( name: :"3", control: true ) # clash with 'ESC'
    # when ::Termbox::TB_KEY_CTRL_4                  then Event::KeyDown.new( name: :"4", control: true ) # clash with 'CTRL_BACKSLASH'
    # when ::Termbox::TB_KEY_CTRL_5                  then Event::KeyDown.new( name: :"5", control: true ) # clash with 'CTRL_RSQ_BRACKET'
    when ::Termbox::TB_KEY_CTRL_6                  then Event::KeyDown.new(name: :"6", control: true)
    # when ::Termbox::TB_KEY_CTRL_7                  then Event::KeyDown.new( name: :"7", control: true ) # clash with 'CTRL_SLASH' # clash with 'CTRL_UNDERSCORE'
    # when ::Termbox::TB_KEY_CTRL_8                  then Event::KeyDown.new( name: :"8", control: true ) # clash with 'TB_KEY_BACKSPACE2'
    when ::Termbox::TB_KEY_CTRL_A                  then Event::KeyDown.new(name: :A, control: true)
    when ::Termbox::TB_KEY_CTRL_B                  then Event::KeyDown.new(name: :B, control: true)
    when ::Termbox::TB_KEY_CTRL_C                  then Event::KeyDown.new(name: :C, control: true)
    when ::Termbox::TB_KEY_CTRL_D                  then Event::KeyDown.new(name: :D, control: true)
    when ::Termbox::TB_KEY_CTRL_E                  then Event::KeyDown.new(name: :E, control: true)
    when ::Termbox::TB_KEY_CTRL_F                  then Event::KeyDown.new(name: :F, control: true)
    when ::Termbox::TB_KEY_CTRL_G                  then Event::KeyDown.new(name: :G, control: true)
    # when ::Termbox::TB_KEY_CTRL_H                  then Event::KeyDown.new( name: :H, control: true ) # clash with 'CTRL_BACKSPACE'
    # when ::Termbox::TB_KEY_CTRL_I                  then Event::KeyDown.new( name: :I, control: true ) # clash with 'TAB'
    when ::Termbox::TB_KEY_CTRL_J                  then Event::KeyDown.new(name: :J, control: true)
    when ::Termbox::TB_KEY_CTRL_K                  then Event::KeyDown.new(name: :K, control: true)
    when ::Termbox::TB_KEY_CTRL_L                  then Event::KeyDown.new(name: :L, control: true)
    # when ::Termbox::TB_KEY_CTRL_M                  then Event::KeyDown.new( name: :M, control: true ) # clash with 'ENTER'
    when ::Termbox::TB_KEY_CTRL_N                  then Event::KeyDown.new(name: :N, control: true)
    when ::Termbox::TB_KEY_CTRL_O                  then Event::KeyDown.new(name: :O, control: true)
    when ::Termbox::TB_KEY_CTRL_P                  then Event::KeyDown.new(name: :P, control: true)
    when ::Termbox::TB_KEY_CTRL_Q                  then Event::KeyDown.new(name: :Q, control: true)
    when ::Termbox::TB_KEY_CTRL_R                  then Event::KeyDown.new(name: :R, control: true)
    when ::Termbox::TB_KEY_CTRL_S                  then Event::KeyDown.new(name: :S, control: true)
    when ::Termbox::TB_KEY_CTRL_T                  then Event::KeyDown.new(name: :T, control: true)
    when ::Termbox::TB_KEY_CTRL_U                  then Event::KeyDown.new(name: :U, control: true)
    when ::Termbox::TB_KEY_CTRL_V                  then Event::KeyDown.new(name: :V, control: true)
    when ::Termbox::TB_KEY_CTRL_W                  then Event::KeyDown.new(name: :W, control: true)
    when ::Termbox::TB_KEY_CTRL_X                  then Event::KeyDown.new(name: :X, control: true)
    when ::Termbox::TB_KEY_CTRL_Y                  then Event::KeyDown.new(name: :Y, control: true)
    when ::Termbox::TB_KEY_CTRL_Z                  then Event::KeyDown.new(name: :Z, control: true)
    when ::Termbox::TB_KEY_CTRL_BACKSLASH          then Event::KeyDown.new(name: :backslash, control: true) # clash with 'CTRL_4'
    when ::Termbox::TB_KEY_CTRL_LSQ_BRACKET        then Event::KeyDown.new(name: :left_bracket, control: true) # clash with 'ESC'
    when ::Termbox::TB_KEY_CTRL_RSQ_BRACKET        then Event::KeyDown.new(name: :right_bracket, control: true) # clash with 'CTRL_5'
    when ::Termbox::TB_KEY_CTRL_SLASH              then Event::KeyDown.new(name: :slash, control: true) # clash with 'CTRL_7'
    when ::Termbox::TB_KEY_CTRL_TILDE              then Event::KeyDown.new(name: :tilde, control: true) # clash with 'CTRL_2'
    when ::Termbox::TB_KEY_CTRL_UNDERSCORE         then Event::KeyDown.new(name: :underscore, control: true) # clash with 'CTRL_7' # clash with 'CTRL_SLASH'
  end
end
convert_termbox_event_to_cura_event(event) click to toggle source
# File lib/cura/termbox/adapter.rb, line 97
def convert_termbox_event_to_cura_event(event)
  return nil if event.nil? # TODO: Would it even be nil? Wouldnt it be -1 on errors?

  event = case event[:type]
    when ::Termbox::TB_EVENT_KEY
      if event[:key] != 0
        name = convert_termbox_key_to_cura_key_name(event[:key])

        name.nil? ? convert_termbox_control_key_to_cura_event(event[:key]) : Event::KeyDown.new(name: name)
      elsif event[:ch] != 0
        character = event[:ch].chr
        key_name = Cura::Key.name_from_character(character)

        Event::KeyDown.new(name: key_name)
      end
    when ::Termbox::TB_EVENT_MOUSE
      case event[:key]
        when ::Termbox::TB_KEY_MOUSE_LEFT       then Event::MouseButton.new(name: :left, state: :down, x: event[:x], y: event[:y])
        when ::Termbox::TB_KEY_MOUSE_MIDDLE     then Event::MouseButton.new(name: :middle, state: :down, x: event[:x], y: event[:y])
        when ::Termbox::TB_KEY_MOUSE_RIGHT      then Event::MouseButton.new(name: :right, state: :down, x: event[:x], y: event[:y])
        when ::Termbox::TB_KEY_MOUSE_RELEASE    then Event::MouseButton.new(state: :up, x: event[:x], y: event[:y])
        when ::Termbox::TB_KEY_MOUSE_WHEEL_UP   then Event::MouseWheelUp.new(x: event[:x], y: event[:y])
        when ::Termbox::TB_KEY_MOUSE_WHEEL_DOWN then Event::MouseWheelDown.new(x: event[:x], y: event[:y])
      end
    when ::Termbox::TB_EVENT_RESIZE then Event::Resize.new(width: event[:w], height: event[:h])
  end

  event
end
convert_termbox_key_to_cura_key_name(key) click to toggle source
# File lib/cura/termbox/adapter.rb, line 171
def convert_termbox_key_to_cura_key_name(key)
  case key
    when ::Termbox::TB_KEY_F1          then :f1
    when ::Termbox::TB_KEY_F2          then :f2
    when ::Termbox::TB_KEY_F3          then :f3
    when ::Termbox::TB_KEY_F4          then :f4
    when ::Termbox::TB_KEY_F5          then :f5
    when ::Termbox::TB_KEY_F6          then :f6
    when ::Termbox::TB_KEY_F7          then :f7
    when ::Termbox::TB_KEY_F8          then :f8
    when ::Termbox::TB_KEY_F9          then :f9
    when ::Termbox::TB_KEY_F10         then :f10
    when ::Termbox::TB_KEY_F11         then :f11
    when ::Termbox::TB_KEY_F12         then :f12
    when ::Termbox::TB_KEY_F12         then :f12
    when ::Termbox::TB_KEY_INSERT      then :insert
    when ::Termbox::TB_KEY_DELETE      then :delete
    when ::Termbox::TB_KEY_HOME        then :home
    when ::Termbox::TB_KEY_END         then :end
    when ::Termbox::TB_KEY_PGUP        then :page_up
    when ::Termbox::TB_KEY_PGDN        then :page_down
    when ::Termbox::TB_KEY_ARROW_UP    then :up
    when ::Termbox::TB_KEY_ARROW_DOWN  then :down
    when ::Termbox::TB_KEY_ARROW_LEFT  then :left
    when ::Termbox::TB_KEY_ARROW_RIGHT then :right
    when ::Termbox::TB_KEY_BACKSPACE   then :backspace
    when ::Termbox::TB_KEY_BACKSPACE2  then :backspace
    when ::Termbox::TB_KEY_ENTER       then :enter
    when ::Termbox::TB_KEY_ESC         then :escape
    when ::Termbox::TB_KEY_SPACE       then :space
    when ::Termbox::TB_KEY_TAB         then :tab
  end
end