├── Classes ├── UIImage+StackBlur.h ├── UIImage+StackBlur.m ├── stackBlurAppDelegate.h ├── stackBlurAppDelegate.m ├── stackBlurViewController.h └── stackBlurViewController.m ├── MainWindow.xib ├── README ├── Ressources └── testIma.jpg ├── StackBluriOS.podspec ├── main.m ├── stackBlur-Info.plist ├── stackBlur.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── tomsoft.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── thomas.mode1v3 ├── thomas.pbxuser └── xcuserdata │ └── tomsoft.xcuserdatad │ └── xcschemes │ ├── stackBlur.xcscheme │ └── xcschememanagement.plist ├── stackBlurViewController.xib └── stackBlur_Prefix.pch /Classes/UIImage+StackBlur.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+StackBlur.h 3 | // stackBlur 4 | // 5 | // Created by Thomas LANDSPURG on 07/02/12. 6 | // Copyright 2012 Digiwie. All rights reserved. 7 | // 8 | // StackBlur implementation on iOS 9 | // 10 | // 11 | 12 | #import 13 | 14 | @interface UIImage (StackBlur) 15 | - (UIImage*) stackBlur:(NSUInteger)radius; 16 | - (UIImage *) normalize ; 17 | + (void) applyStackBlurToBuffer:(UInt8*)targetBuffer width:(const int)w height:(const int)h withRadius:(NSUInteger)inradius; 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /Classes/UIImage+StackBlur.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+StackBlur.m 3 | // stackBlur 4 | // 5 | // Created by Thomas on 07/02/12. 6 | // Copyright 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | /* 9 | Copyright (c) 2012, T.LANDSPURG 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 2. Redistributions in binary form must reproduce the above copyright notice, 18 | this list of conditions and the following disclaimer in the documentation 19 | and/or other materials provided with the distribution. 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 22 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 25 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 28 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | 32 | The views and conclusions contained in the software and documentation are those 33 | of the authors and should not be interpreted as representing official policies, 34 | either expressed or implied, of the FreeBSD Project. 35 | */ 36 | 37 | #import "UIImage+StackBlur.h" 38 | 39 | #define SQUARE(i) ((i)*(i)) 40 | inline static void zeroClearInt(int* p, size_t count) { memset(p, 0, sizeof(int) * count); } 41 | 42 | @implementation UIImage (StackBlur) 43 | 44 | 45 | // Stackblur algorithm 46 | // from 47 | // http://incubator.quasimondo.com/processing/fast_blur_deluxe.php 48 | // by Mario Klingemann 49 | 50 | - (UIImage*) stackBlur:(NSUInteger)inradius 51 | { 52 | if (inradius < 1){ 53 | return self; 54 | } 55 | // Suggestion xidew to prevent crash if size is null 56 | if (CGSizeEqualToSize(self.size, CGSizeZero)) { 57 | return self; 58 | } 59 | 60 | // return [other applyBlendFilter:filterOverlay other:self context:nil]; 61 | // First get the image into your data buffer 62 | CGImageRef inImage = self.CGImage; 63 | int nbPerCompt = (int)CGImageGetBitsPerPixel(inImage); 64 | if(nbPerCompt != 32){ 65 | UIImage *tmpImage = [self normalize]; 66 | inImage = tmpImage.CGImage; 67 | } 68 | CFDataRef dataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); 69 | CFMutableDataRef m_DataRef = CFDataCreateMutableCopy(0, 0, dataRef); 70 | CFRelease(dataRef); 71 | UInt8 * m_PixelBuf=malloc(CFDataGetLength(m_DataRef)); 72 | CFDataGetBytes(m_DataRef, 73 | CFRangeMake(0,CFDataGetLength(m_DataRef)) , 74 | m_PixelBuf); 75 | 76 | CGContextRef ctx = CGBitmapContextCreate(m_PixelBuf, 77 | CGImageGetWidth(inImage), 78 | CGImageGetHeight(inImage), 79 | CGImageGetBitsPerComponent(inImage), 80 | CGImageGetBytesPerRow(inImage), 81 | CGImageGetColorSpace(inImage), 82 | CGImageGetBitmapInfo(inImage) 83 | ); 84 | 85 | // Apply stack blur 86 | const int imageWidth = (int)CGImageGetWidth(inImage); 87 | const int imageHeight = (int)CGImageGetHeight(inImage); 88 | [self.class applyStackBlurToBuffer:m_PixelBuf 89 | width:imageWidth 90 | height:imageHeight 91 | withRadius:inradius]; 92 | 93 | // Make new image 94 | CGImageRef imageRef = CGBitmapContextCreateImage(ctx); 95 | CGContextRelease(ctx); 96 | 97 | UIImage *finalImage = [UIImage imageWithCGImage:imageRef]; 98 | CGImageRelease(imageRef); 99 | CFRelease(m_DataRef); 100 | free(m_PixelBuf); 101 | return finalImage; 102 | } 103 | 104 | 105 | + (void) applyStackBlurToBuffer:(UInt8*)targetBuffer width:(const int)w height:(const int)h withRadius:(NSUInteger)inradius { 106 | // Constants 107 | const int radius = (int)inradius; // Transform unsigned into signed for further operations 108 | const int wm = w - 1; 109 | const int hm = h - 1; 110 | const int wh = w*h; 111 | const int div = radius + radius + 1; 112 | const int r1 = radius + 1; 113 | const int divsum = SQUARE((div+1)>>1); 114 | 115 | // Small buffers 116 | int stack[div*3]; 117 | zeroClearInt(stack, div*3); 118 | 119 | int vmin[MAX(w,h)]; 120 | zeroClearInt(vmin, MAX(w,h)); 121 | 122 | // Large buffers 123 | int *r = malloc(wh*sizeof(int)); 124 | int *g = malloc(wh*sizeof(int)); 125 | int *b = malloc(wh*sizeof(int)); 126 | zeroClearInt(r, wh); 127 | zeroClearInt(g, wh); 128 | zeroClearInt(b, wh); 129 | 130 | const size_t dvcount = 256 * divsum; 131 | int *dv = malloc(sizeof(int) * dvcount); 132 | for (int i = 0;(size_t)i < dvcount;i++) { 133 | dv[i] = (i / divsum); 134 | } 135 | 136 | // Variables 137 | int x, y; 138 | int *sir; 139 | int routsum,goutsum,boutsum; 140 | int rinsum,ginsum,binsum; 141 | int rsum, gsum, bsum, p, yp; 142 | int stackpointer; 143 | int stackstart; 144 | int rbs; 145 | 146 | int yw = 0, yi = 0; 147 | for (y = 0;y < h;y++) { 148 | rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; 149 | 150 | for(int i = -radius;i <= radius;i++){ 151 | sir = &stack[(i + radius)*3]; 152 | int offset = (yi + MIN(wm, MAX(i, 0)))*4; 153 | sir[0] = targetBuffer[offset]; 154 | sir[1] = targetBuffer[offset + 1]; 155 | sir[2] = targetBuffer[offset + 2]; 156 | 157 | rbs = r1 - abs(i); 158 | rsum += sir[0] * rbs; 159 | gsum += sir[1] * rbs; 160 | bsum += sir[2] * rbs; 161 | if (i > 0){ 162 | rinsum += sir[0]; 163 | ginsum += sir[1]; 164 | binsum += sir[2]; 165 | } else { 166 | routsum += sir[0]; 167 | goutsum += sir[1]; 168 | boutsum += sir[2]; 169 | } 170 | } 171 | stackpointer = radius; 172 | 173 | for (x = 0;x < w;x++) { 174 | r[yi] = dv[rsum]; 175 | g[yi] = dv[gsum]; 176 | b[yi] = dv[bsum]; 177 | 178 | rsum -= routsum; 179 | gsum -= goutsum; 180 | bsum -= boutsum; 181 | 182 | stackstart = stackpointer - radius + div; 183 | sir = &stack[(stackstart % div)*3]; 184 | 185 | routsum -= sir[0]; 186 | goutsum -= sir[1]; 187 | boutsum -= sir[2]; 188 | 189 | if (y == 0){ 190 | vmin[x] = MIN(x + radius + 1, wm); 191 | } 192 | 193 | int offset = (yw + vmin[x])*4; 194 | sir[0] = targetBuffer[offset]; 195 | sir[1] = targetBuffer[offset + 1]; 196 | sir[2] = targetBuffer[offset + 2]; 197 | rinsum += sir[0]; 198 | ginsum += sir[1]; 199 | binsum += sir[2]; 200 | 201 | rsum += rinsum; 202 | gsum += ginsum; 203 | bsum += binsum; 204 | 205 | stackpointer = (stackpointer + 1) % div; 206 | sir = &stack[(stackpointer % div)*3]; 207 | 208 | routsum += sir[0]; 209 | goutsum += sir[1]; 210 | boutsum += sir[2]; 211 | 212 | rinsum -= sir[0]; 213 | ginsum -= sir[1]; 214 | binsum -= sir[2]; 215 | 216 | yi++; 217 | } 218 | yw += w; 219 | } 220 | 221 | for (x = 0;x < w;x++) { 222 | rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; 223 | yp = -radius*w; 224 | for(int i = -radius;i <= radius;i++) { 225 | yi = MAX(0, yp) + x; 226 | 227 | sir = &stack[(i + radius)*3]; 228 | 229 | sir[0] = r[yi]; 230 | sir[1] = g[yi]; 231 | sir[2] = b[yi]; 232 | 233 | rbs = r1 - abs(i); 234 | 235 | rsum += r[yi]*rbs; 236 | gsum += g[yi]*rbs; 237 | bsum += b[yi]*rbs; 238 | 239 | if (i > 0) { 240 | rinsum += sir[0]; 241 | ginsum += sir[1]; 242 | binsum += sir[2]; 243 | } else { 244 | routsum += sir[0]; 245 | goutsum += sir[1]; 246 | boutsum += sir[2]; 247 | } 248 | 249 | if (i < hm) { 250 | yp += w; 251 | } 252 | } 253 | yi = x; 254 | stackpointer = radius; 255 | for (y = 0;y < h;y++) { 256 | int offset = yi*4; 257 | targetBuffer[offset] = dv[rsum]; 258 | targetBuffer[offset + 1] = dv[gsum]; 259 | targetBuffer[offset + 2] = dv[bsum]; 260 | rsum -= routsum; 261 | gsum -= goutsum; 262 | bsum -= boutsum; 263 | 264 | stackstart = stackpointer - radius + div; 265 | sir = &stack[(stackstart % div)*3]; 266 | 267 | routsum -= sir[0]; 268 | goutsum -= sir[1]; 269 | boutsum -= sir[2]; 270 | 271 | if (x == 0){ 272 | vmin[y] = MIN(y + r1, hm)*w; 273 | } 274 | p = x + vmin[y]; 275 | 276 | sir[0] = r[p]; 277 | sir[1] = g[p]; 278 | sir[2] = b[p]; 279 | 280 | rinsum += sir[0]; 281 | ginsum += sir[1]; 282 | binsum += sir[2]; 283 | 284 | rsum += rinsum; 285 | gsum += ginsum; 286 | bsum += binsum; 287 | 288 | stackpointer = (stackpointer + 1) % div; 289 | sir = &stack[stackpointer*3]; 290 | 291 | routsum += sir[0]; 292 | goutsum += sir[1]; 293 | boutsum += sir[2]; 294 | 295 | rinsum -= sir[0]; 296 | ginsum -= sir[1]; 297 | binsum -= sir[2]; 298 | 299 | yi += w; 300 | } 301 | } 302 | 303 | free(r); 304 | free(g); 305 | free(b); 306 | free(dv); 307 | } 308 | 309 | 310 | - (UIImage *) normalize { 311 | int width = self.size.width; 312 | int height = self.size.height; 313 | CGColorSpaceRef genericColorSpace = CGColorSpaceCreateDeviceRGB(); 314 | CGContextRef thumbBitmapCtxt = CGBitmapContextCreate(NULL, 315 | width, 316 | height, 317 | 8, (4 * width), 318 | genericColorSpace, 319 | kCGBitmapAlphaInfoMask); 320 | CGColorSpaceRelease(genericColorSpace); 321 | CGContextSetInterpolationQuality(thumbBitmapCtxt, kCGInterpolationDefault); 322 | CGRect destRect = CGRectMake(0, 0, width, height); 323 | CGContextDrawImage(thumbBitmapCtxt, destRect, self.CGImage); 324 | CGImageRef tmpThumbImage = CGBitmapContextCreateImage(thumbBitmapCtxt); 325 | CGContextRelease(thumbBitmapCtxt); 326 | UIImage *result = [UIImage imageWithCGImage:tmpThumbImage]; 327 | CGImageRelease(tmpThumbImage); 328 | 329 | return result; 330 | } 331 | 332 | @end 333 | -------------------------------------------------------------------------------- /Classes/stackBlurAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // stackBlurAppDelegate.h 3 | // stackBlur 4 | // 5 | // Created by Thomas on 07/02/12. 6 | // Copyright 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class stackBlurViewController; 12 | 13 | @interface stackBlurAppDelegate : NSObject { 14 | UIWindow *window; 15 | stackBlurViewController *viewController; 16 | } 17 | 18 | @property (nonatomic, retain) IBOutlet UIWindow *window; 19 | @property (nonatomic, retain) IBOutlet stackBlurViewController *viewController; 20 | 21 | @end 22 | 23 | -------------------------------------------------------------------------------- /Classes/stackBlurAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // stackBlurAppDelegate.m 3 | // stackBlur 4 | // 5 | // Created by Thomas on 07/02/12. 6 | // Copyright 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "stackBlurAppDelegate.h" 10 | #import "stackBlurViewController.h" 11 | 12 | @implementation stackBlurAppDelegate 13 | 14 | @synthesize window; 15 | @synthesize viewController; 16 | 17 | 18 | #pragma mark - 19 | #pragma mark Application lifecycle 20 | 21 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 22 | 23 | // Override point for customization after application launch. 24 | 25 | // Set the view controller as the window's root view controller and display. 26 | self.window.rootViewController = self.viewController; 27 | [self.window makeKeyAndVisible]; 28 | 29 | return YES; 30 | } 31 | 32 | 33 | - (void)applicationWillResignActive:(UIApplication *)application { 34 | /* 35 | 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. 36 | 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. 37 | */ 38 | } 39 | 40 | 41 | - (void)applicationDidEnterBackground:(UIApplication *)application { 42 | /* 43 | 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. 44 | If your application supports background execution, called instead of applicationWillTerminate: when the user quits. 45 | */ 46 | } 47 | 48 | 49 | - (void)applicationWillEnterForeground:(UIApplication *)application { 50 | /* 51 | Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. 52 | */ 53 | } 54 | 55 | 56 | - (void)applicationDidBecomeActive:(UIApplication *)application { 57 | /* 58 | 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. 59 | */ 60 | } 61 | 62 | 63 | - (void)applicationWillTerminate:(UIApplication *)application { 64 | /* 65 | Called when the application is about to terminate. 66 | See also applicationDidEnterBackground:. 67 | */ 68 | } 69 | 70 | 71 | #pragma mark - 72 | #pragma mark Memory management 73 | 74 | - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 75 | /* 76 | Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. 77 | */ 78 | } 79 | 80 | 81 | - (void)dealloc { 82 | [viewController release]; 83 | [window release]; 84 | [super dealloc]; 85 | } 86 | 87 | 88 | @end 89 | -------------------------------------------------------------------------------- /Classes/stackBlurViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // stackBlurViewController.h 3 | // stackBlur 4 | // 5 | // Created by Thomas on 07/02/12. 6 | // Copyright 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface stackBlurViewController : UIViewController { 12 | IBOutlet UIImageView *imagePreview; 13 | UIImage *source; 14 | } 15 | 16 | - (IBAction) sliderChanged:(id)sender; 17 | 18 | 19 | @end 20 | 21 | -------------------------------------------------------------------------------- /Classes/stackBlurViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // stackBlurViewController.m 3 | // stackBlur 4 | // 5 | // Created by Thomas on 07/02/12. 6 | // Copyright 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "stackBlurViewController.h" 10 | #import "UIImage+StackBlur.h" 11 | 12 | @implementation stackBlurViewController 13 | 14 | 15 | 16 | /* 17 | // The designated initializer. Override to perform setup that is required before the view is loaded. 18 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 19 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 20 | if (self) { 21 | // Custom initialization 22 | } 23 | return self; 24 | } 25 | */ 26 | 27 | /* 28 | // Implement loadView to create a view hierarchy programmatically, without using a nib. 29 | - (void)loadView { 30 | } 31 | */ 32 | 33 | 34 | 35 | // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 36 | - (void)viewDidLoad { 37 | [super viewDidLoad]; 38 | source=[UIImage imageNamed:@"testIma.jpg"]; 39 | imagePreview.image=source; 40 | } 41 | 42 | 43 | 44 | /* 45 | // Override to allow orientations other than the default portrait orientation. 46 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 47 | // Return YES for supported orientations 48 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 49 | } 50 | */ 51 | 52 | - (void)didReceiveMemoryWarning { 53 | // Releases the view if it doesn't have a superview. 54 | [super didReceiveMemoryWarning]; 55 | 56 | // Release any cached data, images, etc that aren't in use. 57 | } 58 | 59 | - (void)viewDidUnload { 60 | // Release any retained subviews of the main view. 61 | // e.g. self.myOutlet = nil; 62 | } 63 | 64 | - (IBAction) sliderChanged:(UISlider *)sender 65 | { 66 | NSLog(@"Slider:"); 67 | imagePreview.image=[source stackBlur:sender.value]; 68 | } 69 | - (void)dealloc { 70 | [imagePreview dealloc]; 71 | [super dealloc]; 72 | } 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /MainWindow.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1024 5 | 10D571 6 | 786 7 | 1038.29 8 | 460.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 112 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | IBCocoaTouchFramework 42 | 43 | 44 | stackBlurViewController 45 | 46 | 47 | 1 48 | 49 | IBCocoaTouchFramework 50 | NO 51 | 52 | 53 | 54 | 292 55 | {320, 480} 56 | 57 | 1 58 | MSAxIDEAA 59 | 60 | NO 61 | NO 62 | 63 | IBCocoaTouchFramework 64 | YES 65 | 66 | 67 | 68 | 69 | YES 70 | 71 | 72 | delegate 73 | 74 | 75 | 76 | 4 77 | 78 | 79 | 80 | viewController 81 | 82 | 83 | 84 | 11 85 | 86 | 87 | 88 | window 89 | 90 | 91 | 92 | 14 93 | 94 | 95 | 96 | 97 | YES 98 | 99 | 0 100 | 101 | 102 | 103 | 104 | 105 | -1 106 | 107 | 108 | File's Owner 109 | 110 | 111 | 3 112 | 113 | 114 | stackBlur App Delegate 115 | 116 | 117 | -2 118 | 119 | 120 | 121 | 122 | 10 123 | 124 | 125 | 126 | 127 | 12 128 | 129 | 130 | 131 | 132 | 133 | 134 | YES 135 | 136 | YES 137 | -1.CustomClassName 138 | -2.CustomClassName 139 | 10.CustomClassName 140 | 10.IBEditorWindowLastContentRect 141 | 10.IBPluginDependency 142 | 12.IBEditorWindowLastContentRect 143 | 12.IBPluginDependency 144 | 3.CustomClassName 145 | 3.IBPluginDependency 146 | 147 | 148 | YES 149 | UIApplication 150 | UIResponder 151 | stackBlurViewController 152 | {{234, 376}, {320, 480}} 153 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 154 | {{525, 346}, {320, 480}} 155 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 156 | stackBlurAppDelegate 157 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 158 | 159 | 160 | 161 | YES 162 | 163 | 164 | YES 165 | 166 | 167 | 168 | 169 | YES 170 | 171 | 172 | YES 173 | 174 | 175 | 176 | 15 177 | 178 | 179 | 180 | YES 181 | 182 | UIWindow 183 | UIView 184 | 185 | IBUserSource 186 | 187 | 188 | 189 | 190 | stackBlurAppDelegate 191 | NSObject 192 | 193 | YES 194 | 195 | YES 196 | viewController 197 | window 198 | 199 | 200 | YES 201 | stackBlurViewController 202 | UIWindow 203 | 204 | 205 | 206 | YES 207 | 208 | YES 209 | viewController 210 | window 211 | 212 | 213 | YES 214 | 215 | viewController 216 | stackBlurViewController 217 | 218 | 219 | window 220 | UIWindow 221 | 222 | 223 | 224 | 225 | IBProjectSource 226 | Classes/stackBlurAppDelegate.h 227 | 228 | 229 | 230 | stackBlurAppDelegate 231 | NSObject 232 | 233 | IBUserSource 234 | 235 | 236 | 237 | 238 | stackBlurViewController 239 | UIViewController 240 | 241 | IBProjectSource 242 | Classes/stackBlurViewController.h 243 | 244 | 245 | 246 | 247 | YES 248 | 249 | NSObject 250 | 251 | IBFrameworkSource 252 | Foundation.framework/Headers/NSError.h 253 | 254 | 255 | 256 | NSObject 257 | 258 | IBFrameworkSource 259 | Foundation.framework/Headers/NSFileManager.h 260 | 261 | 262 | 263 | NSObject 264 | 265 | IBFrameworkSource 266 | Foundation.framework/Headers/NSKeyValueCoding.h 267 | 268 | 269 | 270 | NSObject 271 | 272 | IBFrameworkSource 273 | Foundation.framework/Headers/NSKeyValueObserving.h 274 | 275 | 276 | 277 | NSObject 278 | 279 | IBFrameworkSource 280 | Foundation.framework/Headers/NSKeyedArchiver.h 281 | 282 | 283 | 284 | NSObject 285 | 286 | IBFrameworkSource 287 | Foundation.framework/Headers/NSObject.h 288 | 289 | 290 | 291 | NSObject 292 | 293 | IBFrameworkSource 294 | Foundation.framework/Headers/NSRunLoop.h 295 | 296 | 297 | 298 | NSObject 299 | 300 | IBFrameworkSource 301 | Foundation.framework/Headers/NSThread.h 302 | 303 | 304 | 305 | NSObject 306 | 307 | IBFrameworkSource 308 | Foundation.framework/Headers/NSURL.h 309 | 310 | 311 | 312 | NSObject 313 | 314 | IBFrameworkSource 315 | Foundation.framework/Headers/NSURLConnection.h 316 | 317 | 318 | 319 | NSObject 320 | 321 | IBFrameworkSource 322 | UIKit.framework/Headers/UIAccessibility.h 323 | 324 | 325 | 326 | NSObject 327 | 328 | IBFrameworkSource 329 | UIKit.framework/Headers/UINibLoading.h 330 | 331 | 332 | 333 | NSObject 334 | 335 | IBFrameworkSource 336 | UIKit.framework/Headers/UIResponder.h 337 | 338 | 339 | 340 | UIApplication 341 | UIResponder 342 | 343 | IBFrameworkSource 344 | UIKit.framework/Headers/UIApplication.h 345 | 346 | 347 | 348 | UIResponder 349 | NSObject 350 | 351 | 352 | 353 | UISearchBar 354 | UIView 355 | 356 | IBFrameworkSource 357 | UIKit.framework/Headers/UISearchBar.h 358 | 359 | 360 | 361 | UISearchDisplayController 362 | NSObject 363 | 364 | IBFrameworkSource 365 | UIKit.framework/Headers/UISearchDisplayController.h 366 | 367 | 368 | 369 | UIView 370 | 371 | IBFrameworkSource 372 | UIKit.framework/Headers/UITextField.h 373 | 374 | 375 | 376 | UIView 377 | UIResponder 378 | 379 | IBFrameworkSource 380 | UIKit.framework/Headers/UIView.h 381 | 382 | 383 | 384 | UIViewController 385 | 386 | IBFrameworkSource 387 | UIKit.framework/Headers/UINavigationController.h 388 | 389 | 390 | 391 | UIViewController 392 | 393 | IBFrameworkSource 394 | UIKit.framework/Headers/UIPopoverController.h 395 | 396 | 397 | 398 | UIViewController 399 | 400 | IBFrameworkSource 401 | UIKit.framework/Headers/UISplitViewController.h 402 | 403 | 404 | 405 | UIViewController 406 | 407 | IBFrameworkSource 408 | UIKit.framework/Headers/UITabBarController.h 409 | 410 | 411 | 412 | UIViewController 413 | UIResponder 414 | 415 | IBFrameworkSource 416 | UIKit.framework/Headers/UIViewController.h 417 | 418 | 419 | 420 | UIWindow 421 | UIView 422 | 423 | IBFrameworkSource 424 | UIKit.framework/Headers/UIWindow.h 425 | 426 | 427 | 428 | 429 | 0 430 | IBCocoaTouchFramework 431 | 432 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 433 | 434 | 435 | 436 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 437 | 438 | 439 | YES 440 | stackBlur.xcodeproj 441 | 3 442 | 112 443 | 444 | 445 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This is a StackBlur implementation for iOS based on the algorithm of: 2 | 3 | http://incubator.quasimondo.com/processing/fast_blur_deluxe.php 4 | 5 | by Mario Klingemann 6 | 7 | To use it, just import the UIImage+StackBlur.h and .m in your project. 8 | 9 | Then, to blur an image: 10 | 11 | UIImage *newIma=[oldIma stackBlur:radius]; 12 | 13 | You can also apply the method to a buffer directly if you dont'have access to the full UIImage (see applyStackBlurToBuffer) 14 | 15 | The algorithm expect an RGBA format (32 bits/pixel). 16 | If it's not the case, the image will be transformed in a 32 bits/pixel format at each call. You can also use the [UIImage normalize] function of the library to do it once 17 | 18 | UIImage *myIma=[[UIImage imageNamed:@"blackWhite.png"] normalized]; 19 | 20 | ... 21 | UIImage *blurIma=[myIm stackBlur:radius]; 22 | 23 | Radius must be higher than 1 ... 24 | 25 | thomas.landspurg@gmail.com 26 | 27 | 28 | License: New BSD license. -------------------------------------------------------------------------------- /Ressources/testIma.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoft1/StackBluriOS/1920906f1f9e486ca893fa858459a59b40b1c8e1/Ressources/testIma.jpg -------------------------------------------------------------------------------- /StackBluriOS.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'StackBluriOS' 3 | s.version = '0.0.2' 4 | s.platform = :ios 5 | s.license = 'BSD' 6 | s.summary = 'Stack Blur implementation for iOS.' 7 | s.homepage = 'https://github.com/tomsoft1/StackBluriOS' 8 | s.author = { 'Thomas Landspurg' => 'thomas.landspurg@gmail.com' } 9 | s.source = { :git => 'https://github.com/tomsoft1/StackBluriOS.git', :commit => 'b12dd3ba2eedc089cf2b518e693b0beea78e6806' } 10 | 11 | s.source_files = 'Classes/UIImage+StackBlur.*' 12 | s.requires_arc = true 13 | end 14 | -------------------------------------------------------------------------------- /main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // stackBlur 4 | // 5 | // Created by Thomas on 07/02/12. 6 | // Copyright 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) { 12 | 13 | NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 14 | int retVal = UIApplicationMain(argc, argv, nil, nil); 15 | [pool release]; 16 | return retVal; 17 | } 18 | -------------------------------------------------------------------------------- /stackBlur-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | NSMainNibFile 28 | MainWindow 29 | 30 | 31 | -------------------------------------------------------------------------------- /stackBlur.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1D3623260D0F684500981E51 /* stackBlurAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* stackBlurAppDelegate.m */; }; 11 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 12 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 13 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 14 | 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; 15 | 2899E5220DE3E06400AC0155 /* stackBlurViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* stackBlurViewController.xib */; }; 16 | 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; 17 | 28D7ACF80DDB3853001CB0EB /* stackBlurViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */; }; 18 | E9A020CE14E1215000B451FC /* testIma.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E9A020CD14E1215000B451FC /* testIma.jpg */; }; 19 | E9A020E114E1220000B451FC /* UIImage+StackBlur.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A020E014E1220000B451FC /* UIImage+StackBlur.m */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXFileReference section */ 23 | 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 24 | 1D3623240D0F684500981E51 /* stackBlurAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stackBlurAppDelegate.h; sourceTree = ""; }; 25 | 1D3623250D0F684500981E51 /* stackBlurAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = stackBlurAppDelegate.m; sourceTree = ""; }; 26 | 1D6058910D05DD3D006BFB54 /* stackBlur.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = stackBlur.app; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 28 | 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 29 | 2899E5210DE3E06400AC0155 /* stackBlurViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = stackBlurViewController.xib; sourceTree = ""; }; 30 | 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; 31 | 28D7ACF60DDB3853001CB0EB /* stackBlurViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stackBlurViewController.h; sourceTree = ""; }; 32 | 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = stackBlurViewController.m; sourceTree = ""; }; 33 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 34 | 32CA4F630368D1EE00C91783 /* stackBlur_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stackBlur_Prefix.pch; sourceTree = ""; }; 35 | 8D1107310486CEB800E47090 /* stackBlur-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "stackBlur-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; 36 | E9A020CD14E1215000B451FC /* testIma.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = testIma.jpg; path = Ressources/testIma.jpg; sourceTree = ""; }; 37 | E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+StackBlur.h"; sourceTree = ""; }; 38 | E9A020E014E1220000B451FC /* UIImage+StackBlur.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+StackBlur.m"; sourceTree = ""; }; 39 | /* End PBXFileReference section */ 40 | 41 | /* Begin PBXFrameworksBuildPhase section */ 42 | 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { 43 | isa = PBXFrameworksBuildPhase; 44 | buildActionMask = 2147483647; 45 | files = ( 46 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 47 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 48 | 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, 49 | ); 50 | runOnlyForDeploymentPostprocessing = 0; 51 | }; 52 | /* End PBXFrameworksBuildPhase section */ 53 | 54 | /* Begin PBXGroup section */ 55 | 080E96DDFE201D6D7F000001 /* Classes */ = { 56 | isa = PBXGroup; 57 | children = ( 58 | 1D3623240D0F684500981E51 /* stackBlurAppDelegate.h */, 59 | 1D3623250D0F684500981E51 /* stackBlurAppDelegate.m */, 60 | 28D7ACF60DDB3853001CB0EB /* stackBlurViewController.h */, 61 | 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */, 62 | E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */, 63 | E9A020E014E1220000B451FC /* UIImage+StackBlur.m */, 64 | ); 65 | path = Classes; 66 | sourceTree = ""; 67 | }; 68 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 1D6058910D05DD3D006BFB54 /* stackBlur.app */, 72 | ); 73 | name = Products; 74 | sourceTree = ""; 75 | }; 76 | 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 080E96DDFE201D6D7F000001 /* Classes */, 80 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 81 | 29B97317FDCFA39411CA2CEA /* Resources */, 82 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 83 | 19C28FACFE9D520D11CA2CBB /* Products */, 84 | ); 85 | name = CustomTemplate; 86 | sourceTree = ""; 87 | }; 88 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | 32CA4F630368D1EE00C91783 /* stackBlur_Prefix.pch */, 92 | 29B97316FDCFA39411CA2CEA /* main.m */, 93 | ); 94 | name = "Other Sources"; 95 | sourceTree = ""; 96 | }; 97 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | E9A020CD14E1215000B451FC /* testIma.jpg */, 101 | 2899E5210DE3E06400AC0155 /* stackBlurViewController.xib */, 102 | 28AD733E0D9D9553002E5188 /* MainWindow.xib */, 103 | 8D1107310486CEB800E47090 /* stackBlur-Info.plist */, 104 | ); 105 | name = Resources; 106 | sourceTree = ""; 107 | }; 108 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 109 | isa = PBXGroup; 110 | children = ( 111 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, 112 | 1D30AB110D05D00D00671497 /* Foundation.framework */, 113 | 288765A40DF7441C002DB57D /* CoreGraphics.framework */, 114 | ); 115 | name = Frameworks; 116 | sourceTree = ""; 117 | }; 118 | /* End PBXGroup section */ 119 | 120 | /* Begin PBXNativeTarget section */ 121 | 1D6058900D05DD3D006BFB54 /* stackBlur */ = { 122 | isa = PBXNativeTarget; 123 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "stackBlur" */; 124 | buildPhases = ( 125 | 1D60588D0D05DD3D006BFB54 /* Resources */, 126 | 1D60588E0D05DD3D006BFB54 /* Sources */, 127 | 1D60588F0D05DD3D006BFB54 /* Frameworks */, 128 | ); 129 | buildRules = ( 130 | ); 131 | dependencies = ( 132 | ); 133 | name = stackBlur; 134 | productName = stackBlur; 135 | productReference = 1D6058910D05DD3D006BFB54 /* stackBlur.app */; 136 | productType = "com.apple.product-type.application"; 137 | }; 138 | /* End PBXNativeTarget section */ 139 | 140 | /* Begin PBXProject section */ 141 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 142 | isa = PBXProject; 143 | attributes = { 144 | LastUpgradeCheck = 0720; 145 | }; 146 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "stackBlur" */; 147 | compatibilityVersion = "Xcode 3.2"; 148 | developmentRegion = English; 149 | hasScannedForEncodings = 1; 150 | knownRegions = ( 151 | English, 152 | Japanese, 153 | French, 154 | German, 155 | ); 156 | mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; 157 | projectDirPath = ""; 158 | projectRoot = ""; 159 | targets = ( 160 | 1D6058900D05DD3D006BFB54 /* stackBlur */, 161 | ); 162 | }; 163 | /* End PBXProject section */ 164 | 165 | /* Begin PBXResourcesBuildPhase section */ 166 | 1D60588D0D05DD3D006BFB54 /* Resources */ = { 167 | isa = PBXResourcesBuildPhase; 168 | buildActionMask = 2147483647; 169 | files = ( 170 | 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, 171 | 2899E5220DE3E06400AC0155 /* stackBlurViewController.xib in Resources */, 172 | E9A020CE14E1215000B451FC /* testIma.jpg in Resources */, 173 | ); 174 | runOnlyForDeploymentPostprocessing = 0; 175 | }; 176 | /* End PBXResourcesBuildPhase section */ 177 | 178 | /* Begin PBXSourcesBuildPhase section */ 179 | 1D60588E0D05DD3D006BFB54 /* Sources */ = { 180 | isa = PBXSourcesBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */, 184 | 1D3623260D0F684500981E51 /* stackBlurAppDelegate.m in Sources */, 185 | 28D7ACF80DDB3853001CB0EB /* stackBlurViewController.m in Sources */, 186 | E9A020E114E1220000B451FC /* UIImage+StackBlur.m in Sources */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXSourcesBuildPhase section */ 191 | 192 | /* Begin XCBuildConfiguration section */ 193 | 1D6058940D05DD3E006BFB54 /* Debug */ = { 194 | isa = XCBuildConfiguration; 195 | buildSettings = { 196 | ALWAYS_SEARCH_USER_PATHS = NO; 197 | COPY_PHASE_STRIP = NO; 198 | GCC_DYNAMIC_NO_PIC = NO; 199 | GCC_OPTIMIZATION_LEVEL = 0; 200 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 201 | GCC_PREFIX_HEADER = stackBlur_Prefix.pch; 202 | INFOPLIST_FILE = "stackBlur-Info.plist"; 203 | PRODUCT_BUNDLE_IDENTIFIER = "com.yourcompany.${PRODUCT_NAME:rfc1034identifier}"; 204 | PRODUCT_NAME = stackBlur; 205 | }; 206 | name = Debug; 207 | }; 208 | 1D6058950D05DD3E006BFB54 /* Release */ = { 209 | isa = XCBuildConfiguration; 210 | buildSettings = { 211 | ALWAYS_SEARCH_USER_PATHS = NO; 212 | COPY_PHASE_STRIP = YES; 213 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 214 | GCC_PREFIX_HEADER = stackBlur_Prefix.pch; 215 | INFOPLIST_FILE = "stackBlur-Info.plist"; 216 | PRODUCT_BUNDLE_IDENTIFIER = "com.yourcompany.${PRODUCT_NAME:rfc1034identifier}"; 217 | PRODUCT_NAME = stackBlur; 218 | VALIDATE_PRODUCT = YES; 219 | }; 220 | name = Release; 221 | }; 222 | C01FCF4F08A954540054247B /* Debug */ = { 223 | isa = XCBuildConfiguration; 224 | buildSettings = { 225 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 226 | ENABLE_TESTABILITY = YES; 227 | GCC_C_LANGUAGE_STANDARD = c99; 228 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 229 | GCC_WARN_UNUSED_VARIABLE = YES; 230 | ONLY_ACTIVE_ARCH = YES; 231 | PREBINDING = NO; 232 | SDKROOT = iphoneos; 233 | }; 234 | name = Debug; 235 | }; 236 | C01FCF5008A954540054247B /* Release */ = { 237 | isa = XCBuildConfiguration; 238 | buildSettings = { 239 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 240 | GCC_C_LANGUAGE_STANDARD = c99; 241 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 242 | GCC_WARN_UNUSED_VARIABLE = YES; 243 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 244 | PREBINDING = NO; 245 | SDKROOT = iphoneos; 246 | }; 247 | name = Release; 248 | }; 249 | /* End XCBuildConfiguration section */ 250 | 251 | /* Begin XCConfigurationList section */ 252 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "stackBlur" */ = { 253 | isa = XCConfigurationList; 254 | buildConfigurations = ( 255 | 1D6058940D05DD3E006BFB54 /* Debug */, 256 | 1D6058950D05DD3E006BFB54 /* Release */, 257 | ); 258 | defaultConfigurationIsVisible = 0; 259 | defaultConfigurationName = Release; 260 | }; 261 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "stackBlur" */ = { 262 | isa = XCConfigurationList; 263 | buildConfigurations = ( 264 | C01FCF4F08A954540054247B /* Debug */, 265 | C01FCF5008A954540054247B /* Release */, 266 | ); 267 | defaultConfigurationIsVisible = 0; 268 | defaultConfigurationName = Release; 269 | }; 270 | /* End XCConfigurationList section */ 271 | }; 272 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 273 | } 274 | -------------------------------------------------------------------------------- /stackBlur.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /stackBlur.xcodeproj/project.xcworkspace/xcuserdata/tomsoft.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoft1/StackBluriOS/1920906f1f9e486ca893fa858459a59b40b1c8e1/stackBlur.xcodeproj/project.xcworkspace/xcuserdata/tomsoft.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /stackBlur.xcodeproj/thomas.mode1v3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActivePerspectiveName 6 | Project 7 | AllowedModules 8 | 9 | 10 | BundleLoadPath 11 | 12 | MaxInstances 13 | n 14 | Module 15 | PBXSmartGroupTreeModule 16 | Name 17 | Groups and Files Outline View 18 | 19 | 20 | BundleLoadPath 21 | 22 | MaxInstances 23 | n 24 | Module 25 | PBXNavigatorGroup 26 | Name 27 | Editor 28 | 29 | 30 | BundleLoadPath 31 | 32 | MaxInstances 33 | n 34 | Module 35 | XCTaskListModule 36 | Name 37 | Task List 38 | 39 | 40 | BundleLoadPath 41 | 42 | MaxInstances 43 | n 44 | Module 45 | XCDetailModule 46 | Name 47 | File and Smart Group Detail Viewer 48 | 49 | 50 | BundleLoadPath 51 | 52 | MaxInstances 53 | 1 54 | Module 55 | PBXBuildResultsModule 56 | Name 57 | Detailed Build Results Viewer 58 | 59 | 60 | BundleLoadPath 61 | 62 | MaxInstances 63 | 1 64 | Module 65 | PBXProjectFindModule 66 | Name 67 | Project Batch Find Tool 68 | 69 | 70 | BundleLoadPath 71 | 72 | MaxInstances 73 | n 74 | Module 75 | XCProjectFormatConflictsModule 76 | Name 77 | Project Format Conflicts List 78 | 79 | 80 | BundleLoadPath 81 | 82 | MaxInstances 83 | n 84 | Module 85 | PBXBookmarksModule 86 | Name 87 | Bookmarks Tool 88 | 89 | 90 | BundleLoadPath 91 | 92 | MaxInstances 93 | n 94 | Module 95 | PBXClassBrowserModule 96 | Name 97 | Class Browser 98 | 99 | 100 | BundleLoadPath 101 | 102 | MaxInstances 103 | n 104 | Module 105 | PBXCVSModule 106 | Name 107 | Source Code Control Tool 108 | 109 | 110 | BundleLoadPath 111 | 112 | MaxInstances 113 | n 114 | Module 115 | PBXDebugBreakpointsModule 116 | Name 117 | Debug Breakpoints Tool 118 | 119 | 120 | BundleLoadPath 121 | 122 | MaxInstances 123 | n 124 | Module 125 | XCDockableInspector 126 | Name 127 | Inspector 128 | 129 | 130 | BundleLoadPath 131 | 132 | MaxInstances 133 | n 134 | Module 135 | PBXOpenQuicklyModule 136 | Name 137 | Open Quickly Tool 138 | 139 | 140 | BundleLoadPath 141 | 142 | MaxInstances 143 | 1 144 | Module 145 | PBXDebugSessionModule 146 | Name 147 | Debugger 148 | 149 | 150 | BundleLoadPath 151 | 152 | MaxInstances 153 | 1 154 | Module 155 | PBXDebugCLIModule 156 | Name 157 | Debug Console 158 | 159 | 160 | BundleLoadPath 161 | 162 | MaxInstances 163 | n 164 | Module 165 | XCSnapshotModule 166 | Name 167 | Snapshots Tool 168 | 169 | 170 | BundlePath 171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources 172 | Description 173 | DefaultDescriptionKey 174 | DockingSystemVisible 175 | 176 | Extension 177 | mode1v3 178 | FavBarConfig 179 | 180 | PBXProjectModuleGUID 181 | E9A020BF14E1206F00B451FC 182 | XCBarModuleItemNames 183 | 184 | XCBarModuleItems 185 | 186 | 187 | FirstTimeWindowDisplayed 188 | 189 | Identifier 190 | com.apple.perspectives.project.mode1v3 191 | MajorVersion 192 | 33 193 | MinorVersion 194 | 0 195 | Name 196 | Default 197 | Notifications 198 | 199 | OpenEditors 200 | 201 | PerspectiveWidths 202 | 203 | -1 204 | -1 205 | 206 | Perspectives 207 | 208 | 209 | ChosenToolbarItems 210 | 211 | active-combo-popup 212 | action 213 | NSToolbarFlexibleSpaceItem 214 | debugger-enable-breakpoints 215 | build-and-go 216 | com.apple.ide.PBXToolbarStopButton 217 | get-info 218 | NSToolbarFlexibleSpaceItem 219 | com.apple.pbx.toolbar.searchfield 220 | 221 | ControllerClassBaseName 222 | 223 | IconName 224 | WindowOfProjectWithEditor 225 | Identifier 226 | perspective.project 227 | IsVertical 228 | 229 | Layout 230 | 231 | 232 | ContentConfiguration 233 | 234 | PBXBottomSmartGroupGIDs 235 | 236 | 1C37FBAC04509CD000000102 237 | 1C37FAAC04509CD000000102 238 | 1C37FABC05509CD000000102 239 | 1C37FABC05539CD112110102 240 | E2644B35053B69B200211256 241 | 1C37FABC04509CD000100104 242 | 1CC0EA4004350EF90044410B 243 | 1CC0EA4004350EF90041110B 244 | 245 | PBXProjectModuleGUID 246 | 1CE0B1FE06471DED0097A5F4 247 | PBXProjectModuleLabel 248 | Files 249 | PBXProjectStructureProvided 250 | yes 251 | PBXSmartGroupTreeModuleColumnData 252 | 253 | PBXSmartGroupTreeModuleColumnWidthsKey 254 | 255 | 186 256 | 257 | PBXSmartGroupTreeModuleColumnsKey_v4 258 | 259 | MainColumn 260 | 261 | 262 | PBXSmartGroupTreeModuleOutlineStateKey_v7 263 | 264 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 265 | 266 | 29B97314FDCFA39411CA2CEA 267 | 080E96DDFE201D6D7F000001 268 | 29B97317FDCFA39411CA2CEA 269 | 1C37FABC05509CD000000102 270 | 271 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 272 | 273 | 274 | 7 275 | 1 276 | 0 277 | 278 | 279 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 280 | {{0, 0}, {186, 445}} 281 | 282 | PBXTopSmartGroupGIDs 283 | 284 | XCIncludePerspectivesSwitch 285 | 286 | XCSharingToken 287 | com.apple.Xcode.GFSharingToken 288 | 289 | GeometryConfiguration 290 | 291 | Frame 292 | {{0, 0}, {203, 463}} 293 | GroupTreeTableConfiguration 294 | 295 | MainColumn 296 | 186 297 | 298 | RubberWindowFrame 299 | 131 250 788 504 0 0 1280 778 300 | 301 | Module 302 | PBXSmartGroupTreeModule 303 | Proportion 304 | 203pt 305 | 306 | 307 | Dock 308 | 309 | 310 | BecomeActive 311 | 312 | ContentConfiguration 313 | 314 | PBXProjectModuleGUID 315 | 1CE0B20306471E060097A5F4 316 | PBXProjectModuleLabel 317 | UIImage+StackBlur.m 318 | PBXSplitModuleInNavigatorKey 319 | 320 | Split0 321 | 322 | PBXProjectModuleGUID 323 | 1CE0B20406471E060097A5F4 324 | PBXProjectModuleLabel 325 | UIImage+StackBlur.m 326 | _historyCapacity 327 | 0 328 | bookmark 329 | E9A0217C14E147B700B451FC 330 | history 331 | 332 | E9A020D114E121C900B451FC 333 | E9A020F314E1239E00B451FC 334 | E9A020F514E1239E00B451FC 335 | E9A0210E14E1243500B451FC 336 | E9A0213C14E126ED00B451FC 337 | E9A0213D14E126ED00B451FC 338 | E9A0213E14E126ED00B451FC 339 | 340 | 341 | SplitCount 342 | 1 343 | 344 | StatusBarVisibility 345 | 346 | 347 | GeometryConfiguration 348 | 349 | Frame 350 | {{0, 0}, {580, 269}} 351 | RubberWindowFrame 352 | 131 250 788 504 0 0 1280 778 353 | 354 | Module 355 | PBXNavigatorGroup 356 | Proportion 357 | 269pt 358 | 359 | 360 | ContentConfiguration 361 | 362 | PBXProjectModuleGUID 363 | 1CE0B20506471E060097A5F4 364 | PBXProjectModuleLabel 365 | Detail 366 | 367 | GeometryConfiguration 368 | 369 | Frame 370 | {{0, 274}, {580, 189}} 371 | RubberWindowFrame 372 | 131 250 788 504 0 0 1280 778 373 | 374 | Module 375 | XCDetailModule 376 | Proportion 377 | 189pt 378 | 379 | 380 | Proportion 381 | 580pt 382 | 383 | 384 | Name 385 | Project 386 | ServiceClasses 387 | 388 | XCModuleDock 389 | PBXSmartGroupTreeModule 390 | XCModuleDock 391 | PBXNavigatorGroup 392 | XCDetailModule 393 | 394 | TableOfContents 395 | 396 | E9A020D514E121C900B451FC 397 | 1CE0B1FE06471DED0097A5F4 398 | E9A020D614E121C900B451FC 399 | 1CE0B20306471E060097A5F4 400 | 1CE0B20506471E060097A5F4 401 | 402 | ToolbarConfigUserDefaultsMinorVersion 403 | 2 404 | ToolbarConfiguration 405 | xcode.toolbar.config.defaultV3 406 | 407 | 408 | ControllerClassBaseName 409 | 410 | IconName 411 | WindowOfProject 412 | Identifier 413 | perspective.morph 414 | IsVertical 415 | 0 416 | Layout 417 | 418 | 419 | BecomeActive 420 | 1 421 | ContentConfiguration 422 | 423 | PBXBottomSmartGroupGIDs 424 | 425 | 1C37FBAC04509CD000000102 426 | 1C37FAAC04509CD000000102 427 | 1C08E77C0454961000C914BD 428 | 1C37FABC05509CD000000102 429 | 1C37FABC05539CD112110102 430 | E2644B35053B69B200211256 431 | 1C37FABC04509CD000100104 432 | 1CC0EA4004350EF90044410B 433 | 1CC0EA4004350EF90041110B 434 | 435 | PBXProjectModuleGUID 436 | 11E0B1FE06471DED0097A5F4 437 | PBXProjectModuleLabel 438 | Files 439 | PBXProjectStructureProvided 440 | yes 441 | PBXSmartGroupTreeModuleColumnData 442 | 443 | PBXSmartGroupTreeModuleColumnWidthsKey 444 | 445 | 186 446 | 447 | PBXSmartGroupTreeModuleColumnsKey_v4 448 | 449 | MainColumn 450 | 451 | 452 | PBXSmartGroupTreeModuleOutlineStateKey_v7 453 | 454 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 455 | 456 | 29B97314FDCFA39411CA2CEA 457 | 1C37FABC05509CD000000102 458 | 459 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 460 | 461 | 462 | 0 463 | 464 | 465 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 466 | {{0, 0}, {186, 337}} 467 | 468 | PBXTopSmartGroupGIDs 469 | 470 | XCIncludePerspectivesSwitch 471 | 1 472 | XCSharingToken 473 | com.apple.Xcode.GFSharingToken 474 | 475 | GeometryConfiguration 476 | 477 | Frame 478 | {{0, 0}, {203, 355}} 479 | GroupTreeTableConfiguration 480 | 481 | MainColumn 482 | 186 483 | 484 | RubberWindowFrame 485 | 373 269 690 397 0 0 1440 878 486 | 487 | Module 488 | PBXSmartGroupTreeModule 489 | Proportion 490 | 100% 491 | 492 | 493 | Name 494 | Morph 495 | PreferredWidth 496 | 300 497 | ServiceClasses 498 | 499 | XCModuleDock 500 | PBXSmartGroupTreeModule 501 | 502 | TableOfContents 503 | 504 | 11E0B1FE06471DED0097A5F4 505 | 506 | ToolbarConfiguration 507 | xcode.toolbar.config.default.shortV3 508 | 509 | 510 | PerspectivesBarVisible 511 | 512 | ShelfIsVisible 513 | 514 | SourceDescription 515 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' 516 | StatusbarIsVisible 517 | 518 | TimeStamp 519 | 0.0 520 | ToolbarConfigUserDefaultsMinorVersion 521 | 2 522 | ToolbarDisplayMode 523 | 1 524 | ToolbarIsVisible 525 | 526 | ToolbarSizeMode 527 | 1 528 | Type 529 | Perspectives 530 | UpdateMessage 531 | The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? 532 | WindowJustification 533 | 5 534 | WindowOrderList 535 | 536 | E9A0214014E126ED00B451FC 537 | E9A020FB14E1239E00B451FC 538 | E9A020FC14E1239E00B451FC 539 | 1C78EAAD065D492600B07095 540 | 1CD10A99069EF8BA00B06720 541 | E9A020C014E1206F00B451FC 542 | /Users/thomas/Documents/stackBlur/stackBlur.xcodeproj 543 | 544 | WindowString 545 | 131 250 788 504 0 0 1280 778 546 | WindowToolsV3 547 | 548 | 549 | FirstTimeWindowDisplayed 550 | 551 | Identifier 552 | windowTool.build 553 | IsVertical 554 | 555 | Layout 556 | 557 | 558 | Dock 559 | 560 | 561 | BecomeActive 562 | 563 | ContentConfiguration 564 | 565 | PBXProjectModuleGUID 566 | 1CD0528F0623707200166675 567 | PBXProjectModuleLabel 568 | UIImage+StackBlur.h 569 | StatusBarVisibility 570 | 571 | 572 | GeometryConfiguration 573 | 574 | Frame 575 | {{0, 0}, {500, 218}} 576 | RubberWindowFrame 577 | 152 232 500 500 0 0 1280 778 578 | 579 | Module 580 | PBXNavigatorGroup 581 | Proportion 582 | 218pt 583 | 584 | 585 | ContentConfiguration 586 | 587 | PBXProjectModuleGUID 588 | XCMainBuildResultsModuleGUID 589 | PBXProjectModuleLabel 590 | Build Results 591 | XCBuildResultsTrigger_Collapse 592 | 1021 593 | XCBuildResultsTrigger_Open 594 | 1011 595 | 596 | GeometryConfiguration 597 | 598 | Frame 599 | {{0, 223}, {500, 236}} 600 | RubberWindowFrame 601 | 152 232 500 500 0 0 1280 778 602 | 603 | Module 604 | PBXBuildResultsModule 605 | Proportion 606 | 236pt 607 | 608 | 609 | Proportion 610 | 459pt 611 | 612 | 613 | Name 614 | Build Results 615 | ServiceClasses 616 | 617 | PBXBuildResultsModule 618 | 619 | StatusbarIsVisible 620 | 621 | TableOfContents 622 | 623 | E9A020C014E1206F00B451FC 624 | E9A020D714E121C900B451FC 625 | 1CD0528F0623707200166675 626 | XCMainBuildResultsModuleGUID 627 | 628 | ToolbarConfiguration 629 | xcode.toolbar.config.buildV3 630 | WindowContentMinSize 631 | 486 300 632 | WindowString 633 | 152 232 500 500 0 0 1280 778 634 | WindowToolGUID 635 | E9A020C014E1206F00B451FC 636 | WindowToolIsVisible 637 | 638 | 639 | 640 | FirstTimeWindowDisplayed 641 | 642 | Identifier 643 | windowTool.debugger 644 | IsVertical 645 | 646 | Layout 647 | 648 | 649 | Dock 650 | 651 | 652 | ContentConfiguration 653 | 654 | Debugger 655 | 656 | HorizontalSplitView 657 | 658 | _collapsingFrameDimension 659 | 0.0 660 | _indexOfCollapsedView 661 | 0 662 | _percentageOfCollapsedView 663 | 0.0 664 | isCollapsed 665 | yes 666 | sizes 667 | 668 | {{0, 0}, {316, 185}} 669 | {{316, 0}, {378, 185}} 670 | 671 | 672 | VerticalSplitView 673 | 674 | _collapsingFrameDimension 675 | 0.0 676 | _indexOfCollapsedView 677 | 0 678 | _percentageOfCollapsedView 679 | 0.0 680 | isCollapsed 681 | yes 682 | sizes 683 | 684 | {{0, 0}, {694, 185}} 685 | {{0, 185}, {694, 196}} 686 | 687 | 688 | 689 | LauncherConfigVersion 690 | 8 691 | PBXProjectModuleGUID 692 | 1C162984064C10D400B95A72 693 | PBXProjectModuleLabel 694 | Debug - GLUTExamples (Underwater) 695 | 696 | GeometryConfiguration 697 | 698 | DebugConsoleVisible 699 | None 700 | DebugConsoleWindowFrame 701 | {{200, 200}, {500, 300}} 702 | DebugSTDIOWindowFrame 703 | {{200, 200}, {500, 300}} 704 | Frame 705 | {{0, 0}, {694, 381}} 706 | PBXDebugSessionStackFrameViewKey 707 | 708 | DebugVariablesTableConfiguration 709 | 710 | Name 711 | 120 712 | Value 713 | 85 714 | Summary 715 | 148 716 | 717 | Frame 718 | {{316, 0}, {378, 185}} 719 | RubberWindowFrame 720 | 152 310 694 422 0 0 1280 778 721 | 722 | RubberWindowFrame 723 | 152 310 694 422 0 0 1280 778 724 | 725 | Module 726 | PBXDebugSessionModule 727 | Proportion 728 | 381pt 729 | 730 | 731 | Proportion 732 | 381pt 733 | 734 | 735 | Name 736 | Debugger 737 | ServiceClasses 738 | 739 | PBXDebugSessionModule 740 | 741 | StatusbarIsVisible 742 | 743 | TableOfContents 744 | 745 | 1CD10A99069EF8BA00B06720 746 | E9A020D814E121C900B451FC 747 | 1C162984064C10D400B95A72 748 | E9A020D914E121C900B451FC 749 | E9A020DA14E121C900B451FC 750 | E9A020DB14E121C900B451FC 751 | E9A020DC14E121C900B451FC 752 | E9A020DD14E121C900B451FC 753 | 754 | ToolbarConfiguration 755 | xcode.toolbar.config.debugV3 756 | WindowString 757 | 152 310 694 422 0 0 1280 778 758 | WindowToolGUID 759 | 1CD10A99069EF8BA00B06720 760 | WindowToolIsVisible 761 | 762 | 763 | 764 | Identifier 765 | windowTool.find 766 | Layout 767 | 768 | 769 | Dock 770 | 771 | 772 | Dock 773 | 774 | 775 | ContentConfiguration 776 | 777 | PBXProjectModuleGUID 778 | 1CDD528C0622207200134675 779 | PBXProjectModuleLabel 780 | <No Editor> 781 | PBXSplitModuleInNavigatorKey 782 | 783 | Split0 784 | 785 | PBXProjectModuleGUID 786 | 1CD0528D0623707200166675 787 | 788 | SplitCount 789 | 1 790 | 791 | StatusBarVisibility 792 | 1 793 | 794 | GeometryConfiguration 795 | 796 | Frame 797 | {{0, 0}, {781, 167}} 798 | RubberWindowFrame 799 | 62 385 781 470 0 0 1440 878 800 | 801 | Module 802 | PBXNavigatorGroup 803 | Proportion 804 | 781pt 805 | 806 | 807 | Proportion 808 | 50% 809 | 810 | 811 | BecomeActive 812 | 1 813 | ContentConfiguration 814 | 815 | PBXProjectModuleGUID 816 | 1CD0528E0623707200166675 817 | PBXProjectModuleLabel 818 | Project Find 819 | 820 | GeometryConfiguration 821 | 822 | Frame 823 | {{8, 0}, {773, 254}} 824 | RubberWindowFrame 825 | 62 385 781 470 0 0 1440 878 826 | 827 | Module 828 | PBXProjectFindModule 829 | Proportion 830 | 50% 831 | 832 | 833 | Proportion 834 | 428pt 835 | 836 | 837 | Name 838 | Project Find 839 | ServiceClasses 840 | 841 | PBXProjectFindModule 842 | 843 | StatusbarIsVisible 844 | 1 845 | TableOfContents 846 | 847 | 1C530D57069F1CE1000CFCEE 848 | 1C530D58069F1CE1000CFCEE 849 | 1C530D59069F1CE1000CFCEE 850 | 1CDD528C0622207200134675 851 | 1C530D5A069F1CE1000CFCEE 852 | 1CE0B1FE06471DED0097A5F4 853 | 1CD0528E0623707200166675 854 | 855 | WindowString 856 | 62 385 781 470 0 0 1440 878 857 | WindowToolGUID 858 | 1C530D57069F1CE1000CFCEE 859 | WindowToolIsVisible 860 | 0 861 | 862 | 863 | Identifier 864 | MENUSEPARATOR 865 | 866 | 867 | FirstTimeWindowDisplayed 868 | 869 | Identifier 870 | windowTool.debuggerConsole 871 | IsVertical 872 | 873 | Layout 874 | 875 | 876 | Dock 877 | 878 | 879 | BecomeActive 880 | 881 | ContentConfiguration 882 | 883 | PBXProjectModuleGUID 884 | 1C78EAAC065D492600B07095 885 | PBXProjectModuleLabel 886 | Debugger Console 887 | 888 | GeometryConfiguration 889 | 890 | Frame 891 | {{0, 0}, {650, 209}} 892 | RubberWindowFrame 893 | 152 482 650 250 0 0 1280 778 894 | 895 | Module 896 | PBXDebugCLIModule 897 | Proportion 898 | 209pt 899 | 900 | 901 | Proportion 902 | 209pt 903 | 904 | 905 | Name 906 | Debugger Console 907 | ServiceClasses 908 | 909 | PBXDebugCLIModule 910 | 911 | StatusbarIsVisible 912 | 913 | TableOfContents 914 | 915 | 1C78EAAD065D492600B07095 916 | E9A020DE14E121C900B451FC 917 | 1C78EAAC065D492600B07095 918 | 919 | ToolbarConfiguration 920 | xcode.toolbar.config.consoleV3 921 | WindowString 922 | 152 482 650 250 0 0 1280 778 923 | WindowToolGUID 924 | 1C78EAAD065D492600B07095 925 | WindowToolIsVisible 926 | 927 | 928 | 929 | Identifier 930 | windowTool.snapshots 931 | Layout 932 | 933 | 934 | Dock 935 | 936 | 937 | Module 938 | XCSnapshotModule 939 | Proportion 940 | 100% 941 | 942 | 943 | Proportion 944 | 100% 945 | 946 | 947 | Name 948 | Snapshots 949 | ServiceClasses 950 | 951 | XCSnapshotModule 952 | 953 | StatusbarIsVisible 954 | Yes 955 | ToolbarConfiguration 956 | xcode.toolbar.config.snapshots 957 | WindowString 958 | 315 824 300 550 0 0 1440 878 959 | WindowToolIsVisible 960 | Yes 961 | 962 | 963 | Identifier 964 | windowTool.scm 965 | Layout 966 | 967 | 968 | Dock 969 | 970 | 971 | ContentConfiguration 972 | 973 | PBXProjectModuleGUID 974 | 1C78EAB2065D492600B07095 975 | PBXProjectModuleLabel 976 | <No Editor> 977 | PBXSplitModuleInNavigatorKey 978 | 979 | Split0 980 | 981 | PBXProjectModuleGUID 982 | 1C78EAB3065D492600B07095 983 | 984 | SplitCount 985 | 1 986 | 987 | StatusBarVisibility 988 | 1 989 | 990 | GeometryConfiguration 991 | 992 | Frame 993 | {{0, 0}, {452, 0}} 994 | RubberWindowFrame 995 | 743 379 452 308 0 0 1280 1002 996 | 997 | Module 998 | PBXNavigatorGroup 999 | Proportion 1000 | 0pt 1001 | 1002 | 1003 | BecomeActive 1004 | 1 1005 | ContentConfiguration 1006 | 1007 | PBXProjectModuleGUID 1008 | 1CD052920623707200166675 1009 | PBXProjectModuleLabel 1010 | SCM 1011 | 1012 | GeometryConfiguration 1013 | 1014 | ConsoleFrame 1015 | {{0, 259}, {452, 0}} 1016 | Frame 1017 | {{0, 7}, {452, 259}} 1018 | RubberWindowFrame 1019 | 743 379 452 308 0 0 1280 1002 1020 | TableConfiguration 1021 | 1022 | Status 1023 | 30 1024 | FileName 1025 | 199 1026 | Path 1027 | 197.0950012207031 1028 | 1029 | TableFrame 1030 | {{0, 0}, {452, 250}} 1031 | 1032 | Module 1033 | PBXCVSModule 1034 | Proportion 1035 | 262pt 1036 | 1037 | 1038 | Proportion 1039 | 266pt 1040 | 1041 | 1042 | Name 1043 | SCM 1044 | ServiceClasses 1045 | 1046 | PBXCVSModule 1047 | 1048 | StatusbarIsVisible 1049 | 1 1050 | TableOfContents 1051 | 1052 | 1C78EAB4065D492600B07095 1053 | 1C78EAB5065D492600B07095 1054 | 1C78EAB2065D492600B07095 1055 | 1CD052920623707200166675 1056 | 1057 | ToolbarConfiguration 1058 | xcode.toolbar.config.scm 1059 | WindowString 1060 | 743 379 452 308 0 0 1280 1002 1061 | 1062 | 1063 | Identifier 1064 | windowTool.breakpoints 1065 | IsVertical 1066 | 0 1067 | Layout 1068 | 1069 | 1070 | Dock 1071 | 1072 | 1073 | BecomeActive 1074 | 1 1075 | ContentConfiguration 1076 | 1077 | PBXBottomSmartGroupGIDs 1078 | 1079 | 1C77FABC04509CD000000102 1080 | 1081 | PBXProjectModuleGUID 1082 | 1CE0B1FE06471DED0097A5F4 1083 | PBXProjectModuleLabel 1084 | Files 1085 | PBXProjectStructureProvided 1086 | no 1087 | PBXSmartGroupTreeModuleColumnData 1088 | 1089 | PBXSmartGroupTreeModuleColumnWidthsKey 1090 | 1091 | 168 1092 | 1093 | PBXSmartGroupTreeModuleColumnsKey_v4 1094 | 1095 | MainColumn 1096 | 1097 | 1098 | PBXSmartGroupTreeModuleOutlineStateKey_v7 1099 | 1100 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 1101 | 1102 | 1C77FABC04509CD000000102 1103 | 1104 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 1105 | 1106 | 1107 | 0 1108 | 1109 | 1110 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 1111 | {{0, 0}, {168, 350}} 1112 | 1113 | PBXTopSmartGroupGIDs 1114 | 1115 | XCIncludePerspectivesSwitch 1116 | 0 1117 | 1118 | GeometryConfiguration 1119 | 1120 | Frame 1121 | {{0, 0}, {185, 368}} 1122 | GroupTreeTableConfiguration 1123 | 1124 | MainColumn 1125 | 168 1126 | 1127 | RubberWindowFrame 1128 | 315 424 744 409 0 0 1440 878 1129 | 1130 | Module 1131 | PBXSmartGroupTreeModule 1132 | Proportion 1133 | 185pt 1134 | 1135 | 1136 | ContentConfiguration 1137 | 1138 | PBXProjectModuleGUID 1139 | 1CA1AED706398EBD00589147 1140 | PBXProjectModuleLabel 1141 | Detail 1142 | 1143 | GeometryConfiguration 1144 | 1145 | Frame 1146 | {{190, 0}, {554, 368}} 1147 | RubberWindowFrame 1148 | 315 424 744 409 0 0 1440 878 1149 | 1150 | Module 1151 | XCDetailModule 1152 | Proportion 1153 | 554pt 1154 | 1155 | 1156 | Proportion 1157 | 368pt 1158 | 1159 | 1160 | MajorVersion 1161 | 3 1162 | MinorVersion 1163 | 0 1164 | Name 1165 | Breakpoints 1166 | ServiceClasses 1167 | 1168 | PBXSmartGroupTreeModule 1169 | XCDetailModule 1170 | 1171 | StatusbarIsVisible 1172 | 1 1173 | TableOfContents 1174 | 1175 | 1CDDB66807F98D9800BB5817 1176 | 1CDDB66907F98D9800BB5817 1177 | 1CE0B1FE06471DED0097A5F4 1178 | 1CA1AED706398EBD00589147 1179 | 1180 | ToolbarConfiguration 1181 | xcode.toolbar.config.breakpointsV3 1182 | WindowString 1183 | 315 424 744 409 0 0 1440 878 1184 | WindowToolGUID 1185 | 1CDDB66807F98D9800BB5817 1186 | WindowToolIsVisible 1187 | 1 1188 | 1189 | 1190 | Identifier 1191 | windowTool.debugAnimator 1192 | Layout 1193 | 1194 | 1195 | Dock 1196 | 1197 | 1198 | Module 1199 | PBXNavigatorGroup 1200 | Proportion 1201 | 100% 1202 | 1203 | 1204 | Proportion 1205 | 100% 1206 | 1207 | 1208 | Name 1209 | Debug Visualizer 1210 | ServiceClasses 1211 | 1212 | PBXNavigatorGroup 1213 | 1214 | StatusbarIsVisible 1215 | 1 1216 | ToolbarConfiguration 1217 | xcode.toolbar.config.debugAnimatorV3 1218 | WindowString 1219 | 100 100 700 500 0 0 1280 1002 1220 | 1221 | 1222 | Identifier 1223 | windowTool.bookmarks 1224 | Layout 1225 | 1226 | 1227 | Dock 1228 | 1229 | 1230 | Module 1231 | PBXBookmarksModule 1232 | Proportion 1233 | 100% 1234 | 1235 | 1236 | Proportion 1237 | 100% 1238 | 1239 | 1240 | Name 1241 | Bookmarks 1242 | ServiceClasses 1243 | 1244 | PBXBookmarksModule 1245 | 1246 | StatusbarIsVisible 1247 | 0 1248 | WindowString 1249 | 538 42 401 187 0 0 1280 1002 1250 | 1251 | 1252 | Identifier 1253 | windowTool.projectFormatConflicts 1254 | Layout 1255 | 1256 | 1257 | Dock 1258 | 1259 | 1260 | Module 1261 | XCProjectFormatConflictsModule 1262 | Proportion 1263 | 100% 1264 | 1265 | 1266 | Proportion 1267 | 100% 1268 | 1269 | 1270 | Name 1271 | Project Format Conflicts 1272 | ServiceClasses 1273 | 1274 | XCProjectFormatConflictsModule 1275 | 1276 | StatusbarIsVisible 1277 | 0 1278 | WindowContentMinSize 1279 | 450 300 1280 | WindowString 1281 | 50 850 472 307 0 0 1440 877 1282 | 1283 | 1284 | Identifier 1285 | windowTool.classBrowser 1286 | Layout 1287 | 1288 | 1289 | Dock 1290 | 1291 | 1292 | BecomeActive 1293 | 1 1294 | ContentConfiguration 1295 | 1296 | OptionsSetName 1297 | Hierarchy, all classes 1298 | PBXProjectModuleGUID 1299 | 1CA6456E063B45B4001379D8 1300 | PBXProjectModuleLabel 1301 | Class Browser - NSObject 1302 | 1303 | GeometryConfiguration 1304 | 1305 | ClassesFrame 1306 | {{0, 0}, {374, 96}} 1307 | ClassesTreeTableConfiguration 1308 | 1309 | PBXClassNameColumnIdentifier 1310 | 208 1311 | PBXClassBookColumnIdentifier 1312 | 22 1313 | 1314 | Frame 1315 | {{0, 0}, {630, 331}} 1316 | MembersFrame 1317 | {{0, 105}, {374, 395}} 1318 | MembersTreeTableConfiguration 1319 | 1320 | PBXMemberTypeIconColumnIdentifier 1321 | 22 1322 | PBXMemberNameColumnIdentifier 1323 | 216 1324 | PBXMemberTypeColumnIdentifier 1325 | 97 1326 | PBXMemberBookColumnIdentifier 1327 | 22 1328 | 1329 | PBXModuleWindowStatusBarHidden2 1330 | 1 1331 | RubberWindowFrame 1332 | 385 179 630 352 0 0 1440 878 1333 | 1334 | Module 1335 | PBXClassBrowserModule 1336 | Proportion 1337 | 332pt 1338 | 1339 | 1340 | Proportion 1341 | 332pt 1342 | 1343 | 1344 | Name 1345 | Class Browser 1346 | ServiceClasses 1347 | 1348 | PBXClassBrowserModule 1349 | 1350 | StatusbarIsVisible 1351 | 0 1352 | TableOfContents 1353 | 1354 | 1C0AD2AF069F1E9B00FABCE6 1355 | 1C0AD2B0069F1E9B00FABCE6 1356 | 1CA6456E063B45B4001379D8 1357 | 1358 | ToolbarConfiguration 1359 | xcode.toolbar.config.classbrowser 1360 | WindowString 1361 | 385 179 630 352 0 0 1440 878 1362 | WindowToolGUID 1363 | 1C0AD2AF069F1E9B00FABCE6 1364 | WindowToolIsVisible 1365 | 0 1366 | 1367 | 1368 | Identifier 1369 | windowTool.refactoring 1370 | IncludeInToolsMenu 1371 | 0 1372 | Layout 1373 | 1374 | 1375 | Dock 1376 | 1377 | 1378 | BecomeActive 1379 | 1 1380 | GeometryConfiguration 1381 | 1382 | Frame 1383 | {0, 0}, {500, 335} 1384 | RubberWindowFrame 1385 | {0, 0}, {500, 335} 1386 | 1387 | Module 1388 | XCRefactoringModule 1389 | Proportion 1390 | 100% 1391 | 1392 | 1393 | Proportion 1394 | 100% 1395 | 1396 | 1397 | Name 1398 | Refactoring 1399 | ServiceClasses 1400 | 1401 | XCRefactoringModule 1402 | 1403 | WindowString 1404 | 200 200 500 356 0 0 1920 1200 1405 | 1406 | 1407 | 1408 | 1409 | -------------------------------------------------------------------------------- /stackBlur.xcodeproj/thomas.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 1D3623240D0F684500981E51 /* stackBlurAppDelegate.h */ = { 4 | uiCtxt = { 5 | sepNavIntBoundsRect = "{{0, 0}, {565, 299}}"; 6 | sepNavSelRange = "{0, 0}"; 7 | sepNavVisRange = "{0, 479}"; 8 | }; 9 | }; 10 | 1D3623250D0F684500981E51 /* stackBlurAppDelegate.m */ = { 11 | uiCtxt = { 12 | sepNavIntBoundsRect = "{{0, 0}, {810, 1222}}"; 13 | sepNavSelRange = "{0, 0}"; 14 | sepNavVisRange = "{141, 478}"; 15 | }; 16 | }; 17 | 1D6058900D05DD3D006BFB54 /* stackBlur */ = { 18 | activeExec = 0; 19 | executables = ( 20 | E9A020B714E1206000B451FC /* stackBlur */, 21 | ); 22 | }; 23 | 28D7ACF60DDB3853001CB0EB /* stackBlurViewController.h */ = { 24 | uiCtxt = { 25 | sepNavIntBoundsRect = "{{0, 0}, {519, 273}}"; 26 | sepNavSelRange = "{283, 0}"; 27 | sepNavVisRange = "{33, 300}"; 28 | }; 29 | }; 30 | 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */ = { 31 | uiCtxt = { 32 | sepNavIntBoundsRect = "{{0, 0}, {712, 936}}"; 33 | sepNavSelRange = "{1647, 0}"; 34 | sepNavVisRange = "{1354, 339}"; 35 | }; 36 | }; 37 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 38 | activeBuildConfigurationName = Debug; 39 | activeExecutable = E9A020B714E1206000B451FC /* stackBlur */; 40 | activeSDKPreference = iphonesimulator4.3; 41 | activeTarget = 1D6058900D05DD3D006BFB54 /* stackBlur */; 42 | addToTargets = ( 43 | 1D6058900D05DD3D006BFB54 /* stackBlur */, 44 | ); 45 | breakpoints = ( 46 | ); 47 | codeSenseManager = E9A020C314E1207000B451FC /* Code sense */; 48 | executables = ( 49 | E9A020B714E1206000B451FC /* stackBlur */, 50 | ); 51 | perUserDictionary = { 52 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 53 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 54 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 55 | PBXFileTableDataSourceColumnWidthsKey = ( 56 | 20, 57 | 341, 58 | 20, 59 | 48, 60 | 43, 61 | 43, 62 | 20, 63 | ); 64 | PBXFileTableDataSourceColumnsKey = ( 65 | PBXFileDataSource_FiletypeID, 66 | PBXFileDataSource_Filename_ColumnID, 67 | PBXFileDataSource_Built_ColumnID, 68 | PBXFileDataSource_ObjectSize_ColumnID, 69 | PBXFileDataSource_Errors_ColumnID, 70 | PBXFileDataSource_Warnings_ColumnID, 71 | PBXFileDataSource_Target_ColumnID, 72 | ); 73 | }; 74 | PBXPerProjectTemplateStateSaveDate = 350298430; 75 | PBXWorkspaceStateSaveDate = 350298430; 76 | }; 77 | perUserProjectItems = { 78 | E9A020D114E121C900B451FC /* PBXTextBookmark */ = E9A020D114E121C900B451FC /* PBXTextBookmark */; 79 | E9A020D214E121C900B451FC /* PBXTextBookmark */ = E9A020D214E121C900B451FC /* PBXTextBookmark */; 80 | E9A020D314E121C900B451FC /* PBXBookmark */ = E9A020D314E121C900B451FC /* PBXBookmark */; 81 | E9A020D414E121C900B451FC /* PBXTextBookmark */ = E9A020D414E121C900B451FC /* PBXTextBookmark */; 82 | E9A020ED14E122B100B451FC /* XCBuildMessageTextBookmark */ = E9A020ED14E122B100B451FC /* XCBuildMessageTextBookmark */; 83 | E9A020EE14E122B100B451FC /* PBXTextBookmark */ = E9A020EE14E122B100B451FC /* PBXTextBookmark */; 84 | E9A020F314E1239E00B451FC /* PBXTextBookmark */ = E9A020F314E1239E00B451FC /* PBXTextBookmark */; 85 | E9A020F414E1239E00B451FC /* PBXTextBookmark */ = E9A020F414E1239E00B451FC /* PBXTextBookmark */; 86 | E9A020F514E1239E00B451FC /* PBXTextBookmark */ = E9A020F514E1239E00B451FC /* PBXTextBookmark */; 87 | E9A020F614E1239E00B451FC /* PBXTextBookmark */ = E9A020F614E1239E00B451FC /* PBXTextBookmark */; 88 | E9A020F714E1239E00B451FC /* PBXTextBookmark */ = E9A020F714E1239E00B451FC /* PBXTextBookmark */; 89 | E9A020F814E1239E00B451FC /* PBXTextBookmark */ = E9A020F814E1239E00B451FC /* PBXTextBookmark */; 90 | E9A020F914E1239E00B451FC /* PBXTextBookmark */ = E9A020F914E1239E00B451FC /* PBXTextBookmark */; 91 | E9A0210D14E1243500B451FC /* PBXTextBookmark */ = E9A0210D14E1243500B451FC /* PBXTextBookmark */; 92 | E9A0210E14E1243500B451FC /* PBXTextBookmark */ = E9A0210E14E1243500B451FC /* PBXTextBookmark */; 93 | E9A0210F14E1243500B451FC /* PBXTextBookmark */ = E9A0210F14E1243500B451FC /* PBXTextBookmark */; 94 | E9A0211014E1243500B451FC /* PBXTextBookmark */ = E9A0211014E1243500B451FC /* PBXTextBookmark */; 95 | E9A0213A14E126C300B451FC /* PBXTextBookmark */ = E9A0213A14E126C300B451FC /* PBXTextBookmark */; 96 | E9A0213B14E126C500B451FC /* PBXTextBookmark */ = E9A0213B14E126C500B451FC /* PBXTextBookmark */; 97 | E9A0213C14E126ED00B451FC /* PBXTextBookmark */ = E9A0213C14E126ED00B451FC /* PBXTextBookmark */; 98 | E9A0213D14E126ED00B451FC /* PBXTextBookmark */ = E9A0213D14E126ED00B451FC /* PBXTextBookmark */; 99 | E9A0213E14E126ED00B451FC /* PBXTextBookmark */ = E9A0213E14E126ED00B451FC /* PBXTextBookmark */; 100 | E9A0213F14E126ED00B451FC /* PBXTextBookmark */ = E9A0213F14E126ED00B451FC /* PBXTextBookmark */; 101 | E9A0217C14E147B700B451FC /* PBXTextBookmark */ = E9A0217C14E147B700B451FC /* PBXTextBookmark */; 102 | }; 103 | sourceControlManager = E9A020C214E1207000B451FC /* Source Control */; 104 | userBuildSettings = { 105 | }; 106 | }; 107 | 8D1107310486CEB800E47090 /* stackBlur-Info.plist */ = { 108 | uiCtxt = { 109 | sepNavIntBoundsRect = "{{0, 0}, {726, 377}}"; 110 | sepNavSelRange = "{0, 0}"; 111 | sepNavVisRange = "{0, 671}"; 112 | }; 113 | }; 114 | E9A020B714E1206000B451FC /* stackBlur */ = { 115 | isa = PBXExecutable; 116 | activeArgIndices = ( 117 | ); 118 | argumentStrings = ( 119 | ); 120 | autoAttachOnCrash = 1; 121 | breakpointsEnabled = 1; 122 | configStateDict = { 123 | }; 124 | customDataFormattersEnabled = 1; 125 | dataTipCustomDataFormattersEnabled = 1; 126 | dataTipShowTypeColumn = 1; 127 | dataTipSortType = 0; 128 | debuggerPlugin = GDBDebugging; 129 | disassemblyDisplayState = 0; 130 | dylibVariantSuffix = ""; 131 | enableDebugStr = 1; 132 | environmentEntries = ( 133 | ); 134 | executableSystemSymbolLevel = 0; 135 | executableUserSymbolLevel = 0; 136 | libgmallocEnabled = 0; 137 | name = stackBlur; 138 | savedGlobals = { 139 | }; 140 | showTypeColumn = 0; 141 | sourceDirectories = ( 142 | ); 143 | variableFormatDictionary = { 144 | }; 145 | }; 146 | E9A020C214E1207000B451FC /* Source Control */ = { 147 | isa = PBXSourceControlManager; 148 | fallbackIsa = XCSourceControlManager; 149 | isSCMEnabled = 0; 150 | scmConfiguration = { 151 | repositoryNamesForRoots = { 152 | "" = ""; 153 | }; 154 | }; 155 | }; 156 | E9A020C314E1207000B451FC /* Code sense */ = { 157 | isa = PBXCodeSenseManager; 158 | indexTemplatePath = ""; 159 | }; 160 | E9A020D114E121C900B451FC /* PBXTextBookmark */ = { 161 | isa = PBXTextBookmark; 162 | fRef = 1D3623240D0F684500981E51 /* stackBlurAppDelegate.h */; 163 | name = "stackBlurAppDelegate.h: 1"; 164 | rLen = 0; 165 | rLoc = 0; 166 | rType = 0; 167 | vrLen = 479; 168 | vrLoc = 0; 169 | }; 170 | E9A020D214E121C900B451FC /* PBXTextBookmark */ = { 171 | isa = PBXTextBookmark; 172 | fRef = 1D3623250D0F684500981E51 /* stackBlurAppDelegate.m */; 173 | name = "stackBlurAppDelegate.m: 1"; 174 | rLen = 0; 175 | rLoc = 0; 176 | rType = 0; 177 | vrLen = 353; 178 | vrLoc = 0; 179 | }; 180 | E9A020D314E121C900B451FC /* PBXBookmark */ = { 181 | isa = PBXBookmark; 182 | fRef = 28D7ACF60DDB3853001CB0EB /* stackBlurViewController.h */; 183 | }; 184 | E9A020D414E121C900B451FC /* PBXTextBookmark */ = { 185 | isa = PBXTextBookmark; 186 | fRef = 28D7ACF60DDB3853001CB0EB /* stackBlurViewController.h */; 187 | name = "stackBlurViewController.h: 16"; 188 | rLen = 0; 189 | rLoc = 327; 190 | rType = 0; 191 | vrLen = 314; 192 | vrLoc = 0; 193 | }; 194 | E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */ = { 195 | uiCtxt = { 196 | sepNavIntBoundsRect = "{{0, 0}, {519, 247}}"; 197 | sepNavSelRange = "{181, 0}"; 198 | sepNavVisRange = "{0, 300}"; 199 | }; 200 | }; 201 | E9A020E014E1220000B451FC /* UIImage+StackBlur.m */ = { 202 | uiCtxt = { 203 | sepNavIntBoundsRect = "{{0, 0}, {579, 3458}}"; 204 | sepNavSelRange = "{334, 0}"; 205 | sepNavVisRange = "{27, 353}"; 206 | }; 207 | }; 208 | E9A020ED14E122B100B451FC /* XCBuildMessageTextBookmark */ = { 209 | isa = PBXTextBookmark; 210 | comments = "'@end' must appear in an @implementation context"; 211 | fRef = E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */; 212 | fallbackIsa = XCBuildMessageTextBookmark; 213 | rLen = 1; 214 | rLoc = 17; 215 | rType = 1; 216 | }; 217 | E9A020EE14E122B100B451FC /* PBXTextBookmark */ = { 218 | isa = PBXTextBookmark; 219 | fRef = E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */; 220 | name = "UIImage+StackBlur.h: 15"; 221 | rLen = 0; 222 | rLoc = 300; 223 | rType = 0; 224 | vrLen = 257; 225 | vrLoc = 3; 226 | }; 227 | E9A020F314E1239E00B451FC /* PBXTextBookmark */ = { 228 | isa = PBXTextBookmark; 229 | fRef = 8D1107310486CEB800E47090 /* stackBlur-Info.plist */; 230 | name = "stackBlur-Info.plist: 1"; 231 | rLen = 0; 232 | rLoc = 0; 233 | rType = 0; 234 | vrLen = 671; 235 | vrLoc = 0; 236 | }; 237 | E9A020F414E1239E00B451FC /* PBXTextBookmark */ = { 238 | isa = PBXTextBookmark; 239 | fRef = E9A020E014E1220000B451FC /* UIImage+StackBlur.m */; 240 | name = "UIImage+StackBlur.m: 13"; 241 | rLen = 0; 242 | rLoc = 211; 243 | rType = 0; 244 | vrLen = 319; 245 | vrLoc = 4971; 246 | }; 247 | E9A020F514E1239E00B451FC /* PBXTextBookmark */ = { 248 | isa = PBXTextBookmark; 249 | fRef = 1D3623250D0F684500981E51 /* stackBlurAppDelegate.m */; 250 | name = "stackBlurAppDelegate.m: 1"; 251 | rLen = 0; 252 | rLoc = 0; 253 | rType = 0; 254 | vrLen = 478; 255 | vrLoc = 141; 256 | }; 257 | E9A020F614E1239E00B451FC /* PBXTextBookmark */ = { 258 | isa = PBXTextBookmark; 259 | fRef = E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */; 260 | name = "UIImage+StackBlur.h: 12"; 261 | rLen = 0; 262 | rLoc = 219; 263 | rType = 0; 264 | vrLen = 260; 265 | vrLoc = 0; 266 | }; 267 | E9A020F714E1239E00B451FC /* PBXTextBookmark */ = { 268 | isa = PBXTextBookmark; 269 | fRef = 28D7ACF60DDB3853001CB0EB /* stackBlurViewController.h */; 270 | name = "stackBlurViewController.h: 13"; 271 | rLen = 0; 272 | rLoc = 283; 273 | rType = 0; 274 | vrLen = 333; 275 | vrLoc = 0; 276 | }; 277 | E9A020F814E1239E00B451FC /* PBXTextBookmark */ = { 278 | isa = PBXTextBookmark; 279 | fRef = 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */; 280 | name = "stackBlurViewController.m: 67"; 281 | rLen = 0; 282 | rLoc = 1647; 283 | rType = 0; 284 | vrLen = 344; 285 | vrLoc = 1354; 286 | }; 287 | E9A020F914E1239E00B451FC /* PBXTextBookmark */ = { 288 | isa = PBXTextBookmark; 289 | fRef = 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */; 290 | name = "stackBlurViewController.m: 67"; 291 | rLen = 0; 292 | rLoc = 1647; 293 | rType = 0; 294 | vrLen = 344; 295 | vrLoc = 1354; 296 | }; 297 | E9A0210D14E1243500B451FC /* PBXTextBookmark */ = { 298 | isa = PBXTextBookmark; 299 | fRef = E9A020E014E1220000B451FC /* UIImage+StackBlur.m */; 300 | name = "UIImage+StackBlur.m: 22"; 301 | rLen = 0; 302 | rLoc = 382; 303 | rType = 0; 304 | vrLen = 530; 305 | vrLoc = 212; 306 | }; 307 | E9A0210E14E1243500B451FC /* PBXTextBookmark */ = { 308 | isa = PBXTextBookmark; 309 | fRef = 28D7ACF60DDB3853001CB0EB /* stackBlurViewController.h */; 310 | name = "stackBlurViewController.h: 13"; 311 | rLen = 0; 312 | rLoc = 283; 313 | rType = 0; 314 | vrLen = 300; 315 | vrLoc = 33; 316 | }; 317 | E9A0210F14E1243500B451FC /* PBXTextBookmark */ = { 318 | isa = PBXTextBookmark; 319 | fRef = 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */; 320 | name = "stackBlurViewController.m: 67"; 321 | rLen = 0; 322 | rLoc = 1647; 323 | rType = 0; 324 | vrLen = 344; 325 | vrLoc = 1354; 326 | }; 327 | E9A0211014E1243500B451FC /* PBXTextBookmark */ = { 328 | isa = PBXTextBookmark; 329 | fRef = 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */; 330 | name = "stackBlurViewController.m: 67"; 331 | rLen = 0; 332 | rLoc = 1647; 333 | rType = 0; 334 | vrLen = 339; 335 | vrLoc = 1354; 336 | }; 337 | E9A0213A14E126C300B451FC /* PBXTextBookmark */ = { 338 | isa = PBXTextBookmark; 339 | fRef = E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */; 340 | name = "UIImage+StackBlur.h: 15"; 341 | rLen = 0; 342 | rLoc = 300; 343 | rType = 0; 344 | vrLen = 257; 345 | vrLoc = 3; 346 | }; 347 | E9A0213B14E126C500B451FC /* PBXTextBookmark */ = { 348 | isa = PBXTextBookmark; 349 | fRef = E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */; 350 | name = "UIImage+StackBlur.h: 15"; 351 | rLen = 0; 352 | rLoc = 300; 353 | rType = 0; 354 | vrLen = 257; 355 | vrLoc = 3; 356 | }; 357 | E9A0213C14E126ED00B451FC /* PBXTextBookmark */ = { 358 | isa = PBXTextBookmark; 359 | fRef = 28D7ACF70DDB3853001CB0EB /* stackBlurViewController.m */; 360 | name = "stackBlurViewController.m: 67"; 361 | rLen = 0; 362 | rLoc = 1647; 363 | rType = 0; 364 | vrLen = 339; 365 | vrLoc = 1354; 366 | }; 367 | E9A0213D14E126ED00B451FC /* PBXTextBookmark */ = { 368 | isa = PBXTextBookmark; 369 | fRef = E9A020DF14E1220000B451FC /* UIImage+StackBlur.h */; 370 | name = "UIImage+StackBlur.h: 10"; 371 | rLen = 0; 372 | rLoc = 181; 373 | rType = 0; 374 | vrLen = 300; 375 | vrLoc = 0; 376 | }; 377 | E9A0213E14E126ED00B451FC /* PBXTextBookmark */ = { 378 | isa = PBXTextBookmark; 379 | fRef = E9A020E014E1220000B451FC /* UIImage+StackBlur.m */; 380 | name = "UIImage+StackBlur.m: 22"; 381 | rLen = 0; 382 | rLoc = 382; 383 | rType = 0; 384 | vrLen = 530; 385 | vrLoc = 212; 386 | }; 387 | E9A0213F14E126ED00B451FC /* PBXTextBookmark */ = { 388 | isa = PBXTextBookmark; 389 | fRef = E9A020E014E1220000B451FC /* UIImage+StackBlur.m */; 390 | name = "UIImage+StackBlur.m: 15"; 391 | rLen = 122; 392 | rLoc = 213; 393 | rType = 0; 394 | vrLen = 325; 395 | vrLoc = 27; 396 | }; 397 | E9A0217C14E147B700B451FC /* PBXTextBookmark */ = { 398 | isa = PBXTextBookmark; 399 | fRef = E9A020E014E1220000B451FC /* UIImage+StackBlur.m */; 400 | name = "UIImage+StackBlur.m: 18"; 401 | rLen = 0; 402 | rLoc = 334; 403 | rType = 0; 404 | vrLen = 353; 405 | vrLoc = 27; 406 | }; 407 | } 408 | -------------------------------------------------------------------------------- /stackBlur.xcodeproj/xcuserdata/tomsoft.xcuserdatad/xcschemes/stackBlur.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /stackBlur.xcodeproj/xcuserdata/tomsoft.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | stackBlur.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 1D6058900D05DD3D006BFB54 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /stackBlurViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1056 5 | 10K549 6 | 851 7 | 1038.36 8 | 461.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 141 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | 42 | 274 43 | 44 | YES 45 | 46 | 47 | 274 48 | {320, 460} 49 | 50 | 2 51 | NO 52 | IBCocoaTouchFramework 53 | 54 | NSImage 55 | testIma.jpg 56 | 57 | 58 | 59 | 60 | 292 61 | {{106, 401}, {118, 23}} 62 | 63 | NO 64 | IBCocoaTouchFramework 65 | 0 66 | 0 67 | 5 68 | 1 69 | 20 70 | NO 71 | 72 | 73 | {320, 460} 74 | 75 | 76 | 3 77 | MC43NQA 78 | 79 | 2 80 | 81 | 82 | NO 83 | 84 | IBCocoaTouchFramework 85 | 86 | 87 | 88 | 89 | YES 90 | 91 | 92 | view 93 | 94 | 95 | 96 | 7 97 | 98 | 99 | 100 | imagePreview 101 | 102 | 103 | 104 | 10 105 | 106 | 107 | 108 | sliderChanged: 109 | 110 | 111 | 13 112 | 113 | 11 114 | 115 | 116 | 117 | 118 | YES 119 | 120 | 0 121 | 122 | 123 | 124 | 125 | 126 | -1 127 | 128 | 129 | File's Owner 130 | 131 | 132 | -2 133 | 134 | 135 | 136 | 137 | 6 138 | 139 | 140 | YES 141 | 142 | 143 | 144 | 145 | 146 | 147 | 8 148 | 149 | 150 | 151 | 152 | 9 153 | 154 | 155 | 156 | 157 | 158 | 159 | YES 160 | 161 | YES 162 | -1.CustomClassName 163 | -2.CustomClassName 164 | 6.IBEditorWindowLastContentRect 165 | 6.IBPluginDependency 166 | 8.IBPluginDependency 167 | 9.IBPluginDependency 168 | 169 | 170 | YES 171 | stackBlurViewController 172 | UIResponder 173 | {{239, 276}, {320, 480}} 174 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 175 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 176 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 177 | 178 | 179 | 180 | YES 181 | 182 | 183 | YES 184 | 185 | 186 | 187 | 188 | YES 189 | 190 | 191 | YES 192 | 193 | 194 | 195 | 11 196 | 197 | 198 | 199 | YES 200 | 201 | stackBlurViewController 202 | UIViewController 203 | 204 | sliderChanged: 205 | id 206 | 207 | 208 | sliderChanged: 209 | 210 | sliderChanged: 211 | id 212 | 213 | 214 | 215 | imagePreview 216 | UIImageView 217 | 218 | 219 | imagePreview 220 | 221 | imagePreview 222 | UIImageView 223 | 224 | 225 | 226 | IBProjectSource 227 | Classes/stackBlurViewController.h 228 | 229 | 230 | 231 | 232 | YES 233 | 234 | NSObject 235 | 236 | IBFrameworkSource 237 | Foundation.framework/Headers/NSError.h 238 | 239 | 240 | 241 | NSObject 242 | 243 | IBFrameworkSource 244 | Foundation.framework/Headers/NSFileManager.h 245 | 246 | 247 | 248 | NSObject 249 | 250 | IBFrameworkSource 251 | Foundation.framework/Headers/NSKeyValueCoding.h 252 | 253 | 254 | 255 | NSObject 256 | 257 | IBFrameworkSource 258 | Foundation.framework/Headers/NSKeyValueObserving.h 259 | 260 | 261 | 262 | NSObject 263 | 264 | IBFrameworkSource 265 | Foundation.framework/Headers/NSKeyedArchiver.h 266 | 267 | 268 | 269 | NSObject 270 | 271 | IBFrameworkSource 272 | Foundation.framework/Headers/NSObject.h 273 | 274 | 275 | 276 | NSObject 277 | 278 | IBFrameworkSource 279 | Foundation.framework/Headers/NSRunLoop.h 280 | 281 | 282 | 283 | NSObject 284 | 285 | IBFrameworkSource 286 | Foundation.framework/Headers/NSThread.h 287 | 288 | 289 | 290 | NSObject 291 | 292 | IBFrameworkSource 293 | Foundation.framework/Headers/NSURL.h 294 | 295 | 296 | 297 | NSObject 298 | 299 | IBFrameworkSource 300 | Foundation.framework/Headers/NSURLConnection.h 301 | 302 | 303 | 304 | NSObject 305 | 306 | IBFrameworkSource 307 | UIKit.framework/Headers/UIAccessibility.h 308 | 309 | 310 | 311 | NSObject 312 | 313 | IBFrameworkSource 314 | UIKit.framework/Headers/UINibLoading.h 315 | 316 | 317 | 318 | NSObject 319 | 320 | IBFrameworkSource 321 | UIKit.framework/Headers/UIResponder.h 322 | 323 | 324 | 325 | UIControl 326 | UIView 327 | 328 | IBFrameworkSource 329 | UIKit.framework/Headers/UIControl.h 330 | 331 | 332 | 333 | UIImageView 334 | UIView 335 | 336 | IBFrameworkSource 337 | UIKit.framework/Headers/UIImageView.h 338 | 339 | 340 | 341 | UIResponder 342 | NSObject 343 | 344 | 345 | 346 | UISearchBar 347 | UIView 348 | 349 | IBFrameworkSource 350 | UIKit.framework/Headers/UISearchBar.h 351 | 352 | 353 | 354 | UISearchDisplayController 355 | NSObject 356 | 357 | IBFrameworkSource 358 | UIKit.framework/Headers/UISearchDisplayController.h 359 | 360 | 361 | 362 | UISlider 363 | UIControl 364 | 365 | IBFrameworkSource 366 | UIKit.framework/Headers/UISlider.h 367 | 368 | 369 | 370 | UIView 371 | 372 | IBFrameworkSource 373 | UIKit.framework/Headers/UIPrintFormatter.h 374 | 375 | 376 | 377 | UIView 378 | 379 | IBFrameworkSource 380 | UIKit.framework/Headers/UITextField.h 381 | 382 | 383 | 384 | UIView 385 | UIResponder 386 | 387 | IBFrameworkSource 388 | UIKit.framework/Headers/UIView.h 389 | 390 | 391 | 392 | UIViewController 393 | 394 | IBFrameworkSource 395 | UIKit.framework/Headers/UINavigationController.h 396 | 397 | 398 | 399 | UIViewController 400 | 401 | IBFrameworkSource 402 | UIKit.framework/Headers/UIPopoverController.h 403 | 404 | 405 | 406 | UIViewController 407 | 408 | IBFrameworkSource 409 | UIKit.framework/Headers/UISplitViewController.h 410 | 411 | 412 | 413 | UIViewController 414 | 415 | IBFrameworkSource 416 | UIKit.framework/Headers/UITabBarController.h 417 | 418 | 419 | 420 | UIViewController 421 | UIResponder 422 | 423 | IBFrameworkSource 424 | UIKit.framework/Headers/UIViewController.h 425 | 426 | 427 | 428 | 429 | 0 430 | IBCocoaTouchFramework 431 | 432 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 433 | 434 | 435 | 436 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 437 | 438 | 439 | YES 440 | stackBlur.xcodeproj 441 | 3 442 | 443 | testIma.jpg 444 | {720, 479} 445 | 446 | 141 447 | 448 | 449 | -------------------------------------------------------------------------------- /stackBlur_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'stackBlur' target in the 'stackBlur' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #import 8 | #endif 9 | --------------------------------------------------------------------------------