project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitCornersView.m
branchios-revival
changeset 11115 3729ac42189b
parent 8441 a00b0fa0dbd7
child 11221 e68b3e392091
--- 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];
+	}
 }