Class: Selenium::WebDriver::Support::Color

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/webdriver/support/color.rb

Constant Summary collapse

RGB_PATTERN =
%r{^\s*rgb\(\s*(\d{1,3})\s*,
\s*(\d{1,3})\s*,
\s*(\d{1,3})\s*\)\s*$}x
RGB_PCT_PATTERN =
%r{^\s*rgb\(\s*(\d{1,3}|\d{1,2}\.\d+)%\s*,
\s*(\d{1,3}|\d{1,2}\.\d+)%\s*,
\s*(\d{1,3}|\d{1,2}\.\d+)%\s*\)\s*$}x
RGBA_PATTERN =
%r{^\s*rgba\(\s*(\d{1,3})\s*,
\s*(\d{1,3})\s*,
\s*(\d{1,3})\s*,
\s*(0|1|0\.\d+)\s*\)\s*$}x
RGBA_PCT_PATTERN =
%r{^\s*rgba\(\s*(\d{1,3}|\d{1,2}\.\d+)
%\s*,\s*(\d{1,3}|\d{1,2}\.\d+)
%\s*,\s*(\d{1,3}|\d{1,2}\.\d+)
%\s*,\s*(0|1|0\.\d+)\s*\)\s*$}x
HEX_PATTERN =
/#(\h{2})(\h{2})(\h{2})/
HEX3_PATTERN =
/#(\h)(\h)(\h)/
HSL_PATTERN =
%r{^\s*hsl\(\s*(\d{1,3})\s*,
\s*(\d{1,3})%\s*,
\s*(\d{1,3})%\s*\)\s*$}x
HSLA_PATTERN =
%r{^\s*hsla\(\s*(\d{1,3})\s*,
\s*(\d{1,3})%\s*,
\s*(\d{1,3})%\s*,
\s*(0|1|0\.\d+)\s*\)\s*$}x

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(red, green, blue, alpha = 1) ⇒ Color

Returns a new instance of Color.



112
113
114
115
116
117
# File 'lib/selenium/webdriver/support/color.rb', line 112

def initialize(red, green, blue, alpha = 1)
  @red = Integer(red)
  @green = Integer(green)
  @blue = Integer(blue)
  @alpha = Float(alpha)
end

Instance Attribute Details

#alphaObject (readonly)

Returns the value of attribute alpha.



48
49
50
# File 'lib/selenium/webdriver/support/color.rb', line 48

def alpha
  @alpha
end

#blueObject (readonly)

Returns the value of attribute blue.



48
49
50
# File 'lib/selenium/webdriver/support/color.rb', line 48

def blue
  @blue
end

#greenObject (readonly)

Returns the value of attribute green.



48
49
50
# File 'lib/selenium/webdriver/support/color.rb', line 48

def green
  @green
end

#redObject (readonly)

Returns the value of attribute red.



48
49
50
# File 'lib/selenium/webdriver/support/color.rb', line 48

def red
  @red
end

Class Method Details

.from_hsl(h, s, l, a) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/selenium/webdriver/support/color.rb', line 75

def self.from_hsl(h, s, l, a)
  h = Float(h) / 360
  s = Float(s) / 100
  l = Float(l) / 100
  a = Float(a || 1)

  if s == 0
    r = l
    g = r
    b = r
  else
    luminocity2 = (l < 0.5) ? l * (1 + s) : l + s - l * s
    luminocity1 = 2 * l - luminocity2

    r = hue_to_rgb(luminocity1, luminocity2, h + 1.0 / 3.0)
    g = hue_to_rgb(luminocity1, luminocity2, h)
    b = hue_to_rgb(luminocity1, luminocity2, h - 1.0 / 3.0)
  end

  new (r * 255).round, (g * 255).round, (b * 255).round, a
end

.from_string(str) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/selenium/webdriver/support/color.rb', line 50

def self.from_string(str)
  case str
  when RGB_PATTERN
    new Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)
  when RGB_PCT_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| Float(e) / 100 * 255 })
  when RGBA_PATTERN
    new Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3), Regexp.last_match(4)
  when RGBA_PCT_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| Float(e) / 100 * 255 } << Regexp.last_match(4))
  when HEX_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| e.to_i(16) })
  when HEX3_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| (e * 2).to_i(16) })
  when HSL_PATTERN, HSLA_PATTERN
    from_hsl(Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3), Regexp.last_match(4))
  else
    raise ArgumentError, "could not convert #{str.inspect} into color"
  end
end

.hue_to_rgb(lum1, lum2, hue) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/selenium/webdriver/support/color.rb', line 97

def self.hue_to_rgb(lum1, lum2, hue)
  hue += 1 if hue < 0.0
  hue -= 1 if hue > 1.0

  if hue < 1.0 / 6.0
    (lum1 + (lum2 - lum1) * 6.0 * hue)
  elsif hue < 1.0 / 2.0
    lum2
  elsif hue < 2.0 / 3.0
    lum1 + (lum2 - lum1) * ((2.0 / 3.0) - hue) * 6.0
  else
    lum1
  end
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



119
120
121
122
123
124
# File 'lib/selenium/webdriver/support/color.rb', line 119

def ==(other)
  return true if equal?(other)
  return false unless other.is_a?(self.class)

  [red, green, blue, alpha] == [other.red, other.green, other.blue, other.alpha]
end

#hashObject



127
128
129
# File 'lib/selenium/webdriver/support/color.rb', line 127

def hash
  [red, green, blue, alpha].hash ^ self.class.hash
end

#hexObject



140
141
142
# File 'lib/selenium/webdriver/support/color.rb', line 140

def hex
  format '#%02x%02x%02x', red, green, blue
end

#rgbObject



131
132
133
# File 'lib/selenium/webdriver/support/color.rb', line 131

def rgb
  "rgb(#{red}, #{green}, #{blue})"
end

#rgbaObject



135
136
137
138
# File 'lib/selenium/webdriver/support/color.rb', line 135

def rgba
  a = alpha == 1 ? '1' : alpha
  "rgba(#{red}, #{green}, #{blue}, #{a})"
end