1 /* 2 * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.scene.paint; 27 28 import javafx.animation.Interpolatable; 29 import java.util.HashMap; 30 import java.util.Locale; 31 import java.util.Map; 32 import com.sun.javafx.util.Utils; 33 import com.sun.javafx.tk.Toolkit; 34 import javafx.beans.NamedArg; 35 36 // NOTE: this definition, while correct, contains a lot of information which 37 // is irrelevant to most developers. We should get to the basic definition and 38 // usage patterns sooner. 39 40 /** 41 * The Color class is used to encapsulate colors in the default sRGB color space. 42 * Every color has an implicit alpha value of 1.0 or an explicit one provided 43 * in the constructor. The alpha value defines the transparency of a color 44 * and can be represented by a double value in the range 0.0-1.0 or 0-255. 45 * An alpha value of 1.0 or 255 means that the color is completely opaque 46 * and an alpha value of 0 or 0.0 means that the color is completely transparent. 47 * When constructing a {@code Color} with an explicit alpha or getting 48 * the color/alpha components of a Color, 49 * the color components are never premultiplied by the alpha component. 50 * </p> 51 * 52 * <p>{@code Color}s can be created with the constructor or with one of several 53 * utility methods. The following lines of code all create the same 54 * blue color:</p> 55 * 56 * <pre><code> 57 * Color c = Color.BLUE; //use the blue constant 58 * Color c = new Color(0,0,1,1.0); // standard constructor, use 0->1.0 values, explicit alpha of 1.0 59 * 60 * Color c = Color.color(0,0,1.0); //use 0->1.0 values. implicit alpha of 1.0 61 * Color c = Color.color(0,0,1.0,1.0); //use 0->1.0 values, explicit alpha of 1.0 62 * 63 * Color c = Color.rgb(0,0,255); //use 0->255 integers, implicit alpha of 1.0 64 * Color c = Color.rgb(0,0,255,1.0); //use 0->255 integers, explicit alpha of 1.0 65 * 66 * Color c = Color.hsb(270,1.0,1.0); //hue = 270, saturation & value = 1.0. inplicit alpha of 1.0 67 * Color c = Color.hsb(270,1.0,1.0,1.0); //hue = 270, saturation & value = 1.0, explicit alpha of 1.0 68 * 69 * Color c = Color.web("0x0000FF",1.0);// blue as a hex web value, explicit alpha 70 * Color c = Color.web("0x0000FF");// blue as a hex web value, implicit alpha 71 * Color c = Color.web("0x00F");// blue as a short hex web value, implicit alpha 72 * Color c = Color.web("#0000FF",1.0);// blue as a hex web value, explicit alpha 73 * Color c = Color.web("#0000FF");// blue as a hex web value, implicit alpha 74 * Color c = Color.web("#00F");// blue as a short hex web value, implicit alpha 75 * Color c = Color.web("0000FF",1.0);// blue as a hex web value, explicit alpha 76 * Color c = Color.web("0000FF");// blue as a hex web value, implicit alpha 77 * Color c = Color.web("00F");// blue as a short hex web value, implicit alpha 78 * Color c = Color.web("rgba(0,0,255,1.0)");// blue as an rgb web value, explicit alpha 79 * Color c = Color.web("rgb(0,0,255)");// blue as an rgb web value, implicit alpha 80 * Color c = Color.web("rgba(0,0,100%,1.0)");// blue as an rgb percent web value, explicit alpha 81 * Color c = Color.web("rgb(0,0,100%)");// blue as an rgb percent web value, implicit alpha 82 * Color c = Color.web("hsla(270,100%,100%,1.0)");// blue as an hsl web value, explicit alpha 83 * Color c = Color.web("hsl(270,100%,100%)");// blue as an hsl web value, implicit alpha 84 * </code></pre> 85 * 86 * <p> 87 * The creation of a {@code Color} will throw {@code IllegalArgumentException} if any 88 * of the values are out of range. 89 * </p> 90 * 91 * <p> 92 * For example: 93 * <pre><code> 94 * Rectangle rec1 = new Rectangle(5, 5, 50, 40); 95 * rec1.setFill(Color.RED); 96 * rec1.setStroke(Color.GREEN); 97 * rec1.setStrokeWidth(3); 98 * 99 * Rectangle rec2 = new Rectangle(65, 5, 50, 40); 100 * rec2.setFill(Color.rgb(91, 127, 255)); 101 * rec2.setStroke(Color.hsb(40, 0.7, 0.8)); 102 * rec2.setStrokeWidth(3); 103 * </code></pre> 104 * </p> 105 * @since JavaFX 2.0 106 */ 107 public final class Color extends Paint implements Interpolatable<Color> { 108 109 /** 110 * Brightness change factor for darker() and brighter() methods. 111 */ 112 private static final double DARKER_BRIGHTER_FACTOR = 0.7; 113 114 /** 115 * Saturation change factor for saturate() and desaturate() methods. 116 */ 117 private static final double SATURATE_DESATURATE_FACTOR = 0.7; 118 119 /** 120 * Creates an sRGB color with the specified red, green and blue values 121 * in the range {@code 0.0-1.0}, and a given opacity. 122 * 123 * @param red the red component, in the range {@code 0.0-1.0} 124 * @param green the green component, in the range {@code 0.0-1.0} 125 * @param blue the blue component, in the range {@code 0.0-1.0} 126 * @param opacity the opacity component, in the range {@code 0.0-1.0} 127 * @return the {@code Color} 128 * @throws IllegalArgumentException if any value is out of range 129 */ 130 public static Color color(double red, double green, double blue, double opacity) { 131 return new Color(red, green, blue, opacity); 132 } 133 134 /** 135 * Creates an opaque sRGB color with the specified red, green and blue values 136 * in the range {@code 0.0-1.0}. 137 * 138 * @param red the red component, in the range {@code 0.0-1.0} 139 * @param green the green component, in the range {@code 0.0-1.0} 140 * @param blue the blue component, in the range {@code 0.0-1.0} 141 * @return the {@code Color} 142 * @throws IllegalArgumentException if any value is out of range 143 */ 144 public static Color color(double red, double green, double blue) { 145 return new Color(red, green, blue, 1); 146 } 147 148 /** 149 * Creates an sRGB color with the specified RGB values in the range {@code 0-255}, 150 * and a given opacity. 151 * 152 * @param red the red component, in the range {@code 0-255} 153 * @param green the green component, in the range {@code 0-255} 154 * @param blue the blue component, in the range {@code 0-255} 155 * @param opacity the opacity component, in the range {@code 0.0-1.0} 156 * @return the {@code Color} 157 * @throws IllegalArgumentException if any value is out of range 158 */ 159 public static Color rgb(int red, int green, int blue, double opacity) { 160 checkRGB(red, green, blue); 161 return new Color( 162 red / 255.0, 163 green / 255.0, 164 blue / 255.0, 165 opacity); 166 } 167 168 /** 169 * Creates an opaque sRGB color with the specified RGB values in the range {@code 0-255}. 170 * 171 * @param red the red component, in the range {@code 0-255} 172 * @param green the green component, in the range {@code 0-255} 173 * @param blue the blue component, in the range {@code 0-255} 174 * @return the {@code Color} 175 * @throws IllegalArgumentException if any value is out of range 176 */ 177 public static Color rgb(int red, int green, int blue) { 178 checkRGB(red, green, blue); 179 return new Color( 180 red / 255.0, 181 green / 255.0, 182 blue / 255.0, 183 1.0); 184 } 185 186 187 /** 188 * This is a shortcut for {@code rgb(gray, gray, gray)}. 189 */ 190 public static Color grayRgb(int gray) { 191 return rgb(gray, gray, gray); 192 } 193 194 /** 195 * This is a shortcut for {@code rgb(gray, gray, gray, opacity)}. 196 */ 197 public static Color grayRgb(int gray, double opacity) { 198 return rgb(gray, gray, gray, opacity); 199 } 200 201 /** 202 * Creates a grey color. 203 * @param gray color on gray scale in the range 204 * {@code 0.0} (black) - {@code 1.0} (white). 205 * @param opacity the opacity component, in the range {@code 0.0-1.0} 206 * @return the {@code Color} 207 * @throws IllegalArgumentException if any value is out of range 208 */ 209 public static Color gray(double gray, double opacity) { 210 return new Color(gray, gray, gray, opacity); 211 } 212 213 /** 214 * Creates an opaque grey color. 215 * @param gray color on gray scale in the range 216 * {@code 0.0} (black) - {@code 1.0} (white). 217 * @return the {@code Color} 218 * @throws IllegalArgumentException if any value is out of range 219 */ 220 public static Color gray(double gray) { 221 return gray(gray, 1.0); 222 } 223 224 private static void checkRGB(int red, int green, int blue) { 225 if (red < 0 || red > 255) { 226 throw new IllegalArgumentException("Color.rgb's red parameter (" + red + ") expects color values 0-255"); 227 } 228 if (green < 0 || green > 255) { 229 throw new IllegalArgumentException("Color.rgb's green parameter (" + green + ") expects color values 0-255"); 230 } 231 if (blue < 0 || blue > 255) { 232 throw new IllegalArgumentException("Color.rgb's blue parameter (" + blue + ") expects color values 0-255"); 233 } 234 } 235 236 /** 237 * Creates a {@code Color} based on the specified values in the HSB color model, 238 * and a given opacity. 239 * 240 * @param hue the hue, in degrees 241 * @param saturation the saturation, {@code 0.0 to 1.0} 242 * @param brightness the brightness, {@code 0.0 to 1.0} 243 * @param opacity the opacity, {@code 0.0 to 1.0} 244 * @return the {@code Color} 245 * @throws IllegalArgumentException if {@code saturation}, {@code brightness} or 246 * {@code opacity} are out of range 247 */ 248 public static Color hsb(double hue, double saturation, double brightness, double opacity) { 249 checkSB(saturation, brightness); 250 double[] rgb = Utils.HSBtoRGB(hue, saturation, brightness); 251 Color result = new Color(rgb[0], rgb[1], rgb[2], opacity); 252 return result; 253 } 254 255 /** 256 * Creates an opaque {@code Color} based on the specified values in the HSB color model. 257 * 258 * @param hue the hue, in degrees 259 * @param saturation the saturation, {@code 0.0 to 1.0} 260 * @param brightness the brightness, {@code 0.0 to 1.0} 261 * @return the {@code Color} 262 * @throws IllegalArgumentException if {@code saturation} or {@code brightness} are 263 * out of range 264 */ 265 public static Color hsb(double hue, double saturation, double brightness) { 266 return hsb(hue, saturation, brightness, 1.0); 267 } 268 269 private static void checkSB(double saturation, double brightness) { 270 if (saturation < 0.0 || saturation > 1.0) { 271 throw new IllegalArgumentException("Color.hsb's saturation parameter (" + saturation + ") expects values 0.0-1.0"); 272 } 273 if (brightness < 0.0 || brightness > 1.0) { 274 throw new IllegalArgumentException("Color.hsb's brightness parameter (" + brightness + ") expects values 0.0-1.0"); 275 } 276 } 277 278 /** 279 * Creates an RGB color specified with an HTML or CSS attribute string. 280 * 281 * <p> 282 * This method supports the following formats: 283 * <ul> 284 * <li>Any standard HTML color name 285 * <li>An HTML long or short format hex string with an optional hex alpha 286 * channel. 287 * Hexadecimal values may be preceded by either {@code "0x"} or {@code "#"} 288 * and can either be 2 digits in the range {@code 00} to {@code 0xFF} or a 289 * single digit in the range {@code 0} to {@code F}. 290 * <li>An {@code rgb(r,g,b)} or {@code rgba(r,g,b,a)} format string. 291 * Each of the {@code r}, {@code g}, or {@code b} values can be an integer 292 * from 0 to 255 or a floating point percentage value from 0.0 to 100.0 293 * followed by the percent ({@code %}) character. 294 * The alpha component, if present, is a 295 * floating point value from 0.0 to 1.0. Spaces are allowed before or 296 * after the numbers and between the percentage number and its percent 297 * sign ({@code %}). 298 * <li>An {@code hsl(h,s,l)} or {@code hsla(h,s,l,a)} format string. 299 * The {@code h} value is a floating point number from 0.0 to 360.0 300 * representing the hue angle on a color wheel in degrees with 301 * {@code 0.0} or {@code 360.0} representing red, {@code 120.0} 302 * representing green, and {@code 240.0} representing blue. The 303 * {@code s} value is the saturation of the desired color represented 304 * as a floating point percentage from gray ({@code 0.0}) to 305 * the fully saturated color ({@code 100.0}) and the {@code l} value 306 * is the desired lightness or brightness of the desired color represented 307 * as a floating point percentage from black ({@code 0.0}) to the full 308 * brightness of the color ({@code 100.0}). 309 * The alpha component, if present, is a floating 310 * point value from 0.0 to 1.0. Spaces are allowed before or 311 * after the numbers and between the percentage number and its percent 312 * sign ({@code %}). 313 * </ul> 314 * 315 * <p>For formats without an alpha component and for named colors, opacity 316 * is set according to the {@code opacity} argument. For colors specified 317 * with an alpha component, the resulting opacity is a combination of the 318 * parsed alpha component and the {@code opacity} argument, so a 319 * transparent color becomes more transparent by specifying opacity.</p> 320 * 321 * <p>Examples:</p> 322 * <div class="classUseContainer"> 323 * <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0"> 324 * <tr> 325 * <th class="colFirst">Web Format String</th> 326 * <th class="colLast">Equivalent constructor or factory call</th> 327 * </tr> 328 * <tr class="rowColor"> 329 * <td class="colFirst"><code>Color.web("orange", 0.5);</code></td> 330 * <td class="colLast"><code>new Color(1.0, 0xA5/255.0, 0.0, 0.5)</code></td> 331 * </tr> 332 * <tr class="altColor"> 333 * <td class="colFirst"><code>Color.web("0xff66cc33", 0.5);</code></td> 334 * <td class="colLast"><code>new Color(1.0, 0.4, 0.8, 0.1)</code></td> 335 * </tr> 336 * <tr class="rowColor"> 337 * <td class="colFirst"><code>Color.web("0xff66cc", 0.5);</code></td> 338 * <td class="colLast"><code>new Color(1.0, 0.4, 0.8, 0.5)</code></td> 339 * </tr> 340 * <tr class="altColor"> 341 * <td class="colFirst"><code>Color.web("#ff66cc", 0.5);</code></td> 342 * <td class="colLast"><code>new Color(1.0, 0.4, 0.8, 0.5)</code></td> 343 * </tr> 344 * <tr class="rowColor"> 345 * <td class="colFirst"><code>Color.web("#f68", 0.5);</code></td> 346 * <td class="colLast"><code>new Color(1.0, 0.4, 0.8, 0.5)</code></td> 347 * </tr> 348 * <tr class="altColor"> 349 * <td class="colFirst"><code>Color.web("rgb(255,102,204)", 0.5);</code></td> 350 * <td class="colLast"><code>new Color(1.0, 0.4, 0.8, 0.5)</code></td> 351 * </tr> 352 * <tr class="rowColor"> 353 * <td class="colFirst"><code>Color.web("rgb(100%,50%,50%)", 0.5);</code></td> 354 * <td class="colLast"><code>new Color(1.0, 0.5, 0.5, 0.5)</code></td> 355 * </tr> 356 * <tr class="altColor"> 357 * <td class="colFirst"><code>Color.web("rgb(255,50%,50%,0.25)", 0.5);</code></td> 358 * <td class="colLast"><code>new Color(1.0, 0.5, 0.5, 0.125)</code></td> 359 * </tr> 360 * <tr class="rowColor"> 361 * <td class="colFirst"><code>Color.web("hsl(240,100%,100%)", 0.5);</code></td> 362 * <td class="colLast"><code>Color.hsb(240.0, 1.0, 1.0, 0.5)</code></td> 363 * </tr> 364 * <tr class="altColor"> 365 * <td style="border-bottom:1px solid" class="colFirst"> 366 * <code>Color.web("hsla(120,0%,0%,0.25)", 0.5);</code> 367 * </td> 368 * <td style="border-bottom:1px solid" class="colLast"> 369 * <code>Color.hsb(120.0, 0.0, 0.0, 0.125)</code> 370 * </td> 371 * </tr> 372 * </table> 373 * </div> 374 * 375 * @param colorString the name or numeric representation of the color 376 * in one of the supported formats 377 * @param opacity the opacity component in range from 0.0 (transparent) 378 * to 1.0 (opaque) 379 * @throws NullPointerException if {@code colorString} is {@code null} 380 * @throws IllegalArgumentException if {@code colorString} specifies 381 * an unsupported color name or contains an illegal numeric value 382 */ 383 public static Color web(String colorString, double opacity) { 384 if (colorString == null) { 385 throw new NullPointerException( 386 "The color components or name must be specified"); 387 } 388 if (colorString.isEmpty()) { 389 throw new IllegalArgumentException("Invalid color specification"); 390 } 391 392 String color = colorString.toLowerCase(Locale.ROOT); 393 394 if (color.startsWith("#")) { 395 color = color.substring(1); 396 } else if (color.startsWith("0x")) { 397 color = color.substring(2); 398 } else if (color.startsWith("rgb")) { 399 if (color.startsWith("(", 3)) { 400 return parseRGBColor(color, 4, false, opacity); 401 } else if (color.startsWith("a(", 3)) { 402 return parseRGBColor(color, 5, true, opacity); 403 } 404 } else if (color.startsWith("hsl")) { 405 if (color.startsWith("(", 3)) { 406 return parseHSLColor(color, 4, false, opacity); 407 } else if (color.startsWith("a(", 3)) { 408 return parseHSLColor(color, 5, true, opacity); 409 } 410 } else { 411 Color col = NamedColors.get(color); 412 if (col != null) { 413 if (opacity == 1.0) { 414 return col; 415 } else { 416 return Color.color(col.red, col.green, col.blue, opacity); 417 } 418 } 419 } 420 421 int len = color.length(); 422 423 try { 424 int r; 425 int g; 426 int b; 427 int a; 428 429 if (len == 3) { 430 r = Integer.parseInt(color.substring(0, 1), 16); 431 g = Integer.parseInt(color.substring(1, 2), 16); 432 b = Integer.parseInt(color.substring(2, 3), 16); 433 return Color.color(r / 15.0, g / 15.0, b / 15.0, opacity); 434 } else if (len == 4) { 435 r = Integer.parseInt(color.substring(0, 1), 16); 436 g = Integer.parseInt(color.substring(1, 2), 16); 437 b = Integer.parseInt(color.substring(2, 3), 16); 438 a = Integer.parseInt(color.substring(3, 4), 16); 439 return Color.color(r / 15.0, g / 15.0, b / 15.0, 440 opacity * a / 15.0); 441 } else if (len == 6) { 442 r = Integer.parseInt(color.substring(0, 2), 16); 443 g = Integer.parseInt(color.substring(2, 4), 16); 444 b = Integer.parseInt(color.substring(4, 6), 16); 445 return Color.rgb(r, g, b, opacity); 446 } else if (len == 8) { 447 r = Integer.parseInt(color.substring(0, 2), 16); 448 g = Integer.parseInt(color.substring(2, 4), 16); 449 b = Integer.parseInt(color.substring(4, 6), 16); 450 a = Integer.parseInt(color.substring(6, 8), 16); 451 return Color.rgb(r, g, b, opacity * a / 255.0); 452 } 453 } catch (NumberFormatException nfe) {} 454 455 throw new IllegalArgumentException("Invalid color specification"); 456 } 457 458 private static Color parseRGBColor(String color, int roff, 459 boolean hasAlpha, double a) 460 { 461 try { 462 int rend = color.indexOf(',', roff); 463 int gend = rend < 0 ? -1 : color.indexOf(',', rend+1); 464 int bend = gend < 0 ? -1 : color.indexOf(hasAlpha ? ',' : ')', gend+1); 465 int aend = hasAlpha ? (bend < 0 ? -1 : color.indexOf(')', bend+1)) : bend; 466 if (aend >= 0) { 467 double r = parseComponent(color, roff, rend, PARSE_COMPONENT); 468 double g = parseComponent(color, rend+1, gend, PARSE_COMPONENT); 469 double b = parseComponent(color, gend+1, bend, PARSE_COMPONENT); 470 if (hasAlpha) { 471 a *= parseComponent(color, bend+1, aend, PARSE_ALPHA); 472 } 473 return new Color(r, g, b, a); 474 } 475 } catch (NumberFormatException nfe) {} 476 477 throw new IllegalArgumentException("Invalid color specification"); 478 } 479 480 private static Color parseHSLColor(String color, int hoff, 481 boolean hasAlpha, double a) 482 { 483 try { 484 int hend = color.indexOf(',', hoff); 485 int send = hend < 0 ? -1 : color.indexOf(',', hend+1); 486 int lend = send < 0 ? -1 : color.indexOf(hasAlpha ? ',' : ')', send+1); 487 int aend = hasAlpha ? (lend < 0 ? -1 : color.indexOf(')', lend+1)) : lend; 488 if (aend >= 0) { 489 double h = parseComponent(color, hoff, hend, PARSE_ANGLE); 490 double s = parseComponent(color, hend+1, send, PARSE_PERCENT); 491 double l = parseComponent(color, send+1, lend, PARSE_PERCENT); 492 if (hasAlpha) { 493 a *= parseComponent(color, lend+1, aend, PARSE_ALPHA); 494 } 495 return Color.hsb(h, s, l, a); 496 } 497 } catch (NumberFormatException nfe) {} 498 499 throw new IllegalArgumentException("Invalid color specification"); 500 } 501 502 private static final int PARSE_COMPONENT = 0; // percent, or clamped to [0,255] => [0,1] 503 private static final int PARSE_PERCENT = 1; // clamped to [0,100]% => [0,1] 504 private static final int PARSE_ANGLE = 2; // clamped to [0,360] 505 private static final int PARSE_ALPHA = 3; // clamped to [0.0,1.0] 506 private static double parseComponent(String color, int off, int end, int type) { 507 color = color.substring(off, end).trim(); 508 if (color.endsWith("%")) { 509 if (type > PARSE_PERCENT) { 510 throw new IllegalArgumentException("Invalid color specification"); 511 } 512 type = PARSE_PERCENT; 513 color = color.substring(0, color.length()-1).trim(); 514 } else if (type == PARSE_PERCENT) { 515 throw new IllegalArgumentException("Invalid color specification"); 516 } 517 double c = ((type == PARSE_COMPONENT) 518 ? Integer.parseInt(color) 519 : Double.parseDouble(color)); 520 switch (type) { 521 case PARSE_ALPHA: 522 return (c < 0.0) ? 0.0 : ((c > 1.0) ? 1.0 : c); 523 case PARSE_PERCENT: 524 return (c <= 0.0) ? 0.0 : ((c >= 100.0) ? 1.0 : (c / 100.0)); 525 case PARSE_COMPONENT: 526 return (c <= 0.0) ? 0.0 : ((c >= 255.0) ? 1.0 : (c / 255.0)); 527 case PARSE_ANGLE: 528 return ((c < 0.0) 529 ? ((c % 360.0) + 360.0) 530 : ((c > 360.0) 531 ? (c % 360.0) 532 : c)); 533 } 534 535 throw new IllegalArgumentException("Invalid color specification"); 536 } 537 538 /** 539 * Creates an RGB color specified with an HTML or CSS attribute string. 540 * 541 * <p> 542 * This method supports the following formats: 543 * <ul> 544 * <li>Any standard HTML color name 545 * <li>An HTML long or short format hex string with an optional hex alpha 546 * channel. 547 * Hexadecimal values may be preceded by either {@code "0x"} or {@code "#"} 548 * and can either be 2 digits in the range {@code 00} to {@code 0xFF} or a 549 * single digit in the range {@code 0} to {@code F}. 550 * <li>An {@code rgb(r,g,b)} or {@code rgba(r,g,b,a)} format string. 551 * Each of the {@code r}, {@code g}, or {@code b} values can be an integer 552 * from 0 to 255 or a floating point percentage value from 0.0 to 100.0 553 * followed by the percent ({@code %}) character. 554 * The alpha component, if present, is a 555 * floating point value from 0.0 to 1.0. Spaces are allowed before or 556 * after the numbers and between the percentage number and its percent 557 * sign ({@code %}). 558 * <li>An {@code hsl(h,s,l)} or {@code hsla(h,s,l,a)} format string. 559 * The {@code h} value is a floating point number from 0.0 to 360.0 560 * representing the hue angle on a color wheel in degrees with 561 * {@code 0.0} or {@code 360.0} representing red, {@code 120.0} 562 * representing green, and {@code 240.0} representing blue. The 563 * {@code s} value is the saturation of the desired color represented 564 * as a floating point percentage from gray ({@code 0.0}) to 565 * the fully saturated color ({@code 100.0}) and the {@code l} value 566 * is the desired lightness or brightness of the desired color represented 567 * as a floating point percentage from black ({@code 0.0}) to the full 568 * brightness of the color ({@code 100.0}). 569 * The alpha component, if present, is a floating 570 * point value from 0.0 to 1.0. Spaces are allowed before or 571 * after the numbers and between the percentage number and its percent 572 * sign ({@code %}). 573 * </ul> 574 * 575 * <p>Examples:</p> 576 * <div class="classUseContainer"> 577 * <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0"> 578 * <tr> 579 * <th class="colFirst">Web Format String</th> 580 * <th class="colLast">Equivalent constant or factory call</th> 581 * </tr> 582 * <tr class="rowColor"> 583 * <td class="colFirst"><code>Color.web("orange");</code></td> 584 * <td class="colLast"><code>Color.ORANGE</code></td> 585 * </tr> 586 * <tr class="altColor"> 587 * <td class="colFirst"><code>Color.web("0xff668840");</code></td> 588 * <td class="colLast"><code>Color.rgb(255, 102, 136, 0.25)</code></td> 589 * </tr> 590 * <tr class="rowColor"> 591 * <td class="colFirst"><code>Color.web("0xff6688");</code></td> 592 * <td class="colLast"><code>Color.rgb(255, 102, 136, 1.0)</code></td> 593 * </tr> 594 * <tr class="altColor"> 595 * <td class="colFirst"><code>Color.web("#ff6688");</code></td> 596 * <td class="colLast"><code>Color.rgb(255, 102, 136, 1.0)</code></td> 597 * </tr> 598 * <tr class="rowColor"> 599 * <td class="colFirst"><code>Color.web("#f68");</code></td> 600 * <td class="colLast"><code>Color.rgb(255, 102, 136, 1.0)</code></td> 601 * </tr> 602 * <tr class="altColor"> 603 * <td class="colFirst"><code>Color.web("rgb(255,102,136)");</code></td> 604 * <td class="colLast"><code>Color.rgb(255, 102, 136, 1.0)</code></td> 605 * </tr> 606 * <tr class="rowColor"> 607 * <td class="colFirst"><code>Color.web("rgb(100%,50%,50%)");</code></td> 608 * <td class="colLast"><code>Color.rgb(255, 128, 128, 1.0)</code></td> 609 * </tr> 610 * <tr class="altColor"> 611 * <td class="colFirst"><code>Color.web("rgb(255,50%,50%,0.25)");</code></td> 612 * <td class="colLast"><code>Color.rgb(255, 128, 128, 0.25)</code></td> 613 * </tr> 614 * <tr class="rowColor"> 615 * <td class="colFirst"><code>Color.web("hsl(240,100%,100%)");</code></td> 616 * <td class="colLast"><code>Color.hsb(240.0, 1.0, 1.0, 1.0)</code></td> 617 * </tr> 618 * <tr class="altColor"> 619 * <td style="border-bottom:1px solid" class="colFirst"> 620 * <code>Color.web("hsla(120,0%,0%,0.25)");</code> 621 * </td> 622 * <td style="border-bottom:1px solid" class="colLast"> 623 * <code>Color.hsb(120.0, 0.0, 0.0, 0.25)</code> 624 * </td> 625 * </tr> 626 * </table> 627 * </div> 628 * 629 * @param colorString the name or numeric representation of the color 630 * in one of the supported formats 631 * @throws NullPointerException if {@code colorString} is {@code null} 632 * @throws IllegalArgumentException if {@code colorString} specifies 633 * an unsupported color name or contains an illegal numeric value 634 */ 635 public static Color web(String colorString) { 636 return web(colorString, 1.0); 637 } 638 639 /** 640 * Creates a color value from a string representation. The format 641 * of the string representation is the same as in {@link #web(String)}. 642 * 643 * @param value the string to convert 644 * @throws NullPointerException if the {@code value} is {@code null} 645 * @throws IllegalArgumentException if the {@code value} specifies 646 * an unsupported color name or illegal hexadecimal value 647 * @return a {@code Color} object holding the value represented 648 * by the string argument 649 * @see #web(String) 650 * @since JavaFX 2.1 651 */ 652 public static Color valueOf(String value) { 653 if (value == null) { 654 throw new NullPointerException("color must be specified"); 655 } 656 657 return web(value); 658 } 659 660 private static int to32BitInteger(int red, int green, int blue, int alpha) { 661 int i = red; 662 i = i << 8; 663 i = i | green; 664 i = i << 8; 665 i = i | blue; 666 i = i << 8; 667 i = i | alpha; 668 return i; 669 } 670 671 /** 672 * Gets the hue component of this {@code Color}. 673 * @return Hue value in the range in the range {@code 0.0-360.0}. 674 */ 675 public double getHue() { 676 return Utils.RGBtoHSB(red, green, blue)[0]; 677 } 678 679 /** 680 * Gets the saturation component of this {@code Color}. 681 * @return Saturation value in the range in the range {@code 0.0-1.0}. 682 */ 683 public double getSaturation() { 684 return Utils.RGBtoHSB(red, green, blue)[1]; 685 } 686 687 /** 688 * Gets the brightness component of this {@code Color}. 689 * @return Brightness value in the range in the range {@code 0.0-1.0}. 690 */ 691 public double getBrightness() { 692 return Utils.RGBtoHSB(red, green, blue)[2]; 693 } 694 695 /** 696 * Creates a new {@code Color} based on this {@code Color} with hue, 697 * saturation, brightness and opacity values altered. Hue is shifted 698 * about the given value and normalized into its natural range, the 699 * other components' values are multiplied by the given factors and 700 * clipped into their ranges. 701 * 702 * Increasing brightness of black color is allowed by using an arbitrary, 703 * very small source brightness instead of zero. 704 */ 705 public Color deriveColor(double hueShift, double saturationFactor, 706 double brightnessFactor, double opacityFactor) { 707 708 double[] hsb = Utils.RGBtoHSB(red, green, blue); 709 710 /* Allow brightness increase of black color */ 711 double b = hsb[2]; 712 if (b == 0 && brightnessFactor > 1.0) { 713 b = 0.05; 714 } 715 716 /* the tail "+ 360) % 360" solves shifts into negative numbers */ 717 double h = (((hsb[0] + hueShift) % 360) + 360) % 360; 718 double s = Math.max(Math.min(hsb[1] * saturationFactor, 1.0), 0.0); 719 b = Math.max(Math.min(b * brightnessFactor, 1.0), 0.0); 720 double a = Math.max(Math.min(opacity * opacityFactor, 1.0), 0.0); 721 return hsb(h, s, b, a); 722 } 723 724 /** 725 * Creates a new Color that is a brighter version of this Color. 726 */ 727 public Color brighter() { 728 return deriveColor(0, 1.0, 1.0 / DARKER_BRIGHTER_FACTOR, 1.0); 729 } 730 731 /** 732 * Creates a new Color that is a darker version of this Color. 733 */ 734 public Color darker() { 735 return deriveColor(0, 1.0, DARKER_BRIGHTER_FACTOR, 1.0); 736 } 737 738 /** 739 * Creates a new Color that is a more saturated version of this Color. 740 */ 741 public Color saturate() { 742 return deriveColor(0, 1.0 / SATURATE_DESATURATE_FACTOR, 1.0, 1.0); 743 } 744 745 /** 746 * Creates a new Color that is a less saturated version of this Color. 747 */ 748 public Color desaturate() { 749 return deriveColor(0, SATURATE_DESATURATE_FACTOR, 1.0, 1.0); 750 } 751 752 /** 753 * Creates a new Color that is grayscale equivalent of this Color. 754 * Opacity is preserved. 755 */ 756 public Color grayscale() { 757 double gray = 0.21 * red + 0.71 * green + 0.07 * blue; 758 return Color.color(gray, gray, gray, opacity); 759 } 760 761 /** 762 * Creates a new Color that is inversion of this Color. 763 * Opacity is preserved. 764 */ 765 public Color invert() { 766 return Color.color(1.0 - red, 1.0 - green, 1.0 - blue, opacity); 767 } 768 769 /** 770 * A fully transparent color with an ARGB value of #00000000. 771 */ 772 public static final Color TRANSPARENT = new Color(0f, 0f, 0f, 0f); 773 774 /** 775 * The color alice blue with an RGB value of #F0F8FF 776 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F0F8FF;float:right;margin: 0 10px 0 0"></div><br/><br/> 777 */ 778 public static final Color ALICEBLUE = new Color(0.9411765f, 0.972549f, 1.0f); 779 780 /** 781 * The color antique white with an RGB value of #FAEBD7 782 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FAEBD7;float:right;margin: 0 10px 0 0"></div><br/><br/> 783 */ 784 public static final Color ANTIQUEWHITE = new Color(0.98039216f, 0.92156863f, 0.84313726f); 785 786 /** 787 * The color aqua with an RGB value of #00FFFF 788 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00FFFF;float:right;margin: 0 10px 0 0"></div><br/><br/> 789 */ 790 public static final Color AQUA = new Color(0.0f, 1.0f, 1.0f); 791 792 /** 793 * The color aquamarine with an RGB value of #7FFFD4 794 * <div style="border:1px solid black;width:40px;height:20px;background-color:#7FFFD4;float:right;margin: 0 10px 0 0"></div><br/><br/> 795 */ 796 public static final Color AQUAMARINE = new Color(0.49803922f, 1.0f, 0.83137256f); 797 798 /** 799 * The color azure with an RGB value of #F0FFFF 800 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F0FFFF;float:right;margin: 0 10px 0 0"></div><br/><br/> 801 */ 802 public static final Color AZURE = new Color(0.9411765f, 1.0f, 1.0f); 803 804 /** 805 * The color beige with an RGB value of #F5F5DC 806 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F5F5DC;float:right;margin: 0 10px 0 0"></div><br/><br/> 807 */ 808 public static final Color BEIGE = new Color(0.9607843f, 0.9607843f, 0.8627451f); 809 810 /** 811 * The color bisque with an RGB value of #FFE4C4 812 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFE4C4;float:right;margin: 0 10px 0 0"></div><br/><br/> 813 */ 814 public static final Color BISQUE = new Color(1.0f, 0.89411765f, 0.76862746f); 815 816 /** 817 * The color black with an RGB value of #000000 818 * <div style="border:1px solid black;width:40px;height:20px;background-color:#000000;float:right;margin: 0 10px 0 0"></div><br/><br/> 819 */ 820 public static final Color BLACK = new Color(0.0f, 0.0f, 0.0f); 821 822 /** 823 * The color blanched almond with an RGB value of #FFEBCD 824 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFEBCD;float:right;margin: 0 10px 0 0"></div><br/><br/> 825 */ 826 public static final Color BLANCHEDALMOND = new Color(1.0f, 0.92156863f, 0.8039216f); 827 828 /** 829 * The color blue with an RGB value of #0000FF 830 * <div style="border:1px solid black;width:40px;height:20px;background-color:#0000FF;float:right;margin: 0 10px 0 0"></div><br/><br/> 831 */ 832 public static final Color BLUE = new Color(0.0f, 0.0f, 1.0f); 833 834 /** 835 * The color blue violet with an RGB value of #8A2BE2 836 * <div style="border:1px solid black;width:40px;height:20px;background-color:#8A2BE2;float:right;margin: 0 10px 0 0"></div><br/><br/> 837 */ 838 public static final Color BLUEVIOLET = new Color(0.5411765f, 0.16862746f, 0.8862745f); 839 840 /** 841 * The color brown with an RGB value of #A52A2A 842 * <div style="border:1px solid black;width:40px;height:20px;background-color:#A52A2A;float:right;margin: 0 10px 0 0"></div><br/><br/> 843 */ 844 public static final Color BROWN = new Color(0.64705884f, 0.16470589f, 0.16470589f); 845 846 /** 847 * The color burly wood with an RGB value of #DEB887 848 * <div style="border:1px solid black;width:40px;height:20px;background-color:#DEB887;float:right;margin: 0 10px 0 0"></div><br/><br/> 849 */ 850 public static final Color BURLYWOOD = new Color(0.87058824f, 0.72156864f, 0.5294118f); 851 852 /** 853 * The color cadet blue with an RGB value of #5F9EA0 854 * <div style="border:1px solid black;width:40px;height:20px;background-color:#5F9EA0;float:right;margin: 0 10px 0 0"></div><br/><br/> 855 */ 856 public static final Color CADETBLUE = new Color(0.37254903f, 0.61960787f, 0.627451f); 857 858 /** 859 * The color chartreuse with an RGB value of #7FFF00 860 * <div style="border:1px solid black;width:40px;height:20px;background-color:#7FFF00;float:right;margin: 0 10px 0 0"></div><br/><br/> 861 */ 862 public static final Color CHARTREUSE = new Color(0.49803922f, 1.0f, 0.0f); 863 864 /** 865 * The color chocolate with an RGB value of #D2691E 866 * <div style="border:1px solid black;width:40px;height:20px;background-color:#D2691E;float:right;margin: 0 10px 0 0"></div><br/><br/> 867 */ 868 public static final Color CHOCOLATE = new Color(0.8235294f, 0.4117647f, 0.11764706f); 869 870 /** 871 * The color coral with an RGB value of #FF7F50 872 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF7F50;float:right;margin: 0 10px 0 0"></div><br/><br/> 873 */ 874 public static final Color CORAL = new Color(1.0f, 0.49803922f, 0.3137255f); 875 876 /** 877 * The color cornflower blue with an RGB value of #6495ED 878 * <div style="border:1px solid black;width:40px;height:20px;background-color:#6495ED;float:right;margin: 0 10px 0 0"></div><br/><br/> 879 */ 880 public static final Color CORNFLOWERBLUE = new Color(0.39215687f, 0.58431375f, 0.92941177f); 881 882 /** 883 * The color cornsilk with an RGB value of #FFF8DC 884 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFF8DC;float:right;margin: 0 10px 0 0"></div><br/><br/> 885 */ 886 public static final Color CORNSILK = new Color(1.0f, 0.972549f, 0.8627451f); 887 888 /** 889 * The color crimson with an RGB value of #DC143C 890 * <div style="border:1px solid black;width:40px;height:20px;background-color:#DC143C;float:right;margin: 0 10px 0 0"></div><br/><br/> 891 */ 892 public static final Color CRIMSON = new Color(0.8627451f, 0.078431375f, 0.23529412f); 893 894 /** 895 * The color cyan with an RGB value of #00FFFF 896 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00FFFF;float:right;margin: 0 10px 0 0"></div><br/><br/> 897 */ 898 public static final Color CYAN = new Color(0.0f, 1.0f, 1.0f); 899 900 /** 901 * The color dark blue with an RGB value of #00008B 902 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00008B;float:right;margin: 0 10px 0 0"></div><br/><br/> 903 */ 904 public static final Color DARKBLUE = new Color(0.0f, 0.0f, 0.54509807f); 905 906 /** 907 * The color dark cyan with an RGB value of #008B8B 908 * <div style="border:1px solid black;width:40px;height:20px;background-color:#008B8B;float:right;margin: 0 10px 0 0"></div><br/><br/> 909 */ 910 public static final Color DARKCYAN = new Color(0.0f, 0.54509807f, 0.54509807f); 911 912 /** 913 * The color dark goldenrod with an RGB value of #B8860B 914 * <div style="border:1px solid black;width:40px;height:20px;background-color:#B8860B;float:right;margin: 0 10px 0 0"></div><br/><br/> 915 */ 916 public static final Color DARKGOLDENROD = new Color(0.72156864f, 0.5254902f, 0.043137256f); 917 918 /** 919 * The color dark gray with an RGB value of #A9A9A9 920 * <div style="border:1px solid black;width:40px;height:20px;background-color:#A9A9A9;float:right;margin: 0 10px 0 0"></div><br/><br/> 921 */ 922 public static final Color DARKGRAY = new Color(0.6627451f, 0.6627451f, 0.6627451f); 923 924 /** 925 * The color dark green with an RGB value of #006400 926 * <div style="border:1px solid black;width:40px;height:20px;background-color:#006400;float:right;margin: 0 10px 0 0"></div><br/><br/> 927 */ 928 public static final Color DARKGREEN = new Color(0.0f, 0.39215687f, 0.0f); 929 930 /** 931 * The color dark grey with an RGB value of #A9A9A9 932 * <div style="border:1px solid black;width:40px;height:20px;background-color:#A9A9A9;float:right;margin: 0 10px 0 0"></div><br/><br/> 933 */ 934 public static final Color DARKGREY = DARKGRAY; 935 936 /** 937 * The color dark khaki with an RGB value of #BDB76B 938 * <div style="border:1px solid black;width:40px;height:20px;background-color:#BDB76B;float:right;margin: 0 10px 0 0"></div><br/><br/> 939 */ 940 public static final Color DARKKHAKI = new Color(0.7411765f, 0.7176471f, 0.41960785f); 941 942 /** 943 * The color dark magenta with an RGB value of #8B008B 944 * <div style="border:1px solid black;width:40px;height:20px;background-color:#8B008B;float:right;margin: 0 10px 0 0"></div><br/><br/> 945 */ 946 public static final Color DARKMAGENTA = new Color(0.54509807f, 0.0f, 0.54509807f); 947 948 /** 949 * The color dark olive green with an RGB value of #556B2F 950 * <div style="border:1px solid black;width:40px;height:20px;background-color:#556B2F;float:right;margin: 0 10px 0 0"></div><br/><br/> 951 */ 952 public static final Color DARKOLIVEGREEN = new Color(0.33333334f, 0.41960785f, 0.18431373f); 953 954 /** 955 * The color dark orange with an RGB value of #FF8C00 956 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF8C00;float:right;margin: 0 10px 0 0"></div><br/><br/> 957 */ 958 public static final Color DARKORANGE = new Color(1.0f, 0.54901963f, 0.0f); 959 960 /** 961 * The color dark orchid with an RGB value of #9932CC 962 * <div style="border:1px solid black;width:40px;height:20px;background-color:#9932CC;float:right;margin: 0 10px 0 0"></div><br/><br/> 963 */ 964 public static final Color DARKORCHID = new Color(0.6f, 0.19607843f, 0.8f); 965 966 /** 967 * The color dark red with an RGB value of #8B0000 968 * <div style="border:1px solid black;width:40px;height:20px;background-color:#8B0000;float:right;margin: 0 10px 0 0"></div><br/><br/> 969 */ 970 public static final Color DARKRED = new Color(0.54509807f, 0.0f, 0.0f); 971 972 /** 973 * The color dark salmon with an RGB value of #E9967A 974 * <div style="border:1px solid black;width:40px;height:20px;background-color:#E9967A;float:right;margin: 0 10px 0 0"></div><br/><br/> 975 */ 976 public static final Color DARKSALMON = new Color(0.9137255f, 0.5882353f, 0.47843137f); 977 978 /** 979 * The color dark sea green with an RGB value of #8FBC8F 980 * <div style="border:1px solid black;width:40px;height:20px;background-color:#8FBC8F;float:right;margin: 0 10px 0 0"></div><br/><br/> 981 */ 982 public static final Color DARKSEAGREEN = new Color(0.56078434f, 0.7372549f, 0.56078434f); 983 984 /** 985 * The color dark slate blue with an RGB value of #483D8B 986 * <div style="border:1px solid black;width:40px;height:20px;background-color:#483D8B;float:right;margin: 0 10px 0 0"></div><br/><br/> 987 */ 988 public static final Color DARKSLATEBLUE = new Color(0.28235295f, 0.23921569f, 0.54509807f); 989 990 /** 991 * The color dark slate gray with an RGB value of #2F4F4F 992 * <div style="border:1px solid black;width:40px;height:20px;background-color:#2F4F4F;float:right;margin: 0 10px 0 0"></div><br/><br/> 993 */ 994 public static final Color DARKSLATEGRAY = new Color(0.18431373f, 0.30980393f, 0.30980393f); 995 996 /** 997 * The color dark slate grey with an RGB value of #2F4F4F 998 * <div style="border:1px solid black;width:40px;height:20px;background-color:#2F4F4F;float:right;margin: 0 10px 0 0"></div><br/><br/> 999 */ 1000 public static final Color DARKSLATEGREY = DARKSLATEGRAY; 1001 1002 /** 1003 * The color dark turquoise with an RGB value of #00CED1 1004 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00CED1;float:right;margin: 0 10px 0 0"></div><br/><br/> 1005 */ 1006 public static final Color DARKTURQUOISE = new Color(0.0f, 0.80784315f, 0.81960785f); 1007 1008 /** 1009 * The color dark violet with an RGB value of #9400D3 1010 * <div style="border:1px solid black;width:40px;height:20px;background-color:#9400D3;float:right;margin: 0 10px 0 0"></div><br/><br/> 1011 */ 1012 public static final Color DARKVIOLET = new Color(0.5803922f, 0.0f, 0.827451f); 1013 1014 /** 1015 * The color deep pink with an RGB value of #FF1493 1016 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF1493;float:right;margin: 0 10px 0 0"></div><br/><br/> 1017 */ 1018 public static final Color DEEPPINK = new Color(1.0f, 0.078431375f, 0.5764706f); 1019 1020 /** 1021 * The color deep sky blue with an RGB value of #00BFFF 1022 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00BFFF;float:right;margin: 0 10px 0 0"></div><br/><br/> 1023 */ 1024 public static final Color DEEPSKYBLUE = new Color(0.0f, 0.7490196f, 1.0f); 1025 1026 /** 1027 * The color dim gray with an RGB value of #696969 1028 * <div style="border:1px solid black;width:40px;height:20px;background-color:#696969;float:right;margin: 0 10px 0 0"></div><br/><br/> 1029 */ 1030 public static final Color DIMGRAY = new Color(0.4117647f, 0.4117647f, 0.4117647f); 1031 1032 /** 1033 * The color dim grey with an RGB value of #696969 1034 * <div style="border:1px solid black;width:40px;height:20px;background-color:#696969;float:right;margin: 0 10px 0 0"></div><br/><br/> 1035 */ 1036 public static final Color DIMGREY = DIMGRAY; 1037 1038 /** 1039 * The color dodger blue with an RGB value of #1E90FF 1040 * <div style="border:1px solid black;width:40px;height:20px;background-color:#1E90FF;float:right;margin: 0 10px 0 0"></div><br/><br/> 1041 */ 1042 public static final Color DODGERBLUE = new Color(0.11764706f, 0.5647059f, 1.0f); 1043 1044 /** 1045 * The color firebrick with an RGB value of #B22222 1046 * <div style="border:1px solid black;width:40px;height:20px;background-color:#B22222;float:right;margin: 0 10px 0 0"></div><br/><br/> 1047 */ 1048 public static final Color FIREBRICK = new Color(0.69803923f, 0.13333334f, 0.13333334f); 1049 1050 /** 1051 * The color floral white with an RGB value of #FFFAF0 1052 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFFAF0;float:right;margin: 0 10px 0 0"></div><br/><br/> 1053 */ 1054 public static final Color FLORALWHITE = new Color(1.0f, 0.98039216f, 0.9411765f); 1055 1056 /** 1057 * The color forest green with an RGB value of #228B22 1058 * <div style="border:1px solid black;width:40px;height:20px;background-color:#228B22;float:right;margin: 0 10px 0 0"></div><br/><br/> 1059 */ 1060 public static final Color FORESTGREEN = new Color(0.13333334f, 0.54509807f, 0.13333334f); 1061 1062 /** 1063 * The color fuchsia with an RGB value of #FF00FF 1064 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF00FF;float:right;margin: 0 10px 0 0"></div><br/><br/> 1065 */ 1066 public static final Color FUCHSIA = new Color(1.0f, 0.0f, 1.0f); 1067 1068 /** 1069 * The color gainsboro with an RGB value of #DCDCDC 1070 * <div style="border:1px solid black;width:40px;height:20px;background-color:#DCDCDC;float:right;margin: 0 10px 0 0"></div><br/><br/> 1071 */ 1072 public static final Color GAINSBORO = new Color(0.8627451f, 0.8627451f, 0.8627451f); 1073 1074 /** 1075 * The color ghost white with an RGB value of #F8F8FF 1076 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F8F8FF;float:right;margin: 0 10px 0 0"></div><br/><br/> 1077 */ 1078 public static final Color GHOSTWHITE = new Color(0.972549f, 0.972549f, 1.0f); 1079 1080 /** 1081 * The color gold with an RGB value of #FFD700 1082 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFD700;float:right;margin: 0 10px 0 0"></div><br/><br/> 1083 */ 1084 public static final Color GOLD = new Color(1.0f, 0.84313726f, 0.0f); 1085 1086 /** 1087 * The color goldenrod with an RGB value of #DAA520 1088 * <div style="border:1px solid black;width:40px;height:20px;background-color:#DAA520;float:right;margin: 0 10px 0 0"></div><br/><br/> 1089 */ 1090 public static final Color GOLDENROD = new Color(0.85490197f, 0.64705884f, 0.1254902f); 1091 1092 /** 1093 * The color gray with an RGB value of #808080 1094 * <div style="border:1px solid black;width:40px;height:20px;background-color:#808080;float:right;margin: 0 10px 0 0"></div><br/><br/> 1095 */ 1096 public static final Color GRAY = new Color(0.5019608f, 0.5019608f, 0.5019608f); 1097 1098 /** 1099 * The color green with an RGB value of #008000 1100 * <div style="border:1px solid black;width:40px;height:20px;background-color:#008000;float:right;margin: 0 10px 0 0"></div><br/><br/> 1101 */ 1102 public static final Color GREEN = new Color(0.0f, 0.5019608f, 0.0f); 1103 1104 /** 1105 * The color green yellow with an RGB value of #ADFF2F 1106 * <div style="border:1px solid black;width:40px;height:20px;background-color:#ADFF2F;float:right;margin: 0 10px 0 0"></div><br/><br/> 1107 */ 1108 public static final Color GREENYELLOW = new Color(0.6784314f, 1.0f, 0.18431373f); 1109 1110 /** 1111 * The color grey with an RGB value of #808080 1112 * <div style="border:1px solid black;width:40px;height:20px;background-color:#808080;float:right;margin: 0 10px 0 0"></div><br/><br/> 1113 */ 1114 public static final Color GREY = GRAY; 1115 1116 /** 1117 * The color honeydew with an RGB value of #F0FFF0 1118 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F0FFF0;float:right;margin: 0 10px 0 0"></div><br/><br/> 1119 */ 1120 public static final Color HONEYDEW = new Color(0.9411765f, 1.0f, 0.9411765f); 1121 1122 /** 1123 * The color hot pink with an RGB value of #FF69B4 1124 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF69B4;float:right;margin: 0 10px 0 0"></div><br/><br/> 1125 */ 1126 public static final Color HOTPINK = new Color(1.0f, 0.4117647f, 0.7058824f); 1127 1128 /** 1129 * The color indian red with an RGB value of #CD5C5C 1130 * <div style="border:1px solid black;width:40px;height:20px;background-color:#CD5C5C;float:right;margin: 0 10px 0 0"></div><br/><br/> 1131 */ 1132 public static final Color INDIANRED = new Color(0.8039216f, 0.36078432f, 0.36078432f); 1133 1134 /** 1135 * The color indigo with an RGB value of #4B0082 1136 * <div style="border:1px solid black;width:40px;height:20px;background-color:#4B0082;float:right;margin: 0 10px 0 0"></div><br/><br/> 1137 */ 1138 public static final Color INDIGO = new Color(0.29411766f, 0.0f, 0.50980395f); 1139 1140 /** 1141 * The color ivory with an RGB value of #FFFFF0 1142 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFFFF0;float:right;margin: 0 10px 0 0"></div><br/><br/> 1143 */ 1144 public static final Color IVORY = new Color(1.0f, 1.0f, 0.9411765f); 1145 1146 /** 1147 * The color khaki with an RGB value of #F0E68C 1148 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F0E68C;float:right;margin: 0 10px 0 0"></div><br/><br/> 1149 */ 1150 public static final Color KHAKI = new Color(0.9411765f, 0.9019608f, 0.54901963f); 1151 1152 /** 1153 * The color lavender with an RGB value of #E6E6FA 1154 * <div style="border:1px solid black;width:40px;height:20px;background-color:#E6E6FA;float:right;margin: 0 10px 0 0"></div><br/><br/> 1155 */ 1156 public static final Color LAVENDER = new Color(0.9019608f, 0.9019608f, 0.98039216f); 1157 1158 /** 1159 * The color lavender blush with an RGB value of #FFF0F5 1160 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFF0F5;float:right;margin: 0 10px 0 0"></div><br/><br/> 1161 */ 1162 public static final Color LAVENDERBLUSH = new Color(1.0f, 0.9411765f, 0.9607843f); 1163 1164 /** 1165 * The color lawn green with an RGB value of #7CFC00 1166 * <div style="border:1px solid black;width:40px;height:20px;background-color:#7CFC00;float:right;margin: 0 10px 0 0"></div><br/><br/> 1167 */ 1168 public static final Color LAWNGREEN = new Color(0.4862745f, 0.9882353f, 0.0f); 1169 1170 /** 1171 * The color lemon chiffon with an RGB value of #FFFACD 1172 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFFACD;float:right;margin: 0 10px 0 0"></div><br/><br/> 1173 */ 1174 public static final Color LEMONCHIFFON = new Color(1.0f, 0.98039216f, 0.8039216f); 1175 1176 /** 1177 * The color light blue with an RGB value of #ADD8E6 1178 * <div style="border:1px solid black;width:40px;height:20px;background-color:#ADD8E6;float:right;margin: 0 10px 0 0"></div><br/><br/> 1179 */ 1180 public static final Color LIGHTBLUE = new Color(0.6784314f, 0.84705883f, 0.9019608f); 1181 1182 /** 1183 * The color light coral with an RGB value of #F08080 1184 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F08080;float:right;margin: 0 10px 0 0"></div><br/><br/> 1185 */ 1186 public static final Color LIGHTCORAL = new Color(0.9411765f, 0.5019608f, 0.5019608f); 1187 1188 /** 1189 * The color light cyan with an RGB value of #E0FFFF 1190 * <div style="border:1px solid black;width:40px;height:20px;background-color:#E0FFFF;float:right;margin: 0 10px 0 0"></div><br/><br/> 1191 */ 1192 public static final Color LIGHTCYAN = new Color(0.8784314f, 1.0f, 1.0f); 1193 1194 /** 1195 * The color light goldenrod yellow with an RGB value of #FAFAD2 1196 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FAFAD2;float:right;margin: 0 10px 0 0"></div><br/><br/> 1197 */ 1198 public static final Color LIGHTGOLDENRODYELLOW = new Color(0.98039216f, 0.98039216f, 0.8235294f); 1199 1200 /** 1201 * The color light gray with an RGB value of #D3D3D3 1202 * <div style="border:1px solid black;width:40px;height:20px;background-color:#D3D3D3;float:right;margin: 0 10px 0 0"></div><br/><br/> 1203 */ 1204 public static final Color LIGHTGRAY = new Color(0.827451f, 0.827451f, 0.827451f); 1205 1206 /** 1207 * The color light green with an RGB value of #90EE90 1208 * <div style="border:1px solid black;width:40px;height:20px;background-color:#90EE90;float:right;margin: 0 10px 0 0"></div><br/><br/> 1209 */ 1210 public static final Color LIGHTGREEN = new Color(0.5647059f, 0.93333334f, 0.5647059f); 1211 1212 /** 1213 * The color light grey with an RGB value of #D3D3D3 1214 * <div style="border:1px solid black;width:40px;height:20px;background-color:#D3D3D3;float:right;margin: 0 10px 0 0"></div><br/><br/> 1215 */ 1216 public static final Color LIGHTGREY = LIGHTGRAY; 1217 1218 /** 1219 * The color light pink with an RGB value of #FFB6C1 1220 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFB6C1;float:right;margin: 0 10px 0 0"></div><br/><br/> 1221 */ 1222 public static final Color LIGHTPINK = new Color(1.0f, 0.7137255f, 0.75686276f); 1223 1224 /** 1225 * The color light salmon with an RGB value of #FFA07A 1226 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFA07A;float:right;margin: 0 10px 0 0"></div><br/><br/> 1227 */ 1228 public static final Color LIGHTSALMON = new Color(1.0f, 0.627451f, 0.47843137f); 1229 1230 /** 1231 * The color light sea green with an RGB value of #20B2AA 1232 * <div style="border:1px solid black;width:40px;height:20px;background-color:#20B2AA;float:right;margin: 0 10px 0 0"></div><br/><br/> 1233 */ 1234 public static final Color LIGHTSEAGREEN = new Color(0.1254902f, 0.69803923f, 0.6666667f); 1235 1236 /** 1237 * The color light sky blue with an RGB value of #87CEFA 1238 * <div style="border:1px solid black;width:40px;height:20px;background-color:#87CEFA;float:right;margin: 0 10px 0 0"></div><br/><br/> 1239 */ 1240 public static final Color LIGHTSKYBLUE = new Color(0.5294118f, 0.80784315f, 0.98039216f); 1241 1242 /** 1243 * The color light slate gray with an RGB value of #778899 1244 * <div style="border:1px solid black;width:40px;height:20px;background-color:#778899;float:right;margin: 0 10px 0 0"></div><br/><br/> 1245 */ 1246 public static final Color LIGHTSLATEGRAY = new Color(0.46666667f, 0.53333336f, 0.6f); 1247 1248 /** 1249 * The color light slate grey with an RGB value of #778899 1250 * <div style="border:1px solid black;width:40px;height:20px;background-color:#778899;float:right;margin: 0 10px 0 0"></div><br/><br/> 1251 */ 1252 public static final Color LIGHTSLATEGREY = LIGHTSLATEGRAY; 1253 1254 /** 1255 * The color light steel blue with an RGB value of #B0C4DE 1256 * <div style="border:1px solid black;width:40px;height:20px;background-color:#B0C4DE;float:right;margin: 0 10px 0 0"></div><br/><br/> 1257 */ 1258 public static final Color LIGHTSTEELBLUE = new Color(0.6901961f, 0.76862746f, 0.87058824f); 1259 1260 /** 1261 * The color light yellow with an RGB value of #FFFFE0 1262 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFFFE0;float:right;margin: 0 10px 0 0"></div><br/><br/> 1263 */ 1264 public static final Color LIGHTYELLOW = new Color(1.0f, 1.0f, 0.8784314f); 1265 1266 /** 1267 * The color lime with an RGB value of #00FF00 1268 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00FF00;float:right;margin: 0 10px 0 0"></div><br/><br/> 1269 */ 1270 public static final Color LIME = new Color(0.0f, 1.0f, 0.0f); 1271 1272 /** 1273 * The color lime green with an RGB value of #32CD32 1274 * <div style="border:1px solid black;width:40px;height:20px;background-color:#32CD32;float:right;margin: 0 10px 0 0"></div><br/><br/> 1275 */ 1276 public static final Color LIMEGREEN = new Color(0.19607843f, 0.8039216f, 0.19607843f); 1277 1278 /** 1279 * The color linen with an RGB value of #FAF0E6 1280 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FAF0E6;float:right;margin: 0 10px 0 0"></div><br/><br/> 1281 */ 1282 public static final Color LINEN = new Color(0.98039216f, 0.9411765f, 0.9019608f); 1283 1284 /** 1285 * The color magenta with an RGB value of #FF00FF 1286 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF00FF;float:right;margin: 0 10px 0 0"></div><br/><br/> 1287 */ 1288 public static final Color MAGENTA = new Color(1.0f, 0.0f, 1.0f); 1289 1290 /** 1291 * The color maroon with an RGB value of #800000 1292 * <div style="border:1px solid black;width:40px;height:20px;background-color:#800000;float:right;margin: 0 10px 0 0"></div><br/><br/> 1293 */ 1294 public static final Color MAROON = new Color(0.5019608f, 0.0f, 0.0f); 1295 1296 /** 1297 * The color medium aquamarine with an RGB value of #66CDAA 1298 * <div style="border:1px solid black;width:40px;height:20px;background-color:#66CDAA;float:right;margin: 0 10px 0 0"></div><br/><br/> 1299 */ 1300 public static final Color MEDIUMAQUAMARINE = new Color(0.4f, 0.8039216f, 0.6666667f); 1301 1302 /** 1303 * The color medium blue with an RGB value of #0000CD 1304 * <div style="border:1px solid black;width:40px;height:20px;background-color:#0000CD;float:right;margin: 0 10px 0 0"></div><br/><br/> 1305 */ 1306 public static final Color MEDIUMBLUE = new Color(0.0f, 0.0f, 0.8039216f); 1307 1308 /** 1309 * The color medium orchid with an RGB value of #BA55D3 1310 * <div style="border:1px solid black;width:40px;height:20px;background-color:#BA55D3;float:right;margin: 0 10px 0 0"></div><br/><br/> 1311 */ 1312 public static final Color MEDIUMORCHID = new Color(0.7294118f, 0.33333334f, 0.827451f); 1313 1314 /** 1315 * The color medium purple with an RGB value of #9370DB 1316 * <div style="border:1px solid black;width:40px;height:20px;background-color:#9370DB;float:right;margin: 0 10px 0 0"></div><br/><br/> 1317 */ 1318 public static final Color MEDIUMPURPLE = new Color(0.5764706f, 0.4392157f, 0.85882354f); 1319 1320 /** 1321 * The color medium sea green with an RGB value of #3CB371 1322 * <div style="border:1px solid black;width:40px;height:20px;background-color:#3CB371;float:right;margin: 0 10px 0 0"></div><br/><br/> 1323 */ 1324 public static final Color MEDIUMSEAGREEN = new Color(0.23529412f, 0.7019608f, 0.44313726f); 1325 1326 /** 1327 * The color medium slate blue with an RGB value of #7B68EE 1328 * <div style="border:1px solid black;width:40px;height:20px;background-color:#7B68EE;float:right;margin: 0 10px 0 0"></div><br/><br/> 1329 */ 1330 public static final Color MEDIUMSLATEBLUE = new Color(0.48235294f, 0.40784314f, 0.93333334f); 1331 1332 /** 1333 * The color medium spring green with an RGB value of #00FA9A 1334 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00FA9A;float:right;margin: 0 10px 0 0"></div><br/><br/> 1335 */ 1336 public static final Color MEDIUMSPRINGGREEN = new Color(0.0f, 0.98039216f, 0.6039216f); 1337 1338 /** 1339 * The color medium turquoise with an RGB value of #48D1CC 1340 * <div style="border:1px solid black;width:40px;height:20px;background-color:#48D1CC;float:right;margin: 0 10px 0 0"></div><br/><br/> 1341 */ 1342 public static final Color MEDIUMTURQUOISE = new Color(0.28235295f, 0.81960785f, 0.8f); 1343 1344 /** 1345 * The color medium violet red with an RGB value of #C71585 1346 * <div style="border:1px solid black;width:40px;height:20px;background-color:#C71585;float:right;margin: 0 10px 0 0"></div><br/><br/> 1347 */ 1348 public static final Color MEDIUMVIOLETRED = new Color(0.78039217f, 0.08235294f, 0.52156866f); 1349 1350 /** 1351 * The color midnight blue with an RGB value of #191970 1352 * <div style="border:1px solid black;width:40px;height:20px;background-color:#191970;float:right;margin: 0 10px 0 0"></div><br/><br/> 1353 */ 1354 public static final Color MIDNIGHTBLUE = new Color(0.09803922f, 0.09803922f, 0.4392157f); 1355 1356 /** 1357 * The color mint cream with an RGB value of #F5FFFA 1358 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F5FFFA;float:right;margin: 0 10px 0 0"></div><br/><br/> 1359 */ 1360 public static final Color MINTCREAM = new Color(0.9607843f, 1.0f, 0.98039216f); 1361 1362 /** 1363 * The color misty rose with an RGB value of #FFE4E1 1364 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFE4E1;float:right;margin: 0 10px 0 0"></div><br/><br/> 1365 */ 1366 public static final Color MISTYROSE = new Color(1.0f, 0.89411765f, 0.88235295f); 1367 1368 /** 1369 * The color moccasin with an RGB value of #FFE4B5 1370 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFE4B5;float:right;margin: 0 10px 0 0"></div><br/><br/> 1371 */ 1372 public static final Color MOCCASIN = new Color(1.0f, 0.89411765f, 0.70980394f); 1373 1374 /** 1375 * The color navajo white with an RGB value of #FFDEAD 1376 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFDEAD;float:right;margin: 0 10px 0 0"></div><br/><br/> 1377 */ 1378 public static final Color NAVAJOWHITE = new Color(1.0f, 0.87058824f, 0.6784314f); 1379 1380 /** 1381 * The color navy with an RGB value of #000080 1382 * <div style="border:1px solid black;width:40px;height:20px;background-color:#000080;float:right;margin: 0 10px 0 0"></div><br/><br/> 1383 */ 1384 public static final Color NAVY = new Color(0.0f, 0.0f, 0.5019608f); 1385 1386 /** 1387 * The color old lace with an RGB value of #FDF5E6 1388 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FDF5E6;float:right;margin: 0 10px 0 0"></div><br/><br/> 1389 */ 1390 public static final Color OLDLACE = new Color(0.99215686f, 0.9607843f, 0.9019608f); 1391 1392 /** 1393 * The color olive with an RGB value of #808000 1394 * <div style="border:1px solid black;width:40px;height:20px;background-color:#808000;float:right;margin: 0 10px 0 0"></div><br/><br/> 1395 */ 1396 public static final Color OLIVE = new Color(0.5019608f, 0.5019608f, 0.0f); 1397 1398 /** 1399 * The color olive drab with an RGB value of #6B8E23 1400 * <div style="border:1px solid black;width:40px;height:20px;background-color:#6B8E23;float:right;margin: 0 10px 0 0"></div><br/><br/> 1401 */ 1402 public static final Color OLIVEDRAB = new Color(0.41960785f, 0.5568628f, 0.13725491f); 1403 1404 /** 1405 * The color orange with an RGB value of #FFA500 1406 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFA500;float:right;margin: 0 10px 0 0"></div><br/><br/> 1407 */ 1408 public static final Color ORANGE = new Color(1.0f, 0.64705884f, 0.0f); 1409 1410 /** 1411 * The color orange red with an RGB value of #FF4500 1412 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF4500;float:right;margin: 0 10px 0 0"></div><br/><br/> 1413 */ 1414 public static final Color ORANGERED = new Color(1.0f, 0.27058825f, 0.0f); 1415 1416 /** 1417 * The color orchid with an RGB value of #DA70D6 1418 * <div style="border:1px solid black;width:40px;height:20px;background-color:#DA70D6;float:right;margin: 0 10px 0 0"></div><br/><br/> 1419 */ 1420 public static final Color ORCHID = new Color(0.85490197f, 0.4392157f, 0.8392157f); 1421 1422 /** 1423 * The color pale goldenrod with an RGB value of #EEE8AA 1424 * <div style="border:1px solid black;width:40px;height:20px;background-color:#EEE8AA;float:right;margin: 0 10px 0 0"></div><br/><br/> 1425 */ 1426 public static final Color PALEGOLDENROD = new Color(0.93333334f, 0.9098039f, 0.6666667f); 1427 1428 /** 1429 * The color pale green with an RGB value of #98FB98 1430 * <div style="border:1px solid black;width:40px;height:20px;background-color:#98FB98;float:right;margin: 0 10px 0 0"></div><br/><br/> 1431 */ 1432 public static final Color PALEGREEN = new Color(0.59607846f, 0.9843137f, 0.59607846f); 1433 1434 /** 1435 * The color pale turquoise with an RGB value of #AFEEEE 1436 * <div style="border:1px solid black;width:40px;height:20px;background-color:#AFEEEE;float:right;margin: 0 10px 0 0"></div><br/><br/> 1437 */ 1438 public static final Color PALETURQUOISE = new Color(0.6862745f, 0.93333334f, 0.93333334f); 1439 1440 /** 1441 * The color pale violet red with an RGB value of #DB7093 1442 * <div style="border:1px solid black;width:40px;height:20px;background-color:#DB7093;float:right;margin: 0 10px 0 0"></div><br/><br/> 1443 */ 1444 public static final Color PALEVIOLETRED = new Color(0.85882354f, 0.4392157f, 0.5764706f); 1445 1446 /** 1447 * The color papaya whip with an RGB value of #FFEFD5 1448 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFEFD5;float:right;margin: 0 10px 0 0"></div><br/><br/> 1449 */ 1450 public static final Color PAPAYAWHIP = new Color(1.0f, 0.9372549f, 0.8352941f); 1451 1452 /** 1453 * The color peach puff with an RGB value of #FFDAB9 1454 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFDAB9;float:right;margin: 0 10px 0 0"></div><br/><br/> 1455 */ 1456 public static final Color PEACHPUFF = new Color(1.0f, 0.85490197f, 0.7254902f); 1457 1458 /** 1459 * The color peru with an RGB value of #CD853F 1460 * <div style="border:1px solid black;width:40px;height:20px;background-color:#CD853F;float:right;margin: 0 10px 0 0"></div><br/><br/> 1461 */ 1462 public static final Color PERU = new Color(0.8039216f, 0.52156866f, 0.24705882f); 1463 1464 /** 1465 * The color pink with an RGB value of #FFC0CB 1466 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFC0CB;float:right;margin: 0 10px 0 0"></div><br/><br/> 1467 */ 1468 public static final Color PINK = new Color(1.0f, 0.7529412f, 0.79607844f); 1469 1470 /** 1471 * The color plum with an RGB value of #DDA0DD 1472 * <div style="border:1px solid black;width:40px;height:20px;background-color:#DDA0DD;float:right;margin: 0 10px 0 0"></div><br/><br/> 1473 */ 1474 public static final Color PLUM = new Color(0.8666667f, 0.627451f, 0.8666667f); 1475 1476 /** 1477 * The color powder blue with an RGB value of #B0E0E6 1478 * <div style="border:1px solid black;width:40px;height:20px;background-color:#B0E0E6;float:right;margin: 0 10px 0 0"></div><br/><br/> 1479 */ 1480 public static final Color POWDERBLUE = new Color(0.6901961f, 0.8784314f, 0.9019608f); 1481 1482 /** 1483 * The color purple with an RGB value of #800080 1484 * <div style="border:1px solid black;width:40px;height:20px;background-color:#800080;float:right;margin: 0 10px 0 0"></div><br/><br/> 1485 */ 1486 public static final Color PURPLE = new Color(0.5019608f, 0.0f, 0.5019608f); 1487 1488 /** 1489 * The color red with an RGB value of #FF0000 1490 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF0000;float:right;margin: 0 10px 0 0"></div><br/><br/> 1491 */ 1492 public static final Color RED = new Color(1.0f, 0.0f, 0.0f); 1493 1494 /** 1495 * The color rosy brown with an RGB value of #BC8F8F 1496 * <div style="border:1px solid black;width:40px;height:20px;background-color:#BC8F8F;float:right;margin: 0 10px 0 0"></div><br/><br/> 1497 */ 1498 public static final Color ROSYBROWN = new Color(0.7372549f, 0.56078434f, 0.56078434f); 1499 1500 /** 1501 * The color royal blue with an RGB value of #4169E1 1502 * <div style="border:1px solid black;width:40px;height:20px;background-color:#4169E1;float:right;margin: 0 10px 0 0"></div><br/><br/> 1503 */ 1504 public static final Color ROYALBLUE = new Color(0.25490198f, 0.4117647f, 0.88235295f); 1505 1506 /** 1507 * The color saddle brown with an RGB value of #8B4513 1508 * <div style="border:1px solid black;width:40px;height:20px;background-color:#8B4513;float:right;margin: 0 10px 0 0"></div><br/><br/> 1509 */ 1510 public static final Color SADDLEBROWN = new Color(0.54509807f, 0.27058825f, 0.07450981f); 1511 1512 /** 1513 * The color salmon with an RGB value of #FA8072 1514 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FA8072;float:right;margin: 0 10px 0 0"></div><br/><br/> 1515 */ 1516 public static final Color SALMON = new Color(0.98039216f, 0.5019608f, 0.44705883f); 1517 1518 /** 1519 * The color sandy brown with an RGB value of #F4A460 1520 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F4A460;float:right;margin: 0 10px 0 0"></div><br/><br/> 1521 */ 1522 public static final Color SANDYBROWN = new Color(0.95686275f, 0.6431373f, 0.3764706f); 1523 1524 /** 1525 * The color sea green with an RGB value of #2E8B57 1526 * <div style="border:1px solid black;width:40px;height:20px;background-color:#2E8B57;float:right;margin: 0 10px 0 0"></div><br/><br/> 1527 */ 1528 public static final Color SEAGREEN = new Color(0.18039216f, 0.54509807f, 0.34117648f); 1529 1530 /** 1531 * The color sea shell with an RGB value of #FFF5EE 1532 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFF5EE;float:right;margin: 0 10px 0 0"></div><br/><br/> 1533 */ 1534 public static final Color SEASHELL = new Color(1.0f, 0.9607843f, 0.93333334f); 1535 1536 /** 1537 * The color sienna with an RGB value of #A0522D 1538 * <div style="border:1px solid black;width:40px;height:20px;background-color:#A0522D;float:right;margin: 0 10px 0 0"></div><br/><br/> 1539 */ 1540 public static final Color SIENNA = new Color(0.627451f, 0.32156864f, 0.1764706f); 1541 1542 /** 1543 * The color silver with an RGB value of #C0C0C0 1544 * <div style="border:1px solid black;width:40px;height:20px;background-color:#C0C0C0;float:right;margin: 0 10px 0 0"></div><br/><br/> 1545 */ 1546 public static final Color SILVER = new Color(0.7529412f, 0.7529412f, 0.7529412f); 1547 1548 /** 1549 * The color sky blue with an RGB value of #87CEEB 1550 * <div style="border:1px solid black;width:40px;height:20px;background-color:#87CEEB;float:right;margin: 0 10px 0 0"></div><br/><br/> 1551 */ 1552 public static final Color SKYBLUE = new Color(0.5294118f, 0.80784315f, 0.92156863f); 1553 1554 /** 1555 * The color slate blue with an RGB value of #6A5ACD 1556 * <div style="border:1px solid black;width:40px;height:20px;background-color:#6A5ACD;float:right;margin: 0 10px 0 0"></div><br/><br/> 1557 */ 1558 public static final Color SLATEBLUE = new Color(0.41568628f, 0.3529412f, 0.8039216f); 1559 1560 /** 1561 * The color slate gray with an RGB value of #708090 1562 * <div style="border:1px solid black;width:40px;height:20px;background-color:#708090;float:right;margin: 0 10px 0 0"></div><br/><br/> 1563 */ 1564 public static final Color SLATEGRAY = new Color(0.4392157f, 0.5019608f, 0.5647059f); 1565 1566 /** 1567 * The color slate grey with an RGB value of #708090 1568 * <div style="border:1px solid black;width:40px;height:20px;background-color:#708090;float:right;margin: 0 10px 0 0"></div><br/><br/> 1569 */ 1570 public static final Color SLATEGREY = SLATEGRAY; 1571 1572 /** 1573 * The color snow with an RGB value of #FFFAFA 1574 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFFAFA;float:right;margin: 0 10px 0 0"></div><br/><br/> 1575 */ 1576 public static final Color SNOW = new Color(1.0f, 0.98039216f, 0.98039216f); 1577 1578 /** 1579 * The color spring green with an RGB value of #00FF7F 1580 * <div style="border:1px solid black;width:40px;height:20px;background-color:#00FF7F;float:right;margin: 0 10px 0 0"></div><br/><br/> 1581 */ 1582 public static final Color SPRINGGREEN = new Color(0.0f, 1.0f, 0.49803922f); 1583 1584 /** 1585 * The color steel blue with an RGB value of #4682B4 1586 * <div style="border:1px solid black;width:40px;height:20px;background-color:#4682B4;float:right;margin: 0 10px 0 0"></div><br/><br/> 1587 */ 1588 public static final Color STEELBLUE = new Color(0.27450982f, 0.50980395f, 0.7058824f); 1589 1590 /** 1591 * The color tan with an RGB value of #D2B48C 1592 * <div style="border:1px solid black;width:40px;height:20px;background-color:#D2B48C;float:right;margin: 0 10px 0 0"></div><br/><br/> 1593 */ 1594 public static final Color TAN = new Color(0.8235294f, 0.7058824f, 0.54901963f); 1595 1596 /** 1597 * The color teal with an RGB value of #008080 1598 * <div style="border:1px solid black;width:40px;height:20px;background-color:#008080;float:right;margin: 0 10px 0 0"></div><br/><br/> 1599 */ 1600 public static final Color TEAL = new Color(0.0f, 0.5019608f, 0.5019608f); 1601 1602 /** 1603 * The color thistle with an RGB value of #D8BFD8 1604 * <div style="border:1px solid black;width:40px;height:20px;background-color:#D8BFD8;float:right;margin: 0 10px 0 0"></div><br/><br/> 1605 */ 1606 public static final Color THISTLE = new Color(0.84705883f, 0.7490196f, 0.84705883f); 1607 1608 /** 1609 * The color tomato with an RGB value of #FF6347 1610 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FF6347;float:right;margin: 0 10px 0 0"></div><br/><br/> 1611 */ 1612 public static final Color TOMATO = new Color(1.0f, 0.3882353f, 0.2784314f); 1613 1614 /** 1615 * The color turquoise with an RGB value of #40E0D0 1616 * <div style="border:1px solid black;width:40px;height:20px;background-color:#40E0D0;float:right;margin: 0 10px 0 0"></div><br/><br/> 1617 */ 1618 public static final Color TURQUOISE = new Color(0.2509804f, 0.8784314f, 0.8156863f); 1619 1620 /** 1621 * The color violet with an RGB value of #EE82EE 1622 * <div style="border:1px solid black;width:40px;height:20px;background-color:#EE82EE;float:right;margin: 0 10px 0 0"></div><br/><br/> 1623 */ 1624 public static final Color VIOLET = new Color(0.93333334f, 0.50980395f, 0.93333334f); 1625 1626 /** 1627 * The color wheat with an RGB value of #F5DEB3 1628 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F5DEB3;float:right;margin: 0 10px 0 0"></div><br/><br/> 1629 */ 1630 public static final Color WHEAT = new Color(0.9607843f, 0.87058824f, 0.7019608f); 1631 1632 /** 1633 * The color white with an RGB value of #FFFFFF 1634 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFFFFF;float:right;margin: 0 10px 0 0"></div><br/><br/> 1635 */ 1636 public static final Color WHITE = new Color(1.0f, 1.0f, 1.0f); 1637 1638 /** 1639 * The color white smoke with an RGB value of #F5F5F5 1640 * <div style="border:1px solid black;width:40px;height:20px;background-color:#F5F5F5;float:right;margin: 0 10px 0 0"></div><br/><br/> 1641 */ 1642 public static final Color WHITESMOKE = new Color(0.9607843f, 0.9607843f, 0.9607843f); 1643 1644 /** 1645 * The color yellow with an RGB value of #FFFF00 1646 * <div style="border:1px solid black;width:40px;height:20px;background-color:#FFFF00;float:right;margin: 0 10px 0 0"></div><br/><br/> 1647 */ 1648 public static final Color YELLOW = new Color(1.0f, 1.0f, 0.0f); 1649 1650 /** 1651 * The color yellow green with an RGB value of #9ACD32 1652 * <div style="border:1px solid black;width:40px;height:20px;background-color:#9ACD32;float:right;margin: 0 10px 0 0"></div><br/><br/> 1653 */ 1654 public static final Color YELLOWGREEN = new Color(0.6039216f, 0.8039216f, 0.19607843f); 1655 1656 /* 1657 * Named colors moved to nested class to initialize them only when they 1658 * are needed. 1659 */ 1660 private static final class NamedColors { 1661 private static final Map<String, Color> namedColors = 1662 createNamedColors(); 1663 1664 private NamedColors() { 1665 } 1666 1667 private static Color get(String name) { 1668 return namedColors.get(name); 1669 } 1670 1671 private static Map<String, Color> createNamedColors() { 1672 Map<String, Color> colors = new HashMap<String,Color>(256); 1673 1674 colors.put("aliceblue", ALICEBLUE); 1675 colors.put("antiquewhite", ANTIQUEWHITE); 1676 colors.put("aqua", AQUA); 1677 colors.put("aquamarine", AQUAMARINE); 1678 colors.put("azure", AZURE); 1679 colors.put("beige", BEIGE); 1680 colors.put("bisque", BISQUE); 1681 colors.put("black", BLACK); 1682 colors.put("blanchedalmond", BLANCHEDALMOND); 1683 colors.put("blue", BLUE); 1684 colors.put("blueviolet", BLUEVIOLET); 1685 colors.put("brown", BROWN); 1686 colors.put("burlywood", BURLYWOOD); 1687 colors.put("cadetblue", CADETBLUE); 1688 colors.put("chartreuse", CHARTREUSE); 1689 colors.put("chocolate", CHOCOLATE); 1690 colors.put("coral", CORAL); 1691 colors.put("cornflowerblue", CORNFLOWERBLUE); 1692 colors.put("cornsilk", CORNSILK); 1693 colors.put("crimson", CRIMSON); 1694 colors.put("cyan", CYAN); 1695 colors.put("darkblue", DARKBLUE); 1696 colors.put("darkcyan", DARKCYAN); 1697 colors.put("darkgoldenrod", DARKGOLDENROD); 1698 colors.put("darkgray", DARKGRAY); 1699 colors.put("darkgreen", DARKGREEN); 1700 colors.put("darkgrey", DARKGREY); 1701 colors.put("darkkhaki", DARKKHAKI); 1702 colors.put("darkmagenta", DARKMAGENTA); 1703 colors.put("darkolivegreen", DARKOLIVEGREEN); 1704 colors.put("darkorange", DARKORANGE); 1705 colors.put("darkorchid", DARKORCHID); 1706 colors.put("darkred", DARKRED); 1707 colors.put("darksalmon", DARKSALMON); 1708 colors.put("darkseagreen", DARKSEAGREEN); 1709 colors.put("darkslateblue", DARKSLATEBLUE); 1710 colors.put("darkslategray", DARKSLATEGRAY); 1711 colors.put("darkslategrey", DARKSLATEGREY); 1712 colors.put("darkturquoise", DARKTURQUOISE); 1713 colors.put("darkviolet", DARKVIOLET); 1714 colors.put("deeppink", DEEPPINK); 1715 colors.put("deepskyblue", DEEPSKYBLUE); 1716 colors.put("dimgray", DIMGRAY); 1717 colors.put("dimgrey", DIMGREY); 1718 colors.put("dodgerblue", DODGERBLUE); 1719 colors.put("firebrick", FIREBRICK); 1720 colors.put("floralwhite", FLORALWHITE); 1721 colors.put("forestgreen", FORESTGREEN); 1722 colors.put("fuchsia", FUCHSIA); 1723 colors.put("gainsboro", GAINSBORO); 1724 colors.put("ghostwhite", GHOSTWHITE); 1725 colors.put("gold", GOLD); 1726 colors.put("goldenrod", GOLDENROD); 1727 colors.put("gray", GRAY); 1728 colors.put("green", GREEN); 1729 colors.put("greenyellow", GREENYELLOW); 1730 colors.put("grey", GREY); 1731 colors.put("honeydew", HONEYDEW); 1732 colors.put("hotpink", HOTPINK); 1733 colors.put("indianred", INDIANRED); 1734 colors.put("indigo", INDIGO); 1735 colors.put("ivory", IVORY); 1736 colors.put("khaki", KHAKI); 1737 colors.put("lavender", LAVENDER); 1738 colors.put("lavenderblush", LAVENDERBLUSH); 1739 colors.put("lawngreen", LAWNGREEN); 1740 colors.put("lemonchiffon", LEMONCHIFFON); 1741 colors.put("lightblue", LIGHTBLUE); 1742 colors.put("lightcoral", LIGHTCORAL); 1743 colors.put("lightcyan", LIGHTCYAN); 1744 colors.put("lightgoldenrodyellow", LIGHTGOLDENRODYELLOW); 1745 colors.put("lightgray", LIGHTGRAY); 1746 colors.put("lightgreen", LIGHTGREEN); 1747 colors.put("lightgrey", LIGHTGREY); 1748 colors.put("lightpink", LIGHTPINK); 1749 colors.put("lightsalmon", LIGHTSALMON); 1750 colors.put("lightseagreen", LIGHTSEAGREEN); 1751 colors.put("lightskyblue", LIGHTSKYBLUE); 1752 colors.put("lightslategray", LIGHTSLATEGRAY); 1753 colors.put("lightslategrey", LIGHTSLATEGREY); 1754 colors.put("lightsteelblue", LIGHTSTEELBLUE); 1755 colors.put("lightyellow", LIGHTYELLOW); 1756 colors.put("lime", LIME); 1757 colors.put("limegreen", LIMEGREEN); 1758 colors.put("linen", LINEN); 1759 colors.put("magenta", MAGENTA); 1760 colors.put("maroon", MAROON); 1761 colors.put("mediumaquamarine", MEDIUMAQUAMARINE); 1762 colors.put("mediumblue", MEDIUMBLUE); 1763 colors.put("mediumorchid", MEDIUMORCHID); 1764 colors.put("mediumpurple", MEDIUMPURPLE); 1765 colors.put("mediumseagreen", MEDIUMSEAGREEN); 1766 colors.put("mediumslateblue", MEDIUMSLATEBLUE); 1767 colors.put("mediumspringgreen", MEDIUMSPRINGGREEN); 1768 colors.put("mediumturquoise", MEDIUMTURQUOISE); 1769 colors.put("mediumvioletred", MEDIUMVIOLETRED); 1770 colors.put("midnightblue", MIDNIGHTBLUE); 1771 colors.put("mintcream", MINTCREAM); 1772 colors.put("mistyrose", MISTYROSE); 1773 colors.put("moccasin", MOCCASIN); 1774 colors.put("navajowhite", NAVAJOWHITE); 1775 colors.put("navy", NAVY); 1776 colors.put("oldlace", OLDLACE); 1777 colors.put("olive", OLIVE); 1778 colors.put("olivedrab", OLIVEDRAB); 1779 colors.put("orange", ORANGE); 1780 colors.put("orangered", ORANGERED); 1781 colors.put("orchid", ORCHID); 1782 colors.put("palegoldenrod", PALEGOLDENROD); 1783 colors.put("palegreen", PALEGREEN); 1784 colors.put("paleturquoise", PALETURQUOISE); 1785 colors.put("palevioletred", PALEVIOLETRED); 1786 colors.put("papayawhip", PAPAYAWHIP); 1787 colors.put("peachpuff", PEACHPUFF); 1788 colors.put("peru", PERU); 1789 colors.put("pink", PINK); 1790 colors.put("plum", PLUM); 1791 colors.put("powderblue", POWDERBLUE); 1792 colors.put("purple", PURPLE); 1793 colors.put("red", RED); 1794 colors.put("rosybrown", ROSYBROWN); 1795 colors.put("royalblue", ROYALBLUE); 1796 colors.put("saddlebrown", SADDLEBROWN); 1797 colors.put("salmon", SALMON); 1798 colors.put("sandybrown", SANDYBROWN); 1799 colors.put("seagreen", SEAGREEN); 1800 colors.put("seashell", SEASHELL); 1801 colors.put("sienna", SIENNA); 1802 colors.put("silver", SILVER); 1803 colors.put("skyblue", SKYBLUE); 1804 colors.put("slateblue", SLATEBLUE); 1805 colors.put("slategray", SLATEGRAY); 1806 colors.put("slategrey", SLATEGREY); 1807 colors.put("snow", SNOW); 1808 colors.put("springgreen", SPRINGGREEN); 1809 colors.put("steelblue", STEELBLUE); 1810 colors.put("tan", TAN); 1811 colors.put("teal", TEAL); 1812 colors.put("thistle", THISTLE); 1813 colors.put("tomato", TOMATO); 1814 colors.put("transparent", TRANSPARENT); 1815 colors.put("turquoise", TURQUOISE); 1816 colors.put("violet", VIOLET); 1817 colors.put("wheat", WHEAT); 1818 colors.put("white", WHITE); 1819 colors.put("whitesmoke", WHITESMOKE); 1820 colors.put("yellow", YELLOW); 1821 colors.put("yellowgreen", YELLOWGREEN); 1822 1823 return colors; 1824 } 1825 } 1826 1827 /** 1828 * The red component of the {@code Color}, in the range {@code 0.0-1.0}. 1829 * 1830 * @defaultValue 0.0 1831 */ 1832 public final double getRed() { return red; } 1833 private float red; 1834 1835 /** 1836 * The green component of the {@code Color}, in the range {@code 0.0-1.0}. 1837 * 1838 * @defaultValue 0.0 1839 */ 1840 public final double getGreen() { return green; } 1841 private float green; 1842 1843 /** 1844 * The blue component of the {@code Color}, in the range {@code 0.0-1.0}. 1845 * 1846 * @defaultValue 0.0 1847 */ 1848 public final double getBlue() { return blue; } 1849 private float blue; 1850 1851 /** 1852 * The opacity of the {@code Color}, in the range {@code 0.0-1.0}. 1853 * 1854 * @defaultValue 1.0 1855 */ 1856 public final double getOpacity() { return opacity; } 1857 private float opacity = 1; 1858 1859 /** 1860 * @inheritDoc 1861 * @since JavaFX 8.0 1862 */ 1863 @Override public final boolean isOpaque() { 1864 return opacity >= 1f; 1865 } 1866 1867 private Object platformPaint; 1868 1869 /** 1870 * Creates a new instance of color 1871 * @param red red component ranging from {@code 0} to {@code 1} 1872 * @param green green component ranging from {@code 0} to {@code 1} 1873 * @param blue blue component ranging from {@code 0} to {@code 1} 1874 * @param opacity opacity ranging from {@code 0} to {@code 1} 1875 */ 1876 public Color(@NamedArg("red") double red, @NamedArg("green") double green, @NamedArg("blue") double blue, @NamedArg(value="opacity", defaultValue="1") double opacity) { 1877 if (red < 0 || red > 1) { 1878 throw new IllegalArgumentException("Color's red value (" + red + ") must be in the range 0.0-1.0"); 1879 } 1880 if (green < 0 || green > 1) { 1881 throw new IllegalArgumentException("Color's green value (" + green + ") must be in the range 0.0-1.0"); 1882 } 1883 if (blue < 0 || blue > 1) { 1884 throw new IllegalArgumentException("Color's blue value (" + blue + ") must be in the range 0.0-1.0"); 1885 } 1886 if (opacity < 0 || opacity > 1) { 1887 throw new IllegalArgumentException("Color's opacity value (" + opacity + ") must be in the range 0.0-1.0"); 1888 } 1889 1890 this.red = (float) red; 1891 this.green = (float) green; 1892 this.blue = (float) blue; 1893 this.opacity = (float) opacity; 1894 } 1895 1896 /** 1897 * Creates a new instance of color. This constructor performs no integrity 1898 * checks, and thus should ONLY be used by internal code in Color which 1899 * knows that the hard-coded values are correct. 1900 * 1901 * @param red red component ranging from {@code 0} to {@code 1} 1902 * @param green green component ranging from {@code 0} to {@code 1} 1903 * @param blue blue component ranging from {@code 0} to {@code 1} 1904 * @param opacity opacity ranging from {@code 0} to {@code 1} 1905 */ 1906 private Color(float red, float green, float blue) { 1907 this.red = red; 1908 this.green = green; 1909 this.blue = blue; 1910 } 1911 1912 @Override 1913 Object acc_getPlatformPaint() { 1914 if (platformPaint == null) { 1915 platformPaint = Toolkit.getToolkit().getPaint(this); 1916 } 1917 return platformPaint; 1918 } 1919 1920 /** 1921 * @inheritDoc 1922 */ 1923 @Override public Color interpolate(Color endValue, double t) { 1924 if (t <= 0.0) return this; 1925 if (t >= 1.0) return endValue; 1926 float ft = (float) t; 1927 return new Color( 1928 red + (endValue.red - red) * ft, 1929 green + (endValue.green - green) * ft, 1930 blue + (endValue.blue - blue) * ft, 1931 opacity + (endValue.opacity - opacity) * ft 1932 ); 1933 } 1934 1935 /** 1936 * Indicates whether some other object is "equal to" this one. 1937 * @param obj the reference object with which to compare. 1938 * @return {@code true} if this object is equal to the {@code obj} argument; {@code false} otherwise. 1939 */ 1940 @Override public boolean equals(Object obj) { 1941 if (obj == this) return true; 1942 if (obj instanceof Color) { 1943 Color other = (Color) obj; 1944 return red == other.red 1945 && green == other.green 1946 && blue == other.blue 1947 && opacity == other.opacity; 1948 } else return false; 1949 } 1950 1951 /** 1952 * Returns a hash code for this {@code Color} object. 1953 * @return a hash code for this {@code Color} object. 1954 */ 1955 @Override public int hashCode() { 1956 // construct the 32bit integer representation of this color 1957 int r = (int)Math.round(red * 255.0); 1958 int g = (int)Math.round(green * 255.0); 1959 int b = (int)Math.round(blue * 255.0); 1960 int a = (int)Math.round(opacity * 255.0); 1961 return to32BitInteger(r, g, b, a); 1962 } 1963 1964 /** 1965 * Returns a string representation of this {@code Color}. 1966 * This method is intended to be used only for informational purposes. 1967 * The content and format of the returned string might vary between implementations. 1968 * The returned string might be empty but cannot be {@code null}. 1969 * 1970 * @return the string representation 1971 */ 1972 @Override public String toString() { 1973 int r = (int)Math.round(red * 255.0); 1974 int g = (int)Math.round(green * 255.0); 1975 int b = (int)Math.round(blue * 255.0); 1976 int o = (int)Math.round(opacity * 255.0); 1977 return String.format("0x%02x%02x%02x%02x" , r, g, b, o); 1978 } 1979 }