Class: Vedeu::Output::Viewport Private
- Inherits:
-
Object
- Object
- Vedeu::Output::Viewport
- 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
- #view ⇒ Vedeu::Views::View readonly protected private
Class Method Summary collapse
Instance Method Summary collapse
-
#border ⇒ Object
private
private
Returns the border for the interface.
- #bx ⇒ Fixnum private private
- #by ⇒ Fixnum private private
-
#columns ⇒ Range
private
private
Using the current cursor’s x position, return a range of visible columns.
-
#content_offset(offset, dimension) ⇒ Fixnum
private
private
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..
- #cursor ⇒ Vedeu::Cursors::Cursor private private
-
#initialize(view) ⇒ Vedeu::Output::Viewport
constructor
private
Returns an instance of Vedeu::Output::Viewport.
- #left ⇒ Fixnum private private
- #output ⇒ Array<Array<Vedeu::Views::Char>> private private
-
#render ⇒ Array<Array<String>>|NilClass
private
Returns the content for the view.
-
#rows ⇒ Range
private
private
Using the current cursor’s y position, return a range of visible lines.
-
#show ⇒ Array
private
private
Returns the visible content for the view.
-
#to_s ⇒ String
(also: #to_str)
private
Returns a string representation of the viewport.
- #top ⇒ Fixnum private private
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 an instance of Vedeu::Output::Viewport.
41 42 43 |
# File 'lib/vedeu/output/viewport.rb', line 41 def initialize(view) @view = view end |
Instance Attribute Details
#view ⇒ Vedeu::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.
64 65 66 |
# File 'lib/vedeu/output/viewport.rb', line 64 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.
33 34 35 |
# File 'lib/vedeu/output/viewport.rb', line 33 def self.render(view) new(view).render end |
Instance Method Details
#border ⇒ Object (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 border for the interface.
153 154 155 |
# File 'lib/vedeu/output/viewport.rb', line 153 def border @border ||= Vedeu.borders.by_name(name) end |
#bx ⇒ 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.
158 159 160 |
# File 'lib/vedeu/output/viewport.rb', line 158 def bx @bx ||= border.bx end |
#by ⇒ 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.
163 164 165 |
# File 'lib/vedeu/output/viewport.rb', line 163 def by @by ||= border.by end |
#columns ⇒ Range (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.
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.
123 124 125 |
# File 'lib/vedeu/output/viewport.rb', line 123 def columns left...(left + 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.
144 145 146 147 148 |
# File 'lib/vedeu/output/viewport.rb', line 144 def content_offset(offset, dimension) return 0 unless offset >= dimension offset - dimension end |
#cursor ⇒ Vedeu::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.
169 170 171 |
# File 'lib/vedeu/output/viewport.rb', line 169 def cursor @cursor ||= Vedeu.cursors.by_name(name) end |
#left ⇒ 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.
128 129 130 |
# File 'lib/vedeu/output/viewport.rb', line 128 def left @left ||= content_offset(ox, width) end |
#output ⇒ Array<Array<Vedeu::Views::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.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/vedeu/output/viewport.rb', line 69 def output Vedeu.timer("Rendering content: '#{name}'".freeze) 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 |
#render ⇒ 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.
Returns the content for the view.
48 49 50 |
# File 'lib/vedeu/output/viewport.rb', line 48 def render Vedeu.render_output(output) if visible? end |
#rows ⇒ Range (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.
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.
108 109 110 |
# File 'lib/vedeu/output/viewport.rb', line 108 def rows top...(top + height) end |
#show ⇒ Array (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.
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.
93 94 95 |
# File 'lib/vedeu/output/viewport.rb', line 93 def show (lines[rows] || []).map { |line| (line.chars[columns] || []) } end |
#to_s ⇒ String 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.
55 56 57 |
# File 'lib/vedeu/output/viewport.rb', line 55 def to_s Array(render).map(&:to_s).join("\n".freeze) end |
#top ⇒ 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.
133 134 135 |
# File 'lib/vedeu/output/viewport.rb', line 133 def top @top ||= content_offset(oy, height) end |