2 * Jexer - Java Text User Interface
4 * The MIT License (MIT)
6 * Copyright (C) 2019 Kevin Lamonte
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
29 package jexer
.tterminal
;
31 import jexer
.bits
.Cell
;
32 import jexer
.bits
.CellAttributes
;
35 * This represents a single line of the display buffer.
37 public class DisplayLine
{
39 // ------------------------------------------------------------------------
40 // Constants --------------------------------------------------------------
41 // ------------------------------------------------------------------------
44 * Maximum line length.
46 private static final int MAX_LINE_LENGTH
= 256;
48 // ------------------------------------------------------------------------
49 // Variables --------------------------------------------------------------
50 // ------------------------------------------------------------------------
53 * The characters/attributes of the line.
55 private Cell
[] chars
;
58 * Double-width line flag.
60 private boolean doubleWidth
= false;
63 * Double height line flag. Valid values are:
67 * 1 = top half double height
68 * 2 = bottom half double height
71 private int doubleHeight
= 0;
74 * DECSCNM - reverse video. We copy the flag to the line so that
75 * reverse-mode scrollback lines still show inverted colors correctly.
77 private boolean reverseColor
= false;
79 // ------------------------------------------------------------------------
80 // Constructors -----------------------------------------------------------
81 // ------------------------------------------------------------------------
84 * Public constructor sets everything to drawing attributes.
86 * @param attr current drawing attributes
88 public DisplayLine(final CellAttributes attr
) {
89 chars
= new Cell
[MAX_LINE_LENGTH
];
90 for (int i
= 0; i
< chars
.length
; i
++) {
91 chars
[i
] = new Cell();
96 // ------------------------------------------------------------------------
97 // DisplayLine ------------------------------------------------------------
98 // ------------------------------------------------------------------------
101 * Get the Cell at a specific column.
103 * @param idx the character index
106 public Cell
charAt(final int idx
) {
111 * Get the length of this line.
113 * @return line length
115 public int length() {
120 * Get double width flag.
122 * @return double width
124 public boolean isDoubleWidth() {
129 * Set double width flag.
131 * @param doubleWidth new value for double width flag
133 public void setDoubleWidth(final boolean doubleWidth
) {
134 this.doubleWidth
= doubleWidth
;
138 * Get double height flag.
140 * @return double height
142 public int getDoubleHeight() {
147 * Set double height flag.
149 * @param doubleHeight new value for double height flag
151 public void setDoubleHeight(final int doubleHeight
) {
152 this.doubleHeight
= doubleHeight
;
156 * Get reverse video flag.
158 * @return reverse video
160 public boolean isReverseColor() {
165 * Set double-height flag.
167 * @param reverseColor new value for reverse video flag
169 public void setReverseColor(final boolean reverseColor
) {
170 this.reverseColor
= reverseColor
;
174 * Insert a character at the specified position.
176 * @param idx the character index
177 * @param newCell the new Cell
179 public void insert(final int idx
, final Cell newCell
) {
180 System
.arraycopy(chars
, idx
, chars
, idx
+ 1, chars
.length
- idx
- 1);
181 chars
[idx
] = new Cell();
182 chars
[idx
].setTo(newCell
);
186 * Replace character at the specified position.
188 * @param idx the character index
189 * @param newCell the new Cell
191 public void replace(final int idx
, final Cell newCell
) {
192 chars
[idx
].setTo(newCell
);
196 * Set the Cell at the specified position to the blank (reset).
198 * @param idx the character index
200 public void setBlank(final int idx
) {
205 * Set the character (just the char, not the attributes) at the specified
208 * @param idx the character index
209 * @param ch the new char
211 public void setChar(final int idx
, final char ch
) {
212 chars
[idx
].setChar(ch
);
216 * Set the attributes (just the attributes, not the char) at the
217 * specified position to attr.
219 * @param idx the character index
220 * @param attr the new attributes
222 public void setAttr(final int idx
, final CellAttributes attr
) {
223 chars
[idx
].setAttr(attr
);
227 * Delete character at the specified position, filling in the new
228 * character on the right with newCell.
230 * @param idx the character index
231 * @param newCell the new Cell
233 public void delete(final int idx
, final Cell newCell
) {
234 System
.arraycopy(chars
, idx
+ 1, chars
, idx
, chars
.length
- idx
- 1);
235 chars
[chars
.length
- 1] = new Cell();
236 chars
[chars
.length
- 1].setTo(newCell
);