Class: UIColor

Inherits:
Object show all
Defined in:
lib/ios/sugarcube-to_s/uicolor.rb,
lib/ios/sugarcube-color/uicolor.rb,
lib/ios/sugarcube-image/uicolor.rb

Instance Method Summary collapse

Instance Method Details

#+(color) ⇒ Object

blends two colors by averaging the RGB and alpha components.

Examples:

:white.uicolor + :black.uicolor == :gray.uicolor


35
36
37
# File 'lib/ios/sugarcube-color/uicolor.rb', line 35

def +(color)
  mix_with(color.uicolor, 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.uicolor << :blue.uicolor == '#ff00ff'.uicolor (:magenta)
:red.uicolor << :blue.uicolor(0.5) == '#ff0080'.uicolor (pinkish)


46
47
48
49
50
51
52
# File 'lib/ios/sugarcube-color/uicolor.rb', line 46

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

#alphaObject



126
127
128
129
130
131
132
# File 'lib/ios/sugarcube-color/uicolor.rb', line 126

def alpha
  if @sugarcube_hsb_colors
    @sugarcube_hsb_colors[:alpha]
  elsif _sugarcube_rgb_colors
    _sugarcube_rgb_colors[:alpha]
  end
end

#blueObject



122
123
124
# File 'lib/ios/sugarcube-color/uicolor.rb', line 122

def blue
  _sugarcube_rgb_colors && _sugarcube_rgb_colors[:blue]
end

#brightnessObject



110
111
112
# File 'lib/ios/sugarcube-color/uicolor.rb', line 110

def brightness
  _sugarcube_hsb_colors && _sugarcube_hsb_colors[:brightness]
end

#cgcolor(alpha = nil) ⇒ Object



11
12
13
# File 'lib/ios/sugarcube-color/uicolor.rb', line 11

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

#change_brightness(amount) ⇒ Object



27
28
29
30
# File 'lib/ios/sugarcube-color/uicolor.rb', line 27

def change_brightness(amount)
  new_brightness = brightness + amount
  UIColor.colorWithHue(hue, saturation: saturation, brightness: new_brightness, alpha: alpha)
end

#cicolorObject



3
4
5
# File 'lib/ios/sugarcube-image/uicolor.rb', line 3

def cicolor
  self.CIColor
end

#css_nameObject

returns the closest css name



170
171
172
173
174
175
176
177
178
179
180
# File 'lib/ios/sugarcube-color/uicolor.rb', line 170

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

#darken(amount = 0.1) ⇒ Object



19
20
21
# File 'lib/ios/sugarcube-color/uicolor.rb', line 19

def darken(amount=0.1)
  change_brightness -amount
end

#greenObject



118
119
120
# File 'lib/ios/sugarcube-color/uicolor.rb', line 118

def green
  _sugarcube_rgb_colors && _sugarcube_rgb_colors[:green]
end

#hexObject



160
161
162
163
164
165
166
167
# File 'lib/ios/sugarcube-color/uicolor.rb', line 160

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

#hueObject



102
103
104
# File 'lib/ios/sugarcube-color/uicolor.rb', line 102

def hue
  _sugarcube_hsb_colors && _sugarcube_hsb_colors[:hue]
end

#invertObject

inverts the RGB channel. keeps the alpha channel unchanged

Examples:

:white.uicolor.invert == :black.uicolor


94
95
96
97
98
99
100
# File 'lib/ios/sugarcube-color/uicolor.rb', line 94

def invert
  r = 1.0 - self.red
  g = 1.0 - self.green
  b = 1.0 - self.blue
  a = self.alpha
  UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
end

#lighten(amount = 0.1) ⇒ Object



23
24
25
# File 'lib/ios/sugarcube-color/uicolor.rb', line 23

def lighten(amount=0.1)
  change_brightness amount
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



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
89
# File 'lib/ios/sugarcube-color/uicolor.rb', line 57

def mix_with(color, amount)
  color = color.uicolor

  # 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
    UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
  else
    a = (color.alpha - self.alpha) * amount + self.alpha
    return UIColor.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
    UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
  end
end

#redObject



114
115
116
# File 'lib/ios/sugarcube-color/uicolor.rb', line 114

def red
  _sugarcube_rgb_colors && _sugarcube_rgb_colors[:red]
end

#saturationObject



106
107
108
# File 'lib/ios/sugarcube-color/uicolor.rb', line 106

def saturation
  _sugarcube_hsb_colors && _sugarcube_hsb_colors[:saturation]
end

#skcolor(alpha = nil) ⇒ Object



15
16
17
# File 'lib/ios/sugarcube-color/uicolor.rb', line 15

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

#system_nameObject



182
183
184
185
186
187
188
189
190
191
192
# File 'lib/ios/sugarcube-color/uicolor.rb', line 182

def system_name
  system_color = nil
  without_alpha = self.uicolor(1)
  Symbol.uicolors.each do |color, method|
    if UIColor.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



149
150
151
152
153
154
155
156
157
158
# File 'lib/ios/sugarcube-color/uicolor.rb', line 149

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



136
137
138
139
140
141
142
143
144
145
# File 'lib/ios/sugarcube-color/uicolor.rb', line 136

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
# File 'lib/ios/sugarcube-to_s/uicolor.rb', line 3

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

  alpha_s = ((alpha || 1) < 1 ? "(#{alpha})" : '')
  if system_name
    return "UIColor.#{system_name}#{alpha_s.length > 0 ? '.colorWithAlphaComponent' + alpha_s : ''}"
  elsif css_name
    return ":#{css_name}.uicolor#{alpha_s}"
  elsif hex
    return "'#{hex}'.uicolor#{alpha_s}"
  else
    super
  end
end

#uicolor(alpha = nil) ⇒ Object



3
4
5
6
7
8
9
# File 'lib/ios/sugarcube-color/uicolor.rb', line 3

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