sugarcube 0.20.16 → 0.20.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/sugarcube/symbol/symbol_uicolor.rb +7 -1
- data/lib/sugarcube/uicolor.rb +30 -6
- data/lib/sugarcube/version.rb +1 -1
- data/spec/uicolor_spec.rb +65 -5
- metadata +2 -2
|
@@ -14,7 +14,13 @@ class Symbol
|
|
|
14
14
|
end
|
|
15
15
|
else
|
|
16
16
|
# css colors
|
|
17
|
-
color = sugarcube_look_in(Symbol.css_colors).uicolor
|
|
17
|
+
color = sugarcube_look_in(Symbol.css_colors).uicolor
|
|
18
|
+
Symbol.css_colors[self] = color
|
|
19
|
+
if alpha.nil?
|
|
20
|
+
color
|
|
21
|
+
else
|
|
22
|
+
color.uicolor(alpha)
|
|
23
|
+
end
|
|
18
24
|
end
|
|
19
25
|
|
|
20
26
|
color
|
data/lib/sugarcube/uicolor.rb
CHANGED
|
@@ -19,6 +19,21 @@ class UIColor
|
|
|
19
19
|
mix_with(color.uicolor, 0.5)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# blends two colors by adding the colors, with an upper maximum of 255.
|
|
23
|
+
# Adding white to any color will create white, adding black will do nothing.
|
|
24
|
+
# Also takes transparency into account; adding a transparent color has no
|
|
25
|
+
# effect, adding an opaque color has the most effect.
|
|
26
|
+
# @example
|
|
27
|
+
# :red.uicolor << :blue.uicolor == '#ff00ff'.uicolor (:magenta)
|
|
28
|
+
# :red.uicolor << :blue.uicolor(0.5) == '#ff0080'.uicolor (pinkish)
|
|
29
|
+
def <<(color)
|
|
30
|
+
r = [1.0, color.red * color.alpha + self.red].min
|
|
31
|
+
g = [1.0, color.green * color.alpha + self.green].min
|
|
32
|
+
b = [1.0, color.blue * color.alpha + self.blue].min
|
|
33
|
+
a = self.alpha
|
|
34
|
+
UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
|
|
35
|
+
end
|
|
36
|
+
|
|
22
37
|
# a more generic color mixing method. mixes two colors, but a second
|
|
23
38
|
# parameter determines how much of each. 0.5 means equal parts, 0.0 means use
|
|
24
39
|
# all of the first, and 1.0 means use all of the second
|
|
@@ -28,21 +43,30 @@ class UIColor
|
|
|
28
43
|
# make amount between 0 and 1
|
|
29
44
|
amount = [[0, amount].max, 1].min
|
|
30
45
|
# start with precise amounts: 0, 0.5, and 1.
|
|
31
|
-
if amount == 0
|
|
46
|
+
if amount == 0 && self.alpha == color.alpha
|
|
32
47
|
self
|
|
33
|
-
elsif amount == 1
|
|
48
|
+
elsif amount == 1 && self.alpha == color.alpha
|
|
34
49
|
color
|
|
35
|
-
elsif amount == 0.5
|
|
50
|
+
elsif amount == 0.5 && self.alpha == color.alpha
|
|
36
51
|
r = (self.red + color.red) / 2
|
|
37
52
|
g = (self.green + color.green) / 2
|
|
38
53
|
b = (self.blue + color.blue) / 2
|
|
39
54
|
a = (self.alpha + color.alpha) / 2
|
|
40
55
|
UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
|
|
41
56
|
else
|
|
42
|
-
r = (color.red - self.red) * amount + self.red
|
|
43
|
-
g = (color.green - self.green) * amount + self.green
|
|
44
|
-
b = (color.blue - self.blue) * amount + self.blue
|
|
45
57
|
a = (color.alpha - self.alpha) * amount + self.alpha
|
|
58
|
+
return UIColor.clearColor if a == 0
|
|
59
|
+
|
|
60
|
+
color_red = color.red * color.alpha + self.red * (1 - color.alpha)
|
|
61
|
+
self_red = self.red * self.alpha + color.red * (1 - self.alpha)
|
|
62
|
+
color_green = color.green * color.alpha + self.green * (1 - color.alpha)
|
|
63
|
+
self_green = self.green * self.alpha + color.green * (1 - self.alpha)
|
|
64
|
+
color_blue = color.blue * color.alpha + self.blue * (1 - color.alpha)
|
|
65
|
+
self_blue = self.blue * self.alpha + color.blue * (1 - self.alpha)
|
|
66
|
+
|
|
67
|
+
r = (color_red - self_red) * amount + self_red
|
|
68
|
+
g = (color_green - self_green) * amount + self_green
|
|
69
|
+
b = (color_blue - self_blue) * amount + self_blue
|
|
46
70
|
UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
|
|
47
71
|
end
|
|
48
72
|
end
|
data/lib/sugarcube/version.rb
CHANGED
data/spec/uicolor_spec.rb
CHANGED
|
@@ -8,11 +8,71 @@ describe 'UIColor' do
|
|
|
8
8
|
UIColor.redColor.uicolor(0.5).alpha.should == 0.5
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
describe "should have a #+(color) method" do
|
|
12
|
+
|
|
13
|
+
it 'should add white and black to make gray' do
|
|
14
|
+
new_color = UIColor.whiteColor + UIColor.blackColor
|
|
15
|
+
new_color.red.should == 0.5
|
|
16
|
+
new_color.green.should == 0.5
|
|
17
|
+
new_color.blue.should == 0.5
|
|
18
|
+
new_color.alpha.should == 1.0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should add black and white to make gray' do
|
|
22
|
+
new_color = UIColor.blackColor + UIColor.whiteColor
|
|
23
|
+
new_color.red.should == 0.5
|
|
24
|
+
new_color.green.should == 0.5
|
|
25
|
+
new_color.blue.should == 0.5
|
|
26
|
+
new_color.alpha.should == 1.0
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should add alpha channel (white + clear)' do
|
|
30
|
+
new_color = UIColor.whiteColor + UIColor.clearColor
|
|
31
|
+
new_color.red.should == 1.0
|
|
32
|
+
new_color.green.should == 1.0
|
|
33
|
+
new_color.blue.should == 1.0
|
|
34
|
+
new_color.alpha.should == 0.5
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should add alpha channel (clear + white)' do
|
|
38
|
+
new_color = UIColor.clearColor + UIColor.whiteColor
|
|
39
|
+
new_color.red.should == 1.0
|
|
40
|
+
new_color.green.should == 1.0
|
|
41
|
+
new_color.blue.should == 1.0
|
|
42
|
+
new_color.alpha.should == 0.5
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "should have a #<<(color) method" do
|
|
48
|
+
it "should return white no matter what" do
|
|
49
|
+
new_color = UIColor.whiteColor << UIColor.blackColor
|
|
50
|
+
new_color.red.should == 1.0
|
|
51
|
+
new_color.green.should == 1.0
|
|
52
|
+
new_color.blue.should == 1.0
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should have no effect with black" do
|
|
56
|
+
new_color = UIColor.blueColor << UIColor.blackColor
|
|
57
|
+
new_color.red.should == 0.0
|
|
58
|
+
new_color.green.should == 0.0
|
|
59
|
+
new_color.blue.should == 1.0
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should add blue to red" do
|
|
63
|
+
new_color = UIColor.redColor << UIColor.blueColor
|
|
64
|
+
new_color.red.should == 1.0
|
|
65
|
+
new_color.green.should == 0.0
|
|
66
|
+
new_color.blue.should == 1.0
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should use opacity when adding blue to red" do
|
|
70
|
+
new_color = UIColor.redColor << UIColor.blueColor.colorWithAlphaComponent(0.5)
|
|
71
|
+
new_color.red.should == 1.0
|
|
72
|
+
new_color.green.should == 0.0
|
|
73
|
+
new_color.blue.should == 0.5
|
|
74
|
+
end
|
|
75
|
+
|
|
16
76
|
end
|
|
17
77
|
|
|
18
78
|
it "should have a #invert method" do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sugarcube
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.20.
|
|
4
|
+
version: 0.20.17
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -13,7 +13,7 @@ authors:
|
|
|
13
13
|
autorequire:
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
|
-
date: 2013-04-
|
|
16
|
+
date: 2013-04-27 00:00:00.000000000 Z
|
|
17
17
|
dependencies: []
|
|
18
18
|
description: ! '== Description
|
|
19
19
|
|