75e2dfdd1f9a52e8444dde369cdd920a7b52b386
2 * Jexer - Java Text User Interface
4 * The MIT License (MIT)
6 * Copyright (C) 2016 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 final class DisplayLine
{
39 * Maximum line length.
41 private static final int MAX_LINE_LENGTH
= 256;
44 * The characters/attributes of the line.
46 private Cell
[] chars
;
49 * Get the Cell at a specific column.
51 * @param idx the character index
54 public Cell
charAt(final int idx
) {
59 * Get the length of this line.
68 * Double-width line flag.
70 private boolean doubleWidth
= false;
73 * Get double width flag.
75 * @return double width
77 public boolean isDoubleWidth() {
82 * Set double width flag.
84 * @param doubleWidth new value for double width flag
86 public void setDoubleWidth(final boolean doubleWidth
) {
87 this.doubleWidth
= doubleWidth
;
91 * Double height line flag. Valid values are:
95 * 1 = top half double height
96 * 2 = bottom half double height
99 private int doubleHeight
= 0;
102 * Get double height flag.
104 * @return double height
106 public int getDoubleHeight() {
111 * Set double height flag.
113 * @param doubleHeight new value for double height flag
115 public void setDoubleHeight(final int doubleHeight
) {
116 this.doubleHeight
= doubleHeight
;
120 * DECSCNM - reverse video. We copy the flag to the line so that
121 * reverse-mode scrollback lines still show inverted colors correctly.
123 private boolean reverseColor
= false;
126 * Get reverse video flag.
128 * @return reverse video
130 public boolean isReverseColor() {
135 * Set double-height flag.
137 * @param reverseColor new value for reverse video flag
139 public void setReverseColor(final boolean reverseColor
) {
140 this.reverseColor
= reverseColor
;
144 * Public constructor sets everything to drawing attributes.
146 * @param attr current drawing attributes
148 public DisplayLine(final CellAttributes attr
) {
149 chars
= new Cell
[MAX_LINE_LENGTH
];
150 for (int i
= 0; i
< chars
.length
; i
++) {
151 chars
[i
] = new Cell();
152 chars
[i
].setTo(attr
);
157 * Insert a character at the specified position.
159 * @param idx the character index
160 * @param newCell the new Cell
162 public void insert(final int idx
, final Cell newCell
) {
163 System
.arraycopy(chars
, idx
, chars
, idx
+ 1, chars
.length
- idx
- 1);
164 chars
[idx
] = newCell
;
168 * Replace character at the specified position.
170 * @param idx the character index
171 * @param newCell the new Cell
173 public void replace(final int idx
, final Cell newCell
) {
174 chars
[idx
].setTo(newCell
);
178 * Set the Cell at the specified position to the blank (reset).
180 * @param idx the character index
182 public void setBlank(final int idx
) {
187 * Set the character (just the char, not the attributes) at the specified
190 * @param idx the character index
191 * @param ch the new char
193 public void setChar(final int idx
, final char ch
) {
194 chars
[idx
].setChar(ch
);
198 * Set the attributes (just the attributes, not the char) at the
199 * specified position to attr.
201 * @param idx the character index
202 * @param attr the new attributes
204 public void setAttr(final int idx
, final CellAttributes attr
) {
205 chars
[idx
].setAttr(attr
);
209 * Delete character at the specified position, filling in the new
210 * character on the right with newCell.
212 * @param idx the character index
213 * @param newCell the new Cell
215 public void delete(final int idx
, final Cell newCell
) {
216 System
.arraycopy(chars
, idx
+ 1, chars
, idx
, chars
.length
- idx
- 1);
217 chars
[chars
.length
- 1] = newCell
;