sugarcube 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +59 -1
- data/lib/sugarcube/adjust.rb +49 -3
- data/lib/sugarcube/defaults.rb +16 -1
- data/lib/sugarcube/nscoder.rb +74 -0
- data/lib/sugarcube/symbol/symbol_uicolor.rb +7 -1
- data/lib/sugarcube/to_s/uicolor.rb +35 -0
- data/lib/sugarcube/to_s/uiview.rb +2 -2
- data/lib/sugarcube/uicolor.rb +14 -37
- data/lib/sugarcube/uiview.rb +1 -0
- data/lib/sugarcube/version.rb +1 -1
- data/sugarcube.gemspec +0 -4
- metadata +6 -26
data/README.md
CHANGED
@@ -833,9 +833,67 @@ Assume I ran `include SugarCube::Adjust` in these examples.
|
|
833
833
|
|
834
834
|
# if you forget what view you are adjusting, run `adjust` again
|
835
835
|
> a
|
836
|
-
=>
|
836
|
+
=> UITextField(#9ce6470, {{46, 214}, {280, 33}}, child of UIView(#10a6da20)
|
837
837
|
```
|
838
838
|
|
839
|
+
The most useful feature of the REPL adjustment is the ability to quickly
|
840
|
+
position and size your UI elements __visually__ and then paste the final values
|
841
|
+
into your code. In order to better accomodate that, `adjust` has an option to
|
842
|
+
modify the output format.
|
843
|
+
|
844
|
+
This better facilitates copy/paste of the values. Currently supported is:
|
845
|
+
* Default (RubyMotion) (`nil`, `:default`)
|
846
|
+
* Objective-C (`:objc`)
|
847
|
+
* JSON (`:json`)
|
848
|
+
|
849
|
+
#### Objective-C style
|
850
|
+
|
851
|
+
```
|
852
|
+
(UIImageView(#8d67e00, {{0, 0},...)> tree
|
853
|
+
0: . UIWindow(#6e27180: {{0, 0}, {320, 480}})
|
854
|
+
1: `-- UIView(#8d631b0: {{0, 20}, {320, 460}})
|
855
|
+
2: +-- UIButton(#6d6c090: {{10, 10}, {320, 463.401}})
|
856
|
+
3: | `-- UIImageView(#8d67e00: {{0, 0}, {320, 463.401}})
|
857
|
+
4: `-- UIRoundedRectButton(#8d68170: {{10, 30}, {30, 200}})
|
858
|
+
5: `-- UIButtonLabel(#8d69c30: {{2, 90}, {26, 19}})
|
859
|
+
=> UIWindow(#6e27180, {{0, 0}, {320, 480}},
|
860
|
+
|
861
|
+
# you can pass the format into the adjust method:
|
862
|
+
(UIImageView(#8d67e00, {{0, 0},...)> a 4, :objc
|
863
|
+
=> "UIRoundedRectButton(#8d68170: [[10.0, 30.0], [200.0, 30.0]])"
|
864
|
+
|
865
|
+
# or you can assign repl_format explicitly (adjust does this for you when you hand it a format)
|
866
|
+
(UIImageView(#8d67e00, {{0, 0},...)> repl_format :objc
|
867
|
+
=> :objc
|
868
|
+
|
869
|
+
# either way, it will continue to be used in subsequent calls
|
870
|
+
(UIImageView(#8d67e00, {{0, 0},...)> wider 15
|
871
|
+
[[10.0, 30.0], [200.0, 45.0]]
|
872
|
+
=> "UIRoundedRectButton(#8d68170: [[10.0, 30.0], [200.0, 45.0]]) child of UIView(#8d631b0)"
|
873
|
+
```
|
874
|
+
|
875
|
+
#### JSON (or GeoMotion)
|
876
|
+
|
877
|
+
```
|
878
|
+
(UIImageView(#8d67e00, {{0, 0},...)> a 1, :json
|
879
|
+
=> "UIView(#8d631b0: [x: 0.0, y: 20.0, height: 460.0, width: 320.0])"
|
880
|
+
(UIImageView(#8d67e00, {{0, 0},...)> wider 30
|
881
|
+
=> "CGRect(#6e9c9f0: [x: 0.0, y: 20.0, height: 460.0, width: 350.0])"
|
882
|
+
(UIImageView(#8d67e00, {{0, 0},...)> right 130
|
883
|
+
=> "CGRect(#8dc6a40: [x: 130.0, y: 20.0, height: 460.0, width: 350.0])"
|
884
|
+
(UIImageView(#8d67e00, {{0, 0},...)> tree
|
885
|
+
0: . UIWindow(#6e27180: [x: 0.0, y: 0.0, height: 480.0, width: 320.0])
|
886
|
+
1: `-- UIView(#8d631b0: [x: 130.0, y: 20.0, height: 460.0, width: 350.0])
|
887
|
+
2: +-- UIButton(#6d6c090: [x: 10.0, y: 10.0, height: 463.400512695312, width: 320.0])
|
888
|
+
3: | `-- UIImageView(#8d67e00: [x: 0.0, y: 0.0, height: 463.400512695312, width: 320.0])
|
889
|
+
4: `-- UIRoundedRectButton(#8d68170: [x: 10.0, y: 30.0, height: 200.0, width: 45.0])
|
890
|
+
5: `-- UIButtonLabel(#8d69c30: [x: 4.0, y: 90.0, height: 19.0, width: 37.0])
|
891
|
+
=> UIWindow(#6e27180, {{0, 0}, {320, 480}},
|
892
|
+
```
|
893
|
+
|
894
|
+
Note: The `format` parameter can be passed as either a symbol or a string
|
895
|
+
|
896
|
+
|
839
897
|
Pointers
|
840
898
|
----------
|
841
899
|
|
data/lib/sugarcube/adjust.rb
CHANGED
@@ -2,8 +2,19 @@ module SugarCube
|
|
2
2
|
module Adjust
|
3
3
|
module_function
|
4
4
|
|
5
|
-
def
|
6
|
-
|
5
|
+
def repl_format(format=nil)
|
6
|
+
if format
|
7
|
+
@@repl_format = format
|
8
|
+
else
|
9
|
+
# if adjust has not been called, the instance variable has not yet been set
|
10
|
+
@@repl_format ||= :ruby
|
11
|
+
end
|
12
|
+
@@repl_format
|
13
|
+
end
|
14
|
+
|
15
|
+
def adjust(view=nil, format=nil)
|
16
|
+
SugarCube::Adjust::repl_format(format.to_sym) if format
|
17
|
+
@@sugarcube_view ||= nil # this looks like a NOOP, but ||= also checks whether the variable exists. aka: errors happen if we don't do this.
|
7
18
|
return @@sugarcube_view if not view
|
8
19
|
|
9
20
|
if view.is_a? Fixnum
|
@@ -19,6 +30,9 @@ module SugarCube
|
|
19
30
|
shadow: SugarCube::Adjust.shadow,
|
20
31
|
}
|
21
32
|
|
33
|
+
if format
|
34
|
+
puts format_frame view.frame
|
35
|
+
end
|
22
36
|
view
|
23
37
|
end
|
24
38
|
alias a adjust
|
@@ -31,6 +45,9 @@ module SugarCube
|
|
31
45
|
return SugarCube::CoreGraphics::Rect(@@sugarcube_view.frame) if not f
|
32
46
|
|
33
47
|
@@sugarcube_view.frame = f
|
48
|
+
puts format_frame(f)
|
49
|
+
|
50
|
+
@@sugarcube_view
|
34
51
|
end
|
35
52
|
alias f frame
|
36
53
|
|
@@ -47,6 +64,9 @@ module SugarCube
|
|
47
64
|
f = @@sugarcube_view.frame
|
48
65
|
f.origin.x += val
|
49
66
|
@@sugarcube_view.frame = f
|
67
|
+
puts format_frame(f)
|
68
|
+
|
69
|
+
@@sugarcube_view
|
50
70
|
end
|
51
71
|
alias r right
|
52
72
|
|
@@ -62,6 +82,9 @@ module SugarCube
|
|
62
82
|
f = @@sugarcube_view.frame
|
63
83
|
f.origin.y += val
|
64
84
|
@@sugarcube_view.frame = f
|
85
|
+
puts format_frame(f)
|
86
|
+
|
87
|
+
@@sugarcube_view
|
65
88
|
end
|
66
89
|
alias d down
|
67
90
|
|
@@ -79,6 +102,9 @@ module SugarCube
|
|
79
102
|
f.origin = x
|
80
103
|
end
|
81
104
|
@@sugarcube_view.frame = f
|
105
|
+
puts format_frame(f)
|
106
|
+
|
107
|
+
@@sugarcube_view
|
82
108
|
end
|
83
109
|
alias o origin
|
84
110
|
|
@@ -95,6 +121,9 @@ module SugarCube
|
|
95
121
|
f = @@sugarcube_view.frame
|
96
122
|
f.size.width += val
|
97
123
|
@@sugarcube_view.frame = f
|
124
|
+
puts format_frame(f)
|
125
|
+
|
126
|
+
@@sugarcube_view
|
98
127
|
end
|
99
128
|
alias w wider
|
100
129
|
|
@@ -110,6 +139,9 @@ module SugarCube
|
|
110
139
|
f = @@sugarcube_view.frame
|
111
140
|
f.size.height += val
|
112
141
|
@@sugarcube_view.frame = f
|
142
|
+
puts format_frame(f)
|
143
|
+
|
144
|
+
@@sugarcube_view
|
113
145
|
end
|
114
146
|
alias t taller
|
115
147
|
|
@@ -127,6 +159,9 @@ module SugarCube
|
|
127
159
|
f.size = w
|
128
160
|
end
|
129
161
|
@@sugarcube_view.frame = f
|
162
|
+
puts format_frame(f)
|
163
|
+
|
164
|
+
@@sugarcube_view
|
130
165
|
end
|
131
166
|
alias z size
|
132
167
|
|
@@ -205,7 +240,7 @@ module SugarCube
|
|
205
240
|
if self == view
|
206
241
|
print "\033[1m"
|
207
242
|
end
|
208
|
-
puts "#{view.class.name}(##{view.object_id.to_s(16)}
|
243
|
+
puts "#{view.class.name}(##{view.object_id.to_s(16)}: #{format_frame(view.frame)})"
|
209
244
|
if self == view
|
210
245
|
print "\033[0m"
|
211
246
|
end
|
@@ -230,5 +265,16 @@ module SugarCube
|
|
230
265
|
end
|
231
266
|
end
|
232
267
|
|
268
|
+
def format_frame(frame)
|
269
|
+
case SugarCube::Adjust::repl_format
|
270
|
+
when :json then "[x: #{frame.origin.x}, y: #{frame.origin.y}, height: #{frame.size.width}, width: #{frame.size.height}]"
|
271
|
+
when :ruby then "[[#{frame.origin.x}, #{frame.origin.y}], [#{frame.size.width}, #{frame.size.height}]]"
|
272
|
+
when nil, :objc
|
273
|
+
frame.to_s
|
274
|
+
else
|
275
|
+
raise "Unknown repl_format #{SugarCube::Adjust::repl_format.inspect}"
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
233
279
|
end
|
234
280
|
end
|
data/lib/sugarcube/defaults.rb
CHANGED
@@ -4,6 +4,10 @@ class Symbol
|
|
4
4
|
to_s.get_default
|
5
5
|
end
|
6
6
|
|
7
|
+
def get_default_or(default)
|
8
|
+
to_s.get_default_or(default)
|
9
|
+
end
|
10
|
+
|
7
11
|
def set_default val
|
8
12
|
to_s.set_default val
|
9
13
|
end
|
@@ -17,10 +21,21 @@ end
|
|
17
21
|
|
18
22
|
class String
|
19
23
|
|
20
|
-
def get_default
|
24
|
+
def get_default(default=nil)
|
21
25
|
NSUserDefaults.standardUserDefaults.objectForKey(self)
|
22
26
|
end
|
23
27
|
|
28
|
+
def get_default_or(default)
|
29
|
+
raise "Invalid default value" if default.nil?
|
30
|
+
|
31
|
+
nsdefault = self.get_default
|
32
|
+
if nsdefault.nil?
|
33
|
+
self.set_default(default)
|
34
|
+
nsdefault = default
|
35
|
+
end
|
36
|
+
return nsdefault
|
37
|
+
end
|
38
|
+
|
24
39
|
def set_default val
|
25
40
|
NSUserDefaults.standardUserDefaults.setObject(val, forKey:self)
|
26
41
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
class NSCoder
|
2
|
+
|
3
|
+
def [] key
|
4
|
+
return self.decodeObjectForKey key
|
5
|
+
end
|
6
|
+
|
7
|
+
def []= key, value
|
8
|
+
return self.encodeObject(value, forKey:key)
|
9
|
+
end
|
10
|
+
|
11
|
+
def bool(key)
|
12
|
+
return self.decodeBoolForKey(key)
|
13
|
+
end
|
14
|
+
|
15
|
+
def double(key)
|
16
|
+
return self.decodeDoubleForKey(key)
|
17
|
+
end
|
18
|
+
|
19
|
+
def float(key)
|
20
|
+
return self.decodeFloatForKey(key)
|
21
|
+
end
|
22
|
+
|
23
|
+
def int(key)
|
24
|
+
return self.decodeIntegerForKey(key)
|
25
|
+
end
|
26
|
+
|
27
|
+
def point(key)
|
28
|
+
return CGPointFromString(self.decodeObjectForKey(key))
|
29
|
+
end
|
30
|
+
|
31
|
+
def rect(key)
|
32
|
+
return CGRectFromString(self.decodeObjectForKey(key))
|
33
|
+
end
|
34
|
+
|
35
|
+
def size(key)
|
36
|
+
return CGSizeFromString(self.decodeObjectForKey(key))
|
37
|
+
end
|
38
|
+
|
39
|
+
def set(key, toBool:value)
|
40
|
+
self.encodeBool(value, forKey:key)
|
41
|
+
return self
|
42
|
+
end
|
43
|
+
|
44
|
+
def set(key, toDouble:value)
|
45
|
+
self.encodeDouble(value, forKey:key)
|
46
|
+
return self
|
47
|
+
end
|
48
|
+
|
49
|
+
def set(key, toFloat:value)
|
50
|
+
self.encodeFloat(value, forKey:key)
|
51
|
+
return self
|
52
|
+
end
|
53
|
+
|
54
|
+
def set(key, toInt:value)
|
55
|
+
self.encodeInteger(value, forKey:key)
|
56
|
+
return self
|
57
|
+
end
|
58
|
+
|
59
|
+
def set(key, toPoint:value)
|
60
|
+
self.encodeObject(NSStringFromCGPoint(value), forKey:key)
|
61
|
+
return self
|
62
|
+
end
|
63
|
+
|
64
|
+
def set(key, toRect:value)
|
65
|
+
self.encodeObject(NSStringFromCGRect(value), forKey:key)
|
66
|
+
return self
|
67
|
+
end
|
68
|
+
|
69
|
+
def set(key, toSize:value)
|
70
|
+
self.encodeObject(NSStringFromCGSize(value), forKey:key)
|
71
|
+
return self
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -37,7 +37,13 @@ class Symbol
|
|
37
37
|
white: :whiteColor,
|
38
38
|
clear: :clearColor,
|
39
39
|
|
40
|
-
|
40
|
+
light_text: :lightTextColor,
|
41
|
+
dark_text: :darkTextColor,
|
42
|
+
|
43
|
+
table_view: :groupTableViewBackgroundColor,
|
44
|
+
scroll_view: :scrollViewTexturedBackgroundColor,
|
45
|
+
flipside: :viewFlipsideBackgroundColor,
|
46
|
+
under_page: :underPageBackgroundColor,
|
41
47
|
}
|
42
48
|
|
43
49
|
@css_colors = {
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class UIColor
|
2
|
+
def to_s
|
3
|
+
system_color = nil
|
4
|
+
Symbol.uicolors.each_pair do |color, method|
|
5
|
+
if UIColor.send(method) == self
|
6
|
+
if self.alpha < 1
|
7
|
+
system_color = "UIColor.#{method}(#{alpha})"
|
8
|
+
else
|
9
|
+
system_color = "UIColor.#{method}"
|
10
|
+
end
|
11
|
+
break
|
12
|
+
end
|
13
|
+
end
|
14
|
+
return system_color if system_color
|
15
|
+
|
16
|
+
red = (self.red * 255).round << 16
|
17
|
+
green = (self.green * 255).round << 8
|
18
|
+
blue = (self.blue * 255).round
|
19
|
+
my_color = red + green + blue
|
20
|
+
|
21
|
+
inside = "0x#{my_color.to_s(16)}"
|
22
|
+
Symbol.css_colors.each_pair do |color, hex|
|
23
|
+
if hex == my_color
|
24
|
+
inside = color.inspect
|
25
|
+
break
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
if self.alpha < 1
|
30
|
+
return "UIColor.color(#{inside}, #{alpha})"
|
31
|
+
else
|
32
|
+
return "UIColor.color(#{inside})"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
class UIView
|
2
2
|
|
3
3
|
def to_s
|
4
|
-
"#{self.class.name}(##{self.object_id.to_s(16)}, #{self.frame}
|
5
|
-
(self.superview ? "
|
4
|
+
"#{self.class.name}(##{self.object_id.to_s(16)}, #{SugarCube::Adjust::format_frame(self.frame)})" +
|
5
|
+
(self.superview ? ", child of #{self.superview.class.name}(##{self.superview.object_id.to_s(16)})" : '')
|
6
6
|
end
|
7
7
|
|
8
8
|
end
|
data/lib/sugarcube/uicolor.rb
CHANGED
@@ -2,30 +2,25 @@
|
|
2
2
|
class UIColor
|
3
3
|
def uicolor ; self ; end
|
4
4
|
|
5
|
+
def red
|
6
|
+
_sugarcube_colors[:red]
|
7
|
+
end
|
5
8
|
|
6
|
-
def
|
7
|
-
|
9
|
+
def green
|
10
|
+
_sugarcube_colors[:green]
|
11
|
+
end
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
13
|
+
def blue
|
14
|
+
_sugarcube_colors[:blue]
|
15
|
+
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
blue = (self.blue * 255).to_i
|
18
|
-
my_color = red + green + blue
|
19
|
-
Symbol.css_colors.each_pair do |color, hex|
|
20
|
-
if hex == my_color
|
21
|
-
return "UIColor.color(#{color.inspect}, #{alpha})"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
return "UIColor.color(#{red}, #{green}, #{blue}, #{alpha})"
|
17
|
+
def alpha
|
18
|
+
_sugarcube_colors[:alpha]
|
25
19
|
end
|
26
20
|
|
27
|
-
|
28
|
-
|
21
|
+
private
|
22
|
+
def _sugarcube_colors
|
23
|
+
@color ||= begin
|
29
24
|
red = Pointer.new(:float)
|
30
25
|
green = Pointer.new(:float)
|
31
26
|
blue = Pointer.new(:float)
|
@@ -38,24 +33,6 @@ class UIColor
|
|
38
33
|
alpha: alpha[0],
|
39
34
|
}
|
40
35
|
end
|
41
|
-
@color
|
42
|
-
end
|
43
|
-
|
44
|
-
def red
|
45
|
-
self.color[:red]
|
46
|
-
end
|
47
|
-
|
48
|
-
def green
|
49
|
-
self.color[:green]
|
50
36
|
end
|
51
37
|
|
52
|
-
def blue
|
53
|
-
self.color[:blue]
|
54
|
-
end
|
55
|
-
|
56
|
-
def alpha
|
57
|
-
self.color[:alpha]
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
38
|
end
|
data/lib/sugarcube/uiview.rb
CHANGED
data/lib/sugarcube/version.rb
CHANGED
data/sugarcube.gemspec
CHANGED
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.9.
|
4
|
+
version: 0.9.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,30 +10,8 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: rake
|
17
|
-
requirement: &70363874967320 !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
|
-
requirements:
|
20
|
-
- - ! '>='
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '0'
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: *70363874967320
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: rspec
|
28
|
-
requirement: &70363874965460 !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
|
-
requirements:
|
31
|
-
- - ! '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: *70363874965460
|
13
|
+
date: 2012-10-03 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
37
15
|
description: ! '== Description
|
38
16
|
|
39
17
|
|
@@ -75,6 +53,7 @@ files:
|
|
75
53
|
- lib/sugarcube/fixnum.rb
|
76
54
|
- lib/sugarcube/modal.rb
|
77
55
|
- lib/sugarcube/notifications.rb
|
56
|
+
- lib/sugarcube/nscoder.rb
|
78
57
|
- lib/sugarcube/nsdate.rb
|
79
58
|
- lib/sugarcube/nsdate_delta.rb
|
80
59
|
- lib/sugarcube/nsindexpath.rb
|
@@ -86,6 +65,7 @@ files:
|
|
86
65
|
- lib/sugarcube/symbol/symbol_uicolor.rb
|
87
66
|
- lib/sugarcube/timer.rb
|
88
67
|
- lib/sugarcube/to_s/nsset.rb
|
68
|
+
- lib/sugarcube/to_s/uicolor.rb
|
89
69
|
- lib/sugarcube/to_s/uievent.rb
|
90
70
|
- lib/sugarcube/to_s/uitouch.rb
|
91
71
|
- lib/sugarcube/to_s/uiview.rb
|
@@ -124,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
104
|
version: '0'
|
125
105
|
requirements: []
|
126
106
|
rubyforge_project:
|
127
|
-
rubygems_version: 1.8.
|
107
|
+
rubygems_version: 1.8.24
|
128
108
|
signing_key:
|
129
109
|
specification_version: 3
|
130
110
|
summary: Extensions for Ruby to make Rubymotion development more enjoyable, and hopefully
|