colir 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NTE0MzRiMWYxNmUzNjI2NWYwNjg1Mzk1MWEwOWIxYmY1OTUwZWE1Zg==
5
+ data.tar.gz: !binary |-
6
+ ZTJmYzZhOWQ3NWU2MzRiZWZlMmZiZDNmMGI5OTExMDJhZDE3MjE1YQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ODExMDk0MWI1NTMwNzZmMmIwZDk1ZmY0MjA5ODQ2MTlhZTJhNWIyNGM4ZmQ2
10
+ MDVjNmM0N2EwMDM0ZGE3ZTYxZTU2NjUzNGQ0ODg3MzM3ZGY4MzUyMGM3ZWRh
11
+ ZTdkYzhhMjYwNjdjZmM3NGQ2YjA4NzMwOGIxMjQ1MTRkZmU3ZmQ=
12
+ data.tar.gz: !binary |-
13
+ ODNiOWQ4NDc5Njg2ZmRlMmUzM2JjMWZhMjQ4ODYwZjkzN2JiYzdjODI1ZmE3
14
+ NTMyZmZhMDA4YzZhNGUwZDRjYzM3ZTlkZGI2ZjY5MzI0YWM5ZGE4ZDQxOGQy
15
+ Zjc2Mjk2Y2E2ZDI2NzRhNzZiYWI1ZDIzZWNjYjc1YzkxZDI0Mzc=
@@ -0,0 +1,4 @@
1
+ *~
2
+ *.gem
3
+ Gemfile.lock
4
+ .rbx
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - ruby-head
5
+ - 2.0.0
6
+ - 1.9.3
7
+ - rbx-19mode
8
+
9
+ branches:
10
+ only:
11
+ - master
12
+
13
+ before_install:
14
+ - gem install bundler
@@ -0,0 +1,6 @@
1
+ Colir changelog
2
+ ===============
3
+
4
+ ### v0.0.1 (April 05, 2013)
5
+
6
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'http://rubygems.org'
2
+ gemspec
data/LICENCE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (C) 2013 Kyrylo Silin
2
+
3
+ This software is provided 'as-is', without any express or implied
4
+ warranty. In no event will the authors be held liable for any damages
5
+ arising from the use of this software.
6
+
7
+ Permission is granted to anyone to use this software for any purpose,
8
+ including commercial applications, and to alter it and redistribute it
9
+ freely, subject to the following restrictions:
10
+
11
+ 1. The origin of this software must not be misrepresented; you must not
12
+ claim that you wrote the original software. If you use this software
13
+ in a product, an acknowledgment in the product documentation would be
14
+ appreciated but is not required.
15
+
16
+ 2. Altered source versions must be plainly marked as such, and must not be
17
+ misrepresented as being the original software.
18
+
19
+ 3. This notice may not be removed or altered from any source distribution.
@@ -0,0 +1,186 @@
1
+ Colir
2
+ =====
3
+
4
+ [![Build Status][ci-badge]][ci-link]
5
+
6
+ * Repository: [https://github.com/kyrylo/colir][cr]
7
+
8
+ Description
9
+ -----------
10
+
11
+ This tiny library provides support for RGB colours and some simple manipulations
12
+ with them.
13
+
14
+ Installation
15
+ ------------
16
+
17
+ gem install colir
18
+
19
+ Synopsis
20
+ --------
21
+
22
+ The name Colir means “colour” in Ukrainian (roughly). OK, enough of rant, let's
23
+ talk about the API instead.
24
+
25
+ ###### Basics
26
+
27
+ You can create colours with human readable names. For example, the following
28
+ code would create opaque red colour (0xff000000).
29
+
30
+ ```ruby
31
+ require 'colir'
32
+
33
+ # Create a new Colir.
34
+ red = Colir.red #=> #<Colir:...>
35
+ # Get a valid RGB colour, represented as an integer number.
36
+ red.hex #=> 16711680
37
+ # Why do you never trust me?
38
+ red.hex.to_s(16) #=> "ff0000"
39
+
40
+ # You can also get the same colour, but with alpha channel.
41
+ red.hexa #=> 4278190080
42
+ # Okay, okay!
43
+ red.hexa.to_s(16) #=> "ff000000"
44
+ ```
45
+
46
+ The list of all human readable colour names can be found at [w3schools][w3].
47
+ Actually, you can create any valid RGB colours, not just the predefined ones.
48
+
49
+ ```ruby
50
+ # This is valid.
51
+ yup = Colir.new(0xff0000) #=> #<Colir:...>
52
+ # This isn't. There is no such RGB colour.
53
+ nope = Colir.new(0xff00001) #=> RangeError: out of allowed RGB values
54
+ ```
55
+
56
+ ###### Transparency
57
+
58
+ As you may have noticed, the library supports transparent colours.
59
+
60
+ ```ruby
61
+ # Shortcut methods have only 1 parameter, which is transparency. It must lie
62
+ # within the range of 0..1
63
+ red = Colir.red(0.3)
64
+ red.hexa #=> 4278190110
65
+ red.hexa.to_s(16) #=> "ff00001e"
66
+ red.transparency #=> 0.3
67
+
68
+ # With arbitrary colours you can pass the second parameter.
69
+ green = Colir.new(0x00ff00, 0.3)
70
+ green.hexa #=> 16711710
71
+ green.hexa.to_s(16) #=> "0x00ff001e"
72
+ green.transparency #=> 0.3
73
+
74
+ # The default transparency is 0.0
75
+ green = Colir.new(0x00ff00)
76
+ green.transparency #=> 0.0
77
+ ```
78
+
79
+ It's possible to adjust a Colir's transparency.
80
+
81
+ ```ruby
82
+ # `#opaque!` and `#transparent!` set a Colir's transparency to `0.0`
83
+ # and `1.0` respectively.
84
+ blue = Colir.new(0x0000ff, 0.45)
85
+ blue.transparency #=> 0.3
86
+ blue.transparent! #=> (Colir: 0x00ff00e1)
87
+ blue.transparency #=> 0.0
88
+ blue.opaque! #=> (Colir: 0x00ff00ff)
89
+ blue.transparency #=> 1.0
90
+
91
+ # You can set your own transparency value.
92
+ blue.transparency = 0.9 #=> 0.9
93
+ blue.transparency #=> 0.9
94
+
95
+ # But be careful, as the valid value is anything in between 0 and 1.
96
+ blue.transparency = 1.01 #=> RangeError: ...
97
+ ```
98
+
99
+ ###### Shades
100
+
101
+ Last but not least, you can use colour shades.
102
+
103
+ ```ruby
104
+ yellow = Colir.yellow
105
+ yellow.shade #=> 0
106
+
107
+ # Let's make it a bit darker.
108
+ yellow.darken #=> #<Colir:...>
109
+ yellow.shade #=> -1
110
+ yellow.hex #=> 13421568
111
+
112
+ # Hum, that's not dark enough. Let's do it one more time.
113
+ yellow.darken
114
+ yellow.shade #=> -2
115
+ yellow.hex #=> 10066176
116
+
117
+ # Actually, the previous shade was better!
118
+ yellow.lighten
119
+ yellow.shade #=> -1
120
+ yellow.hex #=> 13421568
121
+ ```
122
+
123
+ The previous examples modify the Colir object (`#darken` and `#lighten`).
124
+ Hovewer, there are two other methods that return a new object: `#darker` and
125
+ `#lighter`.
126
+
127
+ ```ruby
128
+ # HEXes
129
+ orange = Colir.orange
130
+ orange.hex #=> 16753920
131
+ orange.darker.hex #=> 13403392
132
+ orange.hex #=> 16753920
133
+
134
+ # Shades
135
+ orange = Colir.orange
136
+ orange.shade #=> 0
137
+ orange.lighter.shade #=> 1
138
+ orange.shade #=> 0
139
+ ```
140
+
141
+ There is a handy way to reset the shade level. Can you guess it? Of course, it's
142
+ the `#reset_shade` method!
143
+
144
+ ```ruby
145
+ indigo = Colir.indigo
146
+ indigo.lighten
147
+ indigo.lighten
148
+ indigo.lighten
149
+ indigo.lighten
150
+ indigo.lighten
151
+ indigo.shades #=> 5
152
+ indigo.reset_shade #=> #<Colir:...>
153
+ indigo.shade #=> 0
154
+ ```
155
+
156
+ Limitations
157
+ -----------
158
+
159
+ ### OS support
160
+
161
+ Colir is a cross-platform library.
162
+
163
+ ### Rubies
164
+
165
+ * Ruby 1.9.3 and higher
166
+ * Rubinius 2.0.0rc1 and higher (mode 1.9 and higher)
167
+
168
+ Initially I wanted to supprot JRuby 1.7.3 (mode 1.9), but it has a [critical bug
169
+ in `BigDecimal` library](http://jira.codehaus.org/browse/JRUBY-7101), which
170
+ Colir actively utilises.
171
+
172
+ Credits
173
+ -------
174
+
175
+ * The first contributor badge goes to [kachick][kachick]
176
+
177
+ Licence
178
+ -------
179
+
180
+ The project uses Zlib licence. See LICENCE file for more information.
181
+
182
+ [cr]: https://github.com/kyrylo/colir
183
+ [ci-badge]: https://travis-ci.org/kyrylo/colir.png?branch=master "Build status"
184
+ [ci-link]: https://travis-ci.org/kyrylo/colir/ "Build history"
185
+ [w3]: http://www.w3schools.com/cssref/css_colornames.asp
186
+ [kachick]: https://github.com/kachick
@@ -0,0 +1,15 @@
1
+ def quiet
2
+ ENV['VERBOSE'] ? '' : '-q'
3
+ end
4
+
5
+ def test_files
6
+ paths = FileList['spec/**/*_spec.rb']
7
+ paths.shuffle!.join(' ')
8
+ end
9
+
10
+ desc "Run tests"
11
+ task :test do
12
+ exec "bacon -Ispec #{ quiet } #{ test_files }"
13
+ end
14
+
15
+ task :default => :test
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,18 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'colir'
3
+ s.version = File.read('VERSION')
4
+ s.date = Time.now.strftime('%Y-%m-%d')
5
+ s.summary = 'Colir means colour in Ukrainan. In Ruby it means HEX colour'
6
+ s.description = 'This library is about HEX colours.'
7
+ s.author = 'Kyrylo Silin'
8
+ s.email = 'kyrylosilin@gmail.com'
9
+ s.homepage = 'https://github.com/kyrylo/colir'
10
+ s.licenses = 'zlib'
11
+
12
+ s.require_path = 'lib'
13
+ s.files = `git ls-files`.split("\n")
14
+
15
+ s.add_development_dependency 'bacon'
16
+ s.add_development_dependency 'rake'
17
+ s.add_development_dependency 'pry'
18
+ end
@@ -0,0 +1,357 @@
1
+ require 'bigdecimal'
2
+
3
+ require_relative 'colir/hslrgb'
4
+
5
+ # This tiny library provides support for RGB colours and some simple
6
+ # manipulations with them. See README.md for more information.
7
+ class Colir
8
+
9
+ # The VERSION file must be in the root directory of the library.
10
+ VERSION_FILE = File.expand_path('../../VERSION', __FILE__)
11
+
12
+ VERSION = File.exist?(VERSION_FILE) ?
13
+ File.read(VERSION_FILE).chomp : '(could not find VERSION file)'
14
+
15
+ # The list for human readable colour according to the HTML and CSS color
16
+ # specification. Does not include alpha channel.
17
+ COLIRS = {
18
+ alice_blue: 0xf0f8ff,
19
+ antique_white: 0xfaebd7,
20
+ aqua: 0x00ffff,
21
+ aquamarine: 0x7fffd4,
22
+ azure: 0xf0ffff,
23
+ beige: 0xf5f5dc,
24
+ bisque: 0xffe4c4,
25
+ black: 0x000000,
26
+ blanched_almond: 0xffebcd,
27
+ blue: 0x0000ff,
28
+ blue_violet: 0x8a2be2,
29
+ brown: 0xa52a2a,
30
+ burly_wood: 0xdeb887,
31
+ cadet_blue: 0x5f9ea0,
32
+ chartreuse: 0x7fff00,
33
+ chocolate: 0xd2691e,
34
+ coral: 0xff7f50,
35
+ cornflower_blue: 0x6495ed,
36
+ cornsilk: 0xfff8dc,
37
+ crimson: 0xdc143c,
38
+ cyan: 0x00ffff,
39
+ dark_blue: 0x00008b,
40
+ dark_cyan: 0x008b8b,
41
+ dark_golden_rod: 0xb8860b,
42
+ dark_gray: 0xa9a9a9,
43
+ dark_green: 0xa9a9a9,
44
+ dark_khaki: 0xbdb76b,
45
+ dark_magenta: 0x8b008b,
46
+ dark_olive_green: 0x556b2f,
47
+ dark_orange: 0xff8c00,
48
+ dark_orchid: 0x9932cc,
49
+ dark_red: 0x9932cc,
50
+ dark_salmon: 0xe9967a,
51
+ dark_sea_green: 0x8fbc8f,
52
+ dark_slate_blue: 0x483d8b,
53
+ dark_slate_gray: 0x2f4f4f,
54
+ dark_turquoise: 0x00ced1,
55
+ dark_violet: 0x9400d3,
56
+ deep_pink: 0xff1493,
57
+ deep_sky_blue: 0x00bfff,
58
+ dim_gray: 0x696969,
59
+ dim_grey: 0x696969,
60
+ dodger_blue: 0x1e90ff,
61
+ fire_brick: 0xb22222,
62
+ floral_white: 0xfffaf0,
63
+ forest_green: 0x228b22,
64
+ fuchsia: 0xff00ff,
65
+ gainsboro: 0xdcdcdc,
66
+ ghost_white: 0xf8f8ff,
67
+ gold: 0xffd700,
68
+ golden_rod: 0xdaa520,
69
+ gray: 0x808080,
70
+ green: 0x008000,
71
+ green_yellow: 0xadff2f,
72
+ honey_dew: 0xf0fff0,
73
+ hot_pink: 0xff69b4,
74
+ indian_red: 0xcd5c5c,
75
+ indigo: 0x4b0082,
76
+ ivory: 0xfffff0,
77
+ khaki: 0xf0e68c,
78
+ lavender: 0xe6e6fa,
79
+ lavender_blush: 0xfff0f5,
80
+ lawn_green: 0x7cfc00,
81
+ lemon_chiffon: 0xfffacd,
82
+ light_blue: 0xadd8e6,
83
+ light_coral: 0xf08080,
84
+ light_cyan: 0xe0ffff,
85
+ light_golden_rod_yellow: 0xfafad2,
86
+ light_gray: 0xd3d3d3,
87
+ light_green: 0x90ee90,
88
+ light_pink: 0xffb6c1,
89
+ light_salmon: 0xffa07a,
90
+ light_sea_green: 0x20b2aa,
91
+ light_sky_blue: 0x87cefa,
92
+ light_slate_gray: 0x778899,
93
+ light_steel_blue: 0xb0c4de,
94
+ light_yellow: 0xffffe0,
95
+ lime: 0x00ff00,
96
+ lime_green: 0x32cd32,
97
+ linen: 0xfaf0e6,
98
+ magenta: 0xff00ff,
99
+ maroon: 0x800000,
100
+ medium_aqua_marine: 0x66cdaa,
101
+ medium_blue: 0x0000cd,
102
+ medium_orchid: 0xba55d3,
103
+ medium_purple: 0x9370db,
104
+ medium_sea_green: 0x3cb371,
105
+ medium_slate_blue: 0x7b68ee,
106
+ medium_spring_green: 0x00fa9a,
107
+ medium_turquoise: 0x48d1cc,
108
+ medium_violet_red: 0xc71585,
109
+ midnight_blue: 0x191970,
110
+ mint_cream: 0xf5fffa,
111
+ misty_rose: 0xffe4e1,
112
+ moccasin: 0xffe4b5,
113
+ navajo_white: 0xffdead,
114
+ navy: 0x000080,
115
+ old_lace: 0xfdf5e6,
116
+ olive: 0x808000,
117
+ olive_drab: 0x6b8e23,
118
+ orange: 0xffa500,
119
+ orange_red: 0xff4500,
120
+ orchid: 0xda70d6,
121
+ pale_golden_rod: 0xeee8aa,
122
+ pale_green: 0x98fb98,
123
+ pale_turquoise: 0xafeeee,
124
+ pale_violet_red: 0xdb7093,
125
+ papaya_whip: 0xffefd5,
126
+ peach_puff: 0xffdab9,
127
+ peru: 0xcd853f,
128
+ pink: 0xffc0cb,
129
+ plum: 0xdda0dd,
130
+ powder_blue: 0xb0e0e6,
131
+ purple: 0x800080,
132
+ red: 0xff0000,
133
+ rosy_brown: 0xbc8f8f,
134
+ royal_blue: 0x4169e1,
135
+ saddle_brown: 0x8b4513,
136
+ salmon: 0xfa8072,
137
+ sandy_brown: 0xf4a460,
138
+ sea_green: 0x2e8b57,
139
+ sea_shell: 0xfff5ee,
140
+ sienna: 0xa0522d,
141
+ silver: 0xc0c0c0,
142
+ sky_blue: 0x87ceeb,
143
+ slate_blue: 0x6a5acd,
144
+ slate_gray: 0x708090,
145
+ snow: 0xfffafa,
146
+ spring_green: 0x00ff7f,
147
+ steel_blue: 0x468284,
148
+ tan: 0xd2b48c,
149
+ teal: 0x008080,
150
+ thistle: 0xd8bfd8,
151
+ tomato: 0xff6347,
152
+ turquoise: 0x40e0d0,
153
+ violet: 0xee82ee,
154
+ wheat: 0xf5debe,
155
+ white: 0x000000,
156
+ white_smoke: 0xf5f5f5,
157
+ yellow: 0xffff00,
158
+ yellow_green: 0x9acd32
159
+ }
160
+
161
+ class << self
162
+ # Dynamically define class methods. Each human readable colour turns into a
163
+ # method. It's useful if you don't care about precise colours or can't
164
+ # remember HEX codes for a colour.
165
+ #
166
+ # @example Accessing a colour
167
+ # Colir.wheat.hex #=> 0xf5debe00
168
+ #
169
+ # @example Transparency
170
+ # Colir.wheat(0.3).hex #=> 0xf5debee1
171
+ #
172
+ # @param [Float] transparency
173
+ #
174
+ # @return [Colir]
175
+ # @see Colir
176
+ COLIRS.each do |name, hex|
177
+ define_method(name) { |transparency = nil|
178
+ new(hex, transparency || TRANSPARENCY)
179
+ }
180
+ end
181
+ end
182
+
183
+ # The possible number of shades of a Colir in each direction.
184
+ SHADE_FACTOR = 5
185
+
186
+ # The default transparency (opaque).
187
+ TRANSPARENCY = 0.0
188
+
189
+ # The default shade assigned to any Colir.
190
+ SHADE = 0
191
+
192
+ # @see HSLRGB::HSL::L_RANGE
193
+ UPPER_LIMIT = BigDecimal(HSLRGB::HSL::L_RANGE.max.to_f.to_s)
194
+
195
+ # The mi
196
+ RGB_LOWER_LIMIT = 0x000000
197
+
198
+ RGB_UPPER_LIMIT = 0xffffff
199
+
200
+ # @return [Integer] the HEX colour without the alpha channel
201
+ attr_reader :hex
202
+
203
+ # @return [Float] the transparency. Lies within the range of [0, 1].
204
+ attr_reader :transparency
205
+
206
+ # @return [Integer] the current shade of the colour. Lies within the
207
+ # range of [-5, 5]
208
+ attr_reader :shade
209
+
210
+ # Creates a new HEXA colour, where the A states for "Alpha".
211
+ #
212
+ # @param [Integer] hex It's convenient to use Ruby's HEX notation: `0xaaff33`
213
+ # @param [Float] transparency Alpha channel. Must lie within the range
214
+ # of [0, 1].
215
+ # @raise [RangeError] if the transparency is a bad value
216
+ def initialize(hex, transparency = TRANSPARENCY)
217
+ validate_colir!(hex, transparency)
218
+
219
+ @hex = hex
220
+ @transparency = transparency
221
+ @shade = SHADE
222
+ @ld_seq = [:base]
223
+ end
224
+
225
+ # @return [Integer] the HEXA representation of the Colir
226
+ def hexa
227
+ hex = @hex.to_s(16).rjust(6, '0')
228
+ alpha = (transparency * 100).to_i.to_s(16).rjust(2, '0')
229
+ (hex + alpha).to_i(16)
230
+ end
231
+
232
+ # Make the colour fully transparent.
233
+ # @return [self]
234
+ def transparent!
235
+ @transparency = 1.0
236
+ self
237
+ end
238
+
239
+ # Sets the new +transparency+.
240
+ #
241
+ # @return [Float] the new transparency
242
+ # @raise [RangeError] if transparency does not lie within the valid range
243
+ def transparency=(transparency)
244
+ validate_transparency!(transparency)
245
+ @transparency = transparency
246
+ end
247
+
248
+ # Make the colour fully opaque.
249
+ # @return [self]
250
+ def opaque!
251
+ @transparency = TRANSPARENCY
252
+ self
253
+ end
254
+
255
+ # Lightens `self` by 1 shade. The maximum number of positive shades is 5. The
256
+ # method stops increasing the shade levels when it reaches the limit and
257
+ # merely returns `self` without any changes. The final shade is white colour.
258
+ #
259
+ # @return [self] the lightened `self`
260
+ def lighten
261
+ if @shade < SHADE_FACTOR
262
+ calculate_new_hex { |hsl|
263
+ hsl[2] += if @ld_seq.last == :base || @ld_seq.last == :ltn
264
+ @ld_seq << :ltn
265
+ l_factor
266
+ else
267
+ @ld_seq.pop
268
+ d_factor
269
+ end
270
+ @shade += 1
271
+ hsl
272
+ }
273
+ end
274
+ self
275
+ end
276
+
277
+ # Darkens `self` by 1 shade. The maximum number of negative shades is -5. The
278
+ # method stops decreasing the shade levels when it reaches the limit and
279
+ # merely returns `self` without any changes. The final shade is black colour.
280
+ #
281
+ # @return [self] the darkened `self`
282
+ def darken
283
+ if SHADE_FACTOR * -1 < @shade
284
+ calculate_new_hex { |hsl|
285
+ hsl[2] -= if @ld_seq.last == :base || @ld_seq.last == :dkn
286
+ @ld_seq << :dkn
287
+ d_factor
288
+ else
289
+ @ld_seq.pop
290
+ l_factor
291
+ end
292
+ @shade -= 1
293
+ hsl
294
+ }
295
+ end
296
+ self
297
+ end
298
+
299
+ # Resets the `@shade` to the default value, restoring the `@hex` number.
300
+ # @return [self]
301
+ def reset_shade
302
+ @shade.abs.times { @ld_seq.last == :ltn ? darken : lighten }
303
+ self
304
+ end
305
+
306
+ # @return [Colir] a new Colir, but darker than `self` by 1 shade. It does not
307
+ # modify `self`
308
+ def darker
309
+ self.class.new(@hex, @transparency).darken
310
+ end
311
+
312
+ # @return [Colir] a new Colir, but lighter than `self` by 1 shade. It does not
313
+ # modify `self`
314
+ def lighter
315
+ self.class.new(@hex, @transparency).lighten
316
+ end
317
+
318
+ private
319
+
320
+ # @return [BigDecimal] the lightening factor
321
+ def l_factor
322
+ @l_factor ||= (UPPER_LIMIT - @hsl[2]) / SHADE_FACTOR
323
+ end
324
+
325
+ # @return [BigDecimal] the darkening factor
326
+ def d_factor
327
+ @d_factor ||= @hsl[2] / SHADE_FACTOR
328
+ end
329
+
330
+ # @yield [hsl]
331
+ # @yieldparam [Array<Integer,BigDecimal>] an HSL colour based on the
332
+ # current HEX
333
+ # @yieldreturn [Array<Integer,BigDecimal>] an HSL colour with
334
+ # corrected lightness
335
+ # @return [void]
336
+ def calculate_new_hex
337
+ @hsl ||= HSLRGB.rgb_to_hsl(*HSLRGB::RGB.int_bytes(@hex))
338
+ @hex = HSLRGB.hsl_to_rgb(*yield(@hsl)).map do |b|
339
+ b.to_s(16).rjust(2, '0')
340
+ end.join('').to_i(16)
341
+ end
342
+
343
+ def validate_colir!(hex, transparency)
344
+ unless HSLRGB::RGB::RGB_RANGE.cover?(hex)
345
+ raise RangeError, 'out of allowed RGB values (0x000000-0xffffff)'
346
+ end
347
+
348
+ validate_transparency!(transparency)
349
+ end
350
+
351
+ def validate_transparency!(transparency)
352
+ unless (0..1).cover?(transparency)
353
+ raise RangeError, 'out of allowed transparency values (0-1)'
354
+ end
355
+ end
356
+
357
+ end