├── .gitignore ├── .gitmodules ├── Artwork ├── BatteryIndicator.png ├── Screen Shot 2013-06-16 at 1.50.35 PM.png ├── Screen Shot 2013-06-16 at 3.40.50 PM.png ├── Wallpaper.png └── WiFi-Icon.png ├── CFIFrostedOverlayView.h ├── CFIFrostedOverlayView.m ├── LICENSE ├── README.md ├── build-ios ├── CFIFrostedOverlayView.xcodeproj │ └── project.pbxproj ├── CFIFrostedOverlayView │ ├── CFIAppDelegate.h │ ├── CFIAppDelegate.m │ ├── CFIControlCenterCircleButton.h │ ├── CFIControlCenterCircleButton.m │ ├── CFIControlCenterSquareButton.h │ ├── CFIControlCenterSquareButton.m │ ├── CFIControlCenterView.h │ ├── CFIControlCenterView.m │ ├── CFIFrostedOverlayView-Info.plist │ ├── CFIFrostedOverlayView-Prefix.pch │ ├── CFIViewController.h │ ├── CFIViewController.m │ ├── EXTScope.h │ ├── EXTScope.m │ ├── en.lproj │ │ └── InfoPlist.strings │ ├── main.m │ └── metamacros.h └── CFIFrostedOverlayViewTests │ ├── CFIFrostedOverlayViewTests-Info.plist │ ├── CFIFrostedOverlayViewTests.m │ └── en.lproj │ └── InfoPlist.strings └── build-mac ├── CFIFrostedOverlayView-mac.xcodeproj └── project.pbxproj ├── CFIFrostedOverlayView-mac ├── Base.lproj │ └── MainMenu.xib ├── CFIAppDelegate.h ├── CFIAppDelegate.m ├── CFIFrostedOverlayView-mac-Info.plist ├── CFIFrostedOverlayView-mac-Prefix.pch ├── CFIMainContentView.h ├── CFIMainContentView.m ├── CFIMainWindow.h ├── CFIMainWindow.m ├── CFIMainWindowController.h ├── CFIMainWindowController.m ├── CFIMainWindowOuterFrame.h ├── CFIMainWindowOuterFrame.m ├── CFIStatusBarOverlay.h ├── CFIStatusBarOverlay.m ├── Images.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── en.lproj │ ├── Credits.rtf │ └── InfoPlist.strings └── main.m └── CFIFrostedOverlayView-macTests ├── CFIFrostedOverlayView-macTests-Info.plist ├── CFIFrostedOverlayView_macTests.m └── en.lproj └── InfoPlist.strings /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | .DS_Store 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | *.xcworkspace 13 | !default.xcworkspace 14 | xcuserdata 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | .idea/ 19 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "External/GPUImage"] 2 | path = External/GPUImage 3 | url = https://github.com/BradLarson/GPUImage.git 4 | -------------------------------------------------------------------------------- /Artwork/BatteryIndicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodaFi/CFIFrostedOverlayView/080742b17dc867e2935fc2d2073c2767bd5af285/Artwork/BatteryIndicator.png -------------------------------------------------------------------------------- /Artwork/Screen Shot 2013-06-16 at 1.50.35 PM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodaFi/CFIFrostedOverlayView/080742b17dc867e2935fc2d2073c2767bd5af285/Artwork/Screen Shot 2013-06-16 at 1.50.35 PM.png -------------------------------------------------------------------------------- /Artwork/Screen Shot 2013-06-16 at 3.40.50 PM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodaFi/CFIFrostedOverlayView/080742b17dc867e2935fc2d2073c2767bd5af285/Artwork/Screen Shot 2013-06-16 at 3.40.50 PM.png -------------------------------------------------------------------------------- /Artwork/Wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodaFi/CFIFrostedOverlayView/080742b17dc867e2935fc2d2073c2767bd5af285/Artwork/Wallpaper.png -------------------------------------------------------------------------------- /Artwork/WiFi-Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodaFi/CFIFrostedOverlayView/080742b17dc867e2935fc2d2073c2767bd5af285/Artwork/WiFi-Icon.png -------------------------------------------------------------------------------- /CFIFrostedOverlayView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIFrostedOverlayView.h 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 12 | #import 13 | #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) 14 | #import 15 | #else 16 | #error "This control is incompatible with the current compilation target." 17 | #endif 18 | 19 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 20 | #if __MAC_OS_X_VERSION_MIN_REQUIRED > 1050 21 | #import 22 | #else 23 | #error "This control is incompatible with the current compilation target." 24 | #endif 25 | #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) 26 | #import 27 | #else 28 | #error "This control is incompatible with the current compilation target." 29 | #endif 30 | 31 | #ifndef CFI_FROSTED_OVERLAY_VIEWCLASS 32 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 33 | #if __MAC_OS_X_VERSION_MIN_REQUIRED > 1050 34 | #define CFI_FROSTED_OVERLAY_VIEWCLASS NSView 35 | #else 36 | #warning "Core Animation is required for this control." 37 | #endif 38 | #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) 39 | #define CFI_FROSTED_OVERLAY_VIEWCLASS UIView 40 | #else 41 | #error "This control is incompatible with the current compilation target." 42 | #endif 43 | #endif 44 | 45 | #ifndef CFI_FROSTED_OVERLAY_COLORCLASS 46 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 47 | #if __MAC_OS_X_VERSION_MIN_REQUIRED > 1050 48 | #define CFI_FROSTED_OVERLAY_COLORCLASS NSColor 49 | #else 50 | #warning "Core Animation is required for this control." 51 | #endif 52 | #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) 53 | #define CFI_FROSTED_OVERLAY_COLORCLASS UIColor 54 | #else 55 | #error "This control is incompatible with the current compilation target." 56 | #endif 57 | #endif 58 | 59 | /** 60 | * A control that renders its superview with a harsh gaussian blur, then overlays that with a tint 61 | * layer for customization, and further blur. The defaults it's tuned with are meant to emulate 62 | * as much of the backing view of iOS 7's control center as possible. 63 | */ 64 | @interface CFIFrostedOverlayView : CFI_FROSTED_OVERLAY_VIEWCLASS 65 | 66 | /** 67 | * The view that will be rendered by this control. This must be set (else the control will default 68 | * to a bright white layer), and must not be set to nil. 69 | * 70 | * Every assignment to this property forces a re-rendering of the view, which is a *very* expensive 71 | * process, so it recommended that this property be set once, and updated only occaisionally when 72 | * major elements have been brought onscreen. 73 | */ 74 | @property (nonatomic, weak) CFI_FROSTED_OVERLAY_VIEWCLASS *viewToBlur; 75 | 76 | /** 77 | * An overlay layer provided as a convenience for setting the tint color of the control. 78 | * This property may be nil. 79 | */ 80 | @property (nonatomic, strong) CALayer *tintLayer; 81 | 82 | /** 83 | * The offset of the top of the control to the top of the screen. 84 | */ 85 | @property (nonatomic, assign) CGFloat offset; 86 | 87 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 88 | @property (nonatomic, strong) NSColor *backgroundColor; 89 | #endif 90 | 91 | @end 92 | 93 | 94 | /** 95 | * A way to get around iOS' odd restriction that a view may only have one delegate (else demons fly 96 | * out of people's noses, and nobody wants that). As a convenience, it comes with a drawRect block 97 | * that gets called in `-drawLayer:inContext:` for those who are so inclined to use it. It's 98 | * important to note that the class does not retain its layer in order to prevent retain cycles. 99 | */ 100 | typedef void(^CFILayerDelegateDrawRect)(id layer, CGContextRef context); 101 | 102 | @interface CFILayerDelegate : NSObject { 103 | __weak CALayer *_layer; 104 | } 105 | 106 | /** 107 | * Initializes the reciever with a given layer. 108 | * The default initializer for this class. 109 | */ 110 | - (id)initWithLayer:(CALayer *)view; 111 | 112 | /** 113 | * A block that gets executed in `-drawLayer:inContext:`. 114 | */ 115 | @property (nonatomic, copy) CFILayerDelegateDrawRect drawRect; 116 | 117 | @end 118 | 119 | 120 | /** 121 | * Le sigh. This is fixed in OS [X-Dacted], but for now we have to make a category in order to 122 | * avoid doubling the #ifdefs for something as simple as colors. If using these methods, you must 123 | * CFRelease() any primitives returned from them, as ARC totally broke the autoreleasing mechanism 124 | * in CG. 125 | */ 126 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 127 | 128 | @interface NSColor (CFIFrostedOverlayExtensions) 129 | 130 | #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1080 131 | - (CGColorRef)CGColor CF_RETURNS_RETAINED; 132 | #endif 133 | #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1090 134 | + (NSColor *)colorWithWhite:(CGFloat)white alpha:(CGFloat)alpha; 135 | + (NSColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 136 | #endif 137 | 138 | @end 139 | 140 | #endif 141 | -------------------------------------------------------------------------------- /CFIFrostedOverlayView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIFrostedOverlayView.m 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIFrostedOverlayView.h" 10 | #import 11 | #if defined(UIKIT_EXTERN) 12 | #import 13 | #endif 14 | 15 | @implementation CFILayerDelegate 16 | -(id) initWithLayer:(CALayer *)view { 17 | self = [super init]; 18 | _layer = view; 19 | _layer.delegate = self; 20 | return self; 21 | } 22 | - (id)actionForLayer:(CALayer *)layer forKey:(NSString *)event { return (id)NSNull.null; } 23 | - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { 24 | if (ctx == NULL) return; 25 | if (self.drawRect != NULL) self.drawRect(_layer, ctx); 26 | } 27 | @end 28 | 29 | @interface CFIFrostedOverlayView () 30 | @property (nonatomic, strong) CFILayerDelegate *layerDelegate; 31 | @property (nonatomic, strong) CALayer *blurredLayer; 32 | @end 33 | 34 | @implementation CFIFrostedOverlayView 35 | 36 | - (id)init { 37 | return [self initWithFrame:CGRectZero]; 38 | } 39 | 40 | - (id)initWithFrame:(CGRect)frame { 41 | self = [super initWithFrame:frame]; 42 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 43 | self.layer = CALayer.layer; 44 | self.layer.masksToBounds = YES; 45 | self.wantsLayer = YES; 46 | #endif 47 | 48 | self.backgroundColor = CFI_FROSTED_OVERLAY_COLORCLASS.whiteColor; 49 | 50 | #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED 51 | self.clipsToBounds = YES; 52 | #endif 53 | 54 | self.blurredLayer = CALayer.layer; 55 | self.blurredLayer.frame = self.bounds; 56 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 57 | CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; 58 | [blurFilter setDefaults]; 59 | [blurFilter setValue:@(5) forKey:@"inputRadius"]; 60 | [blurFilter setName:@"blur"]; 61 | self.blurredLayer.filters = @[ blurFilter ]; 62 | #endif 63 | [self.layer addSublayer:self.blurredLayer]; 64 | 65 | self.layerDelegate = [[CFILayerDelegate alloc]initWithLayer:self.blurredLayer]; 66 | 67 | self.tintLayer = [CALayer layer]; 68 | self.tintLayer.frame = self.bounds; 69 | CGColorRef backgroundColor = [CFI_FROSTED_OVERLAY_COLORCLASS colorWithWhite:1.000 alpha:0.800].CGColor; 70 | [self.layer setBackgroundColor:backgroundColor]; 71 | [self.layer addSublayer:self.tintLayer]; 72 | 73 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 74 | #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 75 | CFRelease(backgroundColor); 76 | #endif 77 | #endif 78 | 79 | return self; 80 | } 81 | 82 | - (void)awakeFromNib { 83 | self.backgroundColor = CFI_FROSTED_OVERLAY_COLORCLASS.whiteColor; 84 | #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED 85 | self.clipsToBounds = YES; 86 | #endif 87 | self.blurredLayer = CALayer.layer; 88 | self.blurredLayer.frame = self.bounds; 89 | [self.layer addSublayer:self.blurredLayer]; 90 | 91 | self.layerDelegate = [[CFILayerDelegate alloc]initWithLayer:self.blurredLayer]; 92 | 93 | self.tintLayer = [CALayer layer]; 94 | self.tintLayer.frame = self.bounds; 95 | CGColorRef backgroundColor = [CFI_FROSTED_OVERLAY_COLORCLASS colorWithWhite:1.000 alpha:0.300].CGColor; 96 | [self.tintLayer setBackgroundColor:backgroundColor]; 97 | [self.layer addSublayer:self.tintLayer]; 98 | 99 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 100 | #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 101 | CFRelease(backgroundColor); 102 | #endif 103 | #endif 104 | } 105 | 106 | - (void)setViewToBlur:(CFI_FROSTED_OVERLAY_VIEWCLASS *)viewToBlur { 107 | _viewToBlur = viewToBlur; 108 | #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED 109 | __weak __typeof(self) weakSelf = self; 110 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 111 | __strong __typeof(self) self = weakSelf; 112 | GPUImageGaussianBlurFilter *filter = [[GPUImageGaussianBlurFilter alloc] init]; 113 | filter.blurSize = UIScreen.mainScreen.scale * 9; 114 | UIImage *image = CFIImageFromView(self.viewToBlur); 115 | self.blurredLayer.contents = (id)[filter imageByFilteringImage:image].CGImage; 116 | }); 117 | #elif defined (__MAC_OS_X_VERSION_MIN_REQUIRED) 118 | self.blurredLayer.contents = (__bridge id)CFIImageFromView(self.viewToBlur); 119 | #endif 120 | } 121 | 122 | - (void)setFrame:(CGRect)frame { 123 | [super setFrame:frame]; 124 | #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED 125 | CGRect convertedRect = [self convertRect:self.bounds fromView:self.superview]; 126 | self.blurredLayer.frame = (CGRect){ .origin.y = convertedRect.origin.y, .size.height = CGRectGetHeight(self.viewToBlur.bounds) + self.offset, .size.width = frame.size.width }; 127 | self.tintLayer.frame = self.bounds; 128 | #elif defined (__MAC_OS_X_VERSION_MIN_REQUIRED) 129 | CGRect convertedRect = [self convertRect:self.bounds fromView:self.superview]; 130 | self.blurredLayer.frame = (CGRect){ .origin.y = convertedRect.origin.y - (self.offset/2), .size.height = NSHeight(self.viewToBlur.bounds), .size.width = frame.size.width }; 131 | self.tintLayer.frame = self.bounds; 132 | #endif 133 | } 134 | 135 | - (void)drawRect:(CGRect)rect { 136 | [super drawRect:rect]; 137 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 138 | [self.backgroundColor ?: NSColor.whiteColor set]; 139 | NSRectFill(rect); 140 | #endif 141 | } 142 | 143 | #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED 144 | 145 | static UIImage *CFIImageFromView(UIView *view) { 146 | CGSize size = view.bounds.size; 147 | 148 | CGFloat scale = UIScreen.mainScreen.scale; 149 | size.width *= scale; 150 | size.height *= scale; 151 | 152 | UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale); 153 | CGContextRef ctx = UIGraphicsGetCurrentContext(); 154 | CGContextScaleCTM(ctx, scale, scale); 155 | 156 | [view.layer renderInContext:ctx]; 157 | 158 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 159 | UIGraphicsEndImageContext(); 160 | 161 | return image; 162 | } 163 | 164 | #elif defined (__MAC_OS_X_VERSION_MIN_REQUIRED) 165 | 166 | static CGImageRef CFIImageFromView(NSView *view) { 167 | CGSize size = view.bounds.size; 168 | 169 | NSBitmapImageRep * bir = [view bitmapImageRepForCachingDisplayInRect:view.bounds]; 170 | [bir setSize:size]; 171 | 172 | [view cacheDisplayInRect:view.bounds toBitmapImageRep:bir]; 173 | 174 | NSImage *image = [[NSImage alloc] initWithSize:size]; 175 | [image addRepresentation:bir]; 176 | 177 | NSRect rect = NSRectFromCGRect(view.bounds); 178 | return [image CGImageForProposedRect:&rect context:nil hints:nil]; 179 | } 180 | 181 | #endif 182 | 183 | @end 184 | 185 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 186 | 187 | @implementation NSColor (CFIFrostedOverlayExtensions) 188 | 189 | #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1080 190 | 191 | - (CGColorRef)CGColor { 192 | NSColor *colorRGB = [self colorUsingColorSpaceName:NSCalibratedRGBColorSpace]; 193 | CGFloat components[4]; 194 | [colorRGB getRed:&components[0] green:&components[1] blue:&components[2] alpha:&components[3]]; 195 | CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); 196 | CGColorRef theColor = CGColorCreate(colorSpace, components); 197 | CGColorSpaceRelease(colorSpace); 198 | return theColor; 199 | } 200 | #endif 201 | 202 | #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1090 203 | + (NSColor *)colorWithWhite:(CGFloat)white alpha:(CGFloat)alpha { 204 | return [NSColor colorWithCalibratedWhite:white alpha:alpha]; 205 | } 206 | 207 | + (NSColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { 208 | return [NSColor colorWithRed:red green:green blue:blue alpha:alpha]; 209 | } 210 | #endif 211 | 212 | @end 213 | #endif 214 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) {{{year}}} {{{fullname}}} 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | CFIFrostedOverlayView 2 | ===================== 3 | 4 | A view that renders its superview with a gaussian blur like iOS 7's Control Center 5 | 6 | ![Frosted Overlay Screenshot](https://raw.github.com/CodaFi/CFIFrostedOverlayView/master/Artwork/Screen%20Shot%202013-06-16%20at%201.50.35%20PM.png) 7 | 8 | Caveats 9 | ======= 10 | 11 | Because of the way that this control renders its superview, you must provide it an offset if you choose to not have the control take up the entirety of its superview, and guarantee that it is not onscreen when its superview is being rendered. For example, the demo project shows how to offset the control by 20 pixels from the top of the screen. 12 | 13 | ```ObjC 14 | self.controlCenter = //... 15 | self.controlCenter.offset = 20.f; 16 | [self.view addSubview:self.controlCenter]; 17 | self.controlCenter.viewToBlur = self.view; 18 | ``` 19 | 20 | The inset of the control's frame and its `contentOffset` must match exactly, else the rendered view will be mis-aligned with the actual view. 21 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 8442BCBD176E375A00F27E4D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BCBC176E375A00F27E4D /* Foundation.framework */; }; 11 | 8442BCBF176E375A00F27E4D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BCBE176E375A00F27E4D /* CoreGraphics.framework */; }; 12 | 8442BCC1176E375A00F27E4D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BCC0176E375A00F27E4D /* UIKit.framework */; }; 13 | 8442BCC7176E375A00F27E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8442BCC5176E375A00F27E4D /* InfoPlist.strings */; }; 14 | 8442BCC9176E375A00F27E4D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8442BCC8176E375A00F27E4D /* main.m */; }; 15 | 8442BCCD176E375A00F27E4D /* CFIAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8442BCCC176E375A00F27E4D /* CFIAppDelegate.m */; }; 16 | 8442BCD3176E375A00F27E4D /* CFIViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8442BCD2176E375A00F27E4D /* CFIViewController.m */; }; 17 | 8442BCDC176E375A00F27E4D /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BCDB176E375A00F27E4D /* XCTest.framework */; }; 18 | 8442BCDD176E375A00F27E4D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BCBC176E375A00F27E4D /* Foundation.framework */; }; 19 | 8442BCDE176E375A00F27E4D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BCC0176E375A00F27E4D /* UIKit.framework */; }; 20 | 8442BCE6176E375A00F27E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8442BCE4176E375A00F27E4D /* InfoPlist.strings */; }; 21 | 8442BCE8176E375A00F27E4D /* CFIFrostedOverlayViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8442BCE7176E375A00F27E4D /* CFIFrostedOverlayViewTests.m */; }; 22 | 8442BD0F176E3EEB00F27E4D /* EXTScope.m in Sources */ = {isa = PBXBuildFile; fileRef = 8442BD0E176E3EEB00F27E4D /* EXTScope.m */; }; 23 | 84E606BC17931BB500194C76 /* CFIFrostedOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606BB17931BB500194C76 /* CFIFrostedOverlayView.m */; }; 24 | 84E606D31793349F00194C76 /* Wallpaper.png in Resources */ = {isa = PBXBuildFile; fileRef = 84E606D21793349F00194C76 /* Wallpaper.png */; }; 25 | 84E606DD179335B600194C76 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 84E606DA179335B600194C76 /* Default-568h@2x.png */; }; 26 | 84E606DE179335B600194C76 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 84E606DB179335B600194C76 /* Default.png */; }; 27 | 84E606DF179335B600194C76 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 84E606DC179335B600194C76 /* Default@2x.png */; }; 28 | 84EECF65176E4E5E00AA826F /* CFIControlCenterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EECF64176E4E5E00AA826F /* CFIControlCenterView.m */; }; 29 | 84EECF6A176E541500AA826F /* CFIControlCenterSquareButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EECF69176E540C00AA826F /* CFIControlCenterSquareButton.m */; }; 30 | 84EECF76176E5C4B00AA826F /* CFIControlCenterCircleButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EECF75176E5C4B00AA826F /* CFIControlCenterCircleButton.m */; }; 31 | 84EECF84176E6E9500AA826F /* libGPUImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84EECF7F176E6E8200AA826F /* libGPUImage.a */; }; 32 | /* End PBXBuildFile section */ 33 | 34 | /* Begin PBXContainerItemProxy section */ 35 | 8442BCDF176E375A00F27E4D /* PBXContainerItemProxy */ = { 36 | isa = PBXContainerItemProxy; 37 | containerPortal = 8442BCB1176E375A00F27E4D /* Project object */; 38 | proxyType = 1; 39 | remoteGlobalIDString = 8442BCB8176E375A00F27E4D; 40 | remoteInfo = CFIFrostedOverlayView; 41 | }; 42 | 84EECF7E176E6E8200AA826F /* PBXContainerItemProxy */ = { 43 | isa = PBXContainerItemProxy; 44 | containerPortal = 84EECF78176E6E8200AA826F /* GPUImage.xcodeproj */; 45 | proxyType = 2; 46 | remoteGlobalIDString = BCF1A33414DDB1EC00852800; 47 | remoteInfo = GPUImage; 48 | }; 49 | 84EECF80176E6E8200AA826F /* PBXContainerItemProxy */ = { 50 | isa = PBXContainerItemProxy; 51 | containerPortal = 84EECF78176E6E8200AA826F /* GPUImage.xcodeproj */; 52 | proxyType = 2; 53 | remoteGlobalIDString = BCF1A34414DDB1EC00852800; 54 | remoteInfo = GPUImageTests; 55 | }; 56 | 84EECF82176E6E9000AA826F /* PBXContainerItemProxy */ = { 57 | isa = PBXContainerItemProxy; 58 | containerPortal = 84EECF78176E6E8200AA826F /* GPUImage.xcodeproj */; 59 | proxyType = 1; 60 | remoteGlobalIDString = BCF1A33314DDB1EC00852800; 61 | remoteInfo = GPUImage; 62 | }; 63 | /* End PBXContainerItemProxy section */ 64 | 65 | /* Begin PBXFileReference section */ 66 | 8442BCB9176E375A00F27E4D /* CFIFrostedOverlayView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CFIFrostedOverlayView.app; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | 8442BCBC176E375A00F27E4D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 68 | 8442BCBE176E375A00F27E4D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 69 | 8442BCC0176E375A00F27E4D /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 70 | 8442BCC4176E375A00F27E4D /* CFIFrostedOverlayView-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CFIFrostedOverlayView-Info.plist"; sourceTree = ""; }; 71 | 8442BCC6176E375A00F27E4D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 72 | 8442BCC8176E375A00F27E4D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 73 | 8442BCCA176E375A00F27E4D /* CFIFrostedOverlayView-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CFIFrostedOverlayView-Prefix.pch"; sourceTree = ""; }; 74 | 8442BCCB176E375A00F27E4D /* CFIAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CFIAppDelegate.h; sourceTree = ""; }; 75 | 8442BCCC176E375A00F27E4D /* CFIAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CFIAppDelegate.m; sourceTree = ""; }; 76 | 8442BCD1176E375A00F27E4D /* CFIViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CFIViewController.h; sourceTree = ""; }; 77 | 8442BCD2176E375A00F27E4D /* CFIViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CFIViewController.m; sourceTree = ""; }; 78 | 8442BCDA176E375A00F27E4D /* CFIFrostedOverlayViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CFIFrostedOverlayViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 79 | 8442BCDB176E375A00F27E4D /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 80 | 8442BCE3176E375A00F27E4D /* CFIFrostedOverlayViewTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CFIFrostedOverlayViewTests-Info.plist"; sourceTree = ""; }; 81 | 8442BCE5176E375A00F27E4D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 82 | 8442BCE7176E375A00F27E4D /* CFIFrostedOverlayViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CFIFrostedOverlayViewTests.m; sourceTree = ""; }; 83 | 8442BD0D176E3EEB00F27E4D /* EXTScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EXTScope.h; sourceTree = ""; }; 84 | 8442BD0E176E3EEB00F27E4D /* EXTScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EXTScope.m; sourceTree = ""; }; 85 | 8442BD10176E3EF400F27E4D /* metamacros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = metamacros.h; sourceTree = ""; }; 86 | 84E606BA17931BB500194C76 /* CFIFrostedOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CFIFrostedOverlayView.h; path = ../../CFIFrostedOverlayView.h; sourceTree = ""; }; 87 | 84E606BB17931BB500194C76 /* CFIFrostedOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CFIFrostedOverlayView.m; path = ../../CFIFrostedOverlayView.m; sourceTree = ""; }; 88 | 84E606D21793349F00194C76 /* Wallpaper.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Wallpaper.png; path = ../../Artwork/Wallpaper.png; sourceTree = ""; }; 89 | 84E606DA179335B600194C76 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "../../../GitPad/External/KrakenKit/build-mac/External/AFNetworking/Example/Default-568h@2x.png"; sourceTree = ""; }; 90 | 84E606DB179335B600194C76 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = "../../../GitPad/External/KrakenKit/build-mac/External/AFNetworking/Example/Default.png"; sourceTree = ""; }; 91 | 84E606DC179335B600194C76 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../../../GitPad/External/KrakenKit/build-mac/External/AFNetworking/Example/Default@2x.png"; sourceTree = ""; }; 92 | 84EECF63176E4E5E00AA826F /* CFIControlCenterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFIControlCenterView.h; sourceTree = ""; }; 93 | 84EECF64176E4E5E00AA826F /* CFIControlCenterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFIControlCenterView.m; sourceTree = ""; }; 94 | 84EECF68176E540C00AA826F /* CFIControlCenterSquareButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CFIControlCenterSquareButton.h; sourceTree = ""; }; 95 | 84EECF69176E540C00AA826F /* CFIControlCenterSquareButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CFIControlCenterSquareButton.m; sourceTree = ""; }; 96 | 84EECF74176E5C4B00AA826F /* CFIControlCenterCircleButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFIControlCenterCircleButton.h; sourceTree = ""; }; 97 | 84EECF75176E5C4B00AA826F /* CFIControlCenterCircleButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFIControlCenterCircleButton.m; sourceTree = ""; }; 98 | 84EECF78176E6E8200AA826F /* GPUImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GPUImage.xcodeproj; path = External/GPUImage/framework/GPUImage.xcodeproj; sourceTree = ""; }; 99 | /* End PBXFileReference section */ 100 | 101 | /* Begin PBXFrameworksBuildPhase section */ 102 | 8442BCB6176E375A00F27E4D /* Frameworks */ = { 103 | isa = PBXFrameworksBuildPhase; 104 | buildActionMask = 2147483647; 105 | files = ( 106 | 84EECF84176E6E9500AA826F /* libGPUImage.a in Frameworks */, 107 | 8442BCBF176E375A00F27E4D /* CoreGraphics.framework in Frameworks */, 108 | 8442BCC1176E375A00F27E4D /* UIKit.framework in Frameworks */, 109 | 8442BCBD176E375A00F27E4D /* Foundation.framework in Frameworks */, 110 | ); 111 | runOnlyForDeploymentPostprocessing = 0; 112 | }; 113 | 8442BCD7176E375A00F27E4D /* Frameworks */ = { 114 | isa = PBXFrameworksBuildPhase; 115 | buildActionMask = 2147483647; 116 | files = ( 117 | 8442BCDC176E375A00F27E4D /* XCTest.framework in Frameworks */, 118 | 8442BCDE176E375A00F27E4D /* UIKit.framework in Frameworks */, 119 | 8442BCDD176E375A00F27E4D /* Foundation.framework in Frameworks */, 120 | ); 121 | runOnlyForDeploymentPostprocessing = 0; 122 | }; 123 | /* End PBXFrameworksBuildPhase section */ 124 | 125 | /* Begin PBXGroup section */ 126 | 8442BCB0176E375A00F27E4D = { 127 | isa = PBXGroup; 128 | children = ( 129 | 84EECF78176E6E8200AA826F /* GPUImage.xcodeproj */, 130 | 8442BCC2176E375A00F27E4D /* CFIFrostedOverlayView */, 131 | 8442BCE1176E375A00F27E4D /* CFIFrostedOverlayViewTests */, 132 | 8442BCBB176E375A00F27E4D /* Frameworks */, 133 | 8442BCBA176E375A00F27E4D /* Products */, 134 | ); 135 | sourceTree = ""; 136 | }; 137 | 8442BCBA176E375A00F27E4D /* Products */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 8442BCB9176E375A00F27E4D /* CFIFrostedOverlayView.app */, 141 | 8442BCDA176E375A00F27E4D /* CFIFrostedOverlayViewTests.xctest */, 142 | ); 143 | name = Products; 144 | sourceTree = ""; 145 | }; 146 | 8442BCBB176E375A00F27E4D /* Frameworks */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 8442BCBC176E375A00F27E4D /* Foundation.framework */, 150 | 8442BCBE176E375A00F27E4D /* CoreGraphics.framework */, 151 | 8442BCC0176E375A00F27E4D /* UIKit.framework */, 152 | 8442BCDB176E375A00F27E4D /* XCTest.framework */, 153 | ); 154 | name = Frameworks; 155 | sourceTree = ""; 156 | }; 157 | 8442BCC2176E375A00F27E4D /* CFIFrostedOverlayView */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 84EECF8B176E6FAF00AA826F /* Control */, 161 | 8442BCCB176E375A00F27E4D /* CFIAppDelegate.h */, 162 | 8442BCCC176E375A00F27E4D /* CFIAppDelegate.m */, 163 | 8442BCD1176E375A00F27E4D /* CFIViewController.h */, 164 | 8442BCD2176E375A00F27E4D /* CFIViewController.m */, 165 | 84EECF63176E4E5E00AA826F /* CFIControlCenterView.h */, 166 | 84EECF64176E4E5E00AA826F /* CFIControlCenterView.m */, 167 | 84EECF68176E540C00AA826F /* CFIControlCenterSquareButton.h */, 168 | 84EECF69176E540C00AA826F /* CFIControlCenterSquareButton.m */, 169 | 84EECF74176E5C4B00AA826F /* CFIControlCenterCircleButton.h */, 170 | 84EECF75176E5C4B00AA826F /* CFIControlCenterCircleButton.m */, 171 | 8442BD0D176E3EEB00F27E4D /* EXTScope.h */, 172 | 8442BD0E176E3EEB00F27E4D /* EXTScope.m */, 173 | 8442BD10176E3EF400F27E4D /* metamacros.h */, 174 | 8442BCC3176E375A00F27E4D /* Supporting Files */, 175 | ); 176 | path = CFIFrostedOverlayView; 177 | sourceTree = ""; 178 | }; 179 | 8442BCC3176E375A00F27E4D /* Supporting Files */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | 8442BCC4176E375A00F27E4D /* CFIFrostedOverlayView-Info.plist */, 183 | 8442BCC5176E375A00F27E4D /* InfoPlist.strings */, 184 | 8442BCC8176E375A00F27E4D /* main.m */, 185 | 8442BCCA176E375A00F27E4D /* CFIFrostedOverlayView-Prefix.pch */, 186 | 84E606D21793349F00194C76 /* Wallpaper.png */, 187 | 84E606DA179335B600194C76 /* Default-568h@2x.png */, 188 | 84E606DB179335B600194C76 /* Default.png */, 189 | 84E606DC179335B600194C76 /* Default@2x.png */, 190 | ); 191 | name = "Supporting Files"; 192 | sourceTree = ""; 193 | }; 194 | 8442BCE1176E375A00F27E4D /* CFIFrostedOverlayViewTests */ = { 195 | isa = PBXGroup; 196 | children = ( 197 | 8442BCE7176E375A00F27E4D /* CFIFrostedOverlayViewTests.m */, 198 | 8442BCE2176E375A00F27E4D /* Supporting Files */, 199 | ); 200 | path = CFIFrostedOverlayViewTests; 201 | sourceTree = ""; 202 | }; 203 | 8442BCE2176E375A00F27E4D /* Supporting Files */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | 8442BCE3176E375A00F27E4D /* CFIFrostedOverlayViewTests-Info.plist */, 207 | 8442BCE4176E375A00F27E4D /* InfoPlist.strings */, 208 | ); 209 | name = "Supporting Files"; 210 | sourceTree = ""; 211 | }; 212 | 84EECF79176E6E8200AA826F /* Products */ = { 213 | isa = PBXGroup; 214 | children = ( 215 | 84EECF7F176E6E8200AA826F /* libGPUImage.a */, 216 | 84EECF81176E6E8200AA826F /* GPUImageTests.octest */, 217 | ); 218 | name = Products; 219 | sourceTree = ""; 220 | }; 221 | 84EECF8B176E6FAF00AA826F /* Control */ = { 222 | isa = PBXGroup; 223 | children = ( 224 | 84E606BA17931BB500194C76 /* CFIFrostedOverlayView.h */, 225 | 84E606BB17931BB500194C76 /* CFIFrostedOverlayView.m */, 226 | ); 227 | name = Control; 228 | sourceTree = ""; 229 | }; 230 | /* End PBXGroup section */ 231 | 232 | /* Begin PBXNativeTarget section */ 233 | 8442BCB8176E375A00F27E4D /* CFIFrostedOverlayView */ = { 234 | isa = PBXNativeTarget; 235 | buildConfigurationList = 8442BCEB176E375A00F27E4D /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayView" */; 236 | buildPhases = ( 237 | 8442BCB5176E375A00F27E4D /* Sources */, 238 | 8442BCB6176E375A00F27E4D /* Frameworks */, 239 | 8442BCB7176E375A00F27E4D /* Resources */, 240 | ); 241 | buildRules = ( 242 | ); 243 | dependencies = ( 244 | 84EECF83176E6E9000AA826F /* PBXTargetDependency */, 245 | ); 246 | name = CFIFrostedOverlayView; 247 | productName = CFIFrostedOverlayView; 248 | productReference = 8442BCB9176E375A00F27E4D /* CFIFrostedOverlayView.app */; 249 | productType = "com.apple.product-type.application"; 250 | }; 251 | 8442BCD9176E375A00F27E4D /* CFIFrostedOverlayViewTests */ = { 252 | isa = PBXNativeTarget; 253 | buildConfigurationList = 8442BCEE176E375A00F27E4D /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayViewTests" */; 254 | buildPhases = ( 255 | 8442BCD6176E375A00F27E4D /* Sources */, 256 | 8442BCD7176E375A00F27E4D /* Frameworks */, 257 | 8442BCD8176E375A00F27E4D /* Resources */, 258 | ); 259 | buildRules = ( 260 | ); 261 | dependencies = ( 262 | 8442BCE0176E375A00F27E4D /* PBXTargetDependency */, 263 | ); 264 | name = CFIFrostedOverlayViewTests; 265 | productName = CFIFrostedOverlayViewTests; 266 | productReference = 8442BCDA176E375A00F27E4D /* CFIFrostedOverlayViewTests.xctest */; 267 | productType = "com.apple.product-type.bundle.unit-test"; 268 | }; 269 | /* End PBXNativeTarget section */ 270 | 271 | /* Begin PBXProject section */ 272 | 8442BCB1176E375A00F27E4D /* Project object */ = { 273 | isa = PBXProject; 274 | attributes = { 275 | CLASSPREFIX = CFI; 276 | LastUpgradeCheck = 0500; 277 | ORGANIZATIONNAME = CodaFi; 278 | TargetAttributes = { 279 | 8442BCD9176E375A00F27E4D = { 280 | TestTargetID = 8442BCB8176E375A00F27E4D; 281 | }; 282 | }; 283 | }; 284 | buildConfigurationList = 8442BCB4176E375A00F27E4D /* Build configuration list for PBXProject "CFIFrostedOverlayView" */; 285 | compatibilityVersion = "Xcode 3.2"; 286 | developmentRegion = English; 287 | hasScannedForEncodings = 0; 288 | knownRegions = ( 289 | en, 290 | Base, 291 | ); 292 | mainGroup = 8442BCB0176E375A00F27E4D; 293 | productRefGroup = 8442BCBA176E375A00F27E4D /* Products */; 294 | projectDirPath = ""; 295 | projectReferences = ( 296 | { 297 | ProductGroup = 84EECF79176E6E8200AA826F /* Products */; 298 | ProjectRef = 84EECF78176E6E8200AA826F /* GPUImage.xcodeproj */; 299 | }, 300 | ); 301 | projectRoot = ""; 302 | targets = ( 303 | 8442BCB8176E375A00F27E4D /* CFIFrostedOverlayView */, 304 | 8442BCD9176E375A00F27E4D /* CFIFrostedOverlayViewTests */, 305 | ); 306 | }; 307 | /* End PBXProject section */ 308 | 309 | /* Begin PBXReferenceProxy section */ 310 | 84EECF7F176E6E8200AA826F /* libGPUImage.a */ = { 311 | isa = PBXReferenceProxy; 312 | fileType = archive.ar; 313 | path = libGPUImage.a; 314 | remoteRef = 84EECF7E176E6E8200AA826F /* PBXContainerItemProxy */; 315 | sourceTree = BUILT_PRODUCTS_DIR; 316 | }; 317 | 84EECF81176E6E8200AA826F /* GPUImageTests.octest */ = { 318 | isa = PBXReferenceProxy; 319 | fileType = wrapper.cfbundle; 320 | path = GPUImageTests.octest; 321 | remoteRef = 84EECF80176E6E8200AA826F /* PBXContainerItemProxy */; 322 | sourceTree = BUILT_PRODUCTS_DIR; 323 | }; 324 | /* End PBXReferenceProxy section */ 325 | 326 | /* Begin PBXResourcesBuildPhase section */ 327 | 8442BCB7176E375A00F27E4D /* Resources */ = { 328 | isa = PBXResourcesBuildPhase; 329 | buildActionMask = 2147483647; 330 | files = ( 331 | 84E606D31793349F00194C76 /* Wallpaper.png in Resources */, 332 | 8442BCC7176E375A00F27E4D /* InfoPlist.strings in Resources */, 333 | 84E606DF179335B600194C76 /* Default@2x.png in Resources */, 334 | 84E606DD179335B600194C76 /* Default-568h@2x.png in Resources */, 335 | 84E606DE179335B600194C76 /* Default.png in Resources */, 336 | ); 337 | runOnlyForDeploymentPostprocessing = 0; 338 | }; 339 | 8442BCD8176E375A00F27E4D /* Resources */ = { 340 | isa = PBXResourcesBuildPhase; 341 | buildActionMask = 2147483647; 342 | files = ( 343 | 8442BCE6176E375A00F27E4D /* InfoPlist.strings in Resources */, 344 | ); 345 | runOnlyForDeploymentPostprocessing = 0; 346 | }; 347 | /* End PBXResourcesBuildPhase section */ 348 | 349 | /* Begin PBXSourcesBuildPhase section */ 350 | 8442BCB5176E375A00F27E4D /* Sources */ = { 351 | isa = PBXSourcesBuildPhase; 352 | buildActionMask = 2147483647; 353 | files = ( 354 | 84E606BC17931BB500194C76 /* CFIFrostedOverlayView.m in Sources */, 355 | 8442BD0F176E3EEB00F27E4D /* EXTScope.m in Sources */, 356 | 84EECF65176E4E5E00AA826F /* CFIControlCenterView.m in Sources */, 357 | 84EECF76176E5C4B00AA826F /* CFIControlCenterCircleButton.m in Sources */, 358 | 8442BCC9176E375A00F27E4D /* main.m in Sources */, 359 | 8442BCD3176E375A00F27E4D /* CFIViewController.m in Sources */, 360 | 84EECF6A176E541500AA826F /* CFIControlCenterSquareButton.m in Sources */, 361 | 8442BCCD176E375A00F27E4D /* CFIAppDelegate.m in Sources */, 362 | ); 363 | runOnlyForDeploymentPostprocessing = 0; 364 | }; 365 | 8442BCD6176E375A00F27E4D /* Sources */ = { 366 | isa = PBXSourcesBuildPhase; 367 | buildActionMask = 2147483647; 368 | files = ( 369 | 8442BCE8176E375A00F27E4D /* CFIFrostedOverlayViewTests.m in Sources */, 370 | ); 371 | runOnlyForDeploymentPostprocessing = 0; 372 | }; 373 | /* End PBXSourcesBuildPhase section */ 374 | 375 | /* Begin PBXTargetDependency section */ 376 | 8442BCE0176E375A00F27E4D /* PBXTargetDependency */ = { 377 | isa = PBXTargetDependency; 378 | target = 8442BCB8176E375A00F27E4D /* CFIFrostedOverlayView */; 379 | targetProxy = 8442BCDF176E375A00F27E4D /* PBXContainerItemProxy */; 380 | }; 381 | 84EECF83176E6E9000AA826F /* PBXTargetDependency */ = { 382 | isa = PBXTargetDependency; 383 | name = GPUImage; 384 | targetProxy = 84EECF82176E6E9000AA826F /* PBXContainerItemProxy */; 385 | }; 386 | /* End PBXTargetDependency section */ 387 | 388 | /* Begin PBXVariantGroup section */ 389 | 8442BCC5176E375A00F27E4D /* InfoPlist.strings */ = { 390 | isa = PBXVariantGroup; 391 | children = ( 392 | 8442BCC6176E375A00F27E4D /* en */, 393 | ); 394 | name = InfoPlist.strings; 395 | sourceTree = ""; 396 | }; 397 | 8442BCE4176E375A00F27E4D /* InfoPlist.strings */ = { 398 | isa = PBXVariantGroup; 399 | children = ( 400 | 8442BCE5176E375A00F27E4D /* en */, 401 | ); 402 | name = InfoPlist.strings; 403 | sourceTree = ""; 404 | }; 405 | /* End PBXVariantGroup section */ 406 | 407 | /* Begin XCBuildConfiguration section */ 408 | 8442BCE9176E375A00F27E4D /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | buildSettings = { 411 | ALWAYS_SEARCH_USER_PATHS = NO; 412 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 413 | CLANG_CXX_LIBRARY = "libc++"; 414 | CLANG_ENABLE_MODULES = YES; 415 | CLANG_ENABLE_OBJC_ARC = YES; 416 | CLANG_WARN_BOOL_CONVERSION = YES; 417 | CLANG_WARN_CONSTANT_CONVERSION = YES; 418 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 419 | CLANG_WARN_EMPTY_BODY = YES; 420 | CLANG_WARN_ENUM_CONVERSION = YES; 421 | CLANG_WARN_INT_CONVERSION = YES; 422 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 423 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 424 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 425 | COPY_PHASE_STRIP = NO; 426 | GCC_C_LANGUAGE_STANDARD = gnu99; 427 | GCC_DYNAMIC_NO_PIC = NO; 428 | GCC_OPTIMIZATION_LEVEL = 0; 429 | GCC_PREPROCESSOR_DEFINITIONS = ( 430 | "DEBUG=1", 431 | "$(inherited)", 432 | ); 433 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 434 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 435 | GCC_WARN_UNDECLARED_SELECTOR = YES; 436 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 437 | GCC_WARN_UNUSED_FUNCTION = YES; 438 | GCC_WARN_UNUSED_VARIABLE = YES; 439 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 440 | ONLY_ACTIVE_ARCH = YES; 441 | SDKROOT = iphoneos; 442 | }; 443 | name = Debug; 444 | }; 445 | 8442BCEA176E375A00F27E4D /* Release */ = { 446 | isa = XCBuildConfiguration; 447 | buildSettings = { 448 | ALWAYS_SEARCH_USER_PATHS = NO; 449 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 450 | CLANG_CXX_LIBRARY = "libc++"; 451 | CLANG_ENABLE_MODULES = YES; 452 | CLANG_ENABLE_OBJC_ARC = YES; 453 | CLANG_WARN_BOOL_CONVERSION = YES; 454 | CLANG_WARN_CONSTANT_CONVERSION = YES; 455 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 456 | CLANG_WARN_EMPTY_BODY = YES; 457 | CLANG_WARN_ENUM_CONVERSION = YES; 458 | CLANG_WARN_INT_CONVERSION = YES; 459 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 460 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 461 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 462 | COPY_PHASE_STRIP = YES; 463 | ENABLE_NS_ASSERTIONS = NO; 464 | GCC_C_LANGUAGE_STANDARD = gnu99; 465 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 466 | GCC_WARN_UNDECLARED_SELECTOR = YES; 467 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 468 | GCC_WARN_UNUSED_FUNCTION = YES; 469 | GCC_WARN_UNUSED_VARIABLE = YES; 470 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 471 | SDKROOT = iphoneos; 472 | VALIDATE_PRODUCT = YES; 473 | }; 474 | name = Release; 475 | }; 476 | 8442BCEC176E375A00F27E4D /* Debug */ = { 477 | isa = XCBuildConfiguration; 478 | buildSettings = { 479 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 480 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView/CFIFrostedOverlayView-Prefix.pch"; 481 | HEADER_SEARCH_PATHS = "\"$(SRCROOT)/External/GPUImage/framework/Source\"/**"; 482 | INFOPLIST_FILE = "CFIFrostedOverlayView/CFIFrostedOverlayView-Info.plist"; 483 | PRODUCT_NAME = "$(TARGET_NAME)"; 484 | WRAPPER_EXTENSION = app; 485 | }; 486 | name = Debug; 487 | }; 488 | 8442BCED176E375A00F27E4D /* Release */ = { 489 | isa = XCBuildConfiguration; 490 | buildSettings = { 491 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 492 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView/CFIFrostedOverlayView-Prefix.pch"; 493 | HEADER_SEARCH_PATHS = "\"$(SRCROOT)/External/GPUImage/framework/Source\"/**"; 494 | INFOPLIST_FILE = "CFIFrostedOverlayView/CFIFrostedOverlayView-Info.plist"; 495 | PRODUCT_NAME = "$(TARGET_NAME)"; 496 | WRAPPER_EXTENSION = app; 497 | }; 498 | name = Release; 499 | }; 500 | 8442BCEF176E375A00F27E4D /* Debug */ = { 501 | isa = XCBuildConfiguration; 502 | buildSettings = { 503 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/CFIFrostedOverlayView.app/CFIFrostedOverlayView"; 504 | FRAMEWORK_SEARCH_PATHS = ( 505 | "$(SDKROOT)/Developer/Library/Frameworks", 506 | "$(inherited)", 507 | "$(SYSTEM_APPS_DIR)/Xcode5-DP.app/Contents/Developer/Library/Frameworks", 508 | ); 509 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 510 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView/CFIFrostedOverlayView-Prefix.pch"; 511 | GCC_PREPROCESSOR_DEFINITIONS = ( 512 | "DEBUG=1", 513 | "$(inherited)", 514 | ); 515 | INFOPLIST_FILE = "CFIFrostedOverlayViewTests/CFIFrostedOverlayViewTests-Info.plist"; 516 | PRODUCT_NAME = "$(TARGET_NAME)"; 517 | TEST_HOST = "$(BUNDLE_LOADER)"; 518 | WRAPPER_EXTENSION = xctest; 519 | }; 520 | name = Debug; 521 | }; 522 | 8442BCF0176E375A00F27E4D /* Release */ = { 523 | isa = XCBuildConfiguration; 524 | buildSettings = { 525 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/CFIFrostedOverlayView.app/CFIFrostedOverlayView"; 526 | FRAMEWORK_SEARCH_PATHS = ( 527 | "$(SDKROOT)/Developer/Library/Frameworks", 528 | "$(inherited)", 529 | "$(SYSTEM_APPS_DIR)/Xcode5-DP.app/Contents/Developer/Library/Frameworks", 530 | ); 531 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 532 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView/CFIFrostedOverlayView-Prefix.pch"; 533 | INFOPLIST_FILE = "CFIFrostedOverlayViewTests/CFIFrostedOverlayViewTests-Info.plist"; 534 | PRODUCT_NAME = "$(TARGET_NAME)"; 535 | TEST_HOST = "$(BUNDLE_LOADER)"; 536 | WRAPPER_EXTENSION = xctest; 537 | }; 538 | name = Release; 539 | }; 540 | /* End XCBuildConfiguration section */ 541 | 542 | /* Begin XCConfigurationList section */ 543 | 8442BCB4176E375A00F27E4D /* Build configuration list for PBXProject "CFIFrostedOverlayView" */ = { 544 | isa = XCConfigurationList; 545 | buildConfigurations = ( 546 | 8442BCE9176E375A00F27E4D /* Debug */, 547 | 8442BCEA176E375A00F27E4D /* Release */, 548 | ); 549 | defaultConfigurationIsVisible = 0; 550 | defaultConfigurationName = Release; 551 | }; 552 | 8442BCEB176E375A00F27E4D /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayView" */ = { 553 | isa = XCConfigurationList; 554 | buildConfigurations = ( 555 | 8442BCEC176E375A00F27E4D /* Debug */, 556 | 8442BCED176E375A00F27E4D /* Release */, 557 | ); 558 | defaultConfigurationIsVisible = 0; 559 | defaultConfigurationName = Release; 560 | }; 561 | 8442BCEE176E375A00F27E4D /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayViewTests" */ = { 562 | isa = XCConfigurationList; 563 | buildConfigurations = ( 564 | 8442BCEF176E375A00F27E4D /* Debug */, 565 | 8442BCF0176E375A00F27E4D /* Release */, 566 | ); 567 | defaultConfigurationIsVisible = 0; 568 | defaultConfigurationName = Release; 569 | }; 570 | /* End XCConfigurationList section */ 571 | }; 572 | rootObject = 8442BCB1176E375A00F27E4D /* Project object */; 573 | } 574 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIAppDelegate.h 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class CFIViewController; 12 | 13 | @interface CFIAppDelegate : UIResponder 14 | 15 | @property (strong, nonatomic) UIWindow *window; 16 | @property (strong, nonatomic) CFIViewController *mainViewController; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIAppDelegate.m 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIAppDelegate.h" 10 | #import "CFIViewController.h" 11 | 12 | @implementation CFIAppDelegate 13 | 14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 15 | { 16 | self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 17 | self.window.backgroundColor = [UIColor whiteColor]; 18 | [self.window makeKeyAndVisible]; 19 | 20 | self.mainViewController = [[CFIViewController alloc]init]; 21 | [self.window setRootViewController:self.mainViewController]; 22 | 23 | return YES; 24 | } 25 | 26 | - (void)applicationWillResignActive:(UIApplication *)application 27 | { 28 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 29 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 30 | } 31 | 32 | - (void)applicationDidEnterBackground:(UIApplication *)application 33 | { 34 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 35 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 36 | } 37 | 38 | - (void)applicationWillEnterForeground:(UIApplication *)application 39 | { 40 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 41 | } 42 | 43 | - (void)applicationDidBecomeActive:(UIApplication *)application 44 | { 45 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 46 | } 47 | 48 | - (void)applicationWillTerminate:(UIApplication *)application 49 | { 50 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIControlCenterCircleButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIControlCenterCircleButton.h 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIControlCenterCircleButton : UIButton 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIControlCenterCircleButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIControlCenterCircleButton.m 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIControlCenterCircleButton.h" 10 | 11 | @implementation CFIControlCenterCircleButton 12 | 13 | - (id)initWithFrame:(CGRect)frame { 14 | self = [super initWithFrame:frame]; 15 | 16 | self.layer.borderWidth = 1.f; 17 | self.layer.borderColor = UIColor.blackColor.CGColor; 18 | self.layer.cornerRadius = 20; 19 | 20 | return self; 21 | } 22 | 23 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 24 | [super touchesBegan:touches withEvent:event]; 25 | 26 | self.layer.borderColor = UIColor.whiteColor.CGColor; 27 | [self setNeedsDisplay]; 28 | } 29 | 30 | - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 31 | [super touchesEnded:touches withEvent:event]; 32 | 33 | self.layer.borderColor = UIColor.blackColor.CGColor; 34 | [self setNeedsDisplay]; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIControlCenterSquareButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIControlCenterSquareButton.h 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIControlCenterSquareButton : UIButton 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIControlCenterSquareButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIControlCenterSquareButton.m 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIControlCenterSquareButton.h" 10 | 11 | @implementation CFIControlCenterSquareButton 12 | 13 | - (id)initWithFrame:(CGRect)frame { 14 | self = [super initWithFrame:frame]; 15 | 16 | self.layer.borderWidth = 1.f; 17 | self.layer.borderColor = UIColor.blackColor.CGColor; 18 | self.layer.cornerRadius = 8; 19 | 20 | return self; 21 | } 22 | 23 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 24 | [super touchesBegan:touches withEvent:event]; 25 | 26 | self.layer.borderColor = UIColor.whiteColor.CGColor; 27 | [self setNeedsDisplay]; 28 | } 29 | 30 | - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 31 | [super touchesEnded:touches withEvent:event]; 32 | 33 | self.layer.borderColor = UIColor.blackColor.CGColor; 34 | [self setNeedsDisplay]; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIControlCenterView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIControlCenterView.h 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIFrostedOverlayView.h" 10 | 11 | @interface CFIControlCenterView : CFIFrostedOverlayView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIControlCenterView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIControlCenterView.m 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIControlCenterView.h" 10 | #import "CFIControlCenterSquareButton.h" 11 | #import "CFIControlCenterCircleButton.h" 12 | #import "EXTScope.h" 13 | 14 | @interface CFIControlCenterView () 15 | 16 | @property (nonatomic, strong) CFIControlCenterSquareButton *flashLightButton; 17 | @property (nonatomic, strong) CFIControlCenterSquareButton *stopwatchButton; 18 | @property (nonatomic, strong) CFIControlCenterSquareButton *calculatorButton; 19 | @property (nonatomic, strong) CFIControlCenterSquareButton *cameraButton; 20 | 21 | @property (nonatomic, strong) CFIControlCenterCircleButton *airplaneModeButton; 22 | @property (nonatomic, strong) CFIControlCenterCircleButton *wifiButton; 23 | @property (nonatomic, strong) CFIControlCenterCircleButton *bluetoothButton; 24 | @property (nonatomic, strong) CFIControlCenterCircleButton *doNotDisturbButton; 25 | @property (nonatomic, strong) CFIControlCenterCircleButton *rotationLockButton; 26 | 27 | @property (nonatomic, strong) UISlider *brightnessSlider; 28 | 29 | 30 | @property (nonatomic, strong) CFILayerDelegate *tintLayerDelegate; 31 | 32 | @end 33 | 34 | @implementation CFIControlCenterView 35 | 36 | - (id)initWithFrame:(CGRect)frame { 37 | self = [super initWithFrame:frame]; 38 | 39 | _flashLightButton = [[CFIControlCenterSquareButton alloc]initWithFrame:(CGRect){ .origin.y = CGRectGetHeight(self.bounds) - 70, .origin.x = 25, .size = { 50, 50 } }]; 40 | _stopwatchButton = [[CFIControlCenterSquareButton alloc]initWithFrame:(CGRect){ .origin.y = CGRectGetHeight(self.bounds) - 70, .origin.x = 100, .size = { 50, 50 } }]; 41 | _calculatorButton = [[CFIControlCenterSquareButton alloc]initWithFrame:(CGRect){ .origin.y = CGRectGetHeight(self.bounds) - 70, .origin.x = 175, .size = { 50, 50 } }]; 42 | _cameraButton = [[CFIControlCenterSquareButton alloc]initWithFrame:(CGRect){ .origin.y = CGRectGetHeight(self.bounds) - 70, .origin.x = 250, .size = { 50, 50 } }]; 43 | 44 | _airplaneModeButton = [[CFIControlCenterCircleButton alloc]initWithFrame:(CGRect){ .origin.y = 40, .origin.x = 30, .size = { 40, 40 } }]; 45 | _wifiButton = [[CFIControlCenterCircleButton alloc]initWithFrame:(CGRect){ .origin.y = 40, .origin.x = 85, .size = { 40, 40 } }]; 46 | _bluetoothButton = [[CFIControlCenterCircleButton alloc]initWithFrame:(CGRect){ .origin.y = 40, .origin.x = 140, .size = { 40, 40 } }]; 47 | _doNotDisturbButton = [[CFIControlCenterCircleButton alloc]initWithFrame:(CGRect){ .origin.y = 40, .origin.x = 195, .size = { 40, 40 } }]; 48 | _rotationLockButton = [[CFIControlCenterCircleButton alloc]initWithFrame:(CGRect){ .origin.y = 40, .origin.x = 250, .size = { 40, 40 } }]; 49 | 50 | _brightnessSlider = [[UISlider alloc]initWithFrame:(CGRect){ .origin.y = 96, .origin.x = 48, .size = { 220, 32 } }]; 51 | _brightnessSlider.minimumTrackTintColor = UIColor.whiteColor; 52 | _brightnessSlider.maximumTrackTintColor = UIColor.blackColor; 53 | 54 | [self addSubview:_flashLightButton]; 55 | [self addSubview:_stopwatchButton]; 56 | [self addSubview:_calculatorButton]; 57 | [self addSubview:_cameraButton]; 58 | 59 | [self addSubview:_airplaneModeButton]; 60 | [self addSubview:_wifiButton]; 61 | [self addSubview:_bluetoothButton]; 62 | [self addSubview:_doNotDisturbButton]; 63 | [self addSubview:_rotationLockButton]; 64 | 65 | [self addSubview:_brightnessSlider]; 66 | 67 | _tintLayerDelegate = [[CFILayerDelegate alloc]initWithLayer:self.tintLayer]; 68 | @weakify(self); 69 | _tintLayerDelegate.drawRect = ^(CALayer *layer, CGContextRef currentContext) { 70 | @strongify(self); 71 | CGRect b = self.bounds; 72 | CGContextSetStrokeColor(currentContext, (CGFloat[4]){ 0.f, 0.f, 0.f, 1.f }); 73 | CGContextSetLineWidth(currentContext, 2.f); 74 | CGContextMoveToPoint(currentContext, 0, 94); 75 | CGContextAddLineToPoint(currentContext, CGRectGetWidth(b), 94); 76 | CGContextStrokePath(currentContext); 77 | 78 | CGContextSetLineWidth(currentContext, 2.f); 79 | CGContextMoveToPoint(currentContext, 0, 130); 80 | CGContextAddLineToPoint(currentContext, CGRectGetWidth(b), 130); 81 | CGContextStrokePath(currentContext); 82 | 83 | CGContextBeginPath(currentContext); 84 | CGContextMoveToPoint(currentContext, 0, CGRectGetHeight(self.bounds) - 90); 85 | CGContextAddLineToPoint(currentContext, CGRectGetWidth(b), CGRectGetHeight(self.bounds) - 90); 86 | CGContextStrokePath(currentContext); 87 | }; 88 | return self; 89 | } 90 | 91 | - (void)drawRect:(CGRect)rect { 92 | [self.tintLayer setNeedsDisplay]; 93 | [super drawRect:rect]; 94 | } 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIFrostedOverlayView-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.codafi.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIFrostedOverlayView-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #import 17 | #endif 18 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIViewController.h 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/CFIViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIViewController.m 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIViewController.h" 10 | #import "CFIControlCenterView.h" 11 | 12 | @interface CFIViewController () 13 | @property (nonatomic, strong) UIImageView *backgroundImageView; 14 | @property (nonatomic, strong) UIPanGestureRecognizer *bottomUpPanGestureRecognizer; 15 | @property (nonatomic, strong) CFIControlCenterView *controlCenter; 16 | 17 | @end 18 | 19 | @implementation CFIViewController { 20 | float oldY, delta; 21 | BOOL allowPanning; 22 | } 23 | 24 | - (void)viewDidLoad 25 | { 26 | [super viewDidLoad]; 27 | self.backgroundImageView = [[UIImageView alloc]initWithFrame:self.view.bounds]; 28 | self.backgroundImageView.image = [UIImage imageNamed:@"Wallpaper"]; 29 | [self.view addSubview:self.backgroundImageView]; 30 | 31 | self.controlCenter = [[CFIControlCenterView alloc]initWithFrame:CGRectOffset(CGRectInset(self.view.bounds, 0, 10), 0, CGRectGetHeight(self.view.bounds))]; 32 | self.controlCenter.offset = 20.f; 33 | self.controlCenter.autoresizingMask = UIViewAutoresizingFlexibleWidth; 34 | [self.view addSubview:self.controlCenter]; 35 | self.controlCenter.viewToBlur = self.view; 36 | } 37 | 38 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 39 | [super touchesBegan:touches withEvent:event]; 40 | CGPoint touchLocation = [(UITouch *)[touches anyObject] locationInView:self.view]; 41 | BOOL intersectsBottom = CGRectContainsPoint((CGRect){ .origin.y = CGRectGetHeight(self.view.bounds) - 10, .size.width = CGRectGetWidth(self.view.bounds), .size.height = 10 }, touchLocation); 42 | BOOL intersectsTop = CGRectContainsPoint(self.controlCenter.frame, touchLocation); 43 | allowPanning = intersectsBottom | intersectsTop; 44 | if (allowPanning) { 45 | oldY = touchLocation.y; 46 | } 47 | } 48 | 49 | - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 50 | [super touchesMoved:touches withEvent:event]; 51 | if (allowPanning) { 52 | CGPoint touchLocation = [(UITouch *)[touches anyObject] locationInView:self.view]; 53 | if (touchLocation.y > 20) { 54 | delta = touchLocation.y - oldY; 55 | CGRect newFrame = self.controlCenter.frame; 56 | newFrame.origin.y = touchLocation.y; 57 | self.controlCenter.frame = newFrame; 58 | } 59 | } 60 | } 61 | 62 | - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 63 | [super touchesEnded:touches withEvent:event]; 64 | if (allowPanning) { 65 | [UIView animateWithDuration:0.3 delay:0.f options:UIViewAnimationOptionCurveEaseOut animations:^{ 66 | CGRect frame = self.controlCenter.frame; 67 | frame.origin.y = (delta <= 0) ? 20 : CGRectGetHeight(self.view.bounds); 68 | [self.controlCenter setFrame:frame]; 69 | } completion:^(BOOL finished) { 70 | 71 | }]; 72 | } 73 | allowPanning = NO; 74 | } 75 | 76 | - (void)viewWillLayoutSubviews { 77 | self.backgroundImageView.frame = self.view.bounds; 78 | } 79 | 80 | @end 81 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/EXTScope.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXTScope.h 3 | // extobjc 4 | // 5 | // Created by Justin Spahr-Summers on 2011-05-04. 6 | // Copyright (C) 2012 Justin Spahr-Summers. 7 | // Released under the MIT license. 8 | // 9 | 10 | #import "metamacros.h" 11 | 12 | /** 13 | * \@onExit defines some code to be executed when the current scope exits. The 14 | * code must be enclosed in braces and terminated with a semicolon, and will be 15 | * executed regardless of how the scope is exited, including from exceptions, 16 | * \c goto, \c return, \c break, and \c continue. 17 | * 18 | * Provided code will go into a block to be executed later. Keep this in mind as 19 | * it pertains to memory management, restrictions on assignment, etc. Because 20 | * the code is used within a block, \c return is a legal (though perhaps 21 | * confusing) way to exit the cleanup block early. 22 | * 23 | * Multiple \@onExit statements in the same scope are executed in reverse 24 | * lexical order. This helps when pairing resource acquisition with \@onExit 25 | * statements, as it guarantees teardown in the opposite order of acquisition. 26 | * 27 | * @note This statement cannot be used within scopes defined without braces 28 | * (like a one line \c if). In practice, this is not an issue, since \@onExit is 29 | * a useless construct in such a case anyways. 30 | */ 31 | #define onExit \ 32 | try {} @finally {} \ 33 | __strong ext_cleanupBlock_t metamacro_concat(ext_exitBlock_, __LINE__) __attribute__((cleanup(ext_executeCleanupBlock), unused)) = ^ 34 | 35 | /** 36 | * Creates \c __weak shadow variables for each of the variables provided as 37 | * arguments, which can later be made strong again with #strongify. 38 | * 39 | * This is typically used to weakly reference variables in a block, but then 40 | * ensure that the variables stay alive during the actual execution of the block 41 | * (if they were live upon entry). 42 | * 43 | * See #strongify for an example of usage. 44 | */ 45 | #define weakify(...) \ 46 | try {} @finally {} \ 47 | metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__) 48 | 49 | /** 50 | * Like #weakify, but uses \c __unsafe_unretained instead, for targets or 51 | * classes that do not support weak references. 52 | */ 53 | #define unsafeify(...) \ 54 | try {} @finally {} \ 55 | metamacro_foreach_cxt(ext_weakify_,, __unsafe_unretained, __VA_ARGS__) 56 | 57 | /** 58 | * Strongly references each of the variables provided as arguments, which must 59 | * have previously been passed to #weakify. 60 | * 61 | * The strong references created will shadow the original variable names, such 62 | * that the original names can be used without issue (and a significantly 63 | * reduced risk of retain cycles) in the current scope. 64 | * 65 | * @code 66 | 67 | id foo = [[NSObject alloc] init]; 68 | id bar = [[NSObject alloc] init]; 69 | 70 | @weakify(foo, bar); 71 | 72 | // this block will not keep 'foo' or 'bar' alive 73 | BOOL (^matchesFooOrBar)(id) = ^ BOOL (id obj){ 74 | // but now, upon entry, 'foo' and 'bar' will stay alive until the block has 75 | // finished executing 76 | @strongify(foo, bar); 77 | 78 | return [foo isEqual:obj] || [bar isEqual:obj]; 79 | }; 80 | 81 | * @endcode 82 | */ 83 | #define strongify(...) \ 84 | try {} @finally {} \ 85 | _Pragma("clang diagnostic push") \ 86 | _Pragma("clang diagnostic ignored \"-Wshadow\"") \ 87 | metamacro_foreach(ext_strongify_,, __VA_ARGS__) \ 88 | _Pragma("clang diagnostic pop") 89 | 90 | /*** implementation details follow ***/ 91 | typedef void (^ext_cleanupBlock_t)(); 92 | 93 | void ext_executeCleanupBlock (__strong ext_cleanupBlock_t *block); 94 | 95 | #define ext_weakify_(INDEX, CONTEXT, VAR) \ 96 | CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR); 97 | 98 | #define ext_strongify_(INDEX, VAR) \ 99 | __strong __typeof__(VAR) VAR = metamacro_concat(VAR, _weak_); -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/EXTScope.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXTScope.m 3 | // extobjc 4 | // 5 | // Created by Justin Spahr-Summers on 2011-05-04. 6 | // Copyright (C) 2012 Justin Spahr-Summers. 7 | // Released under the MIT license. 8 | // 9 | 10 | #import "EXTScope.h" 11 | 12 | void ext_executeCleanupBlock (__strong ext_cleanupBlock_t *block) { 13 | (*block)(); 14 | } 15 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CFIFrostedOverlayView 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "CFIAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([CFIAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayView/metamacros.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Macros for metaprogramming 3 | * ExtendedC 4 | * 5 | * Copyright (C) 2012 Justin Spahr-Summers 6 | * Released under the MIT license 7 | */ 8 | 9 | #ifndef EXTC_METAMACROS_H 10 | #define EXTC_METAMACROS_H 11 | 12 | #ifdef HAVE_CONFIG_H 13 | #include "config.h" 14 | #endif 15 | 16 | /** 17 | * Executes one or more expressions (which may have a void type, such as a call 18 | * to a function that returns no value) and always returns true. 19 | */ 20 | #define metamacro_exprify(...) \ 21 | ((__VA_ARGS__), true) 22 | 23 | /** 24 | * Returns a string representation of VALUE after full macro expansion. 25 | */ 26 | #define metamacro_stringify(VALUE) \ 27 | metamacro_stringify_(VALUE) 28 | 29 | /** 30 | * Returns A and B concatenated after full macro expansion. 31 | */ 32 | #define metamacro_concat(A, B) \ 33 | metamacro_concat_(A, B) 34 | 35 | /** 36 | * Returns the Nth variadic argument (starting from zero). At least 37 | * N + 1 variadic arguments must be given. N must be between zero and twenty, 38 | * inclusive. 39 | */ 40 | #define metamacro_at(N, ...) \ 41 | metamacro_concat(metamacro_at, N)(__VA_ARGS__) 42 | 43 | /** 44 | * Returns the number of arguments (up to twenty) provided to the macro. At 45 | * least one argument must be provided. 46 | * 47 | * Inspired by P99: http://p99.gforge.inria.fr 48 | */ 49 | #define metamacro_argcount(...) \ 50 | metamacro_at(20, __VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) 51 | 52 | /** 53 | * Identical to #metamacro_foreach_cxt, except that no CONTEXT argument is 54 | * given. Only the index and current argument will thus be passed to MACRO. 55 | */ 56 | #define metamacro_foreach(MACRO, SEP, ...) \ 57 | metamacro_foreach_cxt(metamacro_foreach_iter, SEP, MACRO, __VA_ARGS__) 58 | 59 | /** 60 | * For each consecutive variadic argument (up to twenty), MACRO is passed the 61 | * zero-based index of the current argument, CONTEXT, and then the argument 62 | * itself. The results of adjoining invocations of MACRO are then separated by 63 | * SEP. 64 | * 65 | * Inspired by P99: http://p99.gforge.inria.fr 66 | */ 67 | #define metamacro_foreach_cxt(MACRO, SEP, CONTEXT, ...) \ 68 | metamacro_concat(metamacro_foreach_cxt, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) 69 | 70 | /** 71 | * Identical to #metamacro_foreach_cxt. This can be used when the former would 72 | * fail due to recursive macro expansion. 73 | */ 74 | #define metamacro_foreach_cxt_recursive(MACRO, SEP, CONTEXT, ...) \ 75 | metamacro_concat(metamacro_foreach_cxt_recursive, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) 76 | 77 | /** 78 | * In consecutive order, appends each variadic argument (up to twenty) onto 79 | * BASE. The resulting concatenations are then separated by SEP. 80 | * 81 | * This is primarily useful to manipulate a list of macro invocations into instead 82 | * invoking a different, possibly related macro. 83 | */ 84 | #define metamacro_foreach_concat(BASE, SEP, ...) \ 85 | metamacro_foreach_cxt(metamacro_foreach_concat_iter, SEP, BASE, __VA_ARGS__) 86 | 87 | /** 88 | * Iterates COUNT times, each time invoking MACRO with the current index 89 | * (starting at zero) and CONTEXT. The results of adjoining invocations of MACRO 90 | * are then separated by SEP. 91 | * 92 | * COUNT must be an integer between zero and twenty, inclusive. 93 | */ 94 | #define metamacro_for_cxt(COUNT, MACRO, SEP, CONTEXT) \ 95 | metamacro_concat(metamacro_for_cxt, COUNT)(MACRO, SEP, CONTEXT) 96 | 97 | /** 98 | * Returns the first argument given. At least one argument must be provided. 99 | * 100 | * This is useful when implementing a variadic macro, where you may have only 101 | * one variadic argument, but no way to retrieve it (for example, because \c ... 102 | * always needs to match at least one argument). 103 | * 104 | * @code 105 | 106 | #define varmacro(...) \ 107 | metamacro_head(__VA_ARGS__) 108 | 109 | * @endcode 110 | */ 111 | #define metamacro_head(...) \ 112 | metamacro_head_(__VA_ARGS__, 0) 113 | 114 | /** 115 | * Returns every argument except the first. At least two arguments must be 116 | * provided. 117 | */ 118 | #define metamacro_tail(...) \ 119 | metamacro_tail_(__VA_ARGS__) 120 | 121 | /** 122 | * Returns the first N (up to twenty) variadic arguments as a new argument list. 123 | * At least N variadic arguments must be provided. 124 | */ 125 | #define metamacro_take(N, ...) \ 126 | metamacro_concat(metamacro_take, N)(__VA_ARGS__) 127 | 128 | /** 129 | * Removes the first N (up to twenty) variadic arguments from the given argument 130 | * list. At least N variadic arguments must be provided. 131 | */ 132 | #define metamacro_drop(N, ...) \ 133 | metamacro_concat(metamacro_drop, N)(__VA_ARGS__) 134 | 135 | /** 136 | * Decrements VAL, which must be a number between zero and twenty, inclusive. 137 | * 138 | * This is primarily useful when dealing with indexes and counts in 139 | * metaprogramming. 140 | */ 141 | #define metamacro_dec(VAL) \ 142 | metamacro_at(VAL, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) 143 | 144 | /** 145 | * Increments VAL, which must be a number between zero and twenty, inclusive. 146 | * 147 | * This is primarily useful when dealing with indexes and counts in 148 | * metaprogramming. 149 | */ 150 | #define metamacro_inc(VAL) \ 151 | metamacro_at(VAL, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) 152 | 153 | /** 154 | * If A is equal to B, the next argument list is expanded; otherwise, the 155 | * argument list after that is expanded. A and B must be numbers between zero 156 | * and twenty, inclusive. Additionally, B must be greater than or equal to A. 157 | * 158 | * @code 159 | 160 | // expands to true 161 | metamacro_if_eq(0, 0)(true)(false) 162 | 163 | // expands to false 164 | metamacro_if_eq(0, 1)(true)(false) 165 | 166 | * @endcode 167 | * 168 | * This is primarily useful when dealing with indexes and counts in 169 | * metaprogramming. 170 | */ 171 | #define metamacro_if_eq(A, B) \ 172 | metamacro_concat(metamacro_if_eq, A)(B) 173 | 174 | /** 175 | * Identical to #metamacro_if_eq. This can be used when the former would fail 176 | * due to recursive macro expansion. 177 | */ 178 | #define metamacro_if_eq_recursive(A, B) \ 179 | metamacro_concat(metamacro_if_eq_recursive, A)(B) 180 | 181 | /** 182 | * Returns 1 if N is an even number, or 0 otherwise. N must be between zero and 183 | * twenty, inclusive. 184 | * 185 | * For the purposes of this test, zero is considered even. 186 | */ 187 | #define metamacro_is_even(N) \ 188 | metamacro_at(N, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1) 189 | 190 | /** 191 | * Returns the logical NOT of B, which must be the number zero or one. 192 | */ 193 | #define metamacro_not(B) \ 194 | metamacro_at(B, 1, 0) 195 | 196 | // IMPLEMENTATION DETAILS FOLLOW! 197 | // Do not write code that depends on anything below this line. 198 | #define metamacro_stringify_(VALUE) # VALUE 199 | #define metamacro_concat_(A, B) A ## B 200 | #define metamacro_foreach_iter(INDEX, MACRO, ARG) MACRO(INDEX, ARG) 201 | #define metamacro_head_(FIRST, ...) FIRST 202 | #define metamacro_tail_(FIRST, ...) __VA_ARGS__ 203 | #define metamacro_consume_(...) 204 | #define metamacro_expand_(...) __VA_ARGS__ 205 | 206 | // implemented from scratch so that metamacro_concat() doesn't end up nesting 207 | #define metamacro_foreach_concat_iter(INDEX, BASE, ARG) metamacro_foreach_concat_iter_(BASE, ARG) 208 | #define metamacro_foreach_concat_iter_(BASE, ARG) BASE ## ARG 209 | 210 | // metamacro_at expansions 211 | #define metamacro_at0(...) metamacro_head(__VA_ARGS__) 212 | #define metamacro_at1(_0, ...) metamacro_head(__VA_ARGS__) 213 | #define metamacro_at2(_0, _1, ...) metamacro_head(__VA_ARGS__) 214 | #define metamacro_at3(_0, _1, _2, ...) metamacro_head(__VA_ARGS__) 215 | #define metamacro_at4(_0, _1, _2, _3, ...) metamacro_head(__VA_ARGS__) 216 | #define metamacro_at5(_0, _1, _2, _3, _4, ...) metamacro_head(__VA_ARGS__) 217 | #define metamacro_at6(_0, _1, _2, _3, _4, _5, ...) metamacro_head(__VA_ARGS__) 218 | #define metamacro_at7(_0, _1, _2, _3, _4, _5, _6, ...) metamacro_head(__VA_ARGS__) 219 | #define metamacro_at8(_0, _1, _2, _3, _4, _5, _6, _7, ...) metamacro_head(__VA_ARGS__) 220 | #define metamacro_at9(_0, _1, _2, _3, _4, _5, _6, _7, _8, ...) metamacro_head(__VA_ARGS__) 221 | #define metamacro_at10(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, ...) metamacro_head(__VA_ARGS__) 222 | #define metamacro_at11(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) metamacro_head(__VA_ARGS__) 223 | #define metamacro_at12(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) metamacro_head(__VA_ARGS__) 224 | #define metamacro_at13(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) metamacro_head(__VA_ARGS__) 225 | #define metamacro_at14(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) metamacro_head(__VA_ARGS__) 226 | #define metamacro_at15(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) metamacro_head(__VA_ARGS__) 227 | #define metamacro_at16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) metamacro_head(__VA_ARGS__) 228 | #define metamacro_at17(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) metamacro_head(__VA_ARGS__) 229 | #define metamacro_at18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) metamacro_head(__VA_ARGS__) 230 | #define metamacro_at19(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) metamacro_head(__VA_ARGS__) 231 | #define metamacro_at20(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) metamacro_head(__VA_ARGS__) 232 | 233 | // metamacro_foreach_cxt expansions 234 | #define metamacro_foreach_cxt0(MACRO, SEP, CONTEXT) 235 | #define metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) 236 | 237 | #define metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ 238 | metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) \ 239 | SEP \ 240 | MACRO(1, CONTEXT, _1) 241 | 242 | #define metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ 243 | metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ 244 | SEP \ 245 | MACRO(2, CONTEXT, _2) 246 | 247 | #define metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ 248 | metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ 249 | SEP \ 250 | MACRO(3, CONTEXT, _3) 251 | 252 | #define metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ 253 | metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ 254 | SEP \ 255 | MACRO(4, CONTEXT, _4) 256 | 257 | #define metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ 258 | metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ 259 | SEP \ 260 | MACRO(5, CONTEXT, _5) 261 | 262 | #define metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ 263 | metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ 264 | SEP \ 265 | MACRO(6, CONTEXT, _6) 266 | 267 | #define metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ 268 | metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ 269 | SEP \ 270 | MACRO(7, CONTEXT, _7) 271 | 272 | #define metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ 273 | metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ 274 | SEP \ 275 | MACRO(8, CONTEXT, _8) 276 | 277 | #define metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ 278 | metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ 279 | SEP \ 280 | MACRO(9, CONTEXT, _9) 281 | 282 | #define metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ 283 | metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ 284 | SEP \ 285 | MACRO(10, CONTEXT, _10) 286 | 287 | #define metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ 288 | metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ 289 | SEP \ 290 | MACRO(11, CONTEXT, _11) 291 | 292 | #define metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ 293 | metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ 294 | SEP \ 295 | MACRO(12, CONTEXT, _12) 296 | 297 | #define metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ 298 | metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ 299 | SEP \ 300 | MACRO(13, CONTEXT, _13) 301 | 302 | #define metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ 303 | metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ 304 | SEP \ 305 | MACRO(14, CONTEXT, _14) 306 | 307 | #define metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ 308 | metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ 309 | SEP \ 310 | MACRO(15, CONTEXT, _15) 311 | 312 | #define metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ 313 | metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ 314 | SEP \ 315 | MACRO(16, CONTEXT, _16) 316 | 317 | #define metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ 318 | metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ 319 | SEP \ 320 | MACRO(17, CONTEXT, _17) 321 | 322 | #define metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ 323 | metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ 324 | SEP \ 325 | MACRO(18, CONTEXT, _18) 326 | 327 | #define metamacro_foreach_cxt20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ 328 | metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ 329 | SEP \ 330 | MACRO(19, CONTEXT, _19) 331 | 332 | // metamacro_foreach_cxt_recursive expansions 333 | #define metamacro_foreach_cxt_recursive0(MACRO, SEP, CONTEXT) 334 | #define metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) 335 | 336 | #define metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ 337 | metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) \ 338 | SEP \ 339 | MACRO(1, CONTEXT, _1) 340 | 341 | #define metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ 342 | metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ 343 | SEP \ 344 | MACRO(2, CONTEXT, _2) 345 | 346 | #define metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ 347 | metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ 348 | SEP \ 349 | MACRO(3, CONTEXT, _3) 350 | 351 | #define metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ 352 | metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ 353 | SEP \ 354 | MACRO(4, CONTEXT, _4) 355 | 356 | #define metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ 357 | metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ 358 | SEP \ 359 | MACRO(5, CONTEXT, _5) 360 | 361 | #define metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ 362 | metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ 363 | SEP \ 364 | MACRO(6, CONTEXT, _6) 365 | 366 | #define metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ 367 | metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ 368 | SEP \ 369 | MACRO(7, CONTEXT, _7) 370 | 371 | #define metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ 372 | metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ 373 | SEP \ 374 | MACRO(8, CONTEXT, _8) 375 | 376 | #define metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ 377 | metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ 378 | SEP \ 379 | MACRO(9, CONTEXT, _9) 380 | 381 | #define metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ 382 | metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ 383 | SEP \ 384 | MACRO(10, CONTEXT, _10) 385 | 386 | #define metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ 387 | metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ 388 | SEP \ 389 | MACRO(11, CONTEXT, _11) 390 | 391 | #define metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ 392 | metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ 393 | SEP \ 394 | MACRO(12, CONTEXT, _12) 395 | 396 | #define metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ 397 | metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ 398 | SEP \ 399 | MACRO(13, CONTEXT, _13) 400 | 401 | #define metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ 402 | metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ 403 | SEP \ 404 | MACRO(14, CONTEXT, _14) 405 | 406 | #define metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ 407 | metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ 408 | SEP \ 409 | MACRO(15, CONTEXT, _15) 410 | 411 | #define metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ 412 | metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ 413 | SEP \ 414 | MACRO(16, CONTEXT, _16) 415 | 416 | #define metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ 417 | metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ 418 | SEP \ 419 | MACRO(17, CONTEXT, _17) 420 | 421 | #define metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ 422 | metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ 423 | SEP \ 424 | MACRO(18, CONTEXT, _18) 425 | 426 | #define metamacro_foreach_cxt_recursive20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ 427 | metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ 428 | SEP \ 429 | MACRO(19, CONTEXT, _19) 430 | 431 | // metamacro_for_cxt expansions 432 | #define metamacro_for_cxt0(MACRO, SEP, CONTEXT) 433 | #define metamacro_for_cxt1(MACRO, SEP, CONTEXT) MACRO(0, CONTEXT) 434 | 435 | #define metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ 436 | metamacro_for_cxt1(MACRO, SEP, CONTEXT) \ 437 | SEP \ 438 | MACRO(1, CONTEXT) 439 | 440 | #define metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ 441 | metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ 442 | SEP \ 443 | MACRO(2, CONTEXT) 444 | 445 | #define metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ 446 | metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ 447 | SEP \ 448 | MACRO(3, CONTEXT) 449 | 450 | #define metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ 451 | metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ 452 | SEP \ 453 | MACRO(4, CONTEXT) 454 | 455 | #define metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ 456 | metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ 457 | SEP \ 458 | MACRO(5, CONTEXT) 459 | 460 | #define metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ 461 | metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ 462 | SEP \ 463 | MACRO(6, CONTEXT) 464 | 465 | #define metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ 466 | metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ 467 | SEP \ 468 | MACRO(7, CONTEXT) 469 | 470 | #define metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ 471 | metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ 472 | SEP \ 473 | MACRO(8, CONTEXT) 474 | 475 | #define metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ 476 | metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ 477 | SEP \ 478 | MACRO(9, CONTEXT) 479 | 480 | #define metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ 481 | metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ 482 | SEP \ 483 | MACRO(10, CONTEXT) 484 | 485 | #define metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ 486 | metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ 487 | SEP \ 488 | MACRO(11, CONTEXT) 489 | 490 | #define metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ 491 | metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ 492 | SEP \ 493 | MACRO(12, CONTEXT) 494 | 495 | #define metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ 496 | metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ 497 | SEP \ 498 | MACRO(13, CONTEXT) 499 | 500 | #define metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ 501 | metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ 502 | SEP \ 503 | MACRO(14, CONTEXT) 504 | 505 | #define metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ 506 | metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ 507 | SEP \ 508 | MACRO(15, CONTEXT) 509 | 510 | #define metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ 511 | metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ 512 | SEP \ 513 | MACRO(16, CONTEXT) 514 | 515 | #define metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ 516 | metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ 517 | SEP \ 518 | MACRO(17, CONTEXT) 519 | 520 | #define metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ 521 | metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ 522 | SEP \ 523 | MACRO(18, CONTEXT) 524 | 525 | #define metamacro_for_cxt20(MACRO, SEP, CONTEXT) \ 526 | metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ 527 | SEP \ 528 | MACRO(19, CONTEXT) 529 | 530 | // metamacro_if_eq expansions 531 | #define metamacro_if_eq0(VALUE) \ 532 | metamacro_concat(metamacro_if_eq0_, VALUE) 533 | 534 | #define metamacro_if_eq0_0(...) __VA_ARGS__ metamacro_consume_ 535 | #define metamacro_if_eq0_1(...) metamacro_expand_ 536 | #define metamacro_if_eq0_2(...) metamacro_expand_ 537 | #define metamacro_if_eq0_3(...) metamacro_expand_ 538 | #define metamacro_if_eq0_4(...) metamacro_expand_ 539 | #define metamacro_if_eq0_5(...) metamacro_expand_ 540 | #define metamacro_if_eq0_6(...) metamacro_expand_ 541 | #define metamacro_if_eq0_7(...) metamacro_expand_ 542 | #define metamacro_if_eq0_8(...) metamacro_expand_ 543 | #define metamacro_if_eq0_9(...) metamacro_expand_ 544 | #define metamacro_if_eq0_10(...) metamacro_expand_ 545 | #define metamacro_if_eq0_11(...) metamacro_expand_ 546 | #define metamacro_if_eq0_12(...) metamacro_expand_ 547 | #define metamacro_if_eq0_13(...) metamacro_expand_ 548 | #define metamacro_if_eq0_14(...) metamacro_expand_ 549 | #define metamacro_if_eq0_15(...) metamacro_expand_ 550 | #define metamacro_if_eq0_16(...) metamacro_expand_ 551 | #define metamacro_if_eq0_17(...) metamacro_expand_ 552 | #define metamacro_if_eq0_18(...) metamacro_expand_ 553 | #define metamacro_if_eq0_19(...) metamacro_expand_ 554 | #define metamacro_if_eq0_20(...) metamacro_expand_ 555 | 556 | #define metamacro_if_eq1(VALUE) metamacro_if_eq0(metamacro_dec(VALUE)) 557 | #define metamacro_if_eq2(VALUE) metamacro_if_eq1(metamacro_dec(VALUE)) 558 | #define metamacro_if_eq3(VALUE) metamacro_if_eq2(metamacro_dec(VALUE)) 559 | #define metamacro_if_eq4(VALUE) metamacro_if_eq3(metamacro_dec(VALUE)) 560 | #define metamacro_if_eq5(VALUE) metamacro_if_eq4(metamacro_dec(VALUE)) 561 | #define metamacro_if_eq6(VALUE) metamacro_if_eq5(metamacro_dec(VALUE)) 562 | #define metamacro_if_eq7(VALUE) metamacro_if_eq6(metamacro_dec(VALUE)) 563 | #define metamacro_if_eq8(VALUE) metamacro_if_eq7(metamacro_dec(VALUE)) 564 | #define metamacro_if_eq9(VALUE) metamacro_if_eq8(metamacro_dec(VALUE)) 565 | #define metamacro_if_eq10(VALUE) metamacro_if_eq9(metamacro_dec(VALUE)) 566 | #define metamacro_if_eq11(VALUE) metamacro_if_eq10(metamacro_dec(VALUE)) 567 | #define metamacro_if_eq12(VALUE) metamacro_if_eq11(metamacro_dec(VALUE)) 568 | #define metamacro_if_eq13(VALUE) metamacro_if_eq12(metamacro_dec(VALUE)) 569 | #define metamacro_if_eq14(VALUE) metamacro_if_eq13(metamacro_dec(VALUE)) 570 | #define metamacro_if_eq15(VALUE) metamacro_if_eq14(metamacro_dec(VALUE)) 571 | #define metamacro_if_eq16(VALUE) metamacro_if_eq15(metamacro_dec(VALUE)) 572 | #define metamacro_if_eq17(VALUE) metamacro_if_eq16(metamacro_dec(VALUE)) 573 | #define metamacro_if_eq18(VALUE) metamacro_if_eq17(metamacro_dec(VALUE)) 574 | #define metamacro_if_eq19(VALUE) metamacro_if_eq18(metamacro_dec(VALUE)) 575 | #define metamacro_if_eq20(VALUE) metamacro_if_eq19(metamacro_dec(VALUE)) 576 | 577 | // metamacro_if_eq_recursive expansions 578 | #define metamacro_if_eq_recursive0(VALUE) \ 579 | metamacro_concat(metamacro_if_eq_recursive0_, VALUE) 580 | 581 | #define metamacro_if_eq_recursive0_0(...) __VA_ARGS__ metamacro_consume_ 582 | #define metamacro_if_eq_recursive0_1(...) metamacro_expand_ 583 | #define metamacro_if_eq_recursive0_2(...) metamacro_expand_ 584 | #define metamacro_if_eq_recursive0_3(...) metamacro_expand_ 585 | #define metamacro_if_eq_recursive0_4(...) metamacro_expand_ 586 | #define metamacro_if_eq_recursive0_5(...) metamacro_expand_ 587 | #define metamacro_if_eq_recursive0_6(...) metamacro_expand_ 588 | #define metamacro_if_eq_recursive0_7(...) metamacro_expand_ 589 | #define metamacro_if_eq_recursive0_8(...) metamacro_expand_ 590 | #define metamacro_if_eq_recursive0_9(...) metamacro_expand_ 591 | #define metamacro_if_eq_recursive0_10(...) metamacro_expand_ 592 | #define metamacro_if_eq_recursive0_11(...) metamacro_expand_ 593 | #define metamacro_if_eq_recursive0_12(...) metamacro_expand_ 594 | #define metamacro_if_eq_recursive0_13(...) metamacro_expand_ 595 | #define metamacro_if_eq_recursive0_14(...) metamacro_expand_ 596 | #define metamacro_if_eq_recursive0_15(...) metamacro_expand_ 597 | #define metamacro_if_eq_recursive0_16(...) metamacro_expand_ 598 | #define metamacro_if_eq_recursive0_17(...) metamacro_expand_ 599 | #define metamacro_if_eq_recursive0_18(...) metamacro_expand_ 600 | #define metamacro_if_eq_recursive0_19(...) metamacro_expand_ 601 | #define metamacro_if_eq_recursive0_20(...) metamacro_expand_ 602 | 603 | #define metamacro_if_eq_recursive1(VALUE) metamacro_if_eq_recursive0(metamacro_dec(VALUE)) 604 | #define metamacro_if_eq_recursive2(VALUE) metamacro_if_eq_recursive1(metamacro_dec(VALUE)) 605 | #define metamacro_if_eq_recursive3(VALUE) metamacro_if_eq_recursive2(metamacro_dec(VALUE)) 606 | #define metamacro_if_eq_recursive4(VALUE) metamacro_if_eq_recursive3(metamacro_dec(VALUE)) 607 | #define metamacro_if_eq_recursive5(VALUE) metamacro_if_eq_recursive4(metamacro_dec(VALUE)) 608 | #define metamacro_if_eq_recursive6(VALUE) metamacro_if_eq_recursive5(metamacro_dec(VALUE)) 609 | #define metamacro_if_eq_recursive7(VALUE) metamacro_if_eq_recursive6(metamacro_dec(VALUE)) 610 | #define metamacro_if_eq_recursive8(VALUE) metamacro_if_eq_recursive7(metamacro_dec(VALUE)) 611 | #define metamacro_if_eq_recursive9(VALUE) metamacro_if_eq_recursive8(metamacro_dec(VALUE)) 612 | #define metamacro_if_eq_recursive10(VALUE) metamacro_if_eq_recursive9(metamacro_dec(VALUE)) 613 | #define metamacro_if_eq_recursive11(VALUE) metamacro_if_eq_recursive10(metamacro_dec(VALUE)) 614 | #define metamacro_if_eq_recursive12(VALUE) metamacro_if_eq_recursive11(metamacro_dec(VALUE)) 615 | #define metamacro_if_eq_recursive13(VALUE) metamacro_if_eq_recursive12(metamacro_dec(VALUE)) 616 | #define metamacro_if_eq_recursive14(VALUE) metamacro_if_eq_recursive13(metamacro_dec(VALUE)) 617 | #define metamacro_if_eq_recursive15(VALUE) metamacro_if_eq_recursive14(metamacro_dec(VALUE)) 618 | #define metamacro_if_eq_recursive16(VALUE) metamacro_if_eq_recursive15(metamacro_dec(VALUE)) 619 | #define metamacro_if_eq_recursive17(VALUE) metamacro_if_eq_recursive16(metamacro_dec(VALUE)) 620 | #define metamacro_if_eq_recursive18(VALUE) metamacro_if_eq_recursive17(metamacro_dec(VALUE)) 621 | #define metamacro_if_eq_recursive19(VALUE) metamacro_if_eq_recursive18(metamacro_dec(VALUE)) 622 | #define metamacro_if_eq_recursive20(VALUE) metamacro_if_eq_recursive19(metamacro_dec(VALUE)) 623 | 624 | // metamacro_take expansions 625 | #define metamacro_take0(...) 626 | #define metamacro_take1(...) metamacro_head(__VA_ARGS__) 627 | #define metamacro_take2(...) metamacro_head(__VA_ARGS__), metamacro_take1(metamacro_tail(__VA_ARGS__)) 628 | #define metamacro_take3(...) metamacro_head(__VA_ARGS__), metamacro_take2(metamacro_tail(__VA_ARGS__)) 629 | #define metamacro_take4(...) metamacro_head(__VA_ARGS__), metamacro_take3(metamacro_tail(__VA_ARGS__)) 630 | #define metamacro_take5(...) metamacro_head(__VA_ARGS__), metamacro_take4(metamacro_tail(__VA_ARGS__)) 631 | #define metamacro_take6(...) metamacro_head(__VA_ARGS__), metamacro_take5(metamacro_tail(__VA_ARGS__)) 632 | #define metamacro_take7(...) metamacro_head(__VA_ARGS__), metamacro_take6(metamacro_tail(__VA_ARGS__)) 633 | #define metamacro_take8(...) metamacro_head(__VA_ARGS__), metamacro_take7(metamacro_tail(__VA_ARGS__)) 634 | #define metamacro_take9(...) metamacro_head(__VA_ARGS__), metamacro_take8(metamacro_tail(__VA_ARGS__)) 635 | #define metamacro_take10(...) metamacro_head(__VA_ARGS__), metamacro_take9(metamacro_tail(__VA_ARGS__)) 636 | #define metamacro_take11(...) metamacro_head(__VA_ARGS__), metamacro_take10(metamacro_tail(__VA_ARGS__)) 637 | #define metamacro_take12(...) metamacro_head(__VA_ARGS__), metamacro_take11(metamacro_tail(__VA_ARGS__)) 638 | #define metamacro_take13(...) metamacro_head(__VA_ARGS__), metamacro_take12(metamacro_tail(__VA_ARGS__)) 639 | #define metamacro_take14(...) metamacro_head(__VA_ARGS__), metamacro_take13(metamacro_tail(__VA_ARGS__)) 640 | #define metamacro_take15(...) metamacro_head(__VA_ARGS__), metamacro_take14(metamacro_tail(__VA_ARGS__)) 641 | #define metamacro_take16(...) metamacro_head(__VA_ARGS__), metamacro_take15(metamacro_tail(__VA_ARGS__)) 642 | #define metamacro_take17(...) metamacro_head(__VA_ARGS__), metamacro_take16(metamacro_tail(__VA_ARGS__)) 643 | #define metamacro_take18(...) metamacro_head(__VA_ARGS__), metamacro_take17(metamacro_tail(__VA_ARGS__)) 644 | #define metamacro_take19(...) metamacro_head(__VA_ARGS__), metamacro_take18(metamacro_tail(__VA_ARGS__)) 645 | #define metamacro_take20(...) metamacro_head(__VA_ARGS__), metamacro_take19(metamacro_tail(__VA_ARGS__)) 646 | 647 | // metamacro_drop expansions 648 | #define metamacro_drop0(...) __VA_ARGS__ 649 | #define metamacro_drop1(...) metamacro_tail(__VA_ARGS__) 650 | #define metamacro_drop2(...) metamacro_drop1(metamacro_tail(__VA_ARGS__)) 651 | #define metamacro_drop3(...) metamacro_drop2(metamacro_tail(__VA_ARGS__)) 652 | #define metamacro_drop4(...) metamacro_drop3(metamacro_tail(__VA_ARGS__)) 653 | #define metamacro_drop5(...) metamacro_drop4(metamacro_tail(__VA_ARGS__)) 654 | #define metamacro_drop6(...) metamacro_drop5(metamacro_tail(__VA_ARGS__)) 655 | #define metamacro_drop7(...) metamacro_drop6(metamacro_tail(__VA_ARGS__)) 656 | #define metamacro_drop8(...) metamacro_drop7(metamacro_tail(__VA_ARGS__)) 657 | #define metamacro_drop9(...) metamacro_drop8(metamacro_tail(__VA_ARGS__)) 658 | #define metamacro_drop10(...) metamacro_drop9(metamacro_tail(__VA_ARGS__)) 659 | #define metamacro_drop11(...) metamacro_drop10(metamacro_tail(__VA_ARGS__)) 660 | #define metamacro_drop12(...) metamacro_drop11(metamacro_tail(__VA_ARGS__)) 661 | #define metamacro_drop13(...) metamacro_drop12(metamacro_tail(__VA_ARGS__)) 662 | #define metamacro_drop14(...) metamacro_drop13(metamacro_tail(__VA_ARGS__)) 663 | #define metamacro_drop15(...) metamacro_drop14(metamacro_tail(__VA_ARGS__)) 664 | #define metamacro_drop16(...) metamacro_drop15(metamacro_tail(__VA_ARGS__)) 665 | #define metamacro_drop17(...) metamacro_drop16(metamacro_tail(__VA_ARGS__)) 666 | #define metamacro_drop18(...) metamacro_drop17(metamacro_tail(__VA_ARGS__)) 667 | #define metamacro_drop19(...) metamacro_drop18(metamacro_tail(__VA_ARGS__)) 668 | #define metamacro_drop20(...) metamacro_drop19(metamacro_tail(__VA_ARGS__)) 669 | 670 | #endif -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayViewTests/CFIFrostedOverlayViewTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.codafi.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayViewTests/CFIFrostedOverlayViewTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIFrostedOverlayViewTests.m 3 | // CFIFrostedOverlayViewTests 4 | // 5 | // Created by Robert Widmann on 6/16/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIFrostedOverlayViewTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CFIFrostedOverlayViewTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | 21 | // Set-up code here. 22 | } 23 | 24 | - (void)tearDown 25 | { 26 | // Tear-down code here. 27 | 28 | [super tearDown]; 29 | } 30 | 31 | - (void)testExample 32 | { 33 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /build-ios/CFIFrostedOverlayViewTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 84E606811793171600194C76 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E606801793171600194C76 /* Cocoa.framework */; }; 11 | 84E6068B1793171600194C76 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84E606891793171600194C76 /* InfoPlist.strings */; }; 12 | 84E6068D1793171600194C76 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E6068C1793171600194C76 /* main.m */; }; 13 | 84E606911793171600194C76 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 84E6068F1793171600194C76 /* Credits.rtf */; }; 14 | 84E606941793171600194C76 /* CFIAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606931793171600194C76 /* CFIAppDelegate.m */; }; 15 | 84E606971793171600194C76 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84E606951793171600194C76 /* MainMenu.xib */; }; 16 | 84E606991793171600194C76 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 84E606981793171600194C76 /* Images.xcassets */; }; 17 | 84E606A01793171700194C76 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E6069F1793171700194C76 /* XCTest.framework */; }; 18 | 84E606A11793171700194C76 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E606801793171600194C76 /* Cocoa.framework */; }; 19 | 84E606A91793171700194C76 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84E606A71793171700194C76 /* InfoPlist.strings */; }; 20 | 84E606AB1793171700194C76 /* CFIFrostedOverlayView_macTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606AA1793171700194C76 /* CFIFrostedOverlayView_macTests.m */; }; 21 | 84E606C017932BD600194C76 /* CFIMainWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606BF17932BD600194C76 /* CFIMainWindowController.m */; }; 22 | 84E606C317932C0A00194C76 /* CFIMainWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606C217932C0A00194C76 /* CFIMainWindow.m */; }; 23 | 84E606C617932D9200194C76 /* CFIMainWindowOuterFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606C517932D9200194C76 /* CFIMainWindowOuterFrame.m */; }; 24 | 84E606C91793304200194C76 /* CFIMainContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606C81793304200194C76 /* CFIMainContentView.m */; }; 25 | 84E606CC1793331300194C76 /* CFIStatusBarOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606CB1793331300194C76 /* CFIStatusBarOverlay.m */; }; 26 | 84E606D61793359400194C76 /* Wallpaper.png in Resources */ = {isa = PBXBuildFile; fileRef = 84E606D51793359400194C76 /* Wallpaper.png */; }; 27 | 84E606D91793359E00194C76 /* CFIFrostedOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E606D81793359E00194C76 /* CFIFrostedOverlayView.m */; }; 28 | 84E606E31793362E00194C76 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E606E21793362E00194C76 /* QuartzCore.framework */; }; 29 | 84E606E51793376100194C76 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E606E41793376100194C76 /* CoreText.framework */; }; 30 | 84E606EB17933EC300194C76 /* BatteryIndicator.png in Resources */ = {isa = PBXBuildFile; fileRef = 84E606EA17933EC300194C76 /* BatteryIndicator.png */; }; 31 | 84E606ED17933EED00194C76 /* WiFi-Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 84E606EC17933EED00194C76 /* WiFi-Icon.png */; }; 32 | /* End PBXBuildFile section */ 33 | 34 | /* Begin PBXContainerItemProxy section */ 35 | 84E606A21793171700194C76 /* PBXContainerItemProxy */ = { 36 | isa = PBXContainerItemProxy; 37 | containerPortal = 84E606751793171600194C76 /* Project object */; 38 | proxyType = 1; 39 | remoteGlobalIDString = 84E6067C1793171600194C76; 40 | remoteInfo = "CFIFrostedOverlayView-mac"; 41 | }; 42 | /* End PBXContainerItemProxy section */ 43 | 44 | /* Begin PBXFileReference section */ 45 | 84E6067D1793171600194C76 /* CFIFrostedOverlayView-mac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CFIFrostedOverlayView-mac.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 84E606801793171600194C76 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 47 | 84E606831793171600194C76 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 48 | 84E606841793171600194C76 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 49 | 84E606851793171600194C76 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 50 | 84E606881793171600194C76 /* CFIFrostedOverlayView-mac-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CFIFrostedOverlayView-mac-Info.plist"; sourceTree = ""; }; 51 | 84E6068A1793171600194C76 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 52 | 84E6068C1793171600194C76 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 53 | 84E6068E1793171600194C76 /* CFIFrostedOverlayView-mac-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CFIFrostedOverlayView-mac-Prefix.pch"; sourceTree = ""; }; 54 | 84E606901793171600194C76 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; 55 | 84E606921793171600194C76 /* CFIAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CFIAppDelegate.h; sourceTree = ""; }; 56 | 84E606931793171600194C76 /* CFIAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CFIAppDelegate.m; sourceTree = ""; }; 57 | 84E606961793171600194C76 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 58 | 84E606981793171600194C76 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 59 | 84E6069E1793171700194C76 /* CFIFrostedOverlayView-macTests.xctest */ = {isa = PBXFileReference; explicitFileType = folder; includeInIndex = 0; path = "CFIFrostedOverlayView-macTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 84E6069F1793171700194C76 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 61 | 84E606A61793171700194C76 /* CFIFrostedOverlayView-macTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CFIFrostedOverlayView-macTests-Info.plist"; sourceTree = ""; }; 62 | 84E606A81793171700194C76 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 63 | 84E606AA1793171700194C76 /* CFIFrostedOverlayView_macTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CFIFrostedOverlayView_macTests.m; sourceTree = ""; }; 64 | 84E606BE17932BD600194C76 /* CFIMainWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFIMainWindowController.h; sourceTree = ""; }; 65 | 84E606BF17932BD600194C76 /* CFIMainWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFIMainWindowController.m; sourceTree = ""; }; 66 | 84E606C117932C0A00194C76 /* CFIMainWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFIMainWindow.h; sourceTree = ""; }; 67 | 84E606C217932C0A00194C76 /* CFIMainWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFIMainWindow.m; sourceTree = ""; }; 68 | 84E606C417932D9200194C76 /* CFIMainWindowOuterFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFIMainWindowOuterFrame.h; sourceTree = ""; }; 69 | 84E606C517932D9200194C76 /* CFIMainWindowOuterFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFIMainWindowOuterFrame.m; sourceTree = ""; }; 70 | 84E606C71793304200194C76 /* CFIMainContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFIMainContentView.h; sourceTree = ""; }; 71 | 84E606C81793304200194C76 /* CFIMainContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFIMainContentView.m; sourceTree = ""; }; 72 | 84E606CA1793331300194C76 /* CFIStatusBarOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFIStatusBarOverlay.h; sourceTree = ""; }; 73 | 84E606CB1793331300194C76 /* CFIStatusBarOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CFIStatusBarOverlay.m; sourceTree = ""; }; 74 | 84E606D51793359400194C76 /* Wallpaper.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Wallpaper.png; path = ../../../Artwork/Wallpaper.png; sourceTree = ""; }; 75 | 84E606D71793359E00194C76 /* CFIFrostedOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CFIFrostedOverlayView.h; path = ../../../CFIFrostedOverlayView.h; sourceTree = ""; }; 76 | 84E606D81793359E00194C76 /* CFIFrostedOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CFIFrostedOverlayView.m; path = ../../../CFIFrostedOverlayView.m; sourceTree = ""; }; 77 | 84E606E21793362E00194C76 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 78 | 84E606E41793376100194C76 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; 79 | 84E606EA17933EC300194C76 /* BatteryIndicator.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = BatteryIndicator.png; path = ../../../Artwork/BatteryIndicator.png; sourceTree = ""; }; 80 | 84E606EC17933EED00194C76 /* WiFi-Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "WiFi-Icon.png"; path = "../../../Artwork/WiFi-Icon.png"; sourceTree = ""; }; 81 | /* End PBXFileReference section */ 82 | 83 | /* Begin PBXFrameworksBuildPhase section */ 84 | 84E6067A1793171600194C76 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | 84E606E51793376100194C76 /* CoreText.framework in Frameworks */, 89 | 84E606E31793362E00194C76 /* QuartzCore.framework in Frameworks */, 90 | 84E606811793171600194C76 /* Cocoa.framework in Frameworks */, 91 | ); 92 | runOnlyForDeploymentPostprocessing = 0; 93 | }; 94 | 84E6069B1793171700194C76 /* Frameworks */ = { 95 | isa = PBXFrameworksBuildPhase; 96 | buildActionMask = 2147483647; 97 | files = ( 98 | 84E606A11793171700194C76 /* Cocoa.framework in Frameworks */, 99 | 84E606A01793171700194C76 /* XCTest.framework in Frameworks */, 100 | ); 101 | runOnlyForDeploymentPostprocessing = 0; 102 | }; 103 | /* End PBXFrameworksBuildPhase section */ 104 | 105 | /* Begin PBXGroup section */ 106 | 84E606741793171600194C76 = { 107 | isa = PBXGroup; 108 | children = ( 109 | 84E606861793171600194C76 /* CFIFrostedOverlayView-mac */, 110 | 84E606A41793171700194C76 /* CFIFrostedOverlayView-macTests */, 111 | 84E6067F1793171600194C76 /* Frameworks */, 112 | 84E6067E1793171600194C76 /* Products */, 113 | ); 114 | sourceTree = ""; 115 | }; 116 | 84E6067E1793171600194C76 /* Products */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | 84E6067D1793171600194C76 /* CFIFrostedOverlayView-mac.app */, 120 | 84E6069E1793171700194C76 /* CFIFrostedOverlayView-macTests.xctest */, 121 | ); 122 | name = Products; 123 | sourceTree = ""; 124 | }; 125 | 84E6067F1793171600194C76 /* Frameworks */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | 84E606E41793376100194C76 /* CoreText.framework */, 129 | 84E606E21793362E00194C76 /* QuartzCore.framework */, 130 | 84E606801793171600194C76 /* Cocoa.framework */, 131 | 84E6069F1793171700194C76 /* XCTest.framework */, 132 | 84E606821793171600194C76 /* Other Frameworks */, 133 | ); 134 | name = Frameworks; 135 | sourceTree = ""; 136 | }; 137 | 84E606821793171600194C76 /* Other Frameworks */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 84E606831793171600194C76 /* AppKit.framework */, 141 | 84E606841793171600194C76 /* CoreData.framework */, 142 | 84E606851793171600194C76 /* Foundation.framework */, 143 | ); 144 | name = "Other Frameworks"; 145 | sourceTree = ""; 146 | }; 147 | 84E606861793171600194C76 /* CFIFrostedOverlayView-mac */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 84E606921793171600194C76 /* CFIAppDelegate.h */, 151 | 84E606931793171600194C76 /* CFIAppDelegate.m */, 152 | 84E606BD17932A3A00194C76 /* Control */, 153 | 84E606BE17932BD600194C76 /* CFIMainWindowController.h */, 154 | 84E606BF17932BD600194C76 /* CFIMainWindowController.m */, 155 | 84E606C117932C0A00194C76 /* CFIMainWindow.h */, 156 | 84E606C217932C0A00194C76 /* CFIMainWindow.m */, 157 | 84E606C417932D9200194C76 /* CFIMainWindowOuterFrame.h */, 158 | 84E606C517932D9200194C76 /* CFIMainWindowOuterFrame.m */, 159 | 84E606C71793304200194C76 /* CFIMainContentView.h */, 160 | 84E606C81793304200194C76 /* CFIMainContentView.m */, 161 | 84E606CA1793331300194C76 /* CFIStatusBarOverlay.h */, 162 | 84E606CB1793331300194C76 /* CFIStatusBarOverlay.m */, 163 | 84E606951793171600194C76 /* MainMenu.xib */, 164 | 84E606981793171600194C76 /* Images.xcassets */, 165 | 84E606871793171600194C76 /* Supporting Files */, 166 | ); 167 | path = "CFIFrostedOverlayView-mac"; 168 | sourceTree = ""; 169 | }; 170 | 84E606871793171600194C76 /* Supporting Files */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | 84E606EA17933EC300194C76 /* BatteryIndicator.png */, 174 | 84E606881793171600194C76 /* CFIFrostedOverlayView-mac-Info.plist */, 175 | 84E606891793171600194C76 /* InfoPlist.strings */, 176 | 84E6068C1793171600194C76 /* main.m */, 177 | 84E6068E1793171600194C76 /* CFIFrostedOverlayView-mac-Prefix.pch */, 178 | 84E6068F1793171600194C76 /* Credits.rtf */, 179 | 84E606D51793359400194C76 /* Wallpaper.png */, 180 | 84E606EC17933EED00194C76 /* WiFi-Icon.png */, 181 | ); 182 | name = "Supporting Files"; 183 | sourceTree = ""; 184 | }; 185 | 84E606A41793171700194C76 /* CFIFrostedOverlayView-macTests */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | 84E606AA1793171700194C76 /* CFIFrostedOverlayView_macTests.m */, 189 | 84E606A51793171700194C76 /* Supporting Files */, 190 | ); 191 | path = "CFIFrostedOverlayView-macTests"; 192 | sourceTree = ""; 193 | }; 194 | 84E606A51793171700194C76 /* Supporting Files */ = { 195 | isa = PBXGroup; 196 | children = ( 197 | 84E606A61793171700194C76 /* CFIFrostedOverlayView-macTests-Info.plist */, 198 | 84E606A71793171700194C76 /* InfoPlist.strings */, 199 | ); 200 | name = "Supporting Files"; 201 | sourceTree = ""; 202 | }; 203 | 84E606BD17932A3A00194C76 /* Control */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | 84E606D71793359E00194C76 /* CFIFrostedOverlayView.h */, 207 | 84E606D81793359E00194C76 /* CFIFrostedOverlayView.m */, 208 | ); 209 | name = Control; 210 | sourceTree = ""; 211 | }; 212 | /* End PBXGroup section */ 213 | 214 | /* Begin PBXNativeTarget section */ 215 | 84E6067C1793171600194C76 /* CFIFrostedOverlayView-mac */ = { 216 | isa = PBXNativeTarget; 217 | buildConfigurationList = 84E606AE1793171700194C76 /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayView-mac" */; 218 | buildPhases = ( 219 | 84E606791793171600194C76 /* Sources */, 220 | 84E6067A1793171600194C76 /* Frameworks */, 221 | 84E6067B1793171600194C76 /* Resources */, 222 | ); 223 | buildRules = ( 224 | ); 225 | dependencies = ( 226 | ); 227 | name = "CFIFrostedOverlayView-mac"; 228 | productName = "CFIFrostedOverlayView-mac"; 229 | productReference = 84E6067D1793171600194C76 /* CFIFrostedOverlayView-mac.app */; 230 | productType = "com.apple.product-type.application"; 231 | }; 232 | 84E6069D1793171700194C76 /* CFIFrostedOverlayView-macTests */ = { 233 | isa = PBXNativeTarget; 234 | buildConfigurationList = 84E606B11793171700194C76 /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayView-macTests" */; 235 | buildPhases = ( 236 | 84E6069A1793171700194C76 /* Sources */, 237 | 84E6069B1793171700194C76 /* Frameworks */, 238 | 84E6069C1793171700194C76 /* Resources */, 239 | ); 240 | buildRules = ( 241 | ); 242 | dependencies = ( 243 | 84E606A31793171700194C76 /* PBXTargetDependency */, 244 | ); 245 | name = "CFIFrostedOverlayView-macTests"; 246 | productName = "CFIFrostedOverlayView-macTests"; 247 | productReference = 84E6069E1793171700194C76 /* CFIFrostedOverlayView-macTests.xctest */; 248 | productType = "com.apple.product-type.bundle.unit-test"; 249 | }; 250 | /* End PBXNativeTarget section */ 251 | 252 | /* Begin PBXProject section */ 253 | 84E606751793171600194C76 /* Project object */ = { 254 | isa = PBXProject; 255 | attributes = { 256 | CLASSPREFIX = CFI; 257 | LastUpgradeCheck = 0500; 258 | ORGANIZATIONNAME = CodaFi; 259 | TargetAttributes = { 260 | 84E6069D1793171700194C76 = { 261 | TestTargetID = 84E6067C1793171600194C76; 262 | }; 263 | }; 264 | }; 265 | buildConfigurationList = 84E606781793171600194C76 /* Build configuration list for PBXProject "CFIFrostedOverlayView-mac" */; 266 | compatibilityVersion = "Xcode 3.2"; 267 | developmentRegion = English; 268 | hasScannedForEncodings = 0; 269 | knownRegions = ( 270 | en, 271 | Base, 272 | ); 273 | mainGroup = 84E606741793171600194C76; 274 | productRefGroup = 84E6067E1793171600194C76 /* Products */; 275 | projectDirPath = ""; 276 | projectRoot = ""; 277 | targets = ( 278 | 84E6067C1793171600194C76 /* CFIFrostedOverlayView-mac */, 279 | 84E6069D1793171700194C76 /* CFIFrostedOverlayView-macTests */, 280 | ); 281 | }; 282 | /* End PBXProject section */ 283 | 284 | /* Begin PBXResourcesBuildPhase section */ 285 | 84E6067B1793171600194C76 /* Resources */ = { 286 | isa = PBXResourcesBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | 84E6068B1793171600194C76 /* InfoPlist.strings in Resources */, 290 | 84E606991793171600194C76 /* Images.xcassets in Resources */, 291 | 84E606EB17933EC300194C76 /* BatteryIndicator.png in Resources */, 292 | 84E606D61793359400194C76 /* Wallpaper.png in Resources */, 293 | 84E606911793171600194C76 /* Credits.rtf in Resources */, 294 | 84E606ED17933EED00194C76 /* WiFi-Icon.png in Resources */, 295 | 84E606971793171600194C76 /* MainMenu.xib in Resources */, 296 | ); 297 | runOnlyForDeploymentPostprocessing = 0; 298 | }; 299 | 84E6069C1793171700194C76 /* Resources */ = { 300 | isa = PBXResourcesBuildPhase; 301 | buildActionMask = 2147483647; 302 | files = ( 303 | 84E606A91793171700194C76 /* InfoPlist.strings in Resources */, 304 | ); 305 | runOnlyForDeploymentPostprocessing = 0; 306 | }; 307 | /* End PBXResourcesBuildPhase section */ 308 | 309 | /* Begin PBXSourcesBuildPhase section */ 310 | 84E606791793171600194C76 /* Sources */ = { 311 | isa = PBXSourcesBuildPhase; 312 | buildActionMask = 2147483647; 313 | files = ( 314 | 84E606D91793359E00194C76 /* CFIFrostedOverlayView.m in Sources */, 315 | 84E606C317932C0A00194C76 /* CFIMainWindow.m in Sources */, 316 | 84E606C617932D9200194C76 /* CFIMainWindowOuterFrame.m in Sources */, 317 | 84E606C91793304200194C76 /* CFIMainContentView.m in Sources */, 318 | 84E6068D1793171600194C76 /* main.m in Sources */, 319 | 84E606941793171600194C76 /* CFIAppDelegate.m in Sources */, 320 | 84E606CC1793331300194C76 /* CFIStatusBarOverlay.m in Sources */, 321 | 84E606C017932BD600194C76 /* CFIMainWindowController.m in Sources */, 322 | ); 323 | runOnlyForDeploymentPostprocessing = 0; 324 | }; 325 | 84E6069A1793171700194C76 /* Sources */ = { 326 | isa = PBXSourcesBuildPhase; 327 | buildActionMask = 2147483647; 328 | files = ( 329 | 84E606AB1793171700194C76 /* CFIFrostedOverlayView_macTests.m in Sources */, 330 | ); 331 | runOnlyForDeploymentPostprocessing = 0; 332 | }; 333 | /* End PBXSourcesBuildPhase section */ 334 | 335 | /* Begin PBXTargetDependency section */ 336 | 84E606A31793171700194C76 /* PBXTargetDependency */ = { 337 | isa = PBXTargetDependency; 338 | target = 84E6067C1793171600194C76 /* CFIFrostedOverlayView-mac */; 339 | targetProxy = 84E606A21793171700194C76 /* PBXContainerItemProxy */; 340 | }; 341 | /* End PBXTargetDependency section */ 342 | 343 | /* Begin PBXVariantGroup section */ 344 | 84E606891793171600194C76 /* InfoPlist.strings */ = { 345 | isa = PBXVariantGroup; 346 | children = ( 347 | 84E6068A1793171600194C76 /* en */, 348 | ); 349 | name = InfoPlist.strings; 350 | sourceTree = ""; 351 | }; 352 | 84E6068F1793171600194C76 /* Credits.rtf */ = { 353 | isa = PBXVariantGroup; 354 | children = ( 355 | 84E606901793171600194C76 /* en */, 356 | ); 357 | name = Credits.rtf; 358 | sourceTree = ""; 359 | }; 360 | 84E606951793171600194C76 /* MainMenu.xib */ = { 361 | isa = PBXVariantGroup; 362 | children = ( 363 | 84E606961793171600194C76 /* Base */, 364 | ); 365 | name = MainMenu.xib; 366 | sourceTree = ""; 367 | }; 368 | 84E606A71793171700194C76 /* InfoPlist.strings */ = { 369 | isa = PBXVariantGroup; 370 | children = ( 371 | 84E606A81793171700194C76 /* en */, 372 | ); 373 | name = InfoPlist.strings; 374 | sourceTree = ""; 375 | }; 376 | /* End PBXVariantGroup section */ 377 | 378 | /* Begin XCBuildConfiguration section */ 379 | 84E606AC1793171700194C76 /* Debug */ = { 380 | isa = XCBuildConfiguration; 381 | buildSettings = { 382 | ALWAYS_SEARCH_USER_PATHS = NO; 383 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 384 | CLANG_CXX_LIBRARY = "libc++"; 385 | CLANG_ENABLE_MODULES = YES; 386 | CLANG_ENABLE_OBJC_ARC = YES; 387 | CLANG_WARN_BOOL_CONVERSION = YES; 388 | CLANG_WARN_CONSTANT_CONVERSION = YES; 389 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 390 | CLANG_WARN_EMPTY_BODY = YES; 391 | CLANG_WARN_ENUM_CONVERSION = YES; 392 | CLANG_WARN_INT_CONVERSION = YES; 393 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 394 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 395 | COPY_PHASE_STRIP = NO; 396 | GCC_C_LANGUAGE_STANDARD = gnu99; 397 | GCC_DYNAMIC_NO_PIC = NO; 398 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 399 | GCC_OPTIMIZATION_LEVEL = 0; 400 | GCC_PREPROCESSOR_DEFINITIONS = ( 401 | "DEBUG=1", 402 | "$(inherited)", 403 | ); 404 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 405 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 406 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 407 | GCC_WARN_UNDECLARED_SELECTOR = YES; 408 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 409 | GCC_WARN_UNUSED_FUNCTION = YES; 410 | GCC_WARN_UNUSED_VARIABLE = YES; 411 | MACOSX_DEPLOYMENT_TARGET = 10.8; 412 | ONLY_ACTIVE_ARCH = YES; 413 | SDKROOT = macosx; 414 | }; 415 | name = Debug; 416 | }; 417 | 84E606AD1793171700194C76 /* Release */ = { 418 | isa = XCBuildConfiguration; 419 | buildSettings = { 420 | ALWAYS_SEARCH_USER_PATHS = NO; 421 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 422 | CLANG_CXX_LIBRARY = "libc++"; 423 | CLANG_ENABLE_MODULES = YES; 424 | CLANG_ENABLE_OBJC_ARC = YES; 425 | CLANG_WARN_BOOL_CONVERSION = YES; 426 | CLANG_WARN_CONSTANT_CONVERSION = YES; 427 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 428 | CLANG_WARN_EMPTY_BODY = YES; 429 | CLANG_WARN_ENUM_CONVERSION = YES; 430 | CLANG_WARN_INT_CONVERSION = YES; 431 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 432 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 433 | COPY_PHASE_STRIP = YES; 434 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 435 | ENABLE_NS_ASSERTIONS = NO; 436 | GCC_C_LANGUAGE_STANDARD = gnu99; 437 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 438 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 439 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 440 | GCC_WARN_UNDECLARED_SELECTOR = YES; 441 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 442 | GCC_WARN_UNUSED_FUNCTION = YES; 443 | GCC_WARN_UNUSED_VARIABLE = YES; 444 | MACOSX_DEPLOYMENT_TARGET = 10.8; 445 | SDKROOT = macosx; 446 | }; 447 | name = Release; 448 | }; 449 | 84E606AF1793171700194C76 /* Debug */ = { 450 | isa = XCBuildConfiguration; 451 | buildSettings = { 452 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 453 | COMBINE_HIDPI_IMAGES = YES; 454 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 455 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Prefix.pch"; 456 | INFOPLIST_FILE = "CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Info.plist"; 457 | PRODUCT_NAME = "$(TARGET_NAME)"; 458 | SDKROOT = macosx10.8; 459 | WRAPPER_EXTENSION = app; 460 | }; 461 | name = Debug; 462 | }; 463 | 84E606B01793171700194C76 /* Release */ = { 464 | isa = XCBuildConfiguration; 465 | buildSettings = { 466 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 467 | COMBINE_HIDPI_IMAGES = YES; 468 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 469 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Prefix.pch"; 470 | INFOPLIST_FILE = "CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Info.plist"; 471 | PRODUCT_NAME = "$(TARGET_NAME)"; 472 | SDKROOT = macosx10.8; 473 | WRAPPER_EXTENSION = app; 474 | }; 475 | name = Release; 476 | }; 477 | 84E606B21793171700194C76 /* Debug */ = { 478 | isa = XCBuildConfiguration; 479 | buildSettings = { 480 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/CFIFrostedOverlayView-mac.app/Contents/MacOS/CFIFrostedOverlayView-mac"; 481 | COMBINE_HIDPI_IMAGES = YES; 482 | FRAMEWORK_SEARCH_PATHS = ( 483 | "$(DEVELOPER_FRAMEWORKS_DIR)", 484 | "$(inherited)", 485 | ); 486 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 487 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Prefix.pch"; 488 | GCC_PREPROCESSOR_DEFINITIONS = ( 489 | "DEBUG=1", 490 | "$(inherited)", 491 | ); 492 | INFOPLIST_FILE = "CFIFrostedOverlayView-macTests/CFIFrostedOverlayView-macTests-Info.plist"; 493 | PRODUCT_NAME = "$(TARGET_NAME)"; 494 | TEST_HOST = "$(BUNDLE_LOADER)"; 495 | WRAPPER_EXTENSION = xctest; 496 | }; 497 | name = Debug; 498 | }; 499 | 84E606B31793171700194C76 /* Release */ = { 500 | isa = XCBuildConfiguration; 501 | buildSettings = { 502 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/CFIFrostedOverlayView-mac.app/Contents/MacOS/CFIFrostedOverlayView-mac"; 503 | COMBINE_HIDPI_IMAGES = YES; 504 | FRAMEWORK_SEARCH_PATHS = ( 505 | "$(DEVELOPER_FRAMEWORKS_DIR)", 506 | "$(inherited)", 507 | ); 508 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 509 | GCC_PREFIX_HEADER = "CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Prefix.pch"; 510 | INFOPLIST_FILE = "CFIFrostedOverlayView-macTests/CFIFrostedOverlayView-macTests-Info.plist"; 511 | PRODUCT_NAME = "$(TARGET_NAME)"; 512 | TEST_HOST = "$(BUNDLE_LOADER)"; 513 | WRAPPER_EXTENSION = xctest; 514 | }; 515 | name = Release; 516 | }; 517 | /* End XCBuildConfiguration section */ 518 | 519 | /* Begin XCConfigurationList section */ 520 | 84E606781793171600194C76 /* Build configuration list for PBXProject "CFIFrostedOverlayView-mac" */ = { 521 | isa = XCConfigurationList; 522 | buildConfigurations = ( 523 | 84E606AC1793171700194C76 /* Debug */, 524 | 84E606AD1793171700194C76 /* Release */, 525 | ); 526 | defaultConfigurationIsVisible = 0; 527 | defaultConfigurationName = Release; 528 | }; 529 | 84E606AE1793171700194C76 /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayView-mac" */ = { 530 | isa = XCConfigurationList; 531 | buildConfigurations = ( 532 | 84E606AF1793171700194C76 /* Debug */, 533 | 84E606B01793171700194C76 /* Release */, 534 | ); 535 | defaultConfigurationIsVisible = 0; 536 | defaultConfigurationName = Release; 537 | }; 538 | 84E606B11793171700194C76 /* Build configuration list for PBXNativeTarget "CFIFrostedOverlayView-macTests" */ = { 539 | isa = XCConfigurationList; 540 | buildConfigurations = ( 541 | 84E606B21793171700194C76 /* Debug */, 542 | 84E606B31793171700194C76 /* Release */, 543 | ); 544 | defaultConfigurationIsVisible = 0; 545 | defaultConfigurationName = Release; 546 | }; 547 | /* End XCConfigurationList section */ 548 | }; 549 | rootObject = 84E606751793171600194C76 /* Project object */; 550 | } 551 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/Base.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | Default 366 | 367 | 368 | 369 | Left to Right 370 | 371 | 372 | 373 | Right to Left 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | Default 382 | 383 | 384 | 385 | Left to Right 386 | 387 | 388 | 389 | Right to Left 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIAppDelegate.h 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIAppDelegate : NSObject 12 | 13 | @property (assign) IBOutlet NSWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIAppDelegate.m 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIAppDelegate.h" 10 | #import "CFIMainWindowController.h" 11 | 12 | @interface CFIAppDelegate () 13 | @property (nonatomic, strong) CFIMainWindowController *mainWindowController; 14 | @end 15 | 16 | @implementation CFIAppDelegate 17 | 18 | - (id)init { 19 | self = [super init]; 20 | 21 | self.mainWindowController = [[CFIMainWindowController alloc]init]; 22 | 23 | return self; 24 | } 25 | 26 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 27 | { 28 | // Insert code here to initialize your application 29 | [self.mainWindowController showWindow:NSApp]; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | com.codafi.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSMinimumSystemVersion 26 | ${MACOSX_DEPLOYMENT_TARGET} 27 | NSHumanReadableCopyright 28 | Copyright © 2013 CodaFi. All rights reserved. 29 | NSMainNibFile 30 | MainMenu 31 | NSPrincipalClass 32 | NSApplication 33 | 34 | 35 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIFrostedOverlayView-mac-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #ifdef __OBJC__ 8 | #import 9 | #import 10 | #endif 11 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainContentView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainContentView.h 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIMainContentView : NSView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainContentView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainContentView.m 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIMainContentView.h" 10 | #import "CFIFrostedOverlayView.h" 11 | 12 | @interface CFIMainContentView () 13 | @property (nonatomic, strong) CFIFrostedOverlayView *controlCenter; 14 | @end 15 | 16 | @implementation CFIMainContentView { 17 | float oldY, delta; 18 | BOOL allowPanning; 19 | } 20 | 21 | - (id)initWithFrame:(NSRect)frame 22 | { 23 | self = [super initWithFrame:frame]; 24 | 25 | self.layer = CALayer.layer; 26 | self.layer.masksToBounds = YES; 27 | self.layer.backgroundColor = NSColor.whiteColor.CGColor; 28 | self.layer.cornerRadius = 5.f; 29 | self.layer.contents = [NSImage imageNamed:@"Wallpaper.png"]; 30 | self.wantsLayer = YES; 31 | 32 | self.controlCenter = [[CFIFrostedOverlayView alloc]initWithFrame:CGRectOffset(CGRectInset(self.bounds, 0, 22), 0, -CGRectGetHeight(self.bounds) + 22)]; 33 | self.controlCenter.offset = 22.f; 34 | [self addSubview:self.controlCenter]; 35 | self.controlCenter.viewToBlur = self; 36 | 37 | return self; 38 | } 39 | 40 | - (void)mouseDown:(NSEvent *)theEvent { 41 | [super mouseDown:theEvent]; 42 | CGPoint touchLocation = [self convertPoint:[self.window convertScreenToBase:[NSEvent mouseLocation]] fromView:nil]; 43 | BOOL intersectsBottom = CGRectContainsPoint((CGRect){ .origin.y = 0, .size.width = CGRectGetWidth(self.bounds), .size.height = 10 }, touchLocation); 44 | BOOL intersectsTop = CGRectContainsPoint(self.controlCenter.frame, touchLocation); 45 | allowPanning = intersectsBottom | intersectsTop; 46 | if (allowPanning) { 47 | oldY = touchLocation.y; 48 | } 49 | } 50 | 51 | - (void)mouseDragged:(NSEvent *)theEvent { 52 | [super mouseDragged:theEvent]; 53 | if (allowPanning) { 54 | CGPoint touchLocation = [self convertPoint:[self.window convertScreenToBase:[NSEvent mouseLocation]] fromView:nil]; 55 | if (touchLocation.y < CGRectGetHeight(self.frame) - 44) { 56 | delta = touchLocation.y - oldY; 57 | CGRect newFrame = self.controlCenter.frame; 58 | newFrame.origin.y = touchLocation.y - CGRectGetHeight(self.frame) + 44; 59 | self.controlCenter.frame = newFrame; 60 | } 61 | } 62 | } 63 | 64 | - (void)mouseUp:(NSEvent *)theEvent { 65 | [super mouseUp:theEvent]; 66 | if (allowPanning) { 67 | 68 | // [NSAnimationContext beginGrouping]; 69 | // [[NSAnimationContext currentContext] setDuration:0.3f]; 70 | // 71 | CGRect frame = self.controlCenter.frame; 72 | frame.origin.y = (delta <= 250) ? -CGRectGetHeight(self.bounds) - 22 : 0; 73 | [self.controlCenter setFrame:frame]; 74 | 75 | // [NSAnimationContext endGrouping]; 76 | } 77 | allowPanning = NO; 78 | } 79 | 80 | 81 | - (BOOL)mouseDownCanMoveWindow { 82 | return NO; 83 | } 84 | 85 | @end 86 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainWindow.h 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIMainWindow : NSWindow 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainWindow.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainWindow.m 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIMainWindow.h" 10 | #import "CFIMainWindowOuterFrame.h" 11 | #import "CFIMainContentView.h" 12 | #import "CFIStatusBarOverlay.h" 13 | 14 | @implementation CFIMainWindow 15 | 16 | - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag { 17 | self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag]; 18 | 19 | CFIMainWindowOuterFrame *outerFrame = [[CFIMainWindowOuterFrame alloc]initWithFrame:contentRect]; 20 | [self.contentView addSubview:outerFrame]; 21 | 22 | CFIMainContentView *contentView = [[CFIMainContentView alloc]initWithFrame:NSInsetRect(outerFrame.bounds, 38, 38)]; 23 | [outerFrame addSubview:contentView]; 24 | 25 | CFIStatusBarOverlay *overlay = [[CFIStatusBarOverlay alloc]initWithFrame:(NSRect){ .origin.y = NSHeight(contentView.frame) - 40, .size.width = NSWidth(contentView.frame), .size.height = 40.f }]; 26 | [contentView addSubview:overlay]; 27 | 28 | return self; 29 | } 30 | 31 | - (BOOL)isMovableByWindowBackground { 32 | return YES; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainWindowController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainWindowController.h 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIMainWindowController : NSWindowController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainWindowController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainWindowController.m 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIMainWindowController.h" 10 | #import "CFIMainWindow.h" 11 | 12 | @interface CFIMainWindowController () 13 | 14 | @end 15 | 16 | @implementation CFIMainWindowController 17 | 18 | - (id)init { 19 | self = [super init]; 20 | 21 | self.window = [[CFIMainWindow alloc]initWithContentRect:(NSRect){ .size = { 716, 1210 } } styleMask:(NSBorderlessWindowMask) backing:NSBackingStoreRetained defer:NO]; 22 | [self.window center]; 23 | 24 | return self; 25 | } 26 | 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainWindowOuterFrame.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainWindowOuterFrame.h 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIMainWindowOuterFrame : NSView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIMainWindowOuterFrame.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIMainWindowOuterFrame.m 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIMainWindowOuterFrame.h" 10 | #import "CFIFrostedOverlayView.h" 11 | 12 | @implementation CFIMainWindowOuterFrame 13 | 14 | - (id)initWithFrame:(NSRect)frame 15 | { 16 | self = [super initWithFrame:frame]; 17 | 18 | self.layer = CALayer.layer; 19 | self.layer.backgroundColor = NSColor.blackColor.CGColor; 20 | self.layer.cornerRadius = 15.f; 21 | self.wantsLayer = YES; 22 | 23 | return self; 24 | } 25 | 26 | - (BOOL)mouseDownCanMoveWindow { 27 | return YES; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIStatusBarOverlay.h: -------------------------------------------------------------------------------- 1 | // 2 | // CFIStatusBarOverlay.h 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIStatusBarOverlay : NSView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/CFIStatusBarOverlay.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIStatusBarOverlay.m 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import "CFIStatusBarOverlay.h" 10 | #import 11 | 12 | @implementation CFIStatusBarOverlay 13 | 14 | - (id)initWithFrame:(NSRect)frame 15 | { 16 | self = [super initWithFrame:frame]; 17 | 18 | self.layer = CALayer.layer; 19 | self.layer.backgroundColor = NSColor.blackColor.CGColor; 20 | self.layer.opacity = 0.5f; 21 | self.wantsLayer = YES; 22 | 23 | CALayer *batteryIndicatorLayer = CALayer.layer; 24 | batteryIndicatorLayer.contents = [NSImage imageNamed:@"BatteryIndicator.png"]; 25 | batteryIndicatorLayer.frame = (NSRect){ .origin.x = 580, .origin.y = 12, .size.width = 50, .size.height = 22 }; 26 | [self.layer addSublayer:batteryIndicatorLayer]; 27 | 28 | CATextLayer *timeLayer = CATextLayer.layer; 29 | CTFontRef font = CTFontCreateWithName(CFSTR("HelveticaNeue-Medium"), 11, NULL); 30 | timeLayer.font = font; 31 | timeLayer.fontSize = 20.f; 32 | timeLayer.foregroundColor = NSColor.whiteColor.CGColor; 33 | timeLayer.string = CFICurrentTimeString(); 34 | timeLayer.frame = (NSRect){ .origin.x = 280, .size.height = NSHeight(frame) - 4, .size.width = 300 }; 35 | [self.layer addSublayer:timeLayer]; 36 | 37 | 38 | CATextLayer *carrierLayer = CATextLayer.layer; 39 | carrierLayer.font = font; 40 | carrierLayer.fontSize = 20.f; 41 | carrierLayer.foregroundColor = NSColor.whiteColor.CGColor; 42 | carrierLayer.string = @"Carrier"; 43 | carrierLayer.frame = (NSRect){ .origin.x = 10, .size.height = NSHeight(frame) - 4, .size.width = 300 }; 44 | [self.layer addSublayer:carrierLayer]; 45 | 46 | CALayer *wifiIconLayer = CALayer.layer; 47 | wifiIconLayer.contents = [NSImage imageNamed:@"WiFi-Icon.png"]; 48 | wifiIconLayer.frame = (NSRect){ .origin.x = 82, .origin.y = 15, .size.width = 23, .size.height = 18 }; 49 | [self.layer addSublayer:wifiIconLayer]; 50 | 51 | CFRelease(font); 52 | 53 | return self; 54 | } 55 | 56 | 57 | static NSString *CFICurrentTimeString(void) { 58 | static NSDateFormatter *timeFormatter = nil; 59 | if (timeFormatter == nil) { 60 | timeFormatter = [[NSDateFormatter alloc]init]; 61 | [timeFormatter setDateFormat:@"hh:mm a"]; 62 | } 63 | 64 | NSString *timeString = [timeFormatter stringFromDate:[NSDate date]]; 65 | if ([timeString hasPrefix:@"0"]) { 66 | return [timeString substringFromIndex:1]; 67 | } 68 | return timeString; 69 | } 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/en.lproj/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} 2 | {\colortbl;\red255\green255\blue255;} 3 | \paperw9840\paperh8400 4 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 5 | 6 | \f0\b\fs24 \cf0 Engineering: 7 | \b0 \ 8 | Some people\ 9 | \ 10 | 11 | \b Human Interface Design: 12 | \b0 \ 13 | Some other people\ 14 | \ 15 | 16 | \b Testing: 17 | \b0 \ 18 | Hopefully not nobody\ 19 | \ 20 | 21 | \b Documentation: 22 | \b0 \ 23 | Whoever\ 24 | \ 25 | 26 | \b With special thanks to: 27 | \b0 \ 28 | Mom\ 29 | } 30 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-mac/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CFIFrostedOverlayView-mac 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) 12 | { 13 | return NSApplicationMain(argc, argv); 14 | } 15 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-macTests/CFIFrostedOverlayView-macTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.codafi.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-macTests/CFIFrostedOverlayView_macTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // CFIFrostedOverlayView_macTests.m 3 | // CFIFrostedOverlayView-macTests 4 | // 5 | // Created by Robert Widmann on 7/14/13. 6 | // Copyright (c) 2013 CodaFi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CFIFrostedOverlayView_macTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CFIFrostedOverlayView_macTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | 21 | // Set-up code here. 22 | } 23 | 24 | - (void)tearDown 25 | { 26 | // Tear-down code here. 27 | 28 | [super tearDown]; 29 | } 30 | 31 | - (void)testExample 32 | { 33 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /build-mac/CFIFrostedOverlayView-macTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | --------------------------------------------------------------------------------