src/Pure/GUI/color_value.scala
author wenzelm
Wed, 15 Jan 2020 19:46:04 +0100
changeset 71381 b9ea2467c929
parent 70083 96776eb41854
child 75393 87ebf5a50283
permissions -rw-r--r--
tuned -- avoid deprecated constructors;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
53783
f5e9d182f645 clarified location of GUI modules (which depend on Swing of JFX);
wenzelm
parents: 49322
diff changeset
     1
/*  Title:      Pure/GUI/color_value.scala
49294
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     3
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     4
Cached color values.
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     5
*/
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     6
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     7
package isabelle
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     8
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
     9
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    10
import java.awt.Color
62570
f4c96158a3b8 prefer explicit locale;
wenzelm
parents: 56599
diff changeset
    11
import java.util.Locale
49294
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    12
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    13
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    14
object Color_Value
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    15
{
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    16
  private var cache = Map.empty[String, Color]
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    17
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    18
  def parse(s: String): Color =
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    19
  {
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    20
    val i = java.lang.Long.parseLong(s, 16)
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    21
    val r = ((i >> 24) & 0xFF).toInt
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    22
    val g = ((i >> 16) & 0xFF).toInt
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    23
    val b = ((i >> 8) & 0xFF).toInt
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    24
    val a = (i & 0xFF).toInt
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    25
    new Color(r, g, b, a)
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    26
  }
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    27
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    28
  def print(c: Color): String =
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    29
  {
71381
b9ea2467c929 tuned -- avoid deprecated constructors;
wenzelm
parents: 70083
diff changeset
    30
    val r = java.lang.Integer.valueOf(c.getRed)
b9ea2467c929 tuned -- avoid deprecated constructors;
wenzelm
parents: 70083
diff changeset
    31
    val g = java.lang.Integer.valueOf(c.getGreen)
b9ea2467c929 tuned -- avoid deprecated constructors;
wenzelm
parents: 70083
diff changeset
    32
    val b = java.lang.Integer.valueOf(c.getBlue)
b9ea2467c929 tuned -- avoid deprecated constructors;
wenzelm
parents: 70083
diff changeset
    33
    val a = java.lang.Integer.valueOf(c.getAlpha)
62570
f4c96158a3b8 prefer explicit locale;
wenzelm
parents: 56599
diff changeset
    34
    Word.uppercase(String.format(Locale.ROOT, "%02x%02x%02x%02x", r, g, b, a))
49294
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    35
  }
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    36
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    37
  def apply(s: String): Color =
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    38
    synchronized {
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    39
      cache.get(s) match {
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    40
        case Some(c) => c
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    41
        case None =>
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    42
          val c = parse(s)
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    43
          cache += (s -> c)
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    44
          c
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    45
      }
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    46
    }
a600c017f814 provide color values via options;
wenzelm
parents:
diff changeset
    47
}