001// Copyright (c) FIRST and other WPILib contributors.
002// Open Source Software; you can modify and/or share it under the terms of
003// the WPILib BSD license file in the root directory of this project.
004
005package edu.wpi.first.wpilibj.util;
006
007import edu.wpi.first.math.MathUtil;
008import java.util.Objects;
009
010/**
011 * Represents colors.
012 *
013 * <p>Limited to 12 bits of precision.
014 */
015@SuppressWarnings("MemberName")
016public class Color {
017  private static final double kPrecision = Math.pow(2, -12);
018
019  public final double red;
020  public final double green;
021  public final double blue;
022  private String m_name;
023
024  /** Constructs a default color (black). */
025  public Color() {
026    red = 0.0;
027    green = 0.0;
028    blue = 0.0;
029  }
030
031  /**
032   * Constructs a Color from doubles.
033   *
034   * @param red Red value (0-1)
035   * @param green Green value (0-1)
036   * @param blue Blue value (0-1)
037   */
038  public Color(double red, double green, double blue) {
039    this.red = roundAndClamp(red);
040    this.green = roundAndClamp(green);
041    this.blue = roundAndClamp(blue);
042    this.m_name = null;
043  }
044
045  /**
046   * Constructs a Color from ints.
047   *
048   * @param red Red value (0-255)
049   * @param green Green value (0-255)
050   * @param blue Blue value (0-255)
051   */
052  public Color(int red, int green, int blue) {
053    this(red / 255.0, green / 255.0, blue / 255.0);
054  }
055
056  /**
057   * Constructs a Color from a Color8Bit.
058   *
059   * @param color The color
060   */
061  public Color(Color8Bit color) {
062    this(color.red / 255.0, color.green / 255.0, color.blue / 255.0);
063  }
064
065  /**
066   * Constructs a Color from doubles.
067   *
068   * @param red Red value (0-1)
069   * @param green Green value (0-1)
070   * @param blue Blue value (0-1)
071   */
072  private Color(double red, double green, double blue, String name) {
073    this.red = roundAndClamp(red);
074    this.green = roundAndClamp(green);
075    this.blue = roundAndClamp(blue);
076    this.m_name = name;
077  }
078
079  /**
080   * Constructs a Color from a hex string.
081   *
082   * @param hexString a string of the format <code>#RRGGBB</code>
083   * @throws IllegalArgumentException if the hex string is invalid.
084   */
085  public Color(String hexString) {
086    if (hexString.length() != 7 || !hexString.startsWith("#")) {
087      throw new IllegalArgumentException("Invalid hex string \"" + hexString + "\"");
088    }
089
090    this.red = Integer.valueOf(hexString.substring(1, 3), 16) / 255.0;
091    this.green = Integer.valueOf(hexString.substring(3, 5), 16) / 255.0;
092    this.blue = Integer.valueOf(hexString.substring(5, 7), 16) / 255.0;
093  }
094
095  /**
096   * Creates a Color from HSV values.
097   *
098   * @param h The h value [0-180)
099   * @param s The s value [0-255]
100   * @param v The v value [0-255]
101   * @return The color
102   */
103  public static Color fromHSV(int h, int s, int v) {
104    // Loosely based on
105    // https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB
106    // The hue range is split into 60 degree regions where in each region there
107    // is one rgb component at a low value (m), one at a high value (v) and one
108    // that changes (X) from low to high (X+m) or high to low (v-X)
109
110    // Difference between highest and lowest value of any rgb component
111    final int chroma = (s * v) / 255;
112
113    // Because hue is 0-180 rather than 0-360 use 30 not 60
114    final int region = (h / 30) % 6;
115
116    // Remainder converted from 0-30 to 0-255
117    final int remainder = (int) Math.round((h % 30) * (255 / 30.0));
118
119    // Value of the lowest rgb component
120    final int m = v - chroma;
121
122    // Goes from 0 to chroma as hue increases
123    final int X = (chroma * remainder) >> 8;
124
125    switch (region) {
126      case 0:
127        return new Color(v, X + m, m);
128      case 1:
129        return new Color(v - X, v, m);
130      case 2:
131        return new Color(m, v, X + m);
132      case 3:
133        return new Color(m, v - X, v);
134      case 4:
135        return new Color(X + m, m, v);
136      default:
137        return new Color(v, m, v - X);
138    }
139  }
140
141  @Override
142  public boolean equals(Object other) {
143    if (this == other) {
144      return true;
145    }
146    if (other == null || getClass() != other.getClass()) {
147      return false;
148    }
149
150    Color color = (Color) other;
151    return Double.compare(color.red, red) == 0
152        && Double.compare(color.green, green) == 0
153        && Double.compare(color.blue, blue) == 0;
154  }
155
156  @Override
157  public int hashCode() {
158    return Objects.hash(red, green, blue);
159  }
160
161  @Override
162  public String toString() {
163    if (m_name == null) {
164      // cache hex conversion
165      m_name = toHexString();
166    }
167    return m_name;
168  }
169
170  /**
171   * Return this color represented as a hex string.
172   *
173   * @return a string of the format <code>#RRGGBB</code>
174   */
175  public String toHexString() {
176    return String.format(
177        "#%02X%02X%02X", (int) (red * 255), (int) (green * 255), (int) (blue * 255));
178  }
179
180  private static double roundAndClamp(double value) {
181    final var rounded = Math.round((value + kPrecision / 2) / kPrecision) * kPrecision;
182    return MathUtil.clamp(rounded, 0.0, 1.0);
183  }
184
185  /*
186   * FIRST Colors
187   */
188
189  /** 0x1560BD. */
190  public static final Color kDenim = new Color(0.0823529412, 0.376470589, 0.7411764706, "kDenim");
191
192  /** 0x0066B3. */
193  public static final Color kFirstBlue = new Color(0.0, 0.4, 0.7019607844, "kFirstBlue");
194
195  /** 0xED1C24. */
196  public static final Color kFirstRed =
197      new Color(0.9294117648, 0.1098039216, 0.1411764706, "kFirstRed");
198
199  /*
200   * Standard Colors
201   */
202
203  /** 0xF0F8FF. */
204  public static final Color kAliceBlue = new Color(0.9411765f, 0.972549f, 1.0f, "kAliceBlue");
205
206  /** 0xFAEBD7. */
207  public static final Color kAntiqueWhite =
208      new Color(0.98039216f, 0.92156863f, 0.84313726f, "kAntiqueWhite");
209
210  /** 0x00FFFF. */
211  public static final Color kAqua = new Color(0.0f, 1.0f, 1.0f, "kAqua");
212
213  /** 0x7FFFD4. */
214  public static final Color kAquamarine = new Color(0.49803922f, 1.0f, 0.83137256f, "kAquamarine");
215
216  /** 0xF0FFFF. */
217  public static final Color kAzure = new Color(0.9411765f, 1.0f, 1.0f, "kAzure");
218
219  /** 0xF5F5DC. */
220  public static final Color kBeige = new Color(0.9607843f, 0.9607843f, 0.8627451f, "kBeige");
221
222  /** 0xFFE4C4. */
223  public static final Color kBisque = new Color(1.0f, 0.89411765f, 0.76862746f, "kBisque");
224
225  /** 0x000000. */
226  public static final Color kBlack = new Color(0.0f, 0.0f, 0.0f, "kBlack");
227
228  /** 0xFFEBCD. */
229  public static final Color kBlanchedAlmond =
230      new Color(1.0f, 0.92156863f, 0.8039216f, "kBlanchedAlmond");
231
232  /** 0x0000FF. */
233  public static final Color kBlue = new Color(0.0f, 0.0f, 1.0f, "kBlue");
234
235  /** 0x8A2BE2. */
236  public static final Color kBlueViolet =
237      new Color(0.5411765f, 0.16862746f, 0.8862745f, "kBlueViolet");
238
239  /** 0xA52A2A. */
240  public static final Color kBrown = new Color(0.64705884f, 0.16470589f, 0.16470589f, "kBrown");
241
242  /** 0xDEB887. */
243  public static final Color kBurlywood =
244      new Color(0.87058824f, 0.72156864f, 0.5294118f, "kBurlywood");
245
246  /** 0x5F9EA0. */
247  public static final Color kCadetBlue =
248      new Color(0.37254903f, 0.61960787f, 0.627451f, "kCadetBlue");
249
250  /** 0x7FFF00. */
251  public static final Color kChartreuse = new Color(0.49803922f, 1.0f, 0.0f, "kChartreuse");
252
253  /** 0xD2691E. */
254  public static final Color kChocolate =
255      new Color(0.8235294f, 0.4117647f, 0.11764706f, "kChocolate");
256
257  /** 0xFF7F50. */
258  public static final Color kCoral = new Color(1.0f, 0.49803922f, 0.3137255f, "kCoral");
259
260  /** 0x6495ED. */
261  public static final Color kCornflowerBlue =
262      new Color(0.39215687f, 0.58431375f, 0.92941177f, "kCornflowerBlue");
263
264  /** 0xFFF8DC. */
265  public static final Color kCornsilk = new Color(1.0f, 0.972549f, 0.8627451f, "kCornsilk");
266
267  /** 0xDC143C. */
268  public static final Color kCrimson = new Color(0.8627451f, 0.078431375f, 0.23529412f, "kCrimson");
269
270  /** 0x00FFFF. */
271  public static final Color kCyan = new Color(0.0f, 1.0f, 1.0f, "kCyan");
272
273  /** 0x00008B. */
274  public static final Color kDarkBlue = new Color(0.0f, 0.0f, 0.54509807f, "kDarkBlue");
275
276  /** 0x008B8B. */
277  public static final Color kDarkCyan = new Color(0.0f, 0.54509807f, 0.54509807f, "kDarkCyan");
278
279  /** 0xB8860B. */
280  public static final Color kDarkGoldenrod =
281      new Color(0.72156864f, 0.5254902f, 0.043137256f, "kDarkGoldenrod");
282
283  /** 0xA9A9A9. */
284  public static final Color kDarkGray = new Color(0.6627451f, 0.6627451f, 0.6627451f, "kDarkGray");
285
286  /** 0x006400. */
287  public static final Color kDarkGreen = new Color(0.0f, 0.39215687f, 0.0f, "kDarkGreen");
288
289  /** 0xBDB76B. */
290  public static final Color kDarkKhaki =
291      new Color(0.7411765f, 0.7176471f, 0.41960785f, "kDarkKhaki");
292
293  /** 0x8B008B. */
294  public static final Color kDarkMagenta =
295      new Color(0.54509807f, 0.0f, 0.54509807f, "kDarkMagenta");
296
297  /** 0x556B2F. */
298  public static final Color kDarkOliveGreen =
299      new Color(0.33333334f, 0.41960785f, 0.18431373f, "kDarkOliveGreen");
300
301  /** 0xFF8C00. */
302  public static final Color kDarkOrange = new Color(1.0f, 0.54901963f, 0.0f, "kDarkOrange");
303
304  /** 0x9932CC. */
305  public static final Color kDarkOrchid = new Color(0.6f, 0.19607843f, 0.8f, "kDarkOrchid");
306
307  /** 0x8B0000. */
308  public static final Color kDarkRed = new Color(0.54509807f, 0.0f, 0.0f, "kDarkRed");
309
310  /** 0xE9967A. */
311  public static final Color kDarkSalmon =
312      new Color(0.9137255f, 0.5882353f, 0.47843137f, "kDarkSalmon");
313
314  /** 0x8FBC8F. */
315  public static final Color kDarkSeaGreen =
316      new Color(0.56078434f, 0.7372549f, 0.56078434f, "kDarkSeaGreen");
317
318  /** 0x483D8B. */
319  public static final Color kDarkSlateBlue =
320      new Color(0.28235295f, 0.23921569f, 0.54509807f, "kDarkSlateBlue");
321
322  /** 0x2F4F4F. */
323  public static final Color kDarkSlateGray =
324      new Color(0.18431373f, 0.30980393f, 0.30980393f, "kDarkSlateGray");
325
326  /** 0x00CED1. */
327  public static final Color kDarkTurquoise =
328      new Color(0.0f, 0.80784315f, 0.81960785f, "kDarkTurquoise");
329
330  /** 0x9400D3. */
331  public static final Color kDarkViolet = new Color(0.5803922f, 0.0f, 0.827451f, "kDarkViolet");
332
333  /** 0xFF1493. */
334  public static final Color kDeepPink = new Color(1.0f, 0.078431375f, 0.5764706f, "kDeepPink");
335
336  /** 0x00BFFF. */
337  public static final Color kDeepSkyBlue = new Color(0.0f, 0.7490196f, 1.0f, "kDeepSkyBlue");
338
339  /** 0x696969. */
340  public static final Color kDimGray = new Color(0.4117647f, 0.4117647f, 0.4117647f, "kDimGray");
341
342  /** 0x1E90FF. */
343  public static final Color kDodgerBlue = new Color(0.11764706f, 0.5647059f, 1.0f, "kDodgerBlue");
344
345  /** 0xB22222. */
346  public static final Color kFirebrick =
347      new Color(0.69803923f, 0.13333334f, 0.13333334f, "kFirebrick");
348
349  /** 0xFFFAF0. */
350  public static final Color kFloralWhite = new Color(1.0f, 0.98039216f, 0.9411765f, "kFloralWhite");
351
352  /** 0x228B22. */
353  public static final Color kForestGreen =
354      new Color(0.13333334f, 0.54509807f, 0.13333334f, "kForestGreen");
355
356  /** 0xFF00FF. */
357  public static final Color kFuchsia = new Color(1.0f, 0.0f, 1.0f, "kFuchsia");
358
359  /** 0xDCDCDC. */
360  public static final Color kGainsboro =
361      new Color(0.8627451f, 0.8627451f, 0.8627451f, "kGainsboro");
362
363  /** 0xF8F8FF. */
364  public static final Color kGhostWhite = new Color(0.972549f, 0.972549f, 1.0f, "kGhostWhite");
365
366  /** 0xFFD700. */
367  public static final Color kGold = new Color(1.0f, 0.84313726f, 0.0f, "kGold");
368
369  /** 0xDAA520. */
370  public static final Color kGoldenrod =
371      new Color(0.85490197f, 0.64705884f, 0.1254902f, "kGoldenrod");
372
373  /** 0x808080. */
374  public static final Color kGray = new Color(0.5019608f, 0.5019608f, 0.5019608f, "kGray");
375
376  /** 0x008000. */
377  public static final Color kGreen = new Color(0.0f, 0.5019608f, 0.0f, "kGreen");
378
379  /** 0xADFF2F. */
380  public static final Color kGreenYellow = new Color(0.6784314f, 1.0f, 0.18431373f, "kGreenYellow");
381
382  /** 0xF0FFF0. */
383  public static final Color kHoneydew = new Color(0.9411765f, 1.0f, 0.9411765f, "kHoneydew");
384
385  /** 0xFF69B4. */
386  public static final Color kHotPink = new Color(1.0f, 0.4117647f, 0.7058824f, "kHotPink");
387
388  /** 0xCD5C5C. */
389  public static final Color kIndianRed =
390      new Color(0.8039216f, 0.36078432f, 0.36078432f, "kIndianRed");
391
392  /** 0x4B0082. */
393  public static final Color kIndigo = new Color(0.29411766f, 0.0f, 0.50980395f, "kIndigo");
394
395  /** 0xFFFFF0. */
396  public static final Color kIvory = new Color(1.0f, 1.0f, 0.9411765f, "kIvory");
397
398  /** 0xF0E68C. */
399  public static final Color kKhaki = new Color(0.9411765f, 0.9019608f, 0.54901963f, "kKhaki");
400
401  /** 0xE6E6FA. */
402  public static final Color kLavender = new Color(0.9019608f, 0.9019608f, 0.98039216f, "kLavender");
403
404  /** 0xFFF0F5. */
405  public static final Color kLavenderBlush =
406      new Color(1.0f, 0.9411765f, 0.9607843f, "kLavenderBlush");
407
408  /** 0x7CFC00. */
409  public static final Color kLawnGreen = new Color(0.4862745f, 0.9882353f, 0.0f, "kLawnGreen");
410
411  /** 0xFFFACD. */
412  public static final Color kLemonChiffon =
413      new Color(1.0f, 0.98039216f, 0.8039216f, "kLemonChiffon");
414
415  /** 0xADD8E6. */
416  public static final Color kLightBlue =
417      new Color(0.6784314f, 0.84705883f, 0.9019608f, "kLightBlue");
418
419  /** 0xF08080. */
420  public static final Color kLightCoral =
421      new Color(0.9411765f, 0.5019608f, 0.5019608f, "kLightCoral");
422
423  /** 0xE0FFFF. */
424  public static final Color kLightCyan = new Color(0.8784314f, 1.0f, 1.0f, "kLightCyan");
425
426  /** 0xFAFAD2. */
427  public static final Color kLightGoldenrodYellow =
428      new Color(0.98039216f, 0.98039216f, 0.8235294f, "kLightGoldenrodYellow");
429
430  /** 0xD3D3D3. */
431  public static final Color kLightGray = new Color(0.827451f, 0.827451f, 0.827451f, "kLightGray");
432
433  /** 0x90EE90. */
434  public static final Color kLightGreen =
435      new Color(0.5647059f, 0.93333334f, 0.5647059f, "kLightGreen");
436
437  /** 0xFFB6C1. */
438  public static final Color kLightPink = new Color(1.0f, 0.7137255f, 0.75686276f, "kLightPink");
439
440  /** 0xFFA07A. */
441  public static final Color kLightSalmon = new Color(1.0f, 0.627451f, 0.47843137f, "kLightSalmon");
442
443  /** 0x20B2AA. */
444  public static final Color kLightSeaGreen =
445      new Color(0.1254902f, 0.69803923f, 0.6666667f, "kLightSeaGreen");
446
447  /** 0x87CEFA. */
448  public static final Color kLightSkyBlue =
449      new Color(0.5294118f, 0.80784315f, 0.98039216f, "kLightSkyBlue");
450
451  /** 0x778899. */
452  public static final Color kLightSlateGray =
453      new Color(0.46666667f, 0.53333336f, 0.6f, "kLightSlateGray");
454
455  /** 0xB0C4DE. */
456  public static final Color kLightSteelBlue =
457      new Color(0.6901961f, 0.76862746f, 0.87058824f, "kLightSteelBlue");
458
459  /** 0xFFFFE0. */
460  public static final Color kLightYellow = new Color(1.0f, 1.0f, 0.8784314f, "kLightYellow");
461
462  /** 0x00FF00. */
463  public static final Color kLime = new Color(0.0f, 1.0f, 0.0f, "kLime");
464
465  /** 0x32CD32. */
466  public static final Color kLimeGreen =
467      new Color(0.19607843f, 0.8039216f, 0.19607843f, "kLimeGreen");
468
469  /** 0xFAF0E6. */
470  public static final Color kLinen = new Color(0.98039216f, 0.9411765f, 0.9019608f, "kLinen");
471
472  /** 0xFF00FF. */
473  public static final Color kMagenta = new Color(1.0f, 0.0f, 1.0f, "kMagenta");
474
475  /** 0x800000. */
476  public static final Color kMaroon = new Color(0.5019608f, 0.0f, 0.0f, "kMaroon");
477
478  /** 0x66CDAA. */
479  public static final Color kMediumAquamarine =
480      new Color(0.4f, 0.8039216f, 0.6666667f, "kMediumAquamarine");
481
482  /** 0x0000CD. */
483  public static final Color kMediumBlue = new Color(0.0f, 0.0f, 0.8039216f, "kMediumBlue");
484
485  /** 0xBA55D3. */
486  public static final Color kMediumOrchid =
487      new Color(0.7294118f, 0.33333334f, 0.827451f, "kMediumOrchid");
488
489  /** 0x9370DB. */
490  public static final Color kMediumPurple =
491      new Color(0.5764706f, 0.4392157f, 0.85882354f, "kMediumPurple");
492
493  /** 0x3CB371. */
494  public static final Color kMediumSeaGreen =
495      new Color(0.23529412f, 0.7019608f, 0.44313726f, "kMediumSeaGreen");
496
497  /** 0x7B68EE. */
498  public static final Color kMediumSlateBlue =
499      new Color(0.48235294f, 0.40784314f, 0.93333334f, "kMediumSlateBlue");
500
501  /** 0x00FA9A. */
502  public static final Color kMediumSpringGreen =
503      new Color(0.0f, 0.98039216f, 0.6039216f, "kMediumSpringGreen");
504
505  /** 0x48D1CC. */
506  public static final Color kMediumTurquoise =
507      new Color(0.28235295f, 0.81960785f, 0.8f, "kMediumTurquoise");
508
509  /** 0xC71585. */
510  public static final Color kMediumVioletRed =
511      new Color(0.78039217f, 0.08235294f, 0.52156866f, "kMediumVioletRed");
512
513  /** 0x191970. */
514  public static final Color kMidnightBlue =
515      new Color(0.09803922f, 0.09803922f, 0.4392157f, "kMidnightBlue");
516
517  /** 0xF5FFFA. */
518  public static final Color kMintcream = new Color(0.9607843f, 1.0f, 0.98039216f, "kMintcream");
519
520  /** 0xFFE4E1. */
521  public static final Color kMistyRose = new Color(1.0f, 0.89411765f, 0.88235295f, "kMistyRose");
522
523  /** 0xFFE4B5. */
524  public static final Color kMoccasin = new Color(1.0f, 0.89411765f, 0.70980394f, "kMoccasin");
525
526  /** 0xFFDEAD. */
527  public static final Color kNavajoWhite = new Color(1.0f, 0.87058824f, 0.6784314f, "kNavajoWhite");
528
529  /** 0x000080. */
530  public static final Color kNavy = new Color(0.0f, 0.0f, 0.5019608f, "kNavy");
531
532  /** 0xFDF5E6. */
533  public static final Color kOldLace = new Color(0.99215686f, 0.9607843f, 0.9019608f, "kOldLace");
534
535  /** 0x808000. */
536  public static final Color kOlive = new Color(0.5019608f, 0.5019608f, 0.0f, "kOlive");
537
538  /** 0x6B8E23. */
539  public static final Color kOliveDrab =
540      new Color(0.41960785f, 0.5568628f, 0.13725491f, "kOliveDrab");
541
542  /** 0xFFA500. */
543  public static final Color kOrange = new Color(1.0f, 0.64705884f, 0.0f, "kOrange");
544
545  /** 0xFF4500. */
546  public static final Color kOrangeRed = new Color(1.0f, 0.27058825f, 0.0f, "kOrangeRed");
547
548  /** 0xDA70D6. */
549  public static final Color kOrchid = new Color(0.85490197f, 0.4392157f, 0.8392157f, "kOrchid");
550
551  /** 0xEEE8AA. */
552  public static final Color kPaleGoldenrod =
553      new Color(0.93333334f, 0.9098039f, 0.6666667f, "kPaleGoldenrod");
554
555  /** 0x98FB98. */
556  public static final Color kPaleGreen =
557      new Color(0.59607846f, 0.9843137f, 0.59607846f, "kPaleGreen");
558
559  /** 0xAFEEEE. */
560  public static final Color kPaleTurquoise =
561      new Color(0.6862745f, 0.93333334f, 0.93333334f, "kPaleTurquoise");
562
563  /** 0xDB7093. */
564  public static final Color kPaleVioletRed =
565      new Color(0.85882354f, 0.4392157f, 0.5764706f, "kPaleVioletRed");
566
567  /** 0xFFEFD5. */
568  public static final Color kPapayaWhip = new Color(1.0f, 0.9372549f, 0.8352941f, "kPapayaWhip");
569
570  /** 0xFFDAB9. */
571  public static final Color kPeachPuff = new Color(1.0f, 0.85490197f, 0.7254902f, "kPeachPuff");
572
573  /** 0xCD853F. */
574  public static final Color kPeru = new Color(0.8039216f, 0.52156866f, 0.24705882f, "kPeru");
575
576  /** 0xFFC0CB. */
577  public static final Color kPink = new Color(1.0f, 0.7529412f, 0.79607844f, "kPink");
578
579  /** 0xDDA0DD. */
580  public static final Color kPlum = new Color(0.8666667f, 0.627451f, 0.8666667f, "kPlum");
581
582  /** 0xB0E0E6. */
583  public static final Color kPowderBlue =
584      new Color(0.6901961f, 0.8784314f, 0.9019608f, "kPowderBlue");
585
586  /** 0x800080. */
587  public static final Color kPurple = new Color(0.5019608f, 0.0f, 0.5019608f, "kPurple");
588
589  /** 0xFF0000. */
590  public static final Color kRed = new Color(1.0f, 0.0f, 0.0f, "kRed");
591
592  /** 0xBC8F8F. */
593  public static final Color kRosyBrown =
594      new Color(0.7372549f, 0.56078434f, 0.56078434f, "kRosyBrown");
595
596  /** 0x4169E1. */
597  public static final Color kRoyalBlue =
598      new Color(0.25490198f, 0.4117647f, 0.88235295f, "kRoyalBlue");
599
600  /** 0x8B4513. */
601  public static final Color kSaddleBrown =
602      new Color(0.54509807f, 0.27058825f, 0.07450981f, "kSaddleBrown");
603
604  /** 0xFA8072. */
605  public static final Color kSalmon = new Color(0.98039216f, 0.5019608f, 0.44705883f, "kSalmon");
606
607  /** 0xF4A460. */
608  public static final Color kSandyBrown =
609      new Color(0.95686275f, 0.6431373f, 0.3764706f, "kSandyBrown");
610
611  /** 0x2E8B57. */
612  public static final Color kSeaGreen =
613      new Color(0.18039216f, 0.54509807f, 0.34117648f, "kSeaGreen");
614
615  /** 0xFFF5EE. */
616  public static final Color kSeashell = new Color(1.0f, 0.9607843f, 0.93333334f, "kSeashell");
617
618  /** 0xA0522D. */
619  public static final Color kSienna = new Color(0.627451f, 0.32156864f, 0.1764706f, "kSienna");
620
621  /** 0xC0C0C0. */
622  public static final Color kSilver = new Color(0.7529412f, 0.7529412f, 0.7529412f, "kSilver");
623
624  /** 0x87CEEB. */
625  public static final Color kSkyBlue = new Color(0.5294118f, 0.80784315f, 0.92156863f, "kSkyBlue");
626
627  /** 0x6A5ACD. */
628  public static final Color kSlateBlue =
629      new Color(0.41568628f, 0.3529412f, 0.8039216f, "kSlateBlue");
630
631  /** 0x708090. */
632  public static final Color kSlateGray =
633      new Color(0.4392157f, 0.5019608f, 0.5647059f, "kSlateGray");
634
635  /** 0xFFFAFA. */
636  public static final Color kSnow = new Color(1.0f, 0.98039216f, 0.98039216f, "kSnow");
637
638  /** 0x00FF7F. */
639  public static final Color kSpringGreen = new Color(0.0f, 1.0f, 0.49803922f, "kSpringGreen");
640
641  /** 0x4682B4. */
642  public static final Color kSteelBlue =
643      new Color(0.27450982f, 0.50980395f, 0.7058824f, "kSteelBlue");
644
645  /** 0xD2B48C. */
646  public static final Color kTan = new Color(0.8235294f, 0.7058824f, 0.54901963f, "kTan");
647
648  /** 0x008080. */
649  public static final Color kTeal = new Color(0.0f, 0.5019608f, 0.5019608f, "kTeal");
650
651  /** 0xD8BFD8. */
652  public static final Color kThistle = new Color(0.84705883f, 0.7490196f, 0.84705883f, "kThistle");
653
654  /** 0xFF6347. */
655  public static final Color kTomato = new Color(1.0f, 0.3882353f, 0.2784314f, "kTomato");
656
657  /** 0x40E0D0. */
658  public static final Color kTurquoise =
659      new Color(0.2509804f, 0.8784314f, 0.8156863f, "kTurquoise");
660
661  /** 0xEE82EE. */
662  public static final Color kViolet = new Color(0.93333334f, 0.50980395f, 0.93333334f, "kViolet");
663
664  /** 0xF5DEB3. */
665  public static final Color kWheat = new Color(0.9607843f, 0.87058824f, 0.7019608f, "kWheat");
666
667  /** 0xFFFFFF. */
668  public static final Color kWhite = new Color(1.0f, 1.0f, 1.0f, "kWhite");
669
670  /** 0xF5F5F5. */
671  public static final Color kWhiteSmoke =
672      new Color(0.9607843f, 0.9607843f, 0.9607843f, "kWhiteSmoke");
673
674  /** 0xFFFF00. */
675  public static final Color kYellow = new Color(1.0f, 1.0f, 0.0f, "kYellow");
676
677  /** 0x9ACD32. */
678  public static final Color kYellowGreen =
679      new Color(0.6039216f, 0.8039216f, 0.19607843f, "kYellowGreen");
680}