Class: Rabbit::Renderer::Color

Inherits:
Struct
  • Object
show all
Defined in:
lib/rabbit/renderer/color.rb,
lib/rabbit/renderer/color.rb

Constant Summary collapse

GDK_COLOR_NORMALIZE =
65535.0
HEX =
"(?i:[a-z0-9])"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#alphaObject

Returns the value of attribute alpha

Returns:

  • (Object)

    the current value of alpha



8
9
10
# File 'lib/rabbit/renderer/color.rb', line 8

def alpha
  @alpha
end

#blueObject

Returns the value of attribute blue

Returns:

  • (Object)

    the current value of blue



8
9
10
# File 'lib/rabbit/renderer/color.rb', line 8

def blue
  @blue
end

#greenObject

Returns the value of attribute green

Returns:

  • (Object)

    the current value of green



8
9
10
# File 'lib/rabbit/renderer/color.rb', line 8

def green
  @green
end

#have_alphaObject Also known as: have_alpha?

Returns the value of attribute have_alpha

Returns:

  • (Object)

    the current value of have_alpha



8
9
10
# File 'lib/rabbit/renderer/color.rb', line 8

def have_alpha
  @have_alpha
end

#redObject

Returns the value of attribute red

Returns:

  • (Object)

    the current value of red



8
9
10
# File 'lib/rabbit/renderer/color.rb', line 8

def red
  @red
end

Class Method Details

.new_from_gdk_color(color, have_alpha = false) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/rabbit/renderer/color.rb', line 13

def new_from_gdk_color(color, have_alpha=false)
  red = color.red / GDK_COLOR_NORMALIZE
  green = color.green / GDK_COLOR_NORMALIZE
  blue = color.blue / GDK_COLOR_NORMALIZE
  alpha = 1.0
  new(red, green, blue, alpha, have_alpha)
end

.normalize(r, g, b, a, max) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/rabbit/renderer/color.rb', line 37

def normalize(r, g, b, a, max)
  red = r.hex / max.to_f
  green = g.hex / max.to_f
  blue = b.hex / max.to_f
  have_alpha = !a.nil?
  alpha = have_alpha ? a.hex / max.to_f : 1.0
  [red, green, blue, alpha, have_alpha]
end

.parse(spec) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/rabbit/renderer/color.rb', line 22

def parse(spec)
  case spec
  when Array
    new(*spec)
  when /\A\#(#{HEX})(#{HEX})(#{HEX})(#{HEX})?\z/
    new(*normalize($1, $2, $3, $4, 16 ** 1 - 1))
  when /\A\#(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})?\z/
    new(*normalize($1, $2, $3, $4, 16 ** 2 - 1))
  when /\A\#(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})?\z/
    new(*normalize($1, $2, $3, $4, 16 ** 4 - 1))
  else
    new_from_gdk_color(Gdk::Color.parse(spec))
  end
end

Instance Method Details

#to_aObject



53
54
55
56
57
58
59
# File 'lib/rabbit/renderer/color.rb', line 53

def to_a
  if have_alpha?
    [red, green, blue, alpha]
  else
    [red, green, blue]
  end
end

#to_gdk_colorObject



75
76
77
# File 'lib/rabbit/renderer/color.rb', line 75

def to_gdk_color
  Gdk::Color.new(*to_gdk_rgb)
end

#to_gdk_formatObject



71
72
73
# File 'lib/rabbit/renderer/color.rb', line 71

def to_gdk_format
  to_s.gsub(/[a-z0-9]{4}\z/i, '')
end

#to_gdk_rgbObject



61
62
63
# File 'lib/rabbit/renderer/color.rb', line 61

def to_gdk_rgb
  to_gdk_rgba[0..-2]
end

#to_gdk_rgbaObject



65
66
67
68
69
# File 'lib/rabbit/renderer/color.rb', line 65

def to_gdk_rgba
  [red, green, blue, alpha || 1.0].collect do |color|
    (color * GDK_COLOR_NORMALIZE).truncate
  end
end

#to_sObject



49
50
51
# File 'lib/rabbit/renderer/color.rb', line 49

def to_s
  "#%04X%04X%04X%04X" % to_gdk_rgba
end