X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fbits%2FColor.java;h=4defed5cfad7b35af25e901f2a165612b037fb71;hb=cfdaf6052ddc5ca44cf19f1f6d9f154cc8443024;hp=dd3b93de18c72dd2005e1a5bd01e45f02aca7f77;hpb=4328bb42c10743287dad5cf045f059ad109eb540;p=fanfix.git diff --git a/src/jexer/bits/Color.java b/src/jexer/bits/Color.java index dd3b93d..4defed5 100644 --- a/src/jexer/bits/Color.java +++ b/src/jexer/bits/Color.java @@ -1,141 +1,272 @@ -/** +/* * Jexer - Java Text User Interface * - * Version: $Id$ - * - * Author: Kevin Lamonte, kevin.lamonte@gmail.com + * The MIT License (MIT) * - * License: LGPLv3 or later + * Copyright (C) 2019 Kevin Lamonte * - * Copyright: 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. + * 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: * - * Copyright (C) 2015 Kevin Lamonte + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * 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. + * 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. * - * 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. - * - * 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 + * @author Kevin Lamonte [kevin.lamonte@gmail.com] + * @version 1 */ package jexer.bits; /** * A text cell color. */ -public class Color { +public final class Color { + + // ------------------------------------------------------------------------ + // Constants -------------------------------------------------------------- + // ------------------------------------------------------------------------ /** - * The color value. Default is WHITE. + * SGR black value = 0. */ - public int value = 7; + private static final int SGRBLACK = 0; /** - * Public constructor + * SGR red value = 1. */ - public Color(int value) { - this.value = value; - } + private static final int SGRRED = 1; + + /** + * SGR green value = 2. + */ + private static final int SGRGREEN = 2; + + /** + * SGR yellow value = 3. + */ + private static final int SGRYELLOW = 3; + + /** + * SGR blue value = 4. + */ + private static final int SGRBLUE = 4; - // The color integer values. NOT EXPOSED. - static private final int black = 0; - static private final int red = 1; - static private final int green = 2; - static private final int yellow = 3; - static private final int blue = 4; - static private final int magenta = 5; - static private final int cyan = 6; - static private final int white = 7; + /** + * SGR magenta value = 5. + */ + private static final int SGRMAGENTA = 5; + + /** + * SGR cyan value = 6. + */ + private static final int SGRCYAN = 6; + + /** + * SGR white value = 7. + */ + private static final int SGRWHITE = 7; /** * Black. Bold + black = dark grey */ - static public final Color BLACK = new Color(black); + public static final Color BLACK = new Color(SGRBLACK); /** - * Red + * Red. */ - static public final Color RED = new Color(red); + public static final Color RED = new Color(SGRRED); /** - * Green + * Green. */ - static public final Color GREEN = new Color(green); + public static final Color GREEN = new Color(SGRGREEN); /** * Yellow. Sometimes not-bold yellow is brown. */ - static public final Color YELLOW = new Color(yellow); + public static final Color YELLOW = new Color(SGRYELLOW); + + /** + * Blue. + */ + public static final Color BLUE = new Color(SGRBLUE); + + /** + * Magenta (purple). + */ + public static final Color MAGENTA = new Color(SGRMAGENTA); /** - * Blue + * Cyan (blue-green). */ - static public final Color BLUE = new Color(blue); + public static final Color CYAN = new Color(SGRCYAN); /** - * Magenta (purple) + * White. */ - static public final Color MAGENTA = new Color(magenta); + public static final Color WHITE = new Color(SGRWHITE); + + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * The color value. Default is SGRWHITE. + */ + private int value = SGRWHITE; + + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ /** - * Cyan (blue-green) + * Private constructor used to make the static Color instances. + * + * @param value the integer Color value */ - static public final Color CYAN = new Color(cyan); + private Color(final int value) { + this.value = value; + } + + // ------------------------------------------------------------------------ + // Color ------------------------------------------------------------------ + // ------------------------------------------------------------------------ + + /** + * Get color value. Note that these deliberately match the color values + * of the ECMA-48 / ANSI X3.64 / VT100-ish SGR function ("ANSI colors"). + * + * @return the value + */ + public int getValue() { + return value; + } /** - * White + * Public constructor returns one of the static Color instances. + * + * @param colorName "red", "blue", etc. + * @return Color.RED, Color.BLUE, etc. */ - static public final Color WHITE = new Color(white); + static Color getColor(final String colorName) { + String str = colorName.toLowerCase(); + + if (str.equals("black")) { + return Color.BLACK; + } else if (str.equals("white")) { + return Color.WHITE; + } else if (str.equals("red")) { + return Color.RED; + } else if (str.equals("cyan")) { + return Color.CYAN; + } else if (str.equals("green")) { + return Color.GREEN; + } else if (str.equals("magenta")) { + return Color.MAGENTA; + } else if (str.equals("blue")) { + return Color.BLUE; + } else if (str.equals("yellow")) { + return Color.YELLOW; + } else if (str.equals("brown")) { + return Color.YELLOW; + } else { + // Let unknown strings become white + return Color.WHITE; + } + } /** * Invert a color in the same way as (CGA/VGA color XOR 0x7). + * * @return the inverted color */ public Color invert() { - switch (value) { - case black: - return Color.WHITE; - case white: - return Color.BLACK; - case red: - return Color.CYAN; - case cyan: - return Color.RED; - case green: - return Color.MAGENTA; - case magenta: - return Color.GREEN; - case blue: - return Color.YELLOW; - case yellow: - return Color.BLUE; - } - throw new IllegalArgumentException("Invalid Color value: " + - value); + switch (value) { + case SGRBLACK: + return Color.WHITE; + case SGRWHITE: + return Color.BLACK; + case SGRRED: + return Color.CYAN; + case SGRCYAN: + return Color.RED; + case SGRGREEN: + return Color.MAGENTA; + case SGRMAGENTA: + return Color.GREEN; + case SGRBLUE: + return Color.YELLOW; + case SGRYELLOW: + return Color.BLUE; + default: + throw new IllegalArgumentException("Invalid Color value: " + value); + } } /** - * Comparison. All fields must match to return true. + * Comparison check. All fields must match to return true. + * + * @param rhs another Color instance + * @return true if all fields are equal */ @Override - public boolean equals(Object rhs) { - if (!(rhs instanceof Color)) { - return false; - } + public boolean equals(final Object rhs) { + if (!(rhs instanceof Color)) { + return false; + } + + Color that = (Color) rhs; + return (value == that.value); + } - Color that = (Color)rhs; - return (value == that.value); + /** + * Hashcode uses all fields in equals(). + * + * @return the hash + */ + @Override + public int hashCode() { + return value; } + + /** + * Make human-readable description of this Color. + * + * @return displayable String "red", "blue", etc. + */ + @Override + public String toString() { + switch (value) { + case SGRBLACK: + return "black"; + case SGRWHITE: + return "white"; + case SGRRED: + return "red"; + case SGRCYAN: + return "cyan"; + case SGRGREEN: + return "green"; + case SGRMAGENTA: + return "magenta"; + case SGRBLUE: + return "blue"; + case SGRYELLOW: + return "yellow"; + default: + throw new IllegalArgumentException("Invalid Color value: " + value); + } + } + }