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

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

Constant Summary

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

- (Color) initialize(red, green, blue, alpha = 1)

Returns a new instance of Color



75
76
77
78
79
80
# File 'rb/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

- (Object) alpha (readonly)

Returns the value of attribute alpha



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

def alpha
  @alpha
end

- (Object) blue (readonly)

Returns the value of attribute blue



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

def blue
  @blue
end

- (Object) green (readonly)

Returns the value of attribute green



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

def green
  @green
end

- (Object) red (readonly)

Returns the value of attribute red



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

def red
  @red
end

Class Method Details

+ (Object) from_hsl(h, s, l, a)



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 'rb/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

+ (Object) from_string(str)



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'rb/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

- (Object) ==(other) Also known as: eql?



82
83
84
85
86
87
# File 'rb/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

- (Object) hash



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

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

- (Object) hex



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

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

- (Object) rgb



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

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

- (Object) rgba



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

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