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

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

Constant Summary collapse

RGB_PATTERN =
/^\s*rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/
RGB_PCT_PATTERN =
/^\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*$/
RGBA_PATTERN =
/^\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0\.\d+)\s*\)\s*$/
RGBA_PCT_PATTERN =
/^\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*$/
HEX_PATTERN =

pXDigit or h only works on Ruby 1.9

/#([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})/
HEX3_PATTERN =

pXDigit or h only works on Ruby 1.9

/#([A-Fa-f0-9])([A-Fa-f0-9])([A-Fa-f0-9])/
HSL_PATTERN =
/^\s*hsl\(\s*(\d{1,3})\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*\)\s*$/
HSLA_PATTERN =
/^\s*hsla\(\s*(\d{1,3})\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*,\s*(0|1|0\.\d+)\s*\)\s*$/

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.



75
76
77
78
79
80
# File 'lib/selenium/webdriver/support/color.rb', line 75

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.



14
15
16
# File 'lib/selenium/webdriver/support/color.rb', line 14

def alpha
  @alpha
end

#blueObject (readonly)

Returns the value of attribute blue.



14
15
16
# File 'lib/selenium/webdriver/support/color.rb', line 14

def blue
  @blue
end

#greenObject (readonly)

Returns the value of attribute green.



14
15
16
# File 'lib/selenium/webdriver/support/color.rb', line 14

def green
  @green
end

#redObject (readonly)

Returns the value of attribute red.



14
15
16
# File 'lib/selenium/webdriver/support/color.rb', line 14

def red
  @red
end

Class Method Details

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



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/selenium/webdriver/support/color.rb', line 37

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

    hue_to_rgb = lambda do |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

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

  new r * 256, g * 256, b * 256, a
end

.from_string(str) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/selenium/webdriver/support/color.rb', line 16

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

Instance Method Details

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



82
83
84
85
86
87
# File 'lib/selenium/webdriver/support/color.rb', line 82

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

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

#hashObject



90
91
92
# File 'lib/selenium/webdriver/support/color.rb', line 90

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

#hexObject



103
104
105
# File 'lib/selenium/webdriver/support/color.rb', line 103

def hex
  "#%02x%02x%02x" % [red, green, blue]
end

#rgbObject



94
95
96
# File 'lib/selenium/webdriver/support/color.rb', line 94

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

#rgbaObject



98
99
100
101
# File 'lib/selenium/webdriver/support/color.rb', line 98

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