Class: Vedeu::Output::Viewport Private

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/vedeu/output/viewport.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

A Viewport is the visible part of the content within an interface.

When a buffer has more lines than the defined height, or more columns than the defined width of the interface, this class provides ‘scrolling’ via the cursor’s position.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(view) ⇒ Vedeu::Output::Viewport

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Vedeu::Output::Viewport.

Parameters:



45
46
47
# File 'lib/vedeu/output/viewport.rb', line 45

def initialize(view)
  @view = view
end

Instance Attribute Details

#viewVedeu::Views::View (readonly, protected)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



68
69
70
# File 'lib/vedeu/output/viewport.rb', line 68

def view
  @view
end

Class Method Details

.render(view) ⇒ Array<Array<String>>|NilClass

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Parameters:

Returns:

  • (Array<Array<String>>|NilClass)


37
38
39
# File 'lib/vedeu/output/viewport.rb', line 37

def self.render(view)
  new(view).render if view
end

Instance Method Details

#columnsRange (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

The width is reduced by one as #columns is a range of Array elements.

Using the current cursor’s x position, return a range of visible columns.

Scrolls the content horizontally when the stored cursor’s x position for the interface is outside of the visible area.

Returns:

  • (Range)


83
84
85
# File 'lib/vedeu/output/viewport.rb', line 83

def columns
  left...(left + bordered_width)
end

#content_offset(offset, dimension) ⇒ Fixnum (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the offset for the content (the number of rows or columns to change the viewport by on either the y or x axis) determined by the offset (the cursor’s y or x offset position.

Parameters:

  • offset (Fixnum)

    The cursor’s oy or ox values.

  • dimension (Fixnum)

    Either the height or width.

Returns:

  • (Fixnum)


94
95
96
97
98
# File 'lib/vedeu/output/viewport.rb', line 94

def content_offset(offset, dimension)
  return 0 unless offset >= dimension

  offset - dimension
end

#cursorVedeu::Cursors::Cursor (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the named cursor from the cursors repository.



101
102
103
# File 'lib/vedeu/output/viewport.rb', line 101

def cursor
  Vedeu.cursors.by_name(name)
end

#geometryVedeu::Geometries::Geometry (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the named geometry from the geometries repository.



106
107
108
# File 'lib/vedeu/output/viewport.rb', line 106

def geometry
  Vedeu.geometries.by_name(name)
end

#leftFixnum (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Fixnum)


111
112
113
# File 'lib/vedeu/output/viewport.rb', line 111

def left
  content_offset(ox, bordered_width)
end

#outputArray<Array<Vedeu::Cells::Char>> (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/vedeu/output/viewport.rb', line 116

def output
  Vedeu.timer("Rendering content: '#{name}'") do
    out = []

    show.each_with_index do |line, iy|
      line.each_with_index do |column, ix|
        column.position = [by + iy, bx + ix]
        out << column
      end
    end

    out
  end
end

#renderArray<Array<String>>|NilClass

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the content for the view.

Returns:

  • (Array<Array<String>>|NilClass)


52
53
54
# File 'lib/vedeu/output/viewport.rb', line 52

def render
  Vedeu.render_output(output) if visible?
end

#rowsRange (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

The height is reduced by one as #rows is a range of Array elements.

Using the current cursor’s y position, return a range of visible lines.

Scrolls the content vertically when the stored cursor’s y position for the interface is outside of the visible area.

Returns:

  • (Range)


142
143
144
# File 'lib/vedeu/output/viewport.rb', line 142

def rows
  top...(top + bordered_height)
end

#showArray (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

If there are no lines of content, we return an empty array. If there are no more columns of content we return a space enclosed in an array; this prevents a weird line hopping bug which occurs when the current line has no more content, but subsequent lines do.

Returns the visible content for the view.

Returns:

  • (Array)


155
156
157
# File 'lib/vedeu/output/viewport.rb', line 155

def show
  (lines[rows] || []).map { |line| (line.chars[columns] || []) }
end

#to_sString Also known as: to_str

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a string representation of the viewport.

Returns:

  • (String)


59
60
61
# File 'lib/vedeu/output/viewport.rb', line 59

def to_s
  Array(render).map(&:to_s).join("\n")
end

#topFixnum (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Fixnum)


160
161
162
# File 'lib/vedeu/output/viewport.rb', line 160

def top
  content_offset(oy, bordered_height)
end