X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Ftterminal%2FDisplayLine.java;h=06a05a330ddccb50cc3ecf142cea0c4c87c38df9;hb=12b90437b5f22c2ae6e9b9b14c3b62b60f6143e5;hp=3f2cfd75b5a0685b59c3e56ba7bd0327e9a41481;hpb=34a42e784bf1238c6bb2847c52d7c841fcfdef5f;p=nikiroo-utils.git diff --git a/src/jexer/tterminal/DisplayLine.java b/src/jexer/tterminal/DisplayLine.java index 3f2cfd7..06a05a3 100644 --- a/src/jexer/tterminal/DisplayLine.java +++ b/src/jexer/tterminal/DisplayLine.java @@ -1,29 +1,27 @@ -/** +/* * Jexer - Java Text User Interface * - * License: LGPLv3 or later - * - * This module is licensed under the GNU Lesser General Public License - * Version 3. Please see the file "COPYING" in this directory for more - * information about the GNU Lesser General Public License Version 3. + * The MIT License (MIT) * - * Copyright (C) 2015 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 3 of - * the License, or (at your option) any later version. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, see - * http://www.gnu.org/licenses/, or write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * @author Kevin Lamonte [kevin.lamonte@gmail.com] * @version 1 @@ -36,17 +34,83 @@ import jexer.bits.CellAttributes; /** * This represents a single line of the display buffer. */ -public final class DisplayLine { +public class DisplayLine { + + // ------------------------------------------------------------------------ + // Constants -------------------------------------------------------------- + // ------------------------------------------------------------------------ + /** * Maximum line length. */ private static final int MAX_LINE_LENGTH = 256; + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ + /** * The characters/attributes of the line. */ private Cell [] chars; + /** + * Double-width line flag. + */ + private boolean doubleWidth = false; + + /** + * Double height line flag. Valid values are: + * + *

+     *   0 = single height
+     *   1 = top half double height
+     *   2 = bottom half double height
+     * 
+ */ + private int doubleHeight = 0; + + /** + * DECSCNM - reverse video. We copy the flag to the line so that + * reverse-mode scrollback lines still show inverted colors correctly. + */ + private boolean reverseColor = false; + + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * Public constructor makes a duplicate (deep copy). + * + * @param line the line to duplicate + */ + public DisplayLine(final DisplayLine line) { + chars = new Cell[MAX_LINE_LENGTH]; + for (int i = 0; i < chars.length; i++) { + chars[i] = new Cell(line.chars[i]); + } + doubleWidth = line.doubleWidth; + doubleHeight = line.doubleHeight; + reverseColor = line.reverseColor; + } + + /** + * Public constructor sets everything to drawing attributes. + * + * @param attr current drawing attributes + */ + public DisplayLine(final CellAttributes attr) { + chars = new Cell[MAX_LINE_LENGTH]; + for (int i = 0; i < chars.length; i++) { + chars[i] = new Cell(attr); + } + } + + // ------------------------------------------------------------------------ + // DisplayLine ------------------------------------------------------------ + // ------------------------------------------------------------------------ + /** * Get the Cell at a specific column. * @@ -66,11 +130,6 @@ public final class DisplayLine { return chars.length; } - /** - * Double-width line flag. - */ - private boolean doubleWidth = false; - /** * Get double width flag. * @@ -89,17 +148,6 @@ public final class DisplayLine { this.doubleWidth = doubleWidth; } - /** - * Double height line flag. Valid values are: - * - *

-     *   0 = single height
-     *   1 = top half double height
-     *   2 = bottom half double height
-     * 
- */ - private int doubleHeight = 0; - /** * Get double height flag. * @@ -118,12 +166,6 @@ public final class DisplayLine { this.doubleHeight = doubleHeight; } - /** - * DECSCNM - reverse video. We copy the flag to the line so that - * reverse-mode scrollback lines still show inverted colors correctly. - */ - private boolean reverseColor = false; - /** * Get reverse video flag. * @@ -142,19 +184,6 @@ public final class DisplayLine { this.reverseColor = reverseColor; } - /** - * Public constructor sets everything to drawing attributes. - * - * @param attr current drawing attributes - */ - public DisplayLine(final CellAttributes attr) { - chars = new Cell[MAX_LINE_LENGTH]; - for (int i = 0; i < chars.length; i++) { - chars[i] = new Cell(); - chars[i].setTo(attr); - } - } - /** * Insert a character at the specified position. * @@ -163,7 +192,7 @@ public final class DisplayLine { */ public void insert(final int idx, final Cell newCell) { System.arraycopy(chars, idx, chars, idx + 1, chars.length - idx - 1); - chars[idx] = newCell; + chars[idx] = new Cell(newCell); } /** @@ -173,7 +202,7 @@ public final class DisplayLine { * @param newCell the new Cell */ public void replace(final int idx, final Cell newCell) { - chars[idx] = newCell; + chars[idx].setTo(newCell); } /** @@ -192,7 +221,7 @@ public final class DisplayLine { * @param idx the character index * @param ch the new char */ - public void setChar(final int idx, final char ch) { + public void setChar(final int idx, final int ch) { chars[idx].setChar(ch); } @@ -208,15 +237,15 @@ public final class DisplayLine { } /** - * Delete character at the specified position, filling in new characters - * on the right with newCell. + * Delete character at the specified position, filling in the new + * character on the right with newCell. * * @param idx the character index * @param newCell the new Cell */ public void delete(final int idx, final Cell newCell) { System.arraycopy(chars, idx + 1, chars, idx, chars.length - idx - 1); - chars[chars.length - 1] = newCell; + chars[chars.length - 1] = new Cell(newCell); } }