Class: NSColor

Inherits:
Object show all
Defined in:
lib/osx/sugarcube-to_s/nscolor.rb,
lib/osx/sugarcube-color/nscolor.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.blueControlColorObject



7
8
9
# File 'lib/osx/sugarcube-color/nscolor.rb', line 7

def self.blueControlColor
  NSColor.colorForControlTint(NSBlueControlTint)
end

.graphiteControlColorObject



11
12
13
# File 'lib/osx/sugarcube-color/nscolor.rb', line 11

def self.graphiteControlColor
  NSColor.colorForControlTint(NSGraphiteControlTint)
end

.systemControlColorObject



3
4
5
# File 'lib/osx/sugarcube-color/nscolor.rb', line 3

def self.systemControlColor
  NSColor.colorForControlTint(NSColor.currentControlTint)
end

Instance Method Details

#+(color) ⇒ Object

blends two colors by averaging the RGB and alpha components.

Examples:

:white.nscolor + :black.nscolor == :gray.nscolor


34
35
36
# File 'lib/osx/sugarcube-color/nscolor.rb', line 34

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.

Examples:

:red.nscolor << :blue.nscolor == '#ff00ff'.nscolor (:magenta)
:red.nscolor << :blue.nscolor(0.5) == '#ff0080'.nscolor (pinkish)


45
46
47
48
49
50
51
# File 'lib/osx/sugarcube-color/nscolor.rb', line 45

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.colorWithRed(r, green:g, blue:b, alpha:a)
end

#alphaObject



152
153
154
155
156
# File 'lib/osx/sugarcube-color/nscolor.rb', line 152

def alpha
  alphaComponent
rescue Exception
  nil
end

#blueObject



144
145
146
147
148
149
150
# File 'lib/osx/sugarcube-color/nscolor.rb', line 144

def blue
  blueComponent
rescue NSInvalidArgumentException
  whiteComponent
rescue Exception
  nil
end

#cgcolor(alpha = nil) ⇒ Object



23
24
25
# File 'lib/osx/sugarcube-color/nscolor.rb', line 23

def cgcolor(alpha=nil)
  nscolor(alpha).CGColor
end

#css_nameObject

returns the closest css name



194
195
196
197
198
199
200
201
202
203
204
# File 'lib/osx/sugarcube-color/nscolor.rb', line 194

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

#greenObject



136
137
138
139
140
141
142
# File 'lib/osx/sugarcube-color/nscolor.rb', line 136

def green
  greenComponent
rescue NSInvalidArgumentException
  whiteComponent
rescue Exception
  nil
end

#hexObject



184
185
186
187
188
189
190
191
# File 'lib/osx/sugarcube-color/nscolor.rb', line 184

def hex
  my_color = self.to_i
  if my_color
    return '#' + my_color.to_s(16).rjust(6, '0')
  else
    nil
  end
end

#inspectObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/osx/sugarcube-to_s/nscolor.rb', line 19

def inspect
  return super unless self.respond_to?(:alpha)

  alpha_s = ((alpha || 1) < 1 ? "(#{alpha})" : '')
  if system_name
    return "NSColor.#{system_name}#{alpha_s}"
  elsif css_name
    return ":#{css_name}.uicolor#{alpha_s}"
  elsif hex
    return "'#{hex}'.uicolor#{alpha_s}"
  else
    super
  end
end

#invertObject

inverts the RGB channel. keeps the alpha channel unchanged

Examples:

:white.nscolor.invert == :black.nscolor


93
94
95
96
97
98
99
# File 'lib/osx/sugarcube-color/nscolor.rb', line 93

def invert
  r = 1.0 - self.red
  g = 1.0 - self.green
  b = 1.0 - self.blue
  a = self.alpha
  NSColor.colorWithRed(r, green: g, blue: b, alpha: 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



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/osx/sugarcube-color/nscolor.rb', line 56

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.colorWithRed(r, green:g, blue:b, alpha: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.colorWithRed(r, green:g, blue:b, alpha:a)
  end
end

#nscolor(alpha = nil) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/osx/sugarcube-color/nscolor.rb', line 15

def nscolor(alpha=nil)
  if alpha
    self.colorWithAlphaComponent(alpha.to_f)
  else
    self
  end
end

#redObject

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



128
129
130
131
132
133
134
# File 'lib/osx/sugarcube-color/nscolor.rb', line 128

def red
  redComponent
rescue NSInvalidArgumentException
  whiteComponent
rescue Exception
  nil
end

#skcolor(alpha = nil) ⇒ Object



27
28
29
# File 'lib/osx/sugarcube-color/nscolor.rb', line 27

def skcolor(alpha=nil)
  nscolor(alpha)
end

#system_nameObject



206
207
208
209
210
211
212
213
214
215
216
# File 'lib/osx/sugarcube-color/nscolor.rb', line 206

def system_name
  system_color = nil
  without_alpha = self.nscolor(1)
  Symbol.nscolors.each do |color, method|
    if NSColor.send(method) == without_alpha
      system_color = method
      break
    end
  end
  return system_color
end

#to_aObject

returns the components as an array of 32 bit RGB values. alpha channel is dropped



173
174
175
176
177
178
179
180
181
182
# File 'lib/osx/sugarcube-color/nscolor.rb', line 173

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_iObject

returns the components OR’d together, as 32 bit RGB integer. alpha channel is dropped



160
161
162
163
164
165
166
167
168
169
# File 'lib/osx/sugarcube-color/nscolor.rb', line 160

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_sObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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})" : '')
  system_color = system_name
  return "NSColor.#{system_color}#{alpha_s}" if system_color

  alpha_s = ((alpha || 1) < 1 ? ", alpha: #{alpha}" : '')
  inside = (css_name && ":#{css_name}") || (hex && "'#{hex}'")
  if inside
    return "NSColor.color(#{inside}#{alpha_s})"
  else
    super
  end
end