Class: NSColor
- Defined in:
- lib/osx/sugarcube-to_s/nscolor.rb,
lib/osx/sugarcube-color/nscolor.rb
Class Method Summary collapse
- .blueControlColor ⇒ Object
- .graphiteControlColor ⇒ Object
- .rgba(r, g, b, a) ⇒ Object
- .systemControlColor ⇒ Object
Instance Method Summary collapse
-
#+(color) ⇒ Object
blends two colors by averaging the RGB and alpha components.
-
#<<(color) ⇒ Object
blends two colors by adding the colors, with an upper maximum of 255.
- #alpha ⇒ Object
- #blue ⇒ Object
- #cgcolor(alpha = nil) ⇒ Object
-
#css_name ⇒ Object
returns the closest css name.
- #green ⇒ Object
- #hex ⇒ Object
-
#invert ⇒ Object
inverts the RGB channel.
-
#mix_with(color, amount) ⇒ Object
a more generic color mixing method.
- #named_color_space? ⇒ Boolean
- #nscolor(alpha = nil) ⇒ Object
-
#red ⇒ Object
Cannot define method ‘brightness’ because no Objective-C stub was pre-compiled for types ‘d@:’.
- #skcolor(alpha = nil) ⇒ Object
- #system_name ⇒ Object
-
#to_a ⇒ Object
returns the components as an array of 32 bit RGB values.
-
#to_i ⇒ Object
returns the components OR’d together, as 32 bit RGB integer.
- #to_s ⇒ Object
Class Method Details
.blueControlColor ⇒ Object
7 8 9 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 7 def self.blueControlColor NSColor.colorForControlTint(NSBlueControlTint) end |
.graphiteControlColor ⇒ Object
11 12 13 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 11 def self.graphiteControlColor NSColor.colorForControlTint(NSGraphiteControlTint) end |
.rgba(r, g, b, a) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 32 def self.rgba(r, g, b, a) if NSColor.respond_to?('colorWithRed:green:blue:alpha:') NSColor.colorWithRed(r, green: g, blue: b, alpha: a) else NSColor.colorWithCalibratedRed(r, green: g, blue: b, alpha: a) end end |
Instance Method Details
#+(color) ⇒ Object
blends two colors by averaging the RGB and alpha components.
55 56 57 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 55 def +(color) mix_with(color.nscolor, 0.5) end |
#<<(color) ⇒ Object
blends two colors by adding the colors, with an upper maximum of 255. Adding white to any color will create white, adding black will do nothing. Also takes transparency into account; adding a transparent color has no effect, adding an opaque color has the most effect.
66 67 68 69 70 71 72 73 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 66 def <<(color) r = [1.0, color.red * color.alpha + self.red].min g = [1.0, color.green * color.alpha + self.green].min b = [1.0, color.blue * color.alpha + self.blue].min a = self.alpha NSColor.rgba(r, g, b, a) end |
#alpha ⇒ Object
174 175 176 177 178 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 174 def alpha alphaComponent rescue Exception nil end |
#blue ⇒ Object
166 167 168 169 170 171 172 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 166 def blue blueComponent rescue NSInvalidArgumentException whiteComponent rescue Exception nil end |
#cgcolor(alpha = nil) ⇒ Object
44 45 46 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 44 def cgcolor(alpha=nil) nscolor(alpha).CGColor end |
#css_name ⇒ Object
returns the closest css name
216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 216 def css_name my_color = self.to_i css_name = nil Symbol.css_colors.each do |color, hex| if hex == my_color css_name = color break end end return css_name end |
#green ⇒ Object
158 159 160 161 162 163 164 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 158 def green greenComponent rescue NSInvalidArgumentException whiteComponent rescue Exception nil end |
#hex ⇒ Object
206 207 208 209 210 211 212 213 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 206 def hex my_color = self.to_i if my_color return '#' + my_color.to_s(16).rjust(6, '0') else nil end end |
#invert ⇒ Object
inverts the RGB channel. keeps the alpha channel unchanged
115 116 117 118 119 120 121 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 115 def invert r = 1.0 - self.red g = 1.0 - self.green b = 1.0 - self.blue a = self.alpha NSColor.rgba(r, g, b, a) end |
#mix_with(color, amount) ⇒ Object
a more generic color mixing method. mixes two colors, but a second parameter determines how much of each. 0.5 means equal parts, 0.0 means use all of the first, and 1.0 means use all of the second
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 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 78 def mix_with(color, amount) color = color.nscolor # make amount between 0 and 1 amount = [[0, amount].max, 1].min # start with precise amounts: 0, 0.5, and 1. if amount == 0 && self.alpha == color.alpha self elsif amount == 1 && self.alpha == color.alpha color elsif amount == 0.5 && self.alpha == color.alpha r = (self.red + color.red) / 2 g = (self.green + color.green) / 2 b = (self.blue + color.blue) / 2 a = self.alpha NSColor.rgba(r, g, b, a) else a = (color.alpha - self.alpha) * amount + self.alpha return NSColor.clearColor if a == 0 color_red = color.red * color.alpha + self.red * (1 - color.alpha) self_red = self.red * self.alpha + color.red * (1 - self.alpha) color_green = color.green * color.alpha + self.green * (1 - color.alpha) self_green = self.green * self.alpha + color.green * (1 - self.alpha) color_blue = color.blue * color.alpha + self.blue * (1 - color.alpha) self_blue = self.blue * self.alpha + color.blue * (1 - self.alpha) r = (color_red - self_red) * amount + self_red g = (color_green - self_green) * amount + self_green b = (color_blue - self_blue) * amount + self_blue NSColor.rgba(r, g, b, a) end end |
#named_color_space? ⇒ Boolean
40 41 42 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 40 def named_color_space? colorSpaceName == "NSNamedColorSpace" end |
#nscolor(alpha = nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 15 def nscolor(alpha=nil) if alpha if named_color_space? color = self.colorUsingColorSpace(NSColorSpace.genericRGBColorSpace) if color return color.colorWithAlphaComponent(alpha.to_f) end end return self.colorWithAlphaComponent(alpha.to_f) elsif named_color_space? color = self.colorUsingColorSpace(NSColorSpace.genericRGBColorSpace) return color if color end return self end |
#red ⇒ Object
Cannot define method ‘brightness’ because no Objective-C stub was pre-compiled for types ‘d@:’. Make sure you properly link with the framework or library that defines this message. def brightness
brightnessComponent
rescue Exception
nil
end
150 151 152 153 154 155 156 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 150 def red redComponent rescue NSInvalidArgumentException whiteComponent rescue Exception nil end |
#skcolor(alpha = nil) ⇒ Object
48 49 50 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 48 def skcolor(alpha=nil) nscolor(alpha) end |
#system_name ⇒ Object
228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 228 def system_name system_color = nil Symbol.nscolors.each do |color_name, method| color = NSColor.send(method) without_alpha = self.nscolor(color.alpha) if color == self || color == without_alpha system_color = method break end end return system_color end |
#to_a ⇒ Object
returns the components as an array of 32 bit RGB values. alpha channel is dropped
195 196 197 198 199 200 201 202 203 204 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 195 def to_a if self.red && self.green && self.blue red = (self.red * 255).round green = (self.green * 255).round blue = (self.blue * 255).round return [red, green, blue] else return nil end end |
#to_i ⇒ Object
returns the components OR’d together, as 32 bit RGB integer. alpha channel is dropped
182 183 184 185 186 187 188 189 190 191 |
# File 'lib/osx/sugarcube-color/nscolor.rb', line 182 def to_i if self.red && self.green && self.blue red = (self.red * 255).round << 16 green = (self.green * 255).round << 8 blue = (self.blue * 255).round return red + green + blue else return nil end end |
#to_s ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/osx/sugarcube-to_s/nscolor.rb', line 3 def to_s return super unless self.respond_to?(:alpha) alpha_s = ((alpha || 1) < 1 ? "(#{alpha})" : '') if system_name return "NSColor.#{system_name}#{alpha_s.length > 0 ? '.colorWithAlphaComponent' + alpha_s : ''}" elsif css_name return ":#{css_name}.nscolor#{alpha_s}" elsif hex return "'#{hex}'.nscolor#{alpha_s}" else super end end |