class Tkn2::Screen

Public Class Methods

new() click to toggle source
# File lib/tkn2/screen.rb, line 5
def initialize
  Curses.init_screen
  Curses.cbreak
  Curses.nl
  Curses.noecho
  Curses.curs_set 0
  Curses.stdscr.keypad(true)
end

Public Instance Methods

render(deck) click to toggle source
# File lib/tkn2/screen.rb, line 14
def render(deck)
  loop do
    break unless deck.current

    Curses.clear
    place_content deck.current.block

    case Curses.getch
    when 'q'
      break
    when 'n', Curses::Key::DOWN, Curses::Key::RIGHT, ' ', Curses::Key::ENTER, Curses::Key::NPAGE
      deck.next
    when 'p', Curses::Key::UP, Curses::Key::LEFT, Curses::Key::BACKSPACE, Curses::Key::PPAGE
      deck.prev
    when Curses::Key::HOME
      deck.first
    end
  end

  Curses.stdscr.close
end

Private Instance Methods

place_content(content) click to toggle source
# File lib/tkn2/screen.rb, line 38
def place_content(content)
  raw_content = ContentBlock.new(ANSIReader::Remover.new.remove(content.content))
  top  = (Curses.lines - raw_content.height) / 2
  left = (Curses.cols  - raw_content.width) / 2
  window = Curses.stdscr.subwin(raw_content.height, raw_content.width, top, left)
  ANSIReader::Screen.new(window).parse(content.content)
  window.refresh
end