linphone-iphone/Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.m
Yann Diorcet ee358816b7 Change InAppSettings place
All settings with Linphone Colors
2012-07-27 11:20:09 +02:00

66 lines
2.8 KiB
Objective-C
Executable file

//
// DCRoundSwitchOutlineLayer.m
//
// Created by Patrick Richards on 29/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import "DCRoundSwitchOutlineLayer.h"
@implementation DCRoundSwitchOutlineLayer
- (void)drawInContext:(CGContextRef)context
{
// calculate the outline clip
CGContextSaveGState(context);
UIBezierPath *switchOutline = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.bounds.size.height / 2.0];
CGContextAddPath(context, switchOutline.CGPath);
CGContextClip(context);
// inner gloss
CGContextSaveGState(context);
CGRect innerGlossPathRect = CGRectMake(self.frame.size.width * 0.05,
self.frame.size.height / 2.0,
self.bounds.size.width - (self.frame.size.width * 0.1),
self.bounds.size.height / 2.0);
UIBezierPath *innerGlossPath = [UIBezierPath bezierPathWithRoundedRect:innerGlossPathRect
byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
cornerRadii:CGSizeMake(self.bounds.size.height * 0.3, self.bounds.size.height * 0.3)];
CGContextAddPath(context, innerGlossPath.CGPath);
CGContextClip(context);
CGFloat colorStops[2] = {0.0, 1.0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat innerGlossStartColorComponents[] = {1.0, 1.0, 1.0, 0.14};
CGFloat innerGlossEndColorComponents[] = {1.0, 1.0, 1.0, 0.50};
CGColorRef topColor = CGColorCreate(colorSpace, innerGlossStartColorComponents);
CGColorRef bottomColor = CGColorCreate(colorSpace, innerGlossEndColorComponents);
CGColorRef colors[] = { topColor, bottomColor };
CFArrayRef colorsArray = CFArrayCreate(NULL, (const void**)colors, sizeof(colors) / sizeof(CGColorRef), &kCFTypeArrayCallBacks);
CGGradientRef innerGlossGradient = CGGradientCreateWithColors(colorSpace, colorsArray, colorStops);
CFRelease(colorsArray);
CGContextDrawLinearGradient(context, innerGlossGradient, CGPointMake(0, CGRectGetMinY(innerGlossPathRect)), CGPointMake(0, CGRectGetMaxY(innerGlossPathRect)), 0);
CGContextRestoreGState(context);
CGColorSpaceRelease(colorSpace);
CGColorRelease(topColor);
CGColorRelease(bottomColor);
CGGradientRelease(innerGlossGradient);
// outline and inner shadow
CGContextSetShadowWithColor(context, CGSizeMake(0.0, 1), 2.0, [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1.0].CGColor);
CGContextSetLineWidth(context, 0.5);
UIBezierPath *outlinePath = [UIBezierPath bezierPathWithRoundedRect:CGRectOffset(self.bounds, -0.5, 0.0) cornerRadius:self.bounds.size.height / 2.0];
CGContextAddPath(context, outlinePath.CGPath);
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.60 alpha:1.0].CGColor);
CGContextStrokePath(context);
CGContextAddPath(context, outlinePath.CGPath);
CGContextStrokePath(context);
}
@end