17 #pragma mark Setup and teardown |
17 #pragma mark Setup and teardown |
18 |
18 |
19 |
19 |
20 - (id)initWithFrame:(CGRect)frame |
20 - (id)initWithFrame:(CGRect)frame |
21 { |
21 { |
22 if ((self = [super initWithFrame:frame])) { |
22 if ((self = [super initWithFrame:frame])) { |
23 self.userInteractionEnabled = NO; |
23 self.userInteractionEnabled = NO; |
24 self.allowsDragging = NO; |
24 self.allowsDragging = NO; |
25 self.contentMode = UIViewContentModeRedraw; |
25 self.contentMode = UIViewContentModeRedraw; |
26 } |
26 } |
27 return self; |
27 return self; |
28 } |
28 } |
29 |
29 |
30 |
30 |
31 - (void)dealloc |
31 - (void)dealloc |
32 { |
32 { |
33 self.splitViewController = nil; |
33 self.splitViewController = nil; |
|
34 |
34 [super dealloc]; |
35 [super dealloc]; |
35 } |
36 } |
36 |
37 |
37 |
38 |
38 #pragma mark - |
39 #pragma mark - |
39 #pragma mark Drawing |
40 #pragma mark Drawing |
40 |
41 |
41 |
42 |
42 - (void)drawRect:(CGRect)rect |
43 - (void)drawRect:(CGRect)rect |
43 { |
44 { |
44 if (splitViewController.dividerStyle == MGSplitViewDividerStyleThin) { |
45 if (splitViewController.dividerStyle == MGSplitViewDividerStyleThin) { |
45 [super drawRect:rect]; |
46 [super drawRect:rect]; |
46 |
47 |
47 } else if (splitViewController.dividerStyle == MGSplitViewDividerStylePaneSplitter) { |
48 } else if (splitViewController.dividerStyle == MGSplitViewDividerStylePaneSplitter) { |
48 // Draw gradient background. |
49 // Draw gradient background. |
49 CGRect bounds = self.bounds; |
50 CGRect bounds = self.bounds; |
50 CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); |
51 CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); |
51 CGFloat locations[2] = {0, 1}; |
52 CGFloat locations[2] = {0, 1}; |
52 CGFloat components[8] = { 0.988, 0.988, 0.988, 1.0, // light |
53 CGFloat components[8] = { 0.988f, 0.988f, 0.988f, 1.0, // light |
53 0.875, 0.875, 0.875, 1.0 };// dark |
54 0.875, 0.875, 0.875, 1.0 };// dark |
54 CGGradientRef gradient = CGGradientCreateWithColorComponents (rgb, components, locations, 2); |
55 CGGradientRef gradient = CGGradientCreateWithColorComponents (rgb, components, locations, 2); |
55 CGContextRef context = UIGraphicsGetCurrentContext(); |
56 CGContextRef context = UIGraphicsGetCurrentContext(); |
56 CGPoint start, end; |
57 CGPoint start, end; |
57 if (splitViewController.vertical) { |
58 if (splitViewController.vertical) { |
58 // Light left to dark right. |
59 // Light left to dark right. |
59 start = CGPointMake(CGRectGetMinX(bounds), CGRectGetMidY(bounds)); |
60 start = CGPointMake(CGRectGetMinX(bounds), CGRectGetMidY(bounds)); |
60 end = CGPointMake(CGRectGetMaxX(bounds), CGRectGetMidY(bounds)); |
61 end = CGPointMake(CGRectGetMaxX(bounds), CGRectGetMidY(bounds)); |
61 } else { |
62 } else { |
62 // Light top to dark bottom. |
63 // Light top to dark bottom. |
63 start = CGPointMake(CGRectGetMidX(bounds), CGRectGetMinY(bounds)); |
64 start = CGPointMake(CGRectGetMidX(bounds), CGRectGetMinY(bounds)); |
64 end = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds)); |
65 end = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds)); |
65 } |
66 } |
66 CGContextDrawLinearGradient(context, gradient, start, end, 0); |
67 CGContextDrawLinearGradient(context, gradient, start, end, 0); |
67 CGColorSpaceRelease(rgb); |
68 CGColorSpaceRelease(rgb); |
68 CGGradientRelease(gradient); |
69 CGGradientRelease(gradient); |
69 |
70 |
70 // Draw borders. |
71 // Draw borders. |
71 float borderThickness = 1.0; |
72 float borderThickness = 1.0; |
72 [[UIColor colorWithWhite:0.7 alpha:1.0] set]; |
73 [[UIColor colorWithWhite:0.7f alpha:1.0] set]; |
73 CGRect borderRect = bounds; |
74 CGRect borderRect = bounds; |
74 if (splitViewController.vertical) { |
75 if (splitViewController.vertical) { |
75 borderRect.size.width = borderThickness; |
76 borderRect.size.width = borderThickness; |
76 UIRectFill(borderRect); |
77 UIRectFill(borderRect); |
77 borderRect.origin.x = CGRectGetMaxX(bounds) - borderThickness; |
78 borderRect.origin.x = CGRectGetMaxX(bounds) - borderThickness; |
78 UIRectFill(borderRect); |
79 UIRectFill(borderRect); |
79 |
80 |
80 } else { |
81 } else { |
81 borderRect.size.height = borderThickness; |
82 borderRect.size.height = borderThickness; |
82 UIRectFill(borderRect); |
83 UIRectFill(borderRect); |
83 borderRect.origin.y = CGRectGetMaxY(bounds) - borderThickness; |
84 borderRect.origin.y = CGRectGetMaxY(bounds) - borderThickness; |
84 UIRectFill(borderRect); |
85 UIRectFill(borderRect); |
85 } |
86 } |
86 |
87 |
87 // Draw grip. |
88 // Draw grip. |
88 [self drawGripThumbInRect:bounds]; |
89 [self drawGripThumbInRect:bounds]; |
89 } |
90 } |
90 } |
91 } |
91 |
92 |
92 |
93 |
93 - (void)drawGripThumbInRect:(CGRect)rect |
94 - (void)drawGripThumbInRect:(CGRect)rect |
94 { |
95 { |
95 float width = 9.0; |
96 float width = 9.0; |
96 float height; |
97 float height; |
97 if (splitViewController.vertical) { |
98 if (splitViewController.vertical) { |
98 height = 30.0; |
99 height = 30.0; |
99 } else { |
100 } else { |
100 height = width; |
101 height = width; |
101 width = 30.0; |
102 width = 30.0; |
102 } |
103 } |
103 |
104 |
104 // Draw grip in centred in rect. |
105 // Draw grip in centred in rect. |
105 CGRect gripRect = CGRectMake(0, 0, width, height); |
106 CGRect gripRect = CGRectMake(0, 0, width, height); |
106 gripRect.origin.x = ((rect.size.width - gripRect.size.width) / 2.0); |
107 gripRect.origin.x = ((rect.size.width - gripRect.size.width) / 2.f); |
107 gripRect.origin.y = ((rect.size.height - gripRect.size.height) / 2.0); |
108 gripRect.origin.y = ((rect.size.height - gripRect.size.height) / 2.f); |
108 |
109 |
109 float stripThickness = 1.0; |
110 float stripThickness = 1.0; |
110 UIColor *stripColor = [UIColor colorWithWhite:0.35 alpha:1.0]; |
111 UIColor *stripColor = [UIColor colorWithWhite:0.35f alpha:1.0]; |
111 UIColor *lightColor = [UIColor colorWithWhite:1.0 alpha:1.0]; |
112 UIColor *lightColor = [UIColor colorWithWhite:1.0 alpha:1.0]; |
112 float space = 3.0; |
113 float space = 3.0; |
113 if (splitViewController.vertical) { |
114 if (splitViewController.vertical) { |
114 gripRect.size.width = stripThickness; |
115 gripRect.size.width = stripThickness; |
115 [stripColor set]; |
116 [stripColor set]; |
116 UIRectFill(gripRect); |
117 UIRectFill(gripRect); |
117 |
118 |
118 gripRect.origin.x += stripThickness; |
119 gripRect.origin.x += stripThickness; |
119 gripRect.origin.y += 1; |
120 gripRect.origin.y += 1; |
120 [lightColor set]; |
121 [lightColor set]; |
121 UIRectFill(gripRect); |
122 UIRectFill(gripRect); |
122 gripRect.origin.x -= stripThickness; |
123 gripRect.origin.x -= stripThickness; |
123 gripRect.origin.y -= 1; |
124 gripRect.origin.y -= 1; |
124 |
125 |
125 gripRect.origin.x += space + stripThickness; |
126 gripRect.origin.x += space + stripThickness; |
126 [stripColor set]; |
127 [stripColor set]; |
127 UIRectFill(gripRect); |
128 UIRectFill(gripRect); |
128 |
129 |
129 gripRect.origin.x += stripThickness; |
130 gripRect.origin.x += stripThickness; |
130 gripRect.origin.y += 1; |
131 gripRect.origin.y += 1; |
131 [lightColor set]; |
132 [lightColor set]; |
132 UIRectFill(gripRect); |
133 UIRectFill(gripRect); |
133 gripRect.origin.x -= stripThickness; |
134 gripRect.origin.x -= stripThickness; |
134 gripRect.origin.y -= 1; |
135 gripRect.origin.y -= 1; |
135 |
136 |
136 gripRect.origin.x += space + stripThickness; |
137 gripRect.origin.x += space + stripThickness; |
137 [stripColor set]; |
138 [stripColor set]; |
138 UIRectFill(gripRect); |
139 UIRectFill(gripRect); |
139 |
140 |
140 gripRect.origin.x += stripThickness; |
141 gripRect.origin.x += stripThickness; |
141 gripRect.origin.y += 1; |
142 gripRect.origin.y += 1; |
142 [lightColor set]; |
143 [lightColor set]; |
143 UIRectFill(gripRect); |
144 UIRectFill(gripRect); |
144 |
145 |
145 } else { |
146 } else { |
146 gripRect.size.height = stripThickness; |
147 gripRect.size.height = stripThickness; |
147 [stripColor set]; |
148 [stripColor set]; |
148 UIRectFill(gripRect); |
149 UIRectFill(gripRect); |
149 |
150 |
150 gripRect.origin.y += stripThickness; |
151 gripRect.origin.y += stripThickness; |
151 gripRect.origin.x -= 1; |
152 gripRect.origin.x -= 1; |
152 [lightColor set]; |
153 [lightColor set]; |
153 UIRectFill(gripRect); |
154 UIRectFill(gripRect); |
154 gripRect.origin.y -= stripThickness; |
155 gripRect.origin.y -= stripThickness; |
155 gripRect.origin.x += 1; |
156 gripRect.origin.x += 1; |
156 |
157 |
157 gripRect.origin.y += space + stripThickness; |
158 gripRect.origin.y += space + stripThickness; |
158 [stripColor set]; |
159 [stripColor set]; |
159 UIRectFill(gripRect); |
160 UIRectFill(gripRect); |
160 |
161 |
161 gripRect.origin.y += stripThickness; |
162 gripRect.origin.y += stripThickness; |
162 gripRect.origin.x -= 1; |
163 gripRect.origin.x -= 1; |
163 [lightColor set]; |
164 [lightColor set]; |
164 UIRectFill(gripRect); |
165 UIRectFill(gripRect); |
165 gripRect.origin.y -= stripThickness; |
166 gripRect.origin.y -= stripThickness; |
166 gripRect.origin.x += 1; |
167 gripRect.origin.x += 1; |
167 |
168 |
168 gripRect.origin.y += space + stripThickness; |
169 gripRect.origin.y += space + stripThickness; |
169 [stripColor set]; |
170 [stripColor set]; |
170 UIRectFill(gripRect); |
171 UIRectFill(gripRect); |
171 |
172 |
172 gripRect.origin.y += stripThickness; |
173 gripRect.origin.y += stripThickness; |
173 gripRect.origin.x -= 1; |
174 gripRect.origin.x -= 1; |
174 [lightColor set]; |
175 [lightColor set]; |
175 UIRectFill(gripRect); |
176 UIRectFill(gripRect); |
176 } |
177 } |
177 } |
178 } |
178 |
179 |
179 |
180 |
180 #pragma mark - |
181 #pragma mark - |
181 #pragma mark Interaction |
182 #pragma mark Interaction |
182 |
183 |
183 |
184 |
184 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event |
185 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event |
185 { |
186 { |
186 UITouch *touch = [touches anyObject]; |
187 UITouch *touch = [touches anyObject]; |
187 if (touch) { |
188 if (touch) { |
188 CGPoint lastPt = [touch previousLocationInView:self]; |
189 CGPoint lastPt = [touch previousLocationInView:self]; |
189 CGPoint pt = [touch locationInView:self]; |
190 CGPoint pt = [touch locationInView:self]; |
190 float offset = (splitViewController.vertical) ? pt.x - lastPt.x : pt.y - lastPt.y; |
191 float offset = (splitViewController.vertical) ? pt.x - lastPt.x : pt.y - lastPt.y; |
191 if (!splitViewController.masterBeforeDetail) { |
192 if (!splitViewController.masterBeforeDetail) { |
192 offset = -offset; |
193 offset = -offset; |
193 } |
194 } |
194 splitViewController.splitPosition = splitViewController.splitPosition + offset; |
195 splitViewController.splitPosition = splitViewController.splitPosition + offset; |
195 } |
196 } |
196 } |
197 } |
197 |
198 |
198 |
199 |
199 #pragma mark - |
200 #pragma mark - |
200 #pragma mark Accessors and properties |
201 #pragma mark Accessors and properties |
201 |
202 |
202 |
203 |
203 - (void)setAllowsDragging:(BOOL)flag |
204 - (void)setAllowsDragging:(BOOL)flag |
204 { |
205 { |
205 if (flag != allowsDragging) { |
206 if (flag != allowsDragging) { |
206 allowsDragging = flag; |
207 allowsDragging = flag; |
207 self.userInteractionEnabled = allowsDragging; |
208 self.userInteractionEnabled = allowsDragging; |
208 } |
209 } |
209 } |
210 } |
210 |
211 |
211 |
212 |
212 @synthesize splitViewController; |
213 @synthesize splitViewController; |
213 @synthesize allowsDragging; |
214 @synthesize allowsDragging; |