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


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

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)


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

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



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

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

#blueObject



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

def blue
  _sugarcube_rgb_colors && _sugarcube_rgb_colors[:blue]
end

#brightnessObject



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

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

#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



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

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



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

def green
  _sugarcube_rgb_colors && _sugarcube_rgb_colors[:green]
end

#hexObject



147
148
149
150
151
152
153
154
# File 'lib/ios/sugarcube-color/uicolor.rb', line 147

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

#hueObject



89
90
91
# File 'lib/ios/sugarcube-color/uicolor.rb', line 89

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


81
82
83
84
85
86
87
# File 'lib/ios/sugarcube-color/uicolor.rb', line 81

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

#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



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/ios/sugarcube-color/uicolor.rb', line 44

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



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

def red
  _sugarcube_rgb_colors && _sugarcube_rgb_colors[:red]
end

#saturationObject



93
94
95
# File 'lib/ios/sugarcube-color/uicolor.rb', line 93

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



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

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



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

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



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

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