pigment 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/pigment.rb +42 -13
  2. metadata +5 -5
@@ -1,5 +1,5 @@
1
1
  module Pigment
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
 
4
4
  class Color
5
5
 
@@ -8,7 +8,7 @@ module Pigment
8
8
 
9
9
  # Pigment uses sRGB or sRGBA as the default color system
10
10
  # color can be a hexadecimal code preceded by a '#' like '#FF4CB2' or a array of floats (1.0, 0.3, 0.7)
11
- # or an array of integers between 0 and 255 ()
11
+ # or an array of integers between 0 and 255 (153, 255, 31)
12
12
  # @param [String, Array] color
13
13
  def initialize(*color)
14
14
  @color = case
@@ -36,6 +36,16 @@ module Pigment
36
36
  define_method("#{m}", ->() { hsl[i] })
37
37
  end
38
38
 
39
+ # Set alpha value. Only accepts float values
40
+ # @param [Float] alpha
41
+ def a=(alpha)
42
+ @color[3] = alpha if alpha.is_a?(Float) && (0.0..1.0).include?(alpha)
43
+ end
44
+
45
+ def rgb
46
+ @color[0, 3]
47
+ end
48
+
39
49
  # Return specified color by its name from the named_colors hash.
40
50
  # @param [Symbol] name
41
51
  # @return [Color]
@@ -69,9 +79,7 @@ module Pigment
69
79
  # @param [Array] color
70
80
  # @return [Array]
71
81
  def self.supress(color)
72
- unless (0.0..1.0).include?(color.max)
73
- color.map! { |c| c / color.max }
74
- end
82
+ color.map! { |c| c / color.max } unless (0.0..1.0).include?(color.max)
75
83
  color
76
84
  end
77
85
 
@@ -108,19 +116,24 @@ module Pigment
108
116
  def +(color)
109
117
  case color
110
118
  when Color
111
- self.class.new(*supress([color.color, @color].transpose.map! { |c, d| c + d }))
119
+ self.class.new(*supress([color.rgb, rgb].transpose.map! { |c, d| c + d }))
112
120
  else
113
121
  raise ArgumentError, "Expecting Color. Given #{color.class}"
114
122
  end
115
123
  end
116
124
 
117
125
  # Subtracts all the two color components. If any component gets out of the 0 to 1.0 range its supressed.
126
+ # If tone component gets lower than 0 it acts like its dealing with the inverse component -> 1 - component
118
127
  # @param [Numeric] color
119
128
  # @return [Color]
120
129
  def -(color)
121
130
  case color
122
131
  when Color
123
- self.class.new(*supress([color.color, @color].transpose.map! { |c, d| c - d }))
132
+ self.class.new(*self.class.supress([@color, color.color].transpose.map! do |c, d|
133
+ e = c - d
134
+ e >= 0 ? e : e = 1 + e
135
+ e
136
+ end))
124
137
  else
125
138
  raise ArgumentError, "Expecting color. Given #{color.class}"
126
139
  end
@@ -132,7 +145,7 @@ module Pigment
132
145
  def *(n)
133
146
  case n
134
147
  when Numeric
135
- n = @color[0, 3].map { |c| c * n.to_f }
148
+ n = rgb.map { |c| c * n.to_f }
136
149
  self.class.new(*self.class.supress(n))
137
150
  else
138
151
  raise ArgumentError, "Expecting Numeric. Given #{n.class}"
@@ -145,7 +158,7 @@ module Pigment
145
158
  def /(n)
146
159
  case n
147
160
  when Numeric
148
- n = @color[0, 3].map { |c| c * n.to_f }
161
+ n = rgb.map { |c| c * n.to_f }
149
162
  self.class.new(*self.class.supress(n))
150
163
  else
151
164
  raise ArgumentError, "Expecting Numeric. Given #{n.class}"
@@ -156,9 +169,15 @@ module Pigment
156
169
  # @param [Color] color
157
170
  # @return [Boolean]
158
171
  def ==(color)
159
- color.is_a? Color && color.color[0, 3] == @color[0, 3]
172
+ color.is_a? Color && color.rgb == @color.rgb
160
173
  end
161
174
 
175
+ # Converts a color to its grayscale correspondent
176
+ # @return [Color]
177
+ def grayscale
178
+ r = g = b = (self.r + self.g + self.b)/3
179
+ self.class.new(r, g, b)
180
+ end
162
181
 
163
182
  # Calculates the harmonic colors. Type can be :triadic, :split, :analogous, :complement or :complementary
164
183
  # @param [Symbol] type
@@ -197,11 +216,21 @@ module Pigment
197
216
  self.class.new(*@color.map { |c| 1.0 - c })
198
217
  end
199
218
 
219
+ # Returns a new Color without the given channels
220
+ # @param [Array of Symbols] channels
221
+ # @return [Color]
222
+ def remove_channels(*channels)
223
+ r = 0 if channels.include? :r
224
+ g = 0 if channels.include? :g
225
+ b = 0 if channels.include? :b
226
+ self.class.new(r, g, b)
227
+ end
228
+
200
229
  # Creates an instance variable to keep the HSL values of a RGB color.
201
230
  # @return [Array]
202
231
  def to_hsl
203
- min = @color[0, 3].min
204
- max = @color[0, 3].max
232
+ min = rgb.min
233
+ max = rgb.max
205
234
  delta = (max - min)
206
235
  l = (max + min) / 2.0
207
236
 
@@ -232,7 +261,7 @@ module Pigment
232
261
  # @param [Boolean] with_alpha
233
262
  # @return [Array]
234
263
  def to_floats(with_alpha = false)
235
- with_alpha ? @color : @color[0, 3]
264
+ with_alpha ? @color : rgb
236
265
  end
237
266
 
238
267
  # Returns an array of the color components. Alpha value is passed as well if with_alpha is set to true.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pigment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,10 +10,10 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-13 00:00:00.000000000 Z
13
+ date: 2012-11-16 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: A rgb color gem, with a list of 750 diferent colors defined within 869
16
- names
16
+ names.
17
17
  email:
18
18
  - pedro.megastore@gmail.com
19
19
  - silver.phoenix99@gmail.com
@@ -23,7 +23,7 @@ extra_rdoc_files: []
23
23
  files:
24
24
  - lib/colors.rb
25
25
  - lib/pigment.rb
26
- homepage: https://github.com/P3t3rU5/pigment
26
+ homepage: https://github.com/SilverPhoenix99/roglew
27
27
  licenses: []
28
28
  post_install_message:
29
29
  rdoc_options: []
@@ -46,5 +46,5 @@ rubyforge_project:
46
46
  rubygems_version: 1.8.24
47
47
  signing_key:
48
48
  specification_version: 3
49
- summary: A RGB color gem
49
+ summary: A rgb color gem, with a list of 750 diferent colors.
50
50
  test_files: []