Class: TUITD::Screenshot

Inherits:
Object
  • Object
show all
Includes:
ANSIUtils
Defined in:
lib/tui_td/screenshot.rb

Constant Summary collapse

CELL_W =
8
CELL_H =
16
BOX_CHARS =
{
  # horizontal
  "" => [false, false, true, true, :light],
  "" => [false, false, true, true, :heavy],
  "" => [false, false, true, true, :double],
  # vertical
  "" => [true, true, false, false, :light],
  "" => [true, true, false, false, :heavy],
  "" => [true, true, false, false, :double],
  # corners
  "" => [false, true, false, true, :light],
  "" => [false, true, false, true, :light],
  "" => [false, true, false, true, :light],
  "" => [false, true, false, true, :heavy],
  "" => [false, true, true, false, :light],
  "" => [false, true, true, false, :light],
  "" => [false, true, true, false, :light],
  "" => [false, true, true, false, :heavy],
  "" => [true, false, false, true, :light],
  "" => [true, false, false, true, :light],
  "" => [true, false, false, true, :light],
  "" => [true, false, false, true, :heavy],
  "" => [true, false, true, false, :light],
  "" => [true, false, true, false, :light],
  "" => [true, false, true, false, :light],
  "" => [true, false, true, false, :heavy],
  # double corners
  "" => [false, true, false, true, :double],
  "" => [false, true, true, false, :double],
  "" => [true, false, false, true, :double],
  "" => [true, false, true, false, :double],
  # T-junctions
  "" => [true, true, false, true, :light],
  "" => [true, true, false, true, :heavy],
  "" => [true, true, true, false, :light],
  "" => [true, true, true, false, :heavy],
  "" => [false, true, true, true, :light],
  "" => [false, true, true, true, :heavy],
  "" => [true, false, true, true, :light],
  "" => [true, false, true, true, :heavy],
  # double T-junctions
  "" => [true, true, false, true, :double],
  "" => [true, true, true, false, :double],
  "" => [false, true, true, true, :double],
  "" => [true, false, true, true, :double],
  # crosses
  "" => [true, true, true, true, :light],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :double],
  # single lines (ends)
  "" => [false, false, true, false, :light],
  "" => [true, false, false, false, :light],
  "" => [false, false, false, true, :light],
  "" => [false, true, false, false, :light],
  "" => [false, false, true, false, :heavy],
  "" => [true, false, false, false, :heavy],
  "" => [false, false, false, true, :heavy],
  "" => [false, true, false, false, :heavy],
  # mixed corners/junctions
  "" => [true, true, true, true, :light],
  "" => [true, true, true, true, :light],
  "" => [true, true, true, true, :light],
  "" => [true, true, true, true, :light],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :heavy],
  "" => [true, true, true, true, :heavy],
  "" => [false, true, false, true, :double],
  "" => [false, true, false, true, :double],
  "" => [false, true, true, false, :double],
  "" => [false, true, true, false, :double],
  "" => [true, false, false, true, :double],
  "" => [true, false, false, true, :double],
  "" => [true, false, true, false, :double],
  "" => [true, false, true, false, :double],
  "" => [true, true, false, true, :double],
  "" => [true, true, false, true, :double],
  "" => [true, true, true, false, :double],
  "" => [true, true, true, false, :double],
  "" => [false, true, true, true, :double],
  "" => [false, true, true, true, :double],
  "" => [true, false, true, true, :double],
  "" => [true, false, true, true, :double],
  "" => [true, true, true, true, :double],
  "" => [true, true, true, true, :double]
}.freeze

Constants included from ANSIUtils

ANSIUtils::ANSI_INDEX, ANSIUtils::ANSI_RGB, ANSIUtils::CUBE, ANSIUtils::DEFAULT_BG, ANSIUtils::DEFAULT_FG

Instance Method Summary collapse

Methods included from ANSIUtils

#_dig, #resolve_color, #xterm_256

Constructor Details

#initialize(state) ⇒ Screenshot

Returns a new instance of Screenshot.



203
204
205
206
207
208
# File 'lib/tui_td/screenshot.rb', line 203

def initialize(state)
  @state = state
  @rows = _dig(state, :size, :rows) || 40
  @cols = _dig(state, :size, :cols) || 120
  @grid = state[:rows] || state["rows"] || []
end

Instance Method Details

#render(output_path) ⇒ Object



210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# File 'lib/tui_td/screenshot.rb', line 210

def render(output_path)
  width = @cols * CELL_W
  height = @rows * CELL_H
  image = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::BLACK)

  @grid.each_with_index do |row, ri|
    next unless row
    row.each_with_index do |cell, ci|
      next unless cell
      render_cell(image, ri, ci, cell)
    end
  end

  image.save(output_path)
  output_path
end