Class: Backlogs::Color
- Inherits:
-
Object
- Object
- Backlogs::Color
- Defined in:
- lib/color.rb
Constant Summary
- HEXVAL =
Table for conversion to hex
(('0'..'9').to_a).concat(('A'..'F').to_a).freeze
- BRIGHTNESS_DEFAULT =
Default value for #darken, #lighten etc.
0.2- WHITE =
Some constants for general use
Color.new(255,255,255).freeze
- BLACK =
Color.new(0,0,0).freeze
Instance Attribute Summary (collapse)
-
- (Object) a
Returns the value of attribute a.
-
- (Object) b
Returns the value of attribute b.
-
- (Object) g
Returns the value of attribute g.
-
- (Object) r
Returns the value of attribute r.
Class Method Summary (collapse)
-
+ (Object) blend(col1, col2, amt)
Class-level version for explicit blends of two values, useful with constants.
-
+ (Object) parse(*args)
Attempt to read in a string and parse it into values.
Instance Method Summary (collapse)
-
- (Object) ==(val)
Test for equality, accepts string vals as well, eg Color.new('aaa') == '#AAAAAA' => true.
-
- (Object) blend(other, amt)
Blend to a color amt % towards another color value, eg red.blend(blue, 0.5) will be purple, white.blend(black, 0.5) will be gray, etc.
-
- (Object) blend!(other, amt)
In place version of #blend.
-
- (Object) darken(amt = BRIGHTNESS_DEFAULT)
Darken a color towards full black.
-
- (Object) darken!(amt = BRIGHTNESS_DEFAULT)
In place version of #darken.
-
- (Object) grayscale
Convert to grayscale, using perception-based weighting.
-
- (Object) grayscale!
In place version of #grayscale.
- - (Boolean) grayscale?
-
- (Color) initialize(*args)
constructor
Constructor.
- - (Object) inspect
-
- (Object) lighten(amt = BRIGHTNESS_DEFAULT)
Lighten color towards white.
-
- (Object) lighten!(amt = BRIGHTNESS_DEFAULT)
In place version of #lighten.
- - (Boolean) opaque?
-
- (Object) set(*args)
All-purpose setter - pass in another Color, '#000000', rgb vals...
- - (Object) to_rgb(add_hash = true)
- - (Object) to_rgba(add_hash = true)
- - (Object) to_s(add_hash = true)
- - (Boolean) trans?
Constructor Details
- (Color) initialize(*args)
Constructor. Inits to white (#FFFFFF) by default, or accepts any params supported by #parse.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/color.rb', line 36 def initialize(*args) @r = 255 @g = 255 @b = 255 @a = 255 if args.size.between?(3,4) self.r = args[0] self.g = args[1] self.b = args[2] self.a = args[3] if args[3] else set(*args) end end |
Instance Attribute Details
- (Object) a
Returns the value of attribute a
27 28 29 |
# File 'lib/color.rb', line 27 def a @a end |
- (Object) b
Returns the value of attribute b
27 28 29 |
# File 'lib/color.rb', line 27 def b @b end |
- (Object) g
Returns the value of attribute g
27 28 29 |
# File 'lib/color.rb', line 27 def g @g end |
- (Object) r
Returns the value of attribute r
27 28 29 |
# File 'lib/color.rb', line 27 def r @r end |
Class Method Details
+ (Object) blend(col1, col2, amt)
Class-level version for explicit blends of two values, useful with constants
209 210 211 212 213 |
# File 'lib/color.rb', line 209 def self.blend(col1, col2, amt) col1 = Color.parse(col1) col2 = Color.parse(col2) col1.blend(col2, amt) end |
+ (Object) parse(*args)
Attempt to read in a string and parse it into values
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/color.rb', line 78 def self.parse(*args) case args.size when 0 then return nil when 1 then val = args[0] # Trivial parse... :-) return val if val.is_a?(Color) # Single value, assume grayscale return Color.new(val, val, val) if val.is_a?(Fixnum) # Assume string str = val.to_s.upcase str = str[/[0-9A-F]{3,8}/] || '' case str.size when 3, 4 then r, g, b, a = str.scan(/[0-9A-F]/) when 6,8 then r, g, b, a = str.scan(/[0-9A-F]{2}/) else return nil end return Color.new(r,g,b,a || 255) when 3,4 then return Color.new(*args) end nil end |
Instance Method Details
- (Object) ==(val)
Test for equality, accepts string vals as well, eg Color.new('aaa') == '#AAAAAA' => true
65 66 67 68 69 |
# File 'lib/color.rb', line 65 def ==(val) val = Color.parse(val) return false if val.nil? return r == val.r && g == val.g && b == val.b && a == val.a end |
- (Object) blend(other, amt)
Blend to a color amt % towards another color value, eg red.blend(blue, 0.5) will be purple, white.blend(black, 0.5) will be gray, etc.
191 192 193 194 195 196 197 198 199 200 |
# File 'lib/color.rb', line 191 def blend(other, amt) other = Color.parse(other) return Color.new(self) if amt <= 0 || other.nil? return Color.new(other) if amt >= 1.0 val = Color.new(self) val.r += ((other.r - val.r)*amt).to_i val.g += ((other.g - val.g)*amt).to_i val.b += ((other.b - val.b)*amt).to_i val end |
- (Object) blend!(other, amt)
In place version of #blend
203 204 205 206 |
# File 'lib/color.rb', line 203 def blend!(other, amt) set(blend(other, amt)) self end |
- (Object) darken(amt = BRIGHTNESS_DEFAULT)
Darken a color towards full black. 0.0 is a no-op, 1.0 will return #000000
160 161 162 163 164 165 166 167 168 |
# File 'lib/color.rb', line 160 def darken(amt = BRIGHTNESS_DEFAULT) return self if amt <= 0 return BLACK if amt >= 1.0 val = Color.new(self) val.r -= (val.r * amt).to_i val.g -= (val.g * amt).to_i val.b -= (val.b * amt).to_i val end |
- (Object) darken!(amt = BRIGHTNESS_DEFAULT)
In place version of #darken
171 172 173 174 |
# File 'lib/color.rb', line 171 def darken!(amt = BRIGHTNESS_DEFAULT) set(darken(amt)) self end |
- (Object) grayscale
Convert to grayscale, using perception-based weighting
177 178 179 180 181 |
# File 'lib/color.rb', line 177 def grayscale val = Color.new(self) val.r = val.g = val.b = (0.2126 * val.r + 0.7152 * val.g + 0.0722 * val.b) val end |
- (Object) grayscale!
In place version of #grayscale
184 185 186 187 |
# File 'lib/color.rb', line 184 def grayscale! set(grayscale) self end |
- (Boolean) grayscale?
138 139 140 |
# File 'lib/color.rb', line 138 def grayscale? @r == @g && @g == @b end |
- (Object) inspect
114 115 116 |
# File 'lib/color.rb', line 114 def inspect to_s(true) end |
- (Object) lighten(amt = BRIGHTNESS_DEFAULT)
Lighten color towards white. 0.0 is a no-op, 1.0 will return #FFFFFF
143 144 145 146 147 148 149 150 151 |
# File 'lib/color.rb', line 143 def lighten(amt = BRIGHTNESS_DEFAULT) return self if amt <= 0 return WHITE if amt >= 1.0 val = Color.new(self) val.r += ((255-val.r) * amt).to_i val.g += ((255-val.g) * amt).to_i val.b += ((255-val.b) * amt).to_i val end |
- (Object) lighten!(amt = BRIGHTNESS_DEFAULT)
In place version of #lighten
154 155 156 157 |
# File 'lib/color.rb', line 154 def lighten!(amt = BRIGHTNESS_DEFAULT) set(lighten(amt)) self end |
- (Boolean) opaque?
130 131 132 |
# File 'lib/color.rb', line 130 def opaque? @a == 255 end |
- (Object) set(*args)
All-purpose setter - pass in another Color, '#000000', rgb vals... whatever
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/color.rb', line 53 def set(*args) val = Color.parse(*args) unless val.nil? self.r = val.r self.g = val.g self.b = val.b self.a = val.a end self end |
- (Object) to_rgb(add_hash = true)
122 123 124 |
# File 'lib/color.rb', line 122 def to_rgb(add_hash = true) (add_hash ? '#' : '') + to_hex(r) + to_hex(g) + to_hex(b) end |
- (Object) to_rgba(add_hash = true)
126 127 128 |
# File 'lib/color.rb', line 126 def to_rgba(add_hash = true) to_rgb(add_hash) + to_hex(a) end |
- (Object) to_s(add_hash = true)
118 119 120 |
# File 'lib/color.rb', line 118 def to_s(add_hash = true) trans? ? to_rgba(add_hash) : to_rgb(add_hash) end |
- (Boolean) trans?
134 135 136 |
# File 'lib/color.rb', line 134 def trans? @a != 255 end |