color-tools 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,189 @@
1
+ #--
2
+ # Colour management with Ruby.
3
+ #
4
+ # Copyright 2005 Austin Ziegler
5
+ # http://rubyforge.org/ruby-pdf/
6
+ #
7
+ # Licensed under a MIT-style licence.
8
+ #
9
+ # $Id: rgb-colors.rb,v 1.1 2005/08/05 23:07:20 austin Exp $
10
+ #++
11
+
12
+ class Color::RGB
13
+ AliceBlue = Color::RGB.new(0xf0, 0xf8, 0xff).freeze
14
+ AntiqueWhite = Color::RGB.new(0xfa, 0xeb, 0xd7).freeze
15
+ Aqua = Color::RGB.new(0x00, 0xff, 0xff).freeze
16
+ Aquamarine = Color::RGB.new(0x7f, 0xff, 0xd4).freeze
17
+ Azure = Color::RGB.new(0xf0, 0xff, 0xff).freeze
18
+ Beige = Color::RGB.new(0xf5, 0xf5, 0xdc).freeze
19
+ Bisque = Color::RGB.new(0xff, 0xe4, 0xc4).freeze
20
+ Black = Color::RGB.new(0, 0, 0).freeze
21
+ BlanchedAlmond = Color::RGB.new(0xff, 0xeb, 0xcd).freeze
22
+ Blue = Color::RGB.new(0x00, 0x00, 0xff).freeze
23
+ BlueViolet = Color::RGB.new(0x8a, 0x2b, 0xe2).freeze
24
+ Brown = Color::RGB.new(0xa5, 0x2a, 0x2a).freeze
25
+ Burlywood = Color::RGB.new(0xde, 0xb8, 0x87).freeze
26
+ BurlyWood = Burlywood
27
+ CadetBlue = Color::RGB.new(0x5f, 0x9e, 0xa0).freeze
28
+ Chartreuse = Color::RGB.new(0x7f, 0xff, 0x00).freeze
29
+ Chocolate = Color::RGB.new(0xd2, 0x69, 0x1e).freeze
30
+ Coral = Color::RGB.new(0xff, 0x7f, 0x50).freeze
31
+ CornflowerBlue = Color::RGB.new(0x64, 0x95, 0xed).freeze
32
+ Cornsilk = Color::RGB.new(0xff, 0xf8, 0xdc).freeze
33
+ Crimson = Color::RGB.new(0xdc, 0x14, 0x3c).freeze
34
+ Cyan = Color::RGB.new(0x00, 0xff, 0xff).freeze
35
+ DarkBlue = Color::RGB.new(0x00, 0x00, 0x8b).freeze
36
+ DarkCyan = Color::RGB.new(0x00, 0x8b, 0x8b).freeze
37
+ DarkGoldenrod = Color::RGB.new(0xb8, 0x86, 0x0b).freeze
38
+ DarkGoldenRod = DarkGoldenrod
39
+ DarkGray = Color::RGB.new(0xa9, 0xa9, 0xa9).freeze
40
+ DarkGreen = Color::RGB.new(0x00, 0x64, 0x00).freeze
41
+ DarkGrey = DarkGray
42
+ DarkKhaki = Color::RGB.new(0xbd, 0xb7, 0x6b).freeze
43
+ DarkMagenta = Color::RGB.new(0x8b, 0x00, 0x8b).freeze
44
+ DarkoliveGreen = Color::RGB.new(0x55, 0x6b, 0x2f).freeze
45
+ DarkOliveGreen = DarkoliveGreen
46
+ Darkorange = Color::RGB.new(0xff, 0x8c, 0x00).freeze
47
+ DarkOrange = Darkorange
48
+ DarkOrchid = Color::RGB.new(0x99, 0x32, 0xcc).freeze
49
+ DarkRed = Color::RGB.new(0x8b, 0x00, 0x00).freeze
50
+ Darksalmon = Color::RGB.new(0xe9, 0x96, 0x7a).freeze
51
+ DarkSalmon = Darksalmon
52
+ DarkSeaGreen = Color::RGB.new(0x8f, 0xbc, 0x8f).freeze
53
+ DarkSlateBlue = Color::RGB.new(0x48, 0x3d, 0x8b).freeze
54
+ DarkSlateGray = Color::RGB.new(0x2f, 0x4f, 0x4f).freeze
55
+ DarkSlateGrey = DarkSlateGray
56
+ DarkTurquoise = Color::RGB.new(0x00, 0xce, 0xd1).freeze
57
+ DarkViolet = Color::RGB.new(0x94, 0x00, 0xd3).freeze
58
+ DeepPink = Color::RGB.new(0xff, 0x14, 0x93).freeze
59
+ DeepSkyBlue = Color::RGB.new(0x00, 0xbf, 0xbf).freeze
60
+ DimGray = Color::RGB.new(0x69, 0x69, 0x69).freeze
61
+ DimGrey = DimGray
62
+ DodgerBlue = Color::RGB.new(0x1e, 0x90, 0xff).freeze
63
+ Feldspar = Color::RGB.new(0xd1, 0x92, 0x75).freeze
64
+ Firebrick = Color::RGB.new(0xb2, 0x22, 0x22).freeze
65
+ FireBrick = Firebrick
66
+ FloralWhite = Color::RGB.new(0xff, 0xfa, 0xf0).freeze
67
+ ForestGreen = Color::RGB.new(0x22, 0x8b, 0x22).freeze
68
+ Fuchsia = Color::RGB.new(0xff, 0x00, 0xff).freeze
69
+ Gainsboro = Color::RGB.new(0xdc, 0xdc, 0xdc).freeze
70
+ GhostWhite = Color::RGB.new(0xf8, 0xf8, 0xff).freeze
71
+ Gold = Color::RGB.new(0xff, 0xd7, 0x00).freeze
72
+ Goldenrod = Color::RGB.new(0xda, 0xa5, 0x20).freeze
73
+ GoldenRod = Goldenrod
74
+ Gray = Color::RGB.new(0x80, 0x80, 0x80).freeze
75
+ Green = Color::RGB.new(0x00, 0x80, 0x00).freeze
76
+ GreenYellow = Color::RGB.new(0xad, 0xff, 0x2f).freeze
77
+ Grey = Gray
78
+ Honeydew = Color::RGB.new(0xf0, 0xff, 0xf0).freeze
79
+ HoneyDew = Honeydew
80
+ HotPink = Color::RGB.new(0xff, 0x69, 0xb4).freeze
81
+ IndianRed = Color::RGB.new(0xcd, 0x5c, 0x5c).freeze
82
+ Indigo = Color::RGB.new(0x4b, 0x00, 0x82).freeze
83
+ Ivory = Color::RGB.new(0xff, 0xff, 0xf0).freeze
84
+ Khaki = Color::RGB.new(0xf0, 0xe6, 0x8c).freeze
85
+ Lavender = Color::RGB.new(0xe6, 0xe6, 0xfa).freeze
86
+ LavenderBlush = Color::RGB.new(0xff, 0xf0, 0xf5).freeze
87
+ LawnGreen = Color::RGB.new(0x7c, 0xfc, 0x00).freeze
88
+ LemonChiffon = Color::RGB.new(0xff, 0xfa, 0xcd).freeze
89
+ LightBlue = Color::RGB.new(0xad, 0xd8, 0xe6).freeze
90
+ LightCoral = Color::RGB.new(0xf0, 0x80, 0x80).freeze
91
+ LightCyan = Color::RGB.new(0xe0, 0xff, 0xff).freeze
92
+ LightGoldenrodYellow = Color::RGB.new(0xfa, 0xfa, 0xd2).freeze
93
+ LightGoldenRodYellow = LightGoldenrodYellow
94
+ LightGray = Color::RGB.new(0xd3, 0xd3, 0xd3).freeze
95
+ LightGreen = Color::RGB.new(0x90, 0xee, 0x90).freeze
96
+ LightGrey = LightGray
97
+ LightPink = Color::RGB.new(0xff, 0xb6, 0xc1).freeze
98
+ Lightsalmon = Color::RGB.new(0xff, 0xa0, 0x7a).freeze
99
+ LightSalmon = Lightsalmon
100
+ LightSeaGreen = Color::RGB.new(0x20, 0xb2, 0xaa).freeze
101
+ LightSkyBlue = Color::RGB.new(0x87, 0xce, 0xfa).freeze
102
+ LightSlateBlue = Color::RGB.new(0x84, 0x70, 0xff).freeze
103
+ LightSlateGray = Color::RGB.new(0x77, 0x88, 0x99).freeze
104
+ LightSlateGrey = LightSlateGray
105
+ LightsteelBlue = Color::RGB.new(0xb0, 0xc4, 0xde).freeze
106
+ LightSteelBlue = LightsteelBlue
107
+ LightYellow = Color::RGB.new(0xff, 0xff, 0xe0).freeze
108
+ Lime = Color::RGB.new(0x00, 0xff, 0x00).freeze
109
+ LimeGreen = Color::RGB.new(0x32, 0xcd, 0x32).freeze
110
+ Linen = Color::RGB.new(0xfa, 0xf0, 0xe6).freeze
111
+ Magenta = Color::RGB.new(0xff, 0x00, 0xff).freeze
112
+ Maroon = Color::RGB.new(0x80, 0x00, 0x00).freeze
113
+ MediumAquamarine = Color::RGB.new(0x66, 0xcd, 0xaa).freeze
114
+ MediumAquaMarine = MediumAquamarine
115
+ MediumBlue = Color::RGB.new(0x00, 0x00, 0xcd).freeze
116
+ MediumOrchid = Color::RGB.new(0xba, 0x55, 0xd3).freeze
117
+ MediumPurple = Color::RGB.new(0x93, 0x70, 0xdb).freeze
118
+ MediumSeaGreen = Color::RGB.new(0x3c, 0xb3, 0x71).freeze
119
+ MediumSlateBlue = Color::RGB.new(0x7b, 0x68, 0xee).freeze
120
+ MediumSpringGreen = Color::RGB.new(0x00, 0xfa, 0x9a).freeze
121
+ MediumTurquoise = Color::RGB.new(0x48, 0xd1, 0xcc).freeze
122
+ MediumVioletRed = Color::RGB.new(0xc7, 0x15, 0x85).freeze
123
+ MidnightBlue = Color::RGB.new(0x19, 0x19, 0x70).freeze
124
+ MintCream = Color::RGB.new(0xf5, 0xff, 0xfa).freeze
125
+ MistyRose = Color::RGB.new(0xff, 0xe4, 0xe1).freeze
126
+ Moccasin = Color::RGB.new(0xff, 0xe4, 0xb5).freeze
127
+ NavajoWhite = Color::RGB.new(0xff, 0xde, 0xad).freeze
128
+ Navy = Color::RGB.new(0x00, 0x00, 0x80).freeze
129
+ OldLace = Color::RGB.new(0xfd, 0xf5, 0xe6).freeze
130
+ Olive = Color::RGB.new(0x80, 0x80, 0x00).freeze
131
+ Olivedrab = Color::RGB.new(0x6b, 0x8e, 0x23).freeze
132
+ OliveDrab = Olivedrab
133
+ Orange = Color::RGB.new(0xff, 0xa5, 0x00).freeze
134
+ OrangeRed = Color::RGB.new(0xff, 0x45, 0x00).freeze
135
+ Orchid = Color::RGB.new(0xda, 0x70, 0xd6).freeze
136
+ PaleGoldenrod = Color::RGB.new(0xee, 0xe8, 0xaa).freeze
137
+ PaleGoldenRod = PaleGoldenrod
138
+ PaleGreen = Color::RGB.new(0x98, 0xfb, 0x98).freeze
139
+ PaleTurquoise = Color::RGB.new(0xaf, 0xee, 0xee).freeze
140
+ PaleVioletRed = Color::RGB.new(0xdb, 0x70, 0x93).freeze
141
+ PapayaWhip = Color::RGB.new(0xff, 0xef, 0xd5).freeze
142
+ Peachpuff = Color::RGB.new(0xff, 0xda, 0xb9).freeze
143
+ PeachPuff = Peachpuff
144
+ Peru = Color::RGB.new(0xcd, 0x85, 0x3f).freeze
145
+ Pink = Color::RGB.new(0xff, 0xc0, 0xcb).freeze
146
+ Plum = Color::RGB.new(0xdd, 0xa0, 0xdd).freeze
147
+ PowderBlue = Color::RGB.new(0xb0, 0xe0, 0xe6).freeze
148
+ Purple = Color::RGB.new(0x80, 0x00, 0x80).freeze
149
+ Red = Color::RGB.new(0xff, 0x00, 0x00).freeze
150
+ RosyBrown = Color::RGB.new(0xbc, 0x8f, 0x8f).freeze
151
+ RoyalBlue = Color::RGB.new(0x41, 0x69, 0xe1).freeze
152
+ SaddleBrown = Color::RGB.new(0x8b, 0x45, 0x13).freeze
153
+ Salmon = Color::RGB.new(0xfa, 0x80, 0x72).freeze
154
+ SandyBrown = Color::RGB.new(0xf4, 0xa4, 0x60).freeze
155
+ SeaGreen = Color::RGB.new(0x2e, 0x8b, 0x57).freeze
156
+ Seashell = Color::RGB.new(0xff, 0xf5, 0xee).freeze
157
+ SeaShell = Seashell
158
+ Sienna = Color::RGB.new(0xa0, 0x52, 0x2d).freeze
159
+ Silver = Color::RGB.new(0xc0, 0xc0, 0xc0).freeze
160
+ SkyBlue = Color::RGB.new(0x87, 0xce, 0xeb).freeze
161
+ SlateBlue = Color::RGB.new(0x6a, 0x5a, 0xcd).freeze
162
+ SlateGray = Color::RGB.new(0x70, 0x80, 0x90).freeze
163
+ SlateGrey = SlateGray
164
+ Snow = Color::RGB.new(0xff, 0xfa, 0xfa).freeze
165
+ SpringGreen = Color::RGB.new(0x00, 0xff, 0x7f).freeze
166
+ SteelBlue = Color::RGB.new(0x46, 0x82, 0xb4).freeze
167
+ Tan = Color::RGB.new(0xd2, 0xb4, 0x8c).freeze
168
+ Teal = Color::RGB.new(0x00, 0x80, 0x80).freeze
169
+ Thistle = Color::RGB.new(0xd8, 0xbf, 0xd8).freeze
170
+ Tomato = Color::RGB.new(0xff, 0x63, 0x47).freeze
171
+ Turquoise = Color::RGB.new(0x40, 0xe0, 0xd0).freeze
172
+ Violet = Color::RGB.new(0xee, 0x82, 0xee).freeze
173
+ VioletRed = Color::RGB.new(0xd0, 0x20, 0x90).freeze
174
+ Wheat = Color::RGB.new(0xf5, 0xde, 0xb3).freeze
175
+ White = Color::RGB.new(0xff, 0xff, 0xff).freeze
176
+ WhiteSmoke = Color::RGB.new(0xf5, 0xf5, 0xf5).freeze
177
+ Yellow = Color::RGB.new(0xff, 0xff, 0x00).freeze
178
+ YellowGreen = Color::RGB.new(0x9a, 0xcd, 0x32).freeze
179
+
180
+ Gray10 = Grey10 = Color::RGB.from_percentage(10, 10, 10).freeze
181
+ Gray20 = Grey20 = Color::RGB.from_percentage(20, 20, 20).freeze
182
+ Gray30 = Grey30 = Color::RGB.from_percentage(30, 30, 30).freeze
183
+ Gray40 = Grey40 = Color::RGB.from_percentage(40, 40, 40).freeze
184
+ Gray50 = Grey50 = Color::RGB.from_percentage(50, 50, 50).freeze
185
+ Gray60 = Grey60 = Color::RGB.from_percentage(60, 60, 60).freeze
186
+ Gray70 = Grey70 = Color::RGB.from_percentage(70, 70, 70).freeze
187
+ Gray80 = Grey80 = Color::RGB.from_percentage(80, 80, 80).freeze
188
+ Gray90 = Grey90 = Color::RGB.from_percentage(90, 90, 90).freeze
189
+ end
@@ -3,20 +3,30 @@
3
3
  #
4
4
  # Copyright 2005 Austin Ziegler
5
5
  # http://rubyforge.org/ruby-pdf/
6
+ #
7
+ # Licensed under a MIT-style licence.
8
+ #
9
+ # $Id: rgb.rb,v 1.6 2005/08/08 02:44:17 austin Exp $
6
10
  #++
7
11
 
8
12
  # An RGB colour object.
9
13
  class Color::RGB
10
- # The format required to present the colour to a PDF document.
14
+ # The format of a DeviceRGB colour for PDF. In color-tools 2.0 this will
15
+ # be removed from this package and added back as a modification by the
16
+ # PDF::Writer package.
11
17
  PDF_FORMAT_STR = "%.3f %.3f %.3f %s"
12
18
 
13
19
  class << self
14
- # Creates an RGB colour object from percentages 0 .. 100.
20
+ # Creates an RGB colour object from percentages 0..100.
21
+ #
22
+ # Color::RGB.from_percentage(10, 20 30)
15
23
  def from_percentage(r = 0, g = 0, b = 0)
16
24
  from_fraction(r / 100.0, g / 100.0, b / 100.0)
17
25
  end
18
26
 
19
- # Creates an RGB colour object from fractional values 0 .. 1.
27
+ # Creates an RGB colour object from fractional values 0..1.
28
+ #
29
+ # Color::RGB.from_fraction(.3, .2, .1)
20
30
  def from_fraction(r = 0.0, g = 0.0, b = 0.0)
21
31
  colour = Color::RGB.new
22
32
  colour.r = r
@@ -27,6 +37,11 @@ class Color::RGB
27
37
 
28
38
  # Creates an RGB colour object from an HTML colour descriptor (e.g.,
29
39
  # <tt>"fed"</tt> or <tt>"#cabbed;"</tt>.
40
+ #
41
+ # Color::RGB.from_html("fed")
42
+ # Color::RGB.from_html("#fed")
43
+ # Color::RGB.from_html("#cabbed")
44
+ # Color::RGB.from_html("cabbed")
30
45
  def from_html(html_colour)
31
46
  html_colour = html_colour.gsub(%r{[#;]}, '')
32
47
  case html_colour.size
@@ -42,27 +57,39 @@ class Color::RGB
42
57
  end
43
58
  end
44
59
 
60
+ # Compares the other colour to this one. The other colour will be
61
+ # converted to RGB before comparison, so the comparison between a RGB
62
+ # colour and a non-RGB colour will be approximate and based on the other
63
+ # colour's default #to_rgb conversion. If there is no #to_rgb
64
+ # conversion, this will raise an exception. This will report that two
65
+ # RGB colours are equivalent if all component values are within 1e-4
66
+ # (0.0001) of each other.
45
67
  def ==(other)
46
68
  other = other.to_rgb
47
69
  other.kind_of?(Color::RGB) and
48
- (@r == other.r) and
49
- (@g == other.g) and
50
- (@b == other.b)
70
+ ((@r - other.r).abs <= 1e-4) and
71
+ ((@g - other.g).abs <= 1e-4) and
72
+ ((@b - other.b).abs <= 1e-4)
51
73
  end
52
74
 
53
- # Creates an RGB colour object from the standard range 0 .. 255.
75
+ # Creates an RGB colour object from the standard range 0..255.
76
+ #
77
+ # Color::RGB.new(32, 64, 128)
78
+ # Color::RGB.new(0x20, 0x40, 0x80)
54
79
  def initialize(r = 0, g = 0, b = 0)
55
80
  @r = r / 255.0
56
81
  @g = g / 255.0
57
82
  @b = b / 255.0
58
83
  end
59
84
 
60
- # Present the colour as a fill colour string for PDF.
85
+ # Present the colour as a DeviceRGB fill colour string for PDF. This
86
+ # will be removed from the default package in color-tools 2.0.
61
87
  def pdf_fill
62
88
  PDF_FORMAT_STR % [ @r, @g, @b, "rg" ]
63
89
  end
64
90
 
65
- # Present the colour as a stroke colour string for PDF.
91
+ # Present the colour as a DeviceRGB stroke colour string for PDF. This
92
+ # will be removed from the default package in color-tools 2.0.
66
93
  def pdf_stroke
67
94
  PDF_FORMAT_STR % [ @r, @g, @b, "RG" ]
68
95
  end
@@ -128,22 +155,67 @@ class Color::RGB
128
155
  self
129
156
  end
130
157
 
131
- # Lighten the RGB hue by the stated percent.
158
+ # Returns the YIQ (NTSC) colour encoding of the RGB value.
159
+ def to_yiq
160
+ y = (@r * 0.299) + (@g * 0.587) + (@b * 0.114)
161
+ i = (@r * 0.596) + (@g * -0.275) + (@b * -0.321)
162
+ q = (@r * 0.212) + (@g * -0.523) + (@b * 0.311)
163
+ Color::YIQ.from_fraction(y, i, q)
164
+ end
165
+
166
+ # Returns the HSL colour encoding of the RGB value.
167
+ def to_hsl
168
+ min = [ @r, @g, @b ].min
169
+ max = [ @r, @g, @b ].max
170
+ delta = (max - min).to_f
171
+
172
+ lum = (max + min) / 2.0
173
+
174
+ if delta <= 1e-5 # close to 0.0, so it's a grey
175
+ hue = 0
176
+ sat = 0
177
+ else
178
+ if (lum - 0.5) <= 1e-5
179
+ sat = delta / (max + min).to_f
180
+ else
181
+ sat = delta / (2 - max - min).to_f
182
+ end
183
+
184
+ if @r == max
185
+ hue = (@g - @b) / delta.to_f
186
+ elsif @g == max
187
+ hue = (2.0 + @b - @r) / delta.to_f
188
+ elsif (@b - max) <= 1e-5
189
+ hue = (4.0 + @r - @g) / delta.to_f
190
+ end
191
+ hue /= 6.0
192
+
193
+ hue += 1 if hue < 0
194
+ hue -= 1 if hue > 1
195
+ end
196
+ Color::HSL.from_fraction(hue, sat, lum)
197
+ end
198
+
199
+ # Mix the RGB hue with White so that the RGB hue is the specified
200
+ # percentage of the resulting colour. Strictly speaking, this isn't a
201
+ # darken_by operation.
132
202
  def lighten_by(percent)
133
203
  mix_with(White, percent)
134
204
  end
135
205
 
136
- # Darken the RGB hue by the stated percent.
206
+ # Mix the RGB hue with Black so that the RGB hue is the specified
207
+ # percentage of the resulting colour. Strictly speaking, this isn't a
208
+ # darken_by operation.
137
209
  def darken_by(percent)
138
210
  mix_with(Black, percent)
139
211
  end
140
212
 
141
213
  # Mix the mask colour (which must be an RGB object) with the current
142
- # colour at the stated opacity percentage (0 .. 100).
214
+ # colour at the stated opacity percentage (0..100).
143
215
  def mix_with(mask, opacity)
144
216
  opacity /= 100.0
145
217
  rgb = self.dup
146
-
218
+
147
219
  rgb.r = (@r * opacity) + (mask.r * (1 - opacity))
148
220
  rgb.g = (@g * opacity) + (mask.g * (1 - opacity))
149
221
  rgb.b = (@b * opacity) + (mask.b * (1 - opacity))
@@ -151,25 +223,89 @@ class Color::RGB
151
223
  rgb
152
224
  end
153
225
 
154
- # Returns the YIQ (NTSC) colour encoding of the RGB value.
155
- def to_yiq
156
- y = (@r * 0.299) + (@g * 0.587) + (@b * 0.114)
157
- i = (@r * 0.596) + (@g * -0.275) + (@b * -0.321)
158
- q = (@r * 0.212) + (@g * -0.523) + (@b * 0.311)
159
- Color::YIQ.from_fraction(y, i, q)
160
- end
161
-
162
- # Returns the brightness value for a colour, a number between 0 and
163
- # 1. Based on the Y value of YIQ encoding, representing luminosity, or
226
+ # Returns the brightness value for a colour, a number between 0..1.
227
+ # Based on the Y value of YIQ encoding, representing luminosity, or
164
228
  # perceived brightness.
229
+ #
230
+ # This may be modified in a future version of color-tools to use the
231
+ # luminosity value of HSL.
165
232
  def brightness
166
233
  to_yiq.y
167
234
  end
168
- alias to_grayscale brightness
235
+ def to_grayscale
236
+ Color::GrayScale.from_fraction(to_hsl.l)
237
+ end
238
+
169
239
  alias to_greyscale to_grayscale
170
240
 
171
- attr_accessor :r, :g, :b
241
+ # Returns a new colour with the brightness adjusted by the specified
242
+ # percentage. Negative percentages will darken the colour; positive
243
+ # percentages will brighten the colour.
244
+ #
245
+ # Color::RGB::DarkBlue.adjust_brightness(10)
246
+ # Color::RGB::DarkBlue.adjust_brightness(-10)
247
+ def adjust_brightness(percent)
248
+ percent /= 100.0
249
+ percent += 1.0
250
+ percent = [ percent, 2.0 ].min
251
+ percent = [ 0.0, percent ].max
172
252
 
173
- White = Color::RGB.new(255, 255, 255)
174
- Black = Color::RGB.new(0, 0, 0)
253
+ hsl = to_hsl
254
+ hsl.l *= percent
255
+ hsl.to_rgb
256
+ end
257
+
258
+ # Returns a new colour with the saturation adjusted by the specified
259
+ # percentage. Negative percentages will reduce the saturation; positive
260
+ # percentages will increase the saturation.
261
+ #
262
+ # Color::RGB::DarkBlue.adjust_saturation(10)
263
+ # Color::RGB::DarkBlue.adjust_saturation(-10)
264
+ def adjust_saturation(percent)
265
+ percent /= 100.0
266
+ percent += 1.0
267
+ percent = [ percent, 2.0 ].min
268
+ percent = [ 0.0, percent ].max
269
+
270
+ hsl = to_hsl
271
+ hsl.s *= percent
272
+ hsl.to_rgb
273
+ end
274
+
275
+ # Returns a new colour with the hue adjusted by the specified
276
+ # percentage. Negative percentages will reduce the hue; positive
277
+ # percentages will increase the hue.
278
+ #
279
+ # Color::RGB::DarkBlue.adjust_hue(10)
280
+ # Color::RGB::DarkBlue.adjust_hue(-10)
281
+ def adjust_hue(percent)
282
+ percent /= 100.0
283
+ percent += 1.0
284
+ percent = [ percent, 2.0 ].min
285
+ percent = [ 0.0, percent ].max
286
+
287
+ hsl = to_hsl
288
+ hsl.h *= percent
289
+ hsl.to_rgb
290
+ end
291
+
292
+ attr_accessor :r, :g, :b
293
+ remove_method :r=, :g=, :b= ;
294
+ def r=(rr) #:nodoc:
295
+ rr = 1.0 if rr > 1
296
+ rr = 0.0 if rr < 0
297
+ @r = rr
298
+ end
299
+ def g=(gg) #:nodoc:
300
+ gg = 1.0 if gg > 1
301
+ gg = 0.0 if gg < 0
302
+ @g = gg
303
+ end
304
+ def b=(bb) #:nodoc:
305
+ bb = 1.0 if bb > 1
306
+ bb = 0.0 if bb < 0
307
+ @b = bb
308
+ end
175
309
  end
310
+
311
+ require 'color/rgb-colors'