--- a/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitCornersView.m Thu Aug 13 13:41:50 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitCornersView.m Fri Aug 14 01:55:42 2015 +0200
@@ -7,7 +7,7 @@
//
#import "MGSplitCornersView.h"
-#import "CGPointUtils.h"
+
@implementation MGSplitCornersView
@@ -19,23 +19,34 @@
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])) {
- self.contentMode = UIViewContentModeRedraw;
- self.userInteractionEnabled = NO;
- self.opaque = NO;
- self.backgroundColor = [UIColor clearColor];
- cornerRadius = 0.0; // actual value is set by the splitViewController.
- cornersPosition = MGCornersPositionLeadingVertical;
+ self.contentMode = UIViewContentModeRedraw;
+ self.userInteractionEnabled = NO;
+ self.opaque = NO;
+ self.backgroundColor = [UIColor clearColor];
+ cornerRadius = 0.0; // actual value is set by the splitViewController.
+ cornersPosition = MGCornersPositionLeadingVertical;
}
-
+
return self;
}
- (void)dealloc
{
- self.cornerBackgroundColor = nil;
+ self.cornerBackgroundColor = nil;
+
+ [super dealloc];
+}
+
- [super dealloc];
+#pragma mark -
+#pragma mark Geometry helpers
+
+
+static double deg2Rad(double degrees)
+{
+ // Converts degrees to radians.
+ return degrees * (M_PI / 180.0);
}
@@ -45,131 +56,127 @@
- (void)drawRect:(CGRect)rect
{
- // Draw two appropriate corners, with cornerBackgroundColor behind them.
- if (cornerRadius > 0) {
- if (NO) { // just for debugging.
- [[UIColor redColor] set];
- UIRectFill(self.bounds);
- }
-
- float maxX = CGRectGetMaxX(self.bounds);
- float maxY = CGRectGetMaxY(self.bounds);
- UIBezierPath *path = [UIBezierPath bezierPath];
- CGPoint pt = CGPointZero;
- switch (cornersPosition) {
- case MGCornersPositionLeadingVertical: // top of screen for a left/right split
- [path moveToPoint:pt];
- pt.y += cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(90) endAngle:0 clockwise:YES]];
- pt.x += cornerRadius;
- pt.y -= cornerRadius;
- [path addLineToPoint:pt];
- [path addLineToPoint:CGPointZero];
- [path closePath];
-
- pt.x = maxX - cornerRadius;
- pt.y = 0;
- [path moveToPoint:pt];
- pt.y = maxY;
- [path addLineToPoint:pt];
- pt.x += cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(90) clockwise:YES]];
- pt.y -= cornerRadius;
- [path addLineToPoint:pt];
- pt.x -= cornerRadius;
- [path addLineToPoint:pt];
- [path closePath];
-
- break;
-
- case MGCornersPositionTrailingVertical: // bottom of screen for a left/right split
- pt.y = maxY;
- [path moveToPoint:pt];
- pt.y -= cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(270) endAngle:degreesToRadians(360) clockwise:NO]];
- pt.x += cornerRadius;
- pt.y += cornerRadius;
- [path addLineToPoint:pt];
- pt.x -= cornerRadius;
- [path addLineToPoint:pt];
- [path closePath];
-
- pt.x = maxX - cornerRadius;
- pt.y = maxY;
- [path moveToPoint:pt];
- pt.y -= cornerRadius;
- [path addLineToPoint:pt];
- pt.x += cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(270) clockwise:NO]];
- pt.y += cornerRadius;
- [path addLineToPoint:pt];
- pt.x -= cornerRadius;
- [path addLineToPoint:pt];
- [path closePath];
-
- break;
-
- case MGCornersPositionLeadingHorizontal: // left of screen for a top/bottom split
- pt.x = 0;
- pt.y = cornerRadius;
- [path moveToPoint:pt];
- pt.y -= cornerRadius;
- [path addLineToPoint:pt];
- pt.x += cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(270) clockwise:NO]];
- pt.y += cornerRadius;
- [path addLineToPoint:pt];
- pt.x -= cornerRadius;
- [path addLineToPoint:pt];
- [path closePath];
-
- pt.x = 0;
- pt.y = maxY - cornerRadius;
- [path moveToPoint:pt];
- pt.y = maxY;
- [path addLineToPoint:pt];
- pt.x += cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(90) clockwise:YES]];
- pt.y -= cornerRadius;
- [path addLineToPoint:pt];
- pt.x -= cornerRadius;
- [path addLineToPoint:pt];
- [path closePath];
-
- break;
-
- case MGCornersPositionTrailingHorizontal: // right of screen for a top/bottom split
- pt.y = cornerRadius;
- [path moveToPoint:pt];
- pt.y -= cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(270) endAngle:degreesToRadians(360) clockwise:NO]];
- pt.x += cornerRadius;
- pt.y += cornerRadius;
- [path addLineToPoint:pt];
- pt.x -= cornerRadius;
- [path addLineToPoint:pt];
- [path closePath];
-
- pt.y = maxY - cornerRadius;
- [path moveToPoint:pt];
- pt.y += cornerRadius;
- [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(90) endAngle:0 clockwise:YES]];
- pt.x += cornerRadius;
- pt.y -= cornerRadius;
- [path addLineToPoint:pt];
- pt.x -= cornerRadius;
- [path addLineToPoint:pt];
- [path closePath];
-
- break;
-
- default:
- break;
- }
-
- [self.cornerBackgroundColor set];
- [path fill];
- }
+ // Draw two appropriate corners, with cornerBackgroundColor behind them.
+ if (cornerRadius > 0) {
+
+ float maxX = CGRectGetMaxX(self.bounds);
+ float maxY = CGRectGetMaxY(self.bounds);
+ UIBezierPath *path = [UIBezierPath bezierPath];
+ CGPoint pt = CGPointZero;
+ switch (cornersPosition) {
+ case MGCornersPositionLeadingVertical: // top of screen for a left/right split
+ [path moveToPoint:pt];
+ pt.y += cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(90) endAngle:0 clockwise:YES]];
+ pt.x += cornerRadius;
+ pt.y -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path addLineToPoint:CGPointZero];
+ [path closePath];
+
+ pt.x = maxX - cornerRadius;
+ pt.y = 0;
+ [path moveToPoint:pt];
+ pt.y = maxY;
+ [path addLineToPoint:pt];
+ pt.x += cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(90) clockwise:YES]];
+ pt.y -= cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path closePath];
+
+ break;
+
+ case MGCornersPositionTrailingVertical: // bottom of screen for a left/right split
+ pt.y = maxY;
+ [path moveToPoint:pt];
+ pt.y -= cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(270) endAngle:(float)deg2Rad(360) clockwise:NO]];
+ pt.x += cornerRadius;
+ pt.y += cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path closePath];
+
+ pt.x = maxX - cornerRadius;
+ pt.y = maxY;
+ [path moveToPoint:pt];
+ pt.y -= cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x += cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(270) clockwise:NO]];
+ pt.y += cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path closePath];
+
+ break;
+
+ case MGCornersPositionLeadingHorizontal: // left of screen for a top/bottom split
+ pt.x = 0;
+ pt.y = cornerRadius;
+ [path moveToPoint:pt];
+ pt.y -= cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x += cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(270) clockwise:NO]];
+ pt.y += cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path closePath];
+
+ pt.x = 0;
+ pt.y = maxY - cornerRadius;
+ [path moveToPoint:pt];
+ pt.y = maxY;
+ [path addLineToPoint:pt];
+ pt.x += cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(90) clockwise:YES]];
+ pt.y -= cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path closePath];
+
+ break;
+
+ case MGCornersPositionTrailingHorizontal: // right of screen for a top/bottom split
+ pt.y = cornerRadius;
+ [path moveToPoint:pt];
+ pt.y -= cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(270) endAngle:(float)deg2Rad(360) clockwise:NO]];
+ pt.x += cornerRadius;
+ pt.y += cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path closePath];
+
+ pt.y = maxY - cornerRadius;
+ [path moveToPoint:pt];
+ pt.y += cornerRadius;
+ [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(90) endAngle:0 clockwise:YES]];
+ pt.x += cornerRadius;
+ pt.y -= cornerRadius;
+ [path addLineToPoint:pt];
+ pt.x -= cornerRadius;
+ [path addLineToPoint:pt];
+ [path closePath];
+
+ break;
+
+ default:
+ break;
+ }
+
+ [self.cornerBackgroundColor set];
+ [path fill];
+ }
}
@@ -179,38 +186,37 @@
- (void)setCornerRadius:(float)newRadius
{
- if (newRadius != cornerRadius) {
- cornerRadius = newRadius;
- [self setNeedsDisplay];
- }
+ if (newRadius != cornerRadius) {
+ cornerRadius = newRadius;
+ [self setNeedsDisplay];
+ }
}
- (void)setSplitViewController:(MGSplitViewController *)theController
{
- if (theController != splitViewController) {
- splitViewController = theController;
- [self setNeedsDisplay];
- }
+ if (theController != splitViewController) {
+ splitViewController = theController;
+ [self setNeedsDisplay];
+ }
}
- (void)setCornersPosition:(MGCornersPosition)posn
{
- if (cornersPosition != posn) {
- cornersPosition = posn;
- [self setNeedsDisplay];
- }
+ if (cornersPosition != posn) {
+ cornersPosition = posn;
+ [self setNeedsDisplay];
+ }
}
- (void)setCornerBackgroundColor:(UIColor *)color
{
- if (color != cornerBackgroundColor) {
- [cornerBackgroundColor release];
- cornerBackgroundColor = [color retain];
- [self setNeedsDisplay];
- }
+ if (color != cornerBackgroundColor) {
+ cornerBackgroundColor = color;
+ [self setNeedsDisplay];
+ }
}