Class: Fatty::Renderer

Inherits:
Object
  • Object
show all
Defined in:
lib/fatty/renderer.rb,
lib/fatty/renderer/curses.rb,
lib/fatty/renderer/truecolor.rb

Overview

The Renderer class implements drawing the elements of a Fatty terminal (output, input, alert, status, and popups) on the screen. There are two ways of doing so: (1) using normal curses operations with curses-defined pairs and (2) using ANSI codes to write with a Truecolor full-color palette. This class is the base class for those two rendering methods and provides methods common to them.

Direct Known Subclasses

Curses, Truecolor

Defined Under Namespace

Classes: Curses, Truecolor

Constant Summary collapse

FRAME_STYLES =
{
  ascii: { h: "-", v: "|" },
  single: { h: "", v: "" },
  double: { h: "", v: "" },
}.freeze
CORNER_STYLES =
{
  square: {
    ascii: { tl: "+", tr: "+", bl: "+", br: "+" },
    single: { tl: "", tr: "", bl: "", br: "" },
    double: { tl: "", tr: "", bl: "", br: "" },
  },
  rounded: {
    single: { tl: "", tr: "", bl: "", br: "" },
  },
}.freeze
""
"  "

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(screen:, palette:, context:) ⇒ Renderer

Returns a new instance of Renderer.



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/fatty/renderer.rb', line 42

def initialize(screen:, palette:, context:)
  @screen = screen
  @palette = palette
  @context = context
  @last_status_state = nil
  @last_alert_state = nil
  @last_output_state = nil
  @last_popup_state = nil
  @last_prompt_popup_state = nil
  @last_pager_field_state = nil
  @theme_version = 0
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



40
41
42
# File 'lib/fatty/renderer.rb', line 40

def context
  @context
end

#paletteObject (readonly)

Returns the value of attribute palette.



40
41
42
# File 'lib/fatty/renderer.rb', line 40

def palette
  @palette
end

#screenObject

Returns the value of attribute screen.



40
41
42
# File 'lib/fatty/renderer.rb', line 40

def screen
  @screen
end

#theme_versionObject (readonly)

Returns the value of attribute theme_version.



40
41
42
# File 'lib/fatty/renderer.rb', line 40

def theme_version
  @theme_version
end

Instance Method Details

#apply_theme!(theme) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/fatty/renderer.rb', line 57

def apply_theme!(theme)
  Fatty::Themes::Manager.set(theme)
  @theme_version += 1
  theme_spec = Fatty::Themes::Manager.roles(Fatty::Themes::Manager.current) || {}
  @palette = Fatty::Colors::Palette.compile(theme_spec, available_colors: available_colors)

  after_apply_theme!
  invalidate!
  sync_backgrounds!
end

#clear_input_fieldObject

Raises:

  • (NotImplementedError)


80
81
82
# File 'lib/fatty/renderer.rb', line 80

def clear_input_field(...)
  raise NotImplementedError, "#{self.class} must implement #clear_input_field"
end

#hide_cursorObject



114
115
# File 'lib/fatty/renderer.rb', line 114

def hide_cursor
end

#invalidate!Object



104
105
106
107
108
109
110
111
112
# File 'lib/fatty/renderer.rb', line 104

def invalidate!
  @last_output_state = nil
  @last_input_state = nil
  @last_alert_state = nil
  @last_status_state = nil
  @last_pager_field_state = nil
  @last_popup_state = nil
  @last_prompt_popup_state = nil
end

#render_alertObject

Raises:

  • (NotImplementedError)


100
101
102
# File 'lib/fatty/renderer.rb', line 100

def render_alert(...)
  raise NotImplementedError, "#{self.class} must implement #render_alert"
end

#render_input_fieldObject

Raises:

  • (NotImplementedError)


76
77
78
# File 'lib/fatty/renderer.rb', line 76

def render_input_field(...)
  raise NotImplementedError, "#{self.class} must implement #render_input_field"
end

#render_outputObject

Raises:

  • (NotImplementedError)


68
69
70
# File 'lib/fatty/renderer.rb', line 68

def render_output(...)
  raise NotImplementedError, "#{self.class} must implement #render_output"
end

#render_pager_fieldObject

Raises:

  • (NotImplementedError)


88
89
90
# File 'lib/fatty/renderer.rb', line 88

def render_pager_field(...)
  raise NotImplementedError, "#{self.class} must implement #render_pager_field"
end

#render_popupObject

Raises:

  • (NotImplementedError)


92
93
94
# File 'lib/fatty/renderer.rb', line 92

def render_popup(...)
  raise NotImplementedError, "#{self.class} must implement #render_popup"
end

#render_prompt_popupObject

Raises:

  • (NotImplementedError)


96
97
98
# File 'lib/fatty/renderer.rb', line 96

def render_prompt_popup(...)
  raise NotImplementedError, "#{self.class} must implement #render_prompt_popup"
end

#render_statusObject

Raises:

  • (NotImplementedError)


72
73
74
# File 'lib/fatty/renderer.rb', line 72

def render_status(...)
  raise NotImplementedError, "#{self.class} must implement #render_status"
end

#restore_cursorObject

Raises:

  • (NotImplementedError)


84
85
86
# File 'lib/fatty/renderer.rb', line 84

def restore_cursor(...)
  raise NotImplementedError, "#{self.class} must implement #restore_cursor"
end

#show_cursorObject



117
118
# File 'lib/fatty/renderer.rb', line 117

def show_cursor
end