X-Git-Url: https://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcom%2Fgooglecode%2Flanterna%2FTextColor.java;fp=src%2Fcom%2Fgooglecode%2Flanterna%2FTextColor.java;h=0000000000000000000000000000000000000000;hb=f06c81000632cfb5f525ca458f719338f55f9f66;hp=3a2ea7001fbdfabc742c65a9967ee6b210087d81;hpb=a73a906356c971b080c36368e71a15d87e8b8d31;p=jvcard.git
diff --git a/src/com/googlecode/lanterna/TextColor.java b/src/com/googlecode/lanterna/TextColor.java
deleted file mode 100644
index 3a2ea70..0000000
--- a/src/com/googlecode/lanterna/TextColor.java
+++ /dev/null
@@ -1,585 +0,0 @@
-/*
- * This file is part of lanterna (http://code.google.com/p/lanterna/).
- *
- * lanterna 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.
- *
- * 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 Lesser 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
- * For more information, see http://en.wikipedia.org/wiki/File:Ansi.png
- */
- enum ANSI implements TextColor {
- BLACK((byte)0, 0, 0, 0),
- RED((byte)1, 170, 0, 0),
- GREEN((byte)2, 0, 170, 0),
- YELLOW((byte)3, 170, 85, 0),
- BLUE((byte)4, 0, 0, 170),
- MAGENTA((byte)5, 170, 0, 170),
- CYAN((byte)6, 0, 170, 170),
- WHITE((byte)7, 170, 170, 170),
- DEFAULT((byte)9, 0, 0, 0);
-
- private final byte index;
- private final Color color;
-
- ANSI(byte index, int red, int green, int blue) {
- this.index = index;
- this.color = new Color(red, green, blue);
- }
-
- @Override
- public byte[] getForegroundSGRSequence() {
- return new byte[] { (byte)'3', (byte)(48 + index)}; //48 is ascii code for '0'
- }
-
- @Override
- public byte[] getBackgroundSGRSequence() {
- return new byte[] { (byte)'4', (byte)(48 + index)}; //48 is ascii code for '0'
- }
-
- @Override
- public Color toColor() {
- return color;
- }
- }
-
- /**
- * This class represents a color expressed in the indexed XTerm 256 color extension, where each color is defined in a
- * lookup-table. All in all, there are 256 codes, but in order to know which one to know you either need to have the
- * table at hand, or you can use the two static helper methods which can help you convert from three 8-bit
- * RGB values to the closest approximate indexed color number. If you are interested, the 256 index values are
- * actually divided like this:
- * 0 .. 15 - System colors, same as ANSI, but the actual rendered color depends on the terminal emulators color scheme
- * 16 .. 231 - Forms a 6x6x6 RGB color cube
- * 232 .. 255 - A gray scale ramp (without black and white endpoints)
- *
- * Support for indexed colors is somewhat widely adopted, not as much as the ANSI colors (TextColor.ANSI) but more - * than the RGB (TextColor.RGB). - *
- * For more details on this, please see - * this commit message to Konsole. - */ - class Indexed implements TextColor { - private static final byte[][] COLOR_TABLE = new byte[][] { - //These are the standard 16-color VGA palette entries - {(byte)0,(byte)0,(byte)0 }, - {(byte)170,(byte)0,(byte)0 }, - {(byte)0,(byte)170,(byte)0 }, - {(byte)170,(byte)85,(byte)0 }, - {(byte)0,(byte)0,(byte)170 }, - {(byte)170,(byte)0,(byte)170 }, - {(byte)0,(byte)170,(byte)170 }, - {(byte)170,(byte)170,(byte)170 }, - {(byte)85,(byte)85,(byte)85 }, - {(byte)255,(byte)85,(byte)85 }, - {(byte)85,(byte)255,(byte)85 }, - {(byte)255,(byte)255,(byte)85 }, - {(byte)85,(byte)85,(byte)255 }, - {(byte)255,(byte)85,(byte)255 }, - {(byte)85,(byte)255,(byte)255 }, - {(byte)255,(byte)255,(byte)255 }, - - //Starting 6x6x6 RGB color cube from 16 - {(byte)0x00,(byte)0x00,(byte)0x00 }, - {(byte)0x00,(byte)0x00,(byte)0x5f }, - {(byte)0x00,(byte)0x00,(byte)0x87 }, - {(byte)0x00,(byte)0x00,(byte)0xaf }, - {(byte)0x00,(byte)0x00,(byte)0xd7 }, - {(byte)0x00,(byte)0x00,(byte)0xff }, - {(byte)0x00,(byte)0x5f,(byte)0x00 }, - {(byte)0x00,(byte)0x5f,(byte)0x5f }, - {(byte)0x00,(byte)0x5f,(byte)0x87 }, - {(byte)0x00,(byte)0x5f,(byte)0xaf }, - {(byte)0x00,(byte)0x5f,(byte)0xd7 }, - {(byte)0x00,(byte)0x5f,(byte)0xff }, - {(byte)0x00,(byte)0x87,(byte)0x00 }, - {(byte)0x00,(byte)0x87,(byte)0x5f }, - {(byte)0x00,(byte)0x87,(byte)0x87 }, - {(byte)0x00,(byte)0x87,(byte)0xaf }, - {(byte)0x00,(byte)0x87,(byte)0xd7 }, - {(byte)0x00,(byte)0x87,(byte)0xff }, - {(byte)0x00,(byte)0xaf,(byte)0x00 }, - {(byte)0x00,(byte)0xaf,(byte)0x5f }, - {(byte)0x00,(byte)0xaf,(byte)0x87 }, - {(byte)0x00,(byte)0xaf,(byte)0xaf }, - {(byte)0x00,(byte)0xaf,(byte)0xd7 }, - {(byte)0x00,(byte)0xaf,(byte)0xff }, - {(byte)0x00,(byte)0xd7,(byte)0x00 }, - {(byte)0x00,(byte)0xd7,(byte)0x5f }, - {(byte)0x00,(byte)0xd7,(byte)0x87 }, - {(byte)0x00,(byte)0xd7,(byte)0xaf }, - {(byte)0x00,(byte)0xd7,(byte)0xd7 }, - {(byte)0x00,(byte)0xd7,(byte)0xff }, - {(byte)0x00,(byte)0xff,(byte)0x00 }, - {(byte)0x00,(byte)0xff,(byte)0x5f }, - {(byte)0x00,(byte)0xff,(byte)0x87 }, - {(byte)0x00,(byte)0xff,(byte)0xaf }, - {(byte)0x00,(byte)0xff,(byte)0xd7 }, - {(byte)0x00,(byte)0xff,(byte)0xff }, - {(byte)0x5f,(byte)0x00,(byte)0x00 }, - {(byte)0x5f,(byte)0x00,(byte)0x5f }, - {(byte)0x5f,(byte)0x00,(byte)0x87 }, - {(byte)0x5f,(byte)0x00,(byte)0xaf }, - {(byte)0x5f,(byte)0x00,(byte)0xd7 }, - {(byte)0x5f,(byte)0x00,(byte)0xff }, - {(byte)0x5f,(byte)0x5f,(byte)0x00 }, - {(byte)0x5f,(byte)0x5f,(byte)0x5f }, - {(byte)0x5f,(byte)0x5f,(byte)0x87 }, - {(byte)0x5f,(byte)0x5f,(byte)0xaf }, - {(byte)0x5f,(byte)0x5f,(byte)0xd7 }, - {(byte)0x5f,(byte)0x5f,(byte)0xff }, - {(byte)0x5f,(byte)0x87,(byte)0x00 }, - {(byte)0x5f,(byte)0x87,(byte)0x5f }, - {(byte)0x5f,(byte)0x87,(byte)0x87 }, - {(byte)0x5f,(byte)0x87,(byte)0xaf }, - {(byte)0x5f,(byte)0x87,(byte)0xd7 }, - {(byte)0x5f,(byte)0x87,(byte)0xff }, - {(byte)0x5f,(byte)0xaf,(byte)0x00 }, - {(byte)0x5f,(byte)0xaf,(byte)0x5f }, - {(byte)0x5f,(byte)0xaf,(byte)0x87 }, - {(byte)0x5f,(byte)0xaf,(byte)0xaf }, - {(byte)0x5f,(byte)0xaf,(byte)0xd7 }, - {(byte)0x5f,(byte)0xaf,(byte)0xff }, - {(byte)0x5f,(byte)0xd7,(byte)0x00 }, - {(byte)0x5f,(byte)0xd7,(byte)0x5f }, - {(byte)0x5f,(byte)0xd7,(byte)0x87 }, - {(byte)0x5f,(byte)0xd7,(byte)0xaf }, - {(byte)0x5f,(byte)0xd7,(byte)0xd7 }, - {(byte)0x5f,(byte)0xd7,(byte)0xff }, - {(byte)0x5f,(byte)0xff,(byte)0x00 }, - {(byte)0x5f,(byte)0xff,(byte)0x5f }, - {(byte)0x5f,(byte)0xff,(byte)0x87 }, - {(byte)0x5f,(byte)0xff,(byte)0xaf }, - {(byte)0x5f,(byte)0xff,(byte)0xd7 }, - {(byte)0x5f,(byte)0xff,(byte)0xff }, - {(byte)0x87,(byte)0x00,(byte)0x00 }, - {(byte)0x87,(byte)0x00,(byte)0x5f }, - {(byte)0x87,(byte)0x00,(byte)0x87 }, - {(byte)0x87,(byte)0x00,(byte)0xaf }, - {(byte)0x87,(byte)0x00,(byte)0xd7 }, - {(byte)0x87,(byte)0x00,(byte)0xff }, - {(byte)0x87,(byte)0x5f,(byte)0x00 }, - {(byte)0x87,(byte)0x5f,(byte)0x5f }, - {(byte)0x87,(byte)0x5f,(byte)0x87 }, - {(byte)0x87,(byte)0x5f,(byte)0xaf }, - {(byte)0x87,(byte)0x5f,(byte)0xd7 }, - {(byte)0x87,(byte)0x5f,(byte)0xff }, - {(byte)0x87,(byte)0x87,(byte)0x00 }, - {(byte)0x87,(byte)0x87,(byte)0x5f }, - {(byte)0x87,(byte)0x87,(byte)0x87 }, - {(byte)0x87,(byte)0x87,(byte)0xaf }, - {(byte)0x87,(byte)0x87,(byte)0xd7 }, - {(byte)0x87,(byte)0x87,(byte)0xff }, - {(byte)0x87,(byte)0xaf,(byte)0x00 }, - {(byte)0x87,(byte)0xaf,(byte)0x5f }, - {(byte)0x87,(byte)0xaf,(byte)0x87 }, - {(byte)0x87,(byte)0xaf,(byte)0xaf }, - {(byte)0x87,(byte)0xaf,(byte)0xd7 }, - {(byte)0x87,(byte)0xaf,(byte)0xff }, - {(byte)0x87,(byte)0xd7,(byte)0x00 }, - {(byte)0x87,(byte)0xd7,(byte)0x5f }, - {(byte)0x87,(byte)0xd7,(byte)0x87 }, - {(byte)0x87,(byte)0xd7,(byte)0xaf }, - {(byte)0x87,(byte)0xd7,(byte)0xd7 }, - {(byte)0x87,(byte)0xd7,(byte)0xff }, - {(byte)0x87,(byte)0xff,(byte)0x00 }, - {(byte)0x87,(byte)0xff,(byte)0x5f }, - {(byte)0x87,(byte)0xff,(byte)0x87 }, - {(byte)0x87,(byte)0xff,(byte)0xaf }, - {(byte)0x87,(byte)0xff,(byte)0xd7 }, - {(byte)0x87,(byte)0xff,(byte)0xff }, - {(byte)0xaf,(byte)0x00,(byte)0x00 }, - {(byte)0xaf,(byte)0x00,(byte)0x5f }, - {(byte)0xaf,(byte)0x00,(byte)0x87 }, - {(byte)0xaf,(byte)0x00,(byte)0xaf }, - {(byte)0xaf,(byte)0x00,(byte)0xd7 }, - {(byte)0xaf,(byte)0x00,(byte)0xff }, - {(byte)0xaf,(byte)0x5f,(byte)0x00 }, - {(byte)0xaf,(byte)0x5f,(byte)0x5f }, - {(byte)0xaf,(byte)0x5f,(byte)0x87 }, - {(byte)0xaf,(byte)0x5f,(byte)0xaf }, - {(byte)0xaf,(byte)0x5f,(byte)0xd7 }, - {(byte)0xaf,(byte)0x5f,(byte)0xff }, - {(byte)0xaf,(byte)0x87,(byte)0x00 }, - {(byte)0xaf,(byte)0x87,(byte)0x5f }, - {(byte)0xaf,(byte)0x87,(byte)0x87 }, - {(byte)0xaf,(byte)0x87,(byte)0xaf }, - {(byte)0xaf,(byte)0x87,(byte)0xd7 }, - {(byte)0xaf,(byte)0x87,(byte)0xff }, - {(byte)0xaf,(byte)0xaf,(byte)0x00 }, - {(byte)0xaf,(byte)0xaf,(byte)0x5f }, - {(byte)0xaf,(byte)0xaf,(byte)0x87 }, - {(byte)0xaf,(byte)0xaf,(byte)0xaf }, - {(byte)0xaf,(byte)0xaf,(byte)0xd7 }, - {(byte)0xaf,(byte)0xaf,(byte)0xff }, - {(byte)0xaf,(byte)0xd7,(byte)0x00 }, - {(byte)0xaf,(byte)0xd7,(byte)0x5f }, - {(byte)0xaf,(byte)0xd7,(byte)0x87 }, - {(byte)0xaf,(byte)0xd7,(byte)0xaf }, - {(byte)0xaf,(byte)0xd7,(byte)0xd7 }, - {(byte)0xaf,(byte)0xd7,(byte)0xff }, - {(byte)0xaf,(byte)0xff,(byte)0x00 }, - {(byte)0xaf,(byte)0xff,(byte)0x5f }, - {(byte)0xaf,(byte)0xff,(byte)0x87 }, - {(byte)0xaf,(byte)0xff,(byte)0xaf }, - {(byte)0xaf,(byte)0xff,(byte)0xd7 }, - {(byte)0xaf,(byte)0xff,(byte)0xff }, - {(byte)0xd7,(byte)0x00,(byte)0x00 }, - {(byte)0xd7,(byte)0x00,(byte)0x5f }, - {(byte)0xd7,(byte)0x00,(byte)0x87 }, - {(byte)0xd7,(byte)0x00,(byte)0xaf }, - {(byte)0xd7,(byte)0x00,(byte)0xd7 }, - {(byte)0xd7,(byte)0x00,(byte)0xff }, - {(byte)0xd7,(byte)0x5f,(byte)0x00 }, - {(byte)0xd7,(byte)0x5f,(byte)0x5f }, - {(byte)0xd7,(byte)0x5f,(byte)0x87 }, - {(byte)0xd7,(byte)0x5f,(byte)0xaf }, - {(byte)0xd7,(byte)0x5f,(byte)0xd7 }, - {(byte)0xd7,(byte)0x5f,(byte)0xff }, - {(byte)0xd7,(byte)0x87,(byte)0x00 }, - {(byte)0xd7,(byte)0x87,(byte)0x5f }, - {(byte)0xd7,(byte)0x87,(byte)0x87 }, - {(byte)0xd7,(byte)0x87,(byte)0xaf }, - {(byte)0xd7,(byte)0x87,(byte)0xd7 }, - {(byte)0xd7,(byte)0x87,(byte)0xff }, - {(byte)0xd7,(byte)0xaf,(byte)0x00 }, - {(byte)0xd7,(byte)0xaf,(byte)0x5f }, - {(byte)0xd7,(byte)0xaf,(byte)0x87 }, - {(byte)0xd7,(byte)0xaf,(byte)0xaf }, - {(byte)0xd7,(byte)0xaf,(byte)0xd7 }, - {(byte)0xd7,(byte)0xaf,(byte)0xff }, - {(byte)0xd7,(byte)0xd7,(byte)0x00 }, - {(byte)0xd7,(byte)0xd7,(byte)0x5f }, - {(byte)0xd7,(byte)0xd7,(byte)0x87 }, - {(byte)0xd7,(byte)0xd7,(byte)0xaf }, - {(byte)0xd7,(byte)0xd7,(byte)0xd7 }, - {(byte)0xd7,(byte)0xd7,(byte)0xff }, - {(byte)0xd7,(byte)0xff,(byte)0x00 }, - {(byte)0xd7,(byte)0xff,(byte)0x5f }, - {(byte)0xd7,(byte)0xff,(byte)0x87 }, - {(byte)0xd7,(byte)0xff,(byte)0xaf }, - {(byte)0xd7,(byte)0xff,(byte)0xd7 }, - {(byte)0xd7,(byte)0xff,(byte)0xff }, - {(byte)0xff,(byte)0x00,(byte)0x00 }, - {(byte)0xff,(byte)0x00,(byte)0x5f }, - {(byte)0xff,(byte)0x00,(byte)0x87 }, - {(byte)0xff,(byte)0x00,(byte)0xaf }, - {(byte)0xff,(byte)0x00,(byte)0xd7 }, - {(byte)0xff,(byte)0x00,(byte)0xff }, - {(byte)0xff,(byte)0x5f,(byte)0x00 }, - {(byte)0xff,(byte)0x5f,(byte)0x5f }, - {(byte)0xff,(byte)0x5f,(byte)0x87 }, - {(byte)0xff,(byte)0x5f,(byte)0xaf }, - {(byte)0xff,(byte)0x5f,(byte)0xd7 }, - {(byte)0xff,(byte)0x5f,(byte)0xff }, - {(byte)0xff,(byte)0x87,(byte)0x00 }, - {(byte)0xff,(byte)0x87,(byte)0x5f }, - {(byte)0xff,(byte)0x87,(byte)0x87 }, - {(byte)0xff,(byte)0x87,(byte)0xaf }, - {(byte)0xff,(byte)0x87,(byte)0xd7 }, - {(byte)0xff,(byte)0x87,(byte)0xff }, - {(byte)0xff,(byte)0xaf,(byte)0x00 }, - {(byte)0xff,(byte)0xaf,(byte)0x5f }, - {(byte)0xff,(byte)0xaf,(byte)0x87 }, - {(byte)0xff,(byte)0xaf,(byte)0xaf }, - {(byte)0xff,(byte)0xaf,(byte)0xd7 }, - {(byte)0xff,(byte)0xaf,(byte)0xff }, - {(byte)0xff,(byte)0xd7,(byte)0x00 }, - {(byte)0xff,(byte)0xd7,(byte)0x5f }, - {(byte)0xff,(byte)0xd7,(byte)0x87 }, - {(byte)0xff,(byte)0xd7,(byte)0xaf }, - {(byte)0xff,(byte)0xd7,(byte)0xd7 }, - {(byte)0xff,(byte)0xd7,(byte)0xff }, - {(byte)0xff,(byte)0xff,(byte)0x00 }, - {(byte)0xff,(byte)0xff,(byte)0x5f }, - {(byte)0xff,(byte)0xff,(byte)0x87 }, - {(byte)0xff,(byte)0xff,(byte)0xaf }, - {(byte)0xff,(byte)0xff,(byte)0xd7 }, - {(byte)0xff,(byte)0xff,(byte)0xff }, - - //Grey-scale ramp from 232 - {(byte)0x08,(byte)0x08,(byte)0x08 }, - {(byte)0x12,(byte)0x12,(byte)0x12 }, - {(byte)0x1c,(byte)0x1c,(byte)0x1c }, - {(byte)0x26,(byte)0x26,(byte)0x26 }, - {(byte)0x30,(byte)0x30,(byte)0x30 }, - {(byte)0x3a,(byte)0x3a,(byte)0x3a }, - {(byte)0x44,(byte)0x44,(byte)0x44 }, - {(byte)0x4e,(byte)0x4e,(byte)0x4e }, - {(byte)0x58,(byte)0x58,(byte)0x58 }, - {(byte)0x62,(byte)0x62,(byte)0x62 }, - {(byte)0x6c,(byte)0x6c,(byte)0x6c }, - {(byte)0x76,(byte)0x76,(byte)0x76 }, - {(byte)0x80,(byte)0x80,(byte)0x80 }, - {(byte)0x8a,(byte)0x8a,(byte)0x8a }, - {(byte)0x94,(byte)0x94,(byte)0x94 }, - {(byte)0x9e,(byte)0x9e,(byte)0x9e }, - {(byte)0xa8,(byte)0xa8,(byte)0xa8 }, - {(byte)0xb2,(byte)0xb2,(byte)0xb2 }, - {(byte)0xbc,(byte)0xbc,(byte)0xbc }, - {(byte)0xc6,(byte)0xc6,(byte)0xc6 }, - {(byte)0xd0,(byte)0xd0,(byte)0xd0 }, - {(byte)0xda,(byte)0xda,(byte)0xda }, - {(byte)0xe4,(byte)0xe4,(byte)0xe4 }, - {(byte)0xee,(byte)0xee,(byte)0xee } - }; - - private final int colorIndex; - private final Color awtColor; - - /** - * Creates a new TextColor using the XTerm 256 color indexed mode, with the specified index value. You must - * choose a value between 0 and 255. - * @param colorIndex Index value to use for this color. - */ - public Indexed(int colorIndex) { - if(colorIndex > 255 || colorIndex < 0) { - throw new IllegalArgumentException("Cannot create a Color.Indexed with a color index of " + colorIndex + - ", must be in the range of 0-255"); - } - this.colorIndex = colorIndex; - this.awtColor = new Color(COLOR_TABLE[colorIndex][0] & 0x000000ff, - COLOR_TABLE[colorIndex][1] & 0x000000ff, - COLOR_TABLE[colorIndex][2] & 0x000000ff); - } - - @Override - public byte[] getForegroundSGRSequence() { - return ("38;5;" + colorIndex).getBytes(); - } - - @Override - public byte[] getBackgroundSGRSequence() { - return ("48;5;" + colorIndex).getBytes(); - } - - @Override - public Color toColor() { - return awtColor; - } - - @Override - public String toString() { - return "{IndexedColor:" + colorIndex + "}"; - } - - @Override - public int hashCode() { - int hash = 3; - hash = 43 * hash + this.colorIndex; - return hash; - } - - @Override - public boolean equals(Object obj) { - if(obj == null) { - return false; - } - if(getClass() != obj.getClass()) { - return false; - } - final Indexed other = (Indexed) obj; - return this.colorIndex == other.colorIndex; - } - - /** - * Picks out a color approximated from the supplied RGB components - * @param red Red intensity, from 0 to 255 - * @param green Red intensity, from 0 to 255 - * @param blue Red intensity, from 0 to 255 - * @return Nearest color from the 6x6x6 RGB color cube or from the 24 entries grey-scale ramp (whichever is closest) - */ - public static Indexed fromRGB(int red, int green, int blue) { - if(red < 0 || red > 255) { - throw new IllegalArgumentException("fromRGB: red is outside of valid range (0-255)"); - } - if(green < 0 || green > 255) { - throw new IllegalArgumentException("fromRGB: green is outside of valid range (0-255)"); - } - if(blue < 0 || blue > 255) { - throw new IllegalArgumentException("fromRGB: blue is outside of valid range (0-255)"); - } - - int rescaledRed = (int)(((double)red / 255.0) * 5.0); - int rescaledGreen = (int)(((double)green / 255.0) * 5.0); - int rescaledBlue = (int)(((double)blue / 255.0) * 5.0); - - int index = rescaledBlue + (6 * rescaledGreen) + (36 * rescaledRed) + 16; - Indexed fromColorCube = new Indexed(index); - Indexed fromGreyRamp = fromGreyRamp((red + green + blue) / 3); - - //Now figure out which one is closest - Color colored = fromColorCube.toColor(); - Color grey = fromGreyRamp.toColor(); - int coloredDistance = ((red - colored.getRed()) * (red - colored.getRed())) + - ((green - colored.getGreen()) * (green - colored.getGreen())) + - ((blue - colored.getBlue()) * (blue - colored.getBlue())); - int greyDistance = ((red - grey.getRed()) * (red - grey.getRed())) + - ((green - grey.getGreen()) * (green - grey.getGreen())) + - ((blue - grey.getBlue()) * (blue - grey.getBlue())); - if(coloredDistance < greyDistance) { - return fromColorCube; - } - else { - return fromGreyRamp; - } - } - - /** - * Picks out a color from the grey-scale ramp area of the color index. - * @param intensity Intensity, 0 - 255 - * @return Indexed color from the grey-scale ramp which is the best match for the supplied intensity - */ - private static Indexed fromGreyRamp(int intensity) { - int rescaled = (int)(((double)intensity / 255.0) * 23.0) + 232; - return new Indexed(rescaled); - } - } - - /** - * This class can be used to specify a color in 24-bit color space (RGB with 8-bit resolution per color). Please be - * aware that only a few terminal support 24-bit color control codes, please avoid using this class unless you know - * all users will have compatible terminals. For details, please see - * - * this commit log. Behavior on terminals that don't support these codes is undefined. - */ - class RGB implements TextColor { - private final Color color; - - /** - * This class can be used to specify a color in 24-bit color space (RGB with 8-bit resolution per color). Please be - * aware that only a few terminal support 24-bit color control codes, please avoid using this class unless you know - * all users will have compatible terminals. For details, please see - * - * this commit log. Behavior on terminals that don't support these codes is undefined. - * - * @param r Red intensity, from 0 to 255 - * @param g Green intensity, from 0 to 255 - * @param b Blue intensity, from 0 to 255 - */ - public RGB(int r, int g, int b) { - if(r < 0 || r > 255) { - throw new IllegalArgumentException("RGB: r is outside of valid range (0-255)"); - } - if(g < 0 || g > 255) { - throw new IllegalArgumentException("RGB: g is outside of valid range (0-255)"); - } - if(b < 0 || b > 255) { - throw new IllegalArgumentException("RGB: b is outside of valid range (0-255)"); - } - this.color = new Color(r, g, b); - } - - @Override - public byte[] getForegroundSGRSequence() { - return ("38;2;" + getRed() + ";" + getGreen() + ";" + getBlue()).getBytes(); - } - - @Override - public byte[] getBackgroundSGRSequence() { - return ("48;2;" + getRed() + ";" + getGreen() + ";" + getBlue()).getBytes(); - } - - @Override - public Color toColor() { - return color; - } - - /** - * @return Red intensity of this color, from 0 to 255 - */ - public int getRed() { - return color.getRed(); - } - - /** - * @return Green intensity of this color, from 0 to 255 - */ - public int getGreen() { - return color.getGreen(); - } - - /** - * @return Blue intensity of this color, from 0 to 255 - */ - public int getBlue() { - return color.getBlue(); - } - - @Override - public String toString() { - return "{RGB:" + getRed() + "," + getGreen() + "," + getBlue() + "}"; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 29 * hash + color.hashCode(); - return hash; - } - - @SuppressWarnings("SimplifiableIfStatement") - @Override - public boolean equals(Object obj) { - if(obj == null) { - return false; - } - if(getClass() != obj.getClass()) { - return false; - } - final RGB other = (RGB) obj; - return color.equals(other.color); - } - } -}