Class: SilkLayout::CSS::Color
- Inherits:
-
Object
- Object
- SilkLayout::CSS::Color
- Defined in:
- lib/silk_layout/css/color.rb
Constant Summary collapse
- NAMED_COLOR_HEX =
{ "aliceblue" => "f0f8ff", "antiquewhite" => "faebd7", "aqua" => "00ffff", "aquamarine" => "7fffd4", "azure" => "f0ffff", "beige" => "f5f5dc", "bisque" => "ffe4c4", "black" => "000000", "blanchedalmond" => "ffebcd", "blue" => "0000ff", "blueviolet" => "8a2be2", "brown" => "a52a2a", "burlywood" => "deb887", "cadetblue" => "5f9ea0", "chartreuse" => "7fff00", "chocolate" => "d2691e", "coral" => "ff7f50", "cornflowerblue" => "6495ed", "cornsilk" => "fff8dc", "crimson" => "dc143c", "cyan" => "00ffff", "darkblue" => "00008b", "darkcyan" => "008b8b", "darkgoldenrod" => "b8860b", "darkgray" => "a9a9a9", "darkgreen" => "006400", "darkgrey" => "a9a9a9", "darkkhaki" => "bdb76b", "darkmagenta" => "8b008b", "darkolivegreen" => "556b2f", "darkorange" => "ff8c00", "darkorchid" => "9932cc", "darkred" => "8b0000", "darksalmon" => "e9967a", "darkseagreen" => "8fbc8f", "darkslateblue" => "483d8b", "darkslategray" => "2f4f4f", "darkslategrey" => "2f4f4f", "darkturquoise" => "00ced1", "darkviolet" => "9400d3", "deeppink" => "ff1493", "deepskyblue" => "00bfff", "dimgray" => "696969", "dimgrey" => "696969", "dodgerblue" => "1e90ff", "firebrick" => "b22222", "floralwhite" => "fffaf0", "forestgreen" => "228b22", "fuchsia" => "ff00ff", "gainsboro" => "dcdcdc", "ghostwhite" => "f8f8ff", "gold" => "ffd700", "goldenrod" => "daa520", "gray" => "808080", "green" => "008000", "greenyellow" => "adff2f", "grey" => "808080", "honeydew" => "f0fff0", "hotpink" => "ff69b4", "indianred" => "cd5c5c", "indigo" => "4b0082", "ivory" => "fffff0", "khaki" => "f0e68c", "lavender" => "e6e6fa", "lavenderblush" => "fff0f5", "lawngreen" => "7cfc00", "lemonchiffon" => "fffacd", "lightblue" => "add8e6", "lightcoral" => "f08080", "lightcyan" => "e0ffff", "lightgoldenrodyellow" => "fafad2", "lightgray" => "d3d3d3", "lightgreen" => "90ee90", "lightgrey" => "d3d3d3", "lightpink" => "ffb6c1", "lightsalmon" => "ffa07a", "lightseagreen" => "20b2aa", "lightskyblue" => "87cefa", "lightslategray" => "778899", "lightslategrey" => "778899", "lightsteelblue" => "b0c4de", "lightyellow" => "ffffe0", "lime" => "00ff00", "limegreen" => "32cd32", "linen" => "faf0e6", "magenta" => "ff00ff", "maroon" => "800000", "mediumaquamarine" => "66cdaa", "mediumblue" => "0000cd", "mediumorchid" => "ba55d3", "mediumpurple" => "9370db", "mediumseagreen" => "3cb371", "mediumslateblue" => "7b68ee", "mediumspringgreen" => "00fa9a", "mediumturquoise" => "48d1cc", "mediumvioletred" => "c71585", "midnightblue" => "191970", "mintcream" => "f5fffa", "mistyrose" => "ffe4e1", "moccasin" => "ffe4b5", "navajowhite" => "ffdead", "navy" => "000080", "oldlace" => "fdf5e6", "olive" => "808000", "olivedrab" => "6b8e23", "orange" => "ffa500", "orangered" => "ff4500", "orchid" => "da70d6", "palegoldenrod" => "eee8aa", "palegreen" => "98fb98", "paleturquoise" => "afeeee", "palevioletred" => "db7093", "papayawhip" => "ffefd5", "peachpuff" => "ffdab9", "peru" => "cd853f", "pink" => "ffc0cb", "plum" => "dda0dd", "powderblue" => "b0e0e6", "purple" => "800080", "rebeccapurple" => "663399", "red" => "ff0000", "rosybrown" => "bc8f8f", "royalblue" => "4169e1", "saddlebrown" => "8b4513", "salmon" => "fa8072", "sandybrown" => "f4a460", "seagreen" => "2e8b57", "seashell" => "fff5ee", "sienna" => "a0522d", "silver" => "c0c0c0", "skyblue" => "87ceeb", "slateblue" => "6a5acd", "slategray" => "708090", "slategrey" => "708090", "snow" => "fffafa", "springgreen" => "00ff7f", "steelblue" => "4682b4", "tan" => "d2b48c", "teal" => "008080", "thistle" => "d8bfd8", "tomato" => "ff6347", "turquoise" => "40e0d0", "violet" => "ee82ee", "wheat" => "f5deb3", "white" => "ffffff", "whitesmoke" => "f5f5f5", "yellow" => "ffff00", "yellowgreen" => "9acd32" }.freeze
- NAMED_COLORS =
NAMED_COLOR_HEX.transform_values do |hex| hex.scan(/../).map { |component| component.to_i(16) } end.freeze
- FUNCTION_PATTERN =
/\A([a-z]+)\((.*)\)\z/- NUMBER_PATTERN =
/\A[-+]?(?:\d+\.?\d*|\.\d+)\z/
Instance Attribute Summary collapse
-
#alpha ⇒ Object
readonly
Returns the value of attribute alpha.
-
#blue ⇒ Object
readonly
Returns the value of attribute blue.
-
#green ⇒ Object
readonly
Returns the value of attribute green.
-
#normalized ⇒ Object
readonly
Returns the value of attribute normalized.
-
#red ⇒ Object
readonly
Returns the value of attribute red.
Class Method Summary collapse
- .parse(value) ⇒ Object
-
.rgb(value) ⇒ Object
The renderer currently paints RGB only.
Instance Method Summary collapse
- #clamp_byte(value) ⇒ Object
- #clamp_unit(value) ⇒ Object
-
#initialize(red, green, blue, normalized:, alpha: 1.0) ⇒ Color
constructor
A new instance of Color.
- #rgb ⇒ Object
- #to_s ⇒ Object
- #to_sym ⇒ Object
- #transparent? ⇒ Boolean
Constructor Details
#initialize(red, green, blue, normalized:, alpha: 1.0) ⇒ Color
Returns a new instance of Color.
207 208 209 210 211 212 213 |
# File 'lib/silk_layout/css/color.rb', line 207 def initialize(red, green, blue, normalized:, alpha: 1.0) @red = clamp_byte(red) @green = clamp_byte(green) @blue = clamp_byte(blue) @alpha = clamp_unit(alpha) @normalized = normalized end |
Instance Attribute Details
#alpha ⇒ Object (readonly)
Returns the value of attribute alpha.
6 7 8 |
# File 'lib/silk_layout/css/color.rb', line 6 def alpha @alpha end |
#blue ⇒ Object (readonly)
Returns the value of attribute blue.
6 7 8 |
# File 'lib/silk_layout/css/color.rb', line 6 def blue @blue end |
#green ⇒ Object (readonly)
Returns the value of attribute green.
6 7 8 |
# File 'lib/silk_layout/css/color.rb', line 6 def green @green end |
#normalized ⇒ Object (readonly)
Returns the value of attribute normalized.
6 7 8 |
# File 'lib/silk_layout/css/color.rb', line 6 def normalized @normalized end |
#red ⇒ Object (readonly)
Returns the value of attribute red.
6 7 8 |
# File 'lib/silk_layout/css/color.rb', line 6 def red @red end |
Class Method Details
.parse(value) ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/silk_layout/css/color.rb', line 170 def self.parse(value) return value if value.is_a?(self) raw = value.to_s.strip return nil if raw.empty? normalized = raw.downcase return new(0, 0, 0, alpha: 0, normalized: "transparent") if normalized == "transparent" if (rgb = NAMED_COLORS[normalized]) return new(*rgb, normalized: normalized) end return parse_hex(normalized) if normalized.start_with?("#") match = normalized.match(FUNCTION_PATTERN) return nil unless match case match[1] when "rgb", "rgba" parse_rgb_function(match[1], match[2], normalized) when "hsl", "hsla" parse_hsl_function(match[1], match[2], normalized) end end |
.rgb(value) ⇒ Object
The renderer currently paints RGB only. Alpha is kept on parsed colors; conversion treats fully transparent colors as not paintable and ignores partial alpha as a best-effort fallback.
199 200 201 202 203 204 205 |
# File 'lib/silk_layout/css/color.rb', line 199 def self.rgb(value) color = parse(value) return nil unless color return nil if color.transparent? color.rgb end |
Instance Method Details
#clamp_byte(value) ⇒ Object
406 407 408 |
# File 'lib/silk_layout/css/color.rb', line 406 def clamp_byte(value) value.to_f.round.clamp(0, 255) end |
#clamp_unit(value) ⇒ Object
410 411 412 |
# File 'lib/silk_layout/css/color.rb', line 410 def clamp_unit(value) value.to_f.clamp(0, 1) end |
#rgb ⇒ Object
215 216 217 |
# File 'lib/silk_layout/css/color.rb', line 215 def rgb [red, green, blue] end |
#to_s ⇒ Object
227 228 229 |
# File 'lib/silk_layout/css/color.rb', line 227 def to_s normalized end |
#to_sym ⇒ Object
223 224 225 |
# File 'lib/silk_layout/css/color.rb', line 223 def to_sym normalized.to_sym end |
#transparent? ⇒ Boolean
219 220 221 |
# File 'lib/silk_layout/css/color.rb', line 219 def transparent? alpha <= 0 end |