├── ESSTransitionByZooming.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── ESSTransitionByZooming ├── main.m ├── AppDelegate.h ├── Images.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Info.plist ├── AppDelegate.m ├── NSView+ESSViewCategory.h ├── NSView+ESSViewCategory.m └── Base.lproj │ └── MainMenu.xib ├── .gitignore ├── ESSTransitionByZoomingTests ├── Info.plist └── ESSTransitionByZoomingTests.m └── README.md /ESSTransitionByZooming.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ESSTransitionByZooming/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ESSTransitionByZooming 4 | // 5 | // Created by Matthias Gansrigler on 28.04.2015. 6 | // Copyright (c) 2015 Eternal Storms Software. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) { 12 | return NSApplicationMain(argc, argv); 13 | } 14 | -------------------------------------------------------------------------------- /ESSTransitionByZooming/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ESSTransitionByZooming 4 | // 5 | // Created by Matthias Gansrigler on 28.04.2015. 6 | // Copyright (c) 2015 Eternal Storms Software. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : NSObject 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | #Pods/ 27 | -------------------------------------------------------------------------------- /ESSTransitionByZoomingTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | at.EternalStorms.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ESSTransitionByZoomingTests/ESSTransitionByZoomingTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ESSTransitionByZoomingTests.m 3 | // ESSTransitionByZoomingTests 4 | // 5 | // Created by Matthias Gansrigler on 28.04.2015. 6 | // Copyright (c) 2015 Eternal Storms Software. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ESSTransitionByZoomingTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation ESSTransitionByZoomingTests 17 | 18 | - (void)setUp { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown { 24 | // Put teardown code here. This method is called after the invocation of each test method in the class. 25 | [super tearDown]; 26 | } 27 | 28 | - (void)testExample { 29 | // This is an example of a functional test case. 30 | XCTAssert(YES, @"Pass"); 31 | } 32 | 33 | - (void)testPerformanceExample { 34 | // This is an example of a performance test case. 35 | [self measureBlock:^{ 36 | // Put the code you want to measure the time of here. 37 | }]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /ESSTransitionByZooming/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 | } -------------------------------------------------------------------------------- /ESSTransitionByZooming/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | at.EternalStorms.$(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 © 2015 Eternal Storms Software. All rights reserved. 29 | NSMainNibFile 30 | MainMenu 31 | NSPrincipalClass 32 | NSApplication 33 | 34 | 35 | -------------------------------------------------------------------------------- /ESSTransitionByZooming/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // ESSTransitionByZooming 4 | // 5 | // Created by Matthias Gansrigler on 28.04.2015. 6 | // Copyright (c) 2015 Eternal Storms Software. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "NSView+ESSViewCategory.h" 11 | 12 | @interface AppDelegate () 13 | 14 | @property (weak) IBOutlet NSWindow *window; 15 | @property (strong) IBOutlet NSView *firstView; 16 | @property (strong) IBOutlet NSView *secondView; 17 | 18 | - (IBAction)transitionIn:(id)sender; 19 | - (IBAction)transitionOut:(id)sender; 20 | 21 | @end 22 | 23 | @implementation AppDelegate 24 | 25 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 26 | // Insert code here to initialize your application 27 | } 28 | 29 | - (void)applicationWillTerminate:(NSNotification *)aNotification { 30 | // Insert code here to tear down your application 31 | } 32 | 33 | - (void)transitionOut:(id)sender 34 | { 35 | [NSView transitionFromView:self.firstView 36 | toView:self.secondView 37 | withZoomingTransition:ESSViewZoomTransitionZoomOut 38 | duration:0.15 39 | completionHandler:nil]; 40 | } 41 | 42 | - (void)transitionIn:(id)sender 43 | { 44 | [NSView transitionFromView:self.secondView 45 | toView:self.firstView 46 | withZoomingTransition:ESSViewZoomTransitionZoomIn 47 | duration:0.15 48 | completionHandler:nil]; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /ESSTransitionByZooming/NSView+ESSViewCategory.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+ESSViewCategory.h 3 | // ESSTransitionByZooming 4 | // 5 | // Created by Matthias Gansrigler on 28.04.2015. 6 | // Copyright (c) 2015 Eternal Storms Software. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /*! 12 | @typedef ESSViewZoomTransition 13 | @abstract The zoom animation to be used in +transitionFromView:toView:withZoomingTransition:duration:completionHandler: 14 | @discussion Might be used to create a zoom in, zoom out effect (like, zoom into a detailed setup view, zoom out of it to the more general overview-view) 15 | */ 16 | typedef enum : NSUInteger { 17 | ESSViewZoomTransitionZoomIn, 18 | ESSViewZoomTransitionZoomOut 19 | } ESSViewZoomTransition; 20 | 21 | @interface NSView (ESSViewCategory) 22 | 23 | /*! 24 | @method transitionFromView:toView:withZoomingTransition:duration:completionHandler: 25 | @abstract A class method to transition from one view to another by zooming into or out of it. 26 | @param fromView 27 | The NSView to be transitioned from, already in a view hierarchy. Must not be nil. 28 | @param toView 29 | The NSView to be transitioned to, assumed not to be inside any view hierarchy. Must not be nil. 30 | @param transition 31 | The transition to be used. 32 | @param duration 33 | The duration of the transition animation. 34 | @param completionHandler 35 | An optional completionHandler that is called after the transition animation ends. 36 | @discussion fromView and toView should be of the same frame size. 37 | */ 38 | + (void)transitionFromView:(NSView *)fromView 39 | toView:(NSView *)toView 40 | withZoomingTransition:(ESSViewZoomTransition)transition 41 | duration:(CGFloat)duration 42 | completionHandler:(void (^)(void))completionHandler; 43 | 44 | /*! 45 | @method transitionToView:withZoomingTransition:duration:completionHandler: 46 | @abstract An instance method to transition from one view to another by zooming into or out of it. 47 | @param toView 48 | The NSView to be transitioned to, assumed not to be inside any view hierarchy. Must not be nil. 49 | @param transition 50 | The transition to be used. 51 | @param duration 52 | The duration of the transition animation. 53 | @param completionHandler 54 | An optional completionHandler that is called after the transition animation ends. 55 | @discussion fromView and toView should be of the same frame size. This method calls the class method with the target of this method as fromView. 56 | */ 57 | - (void)transitionToView:(NSView *)toView 58 | withZoomingTransition:(ESSViewZoomTransition)transition 59 | duration:(CGFloat)duration 60 | completionHandler:(void (^)(void))completionHandler; 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NSView+ESSViewCategory 2 | a category on NSView that simplifies zoom-transitioning between two NSViews, inspired by OS X 10.10.3's Photos.app ([Blog Post](http://wp.me/p1hxut-6f)) 3 | 4 | ![NSView+ESSViewCategory Zoom Transition Animation Example](http://eternalstorms.at/opensource/NSViewESSViewCategory/zoomtransition.gif "NSView+ESSViewCategory Zoom Transition Animation Example") 5 | 6 | ## First, the License Agreement 7 | 8 | 1) You can use the code in your own products. 9 | 2) You can modify the code as you wish, and use the modified code in your products. 10 | 3) You can redistribute the original, unmodified code, but you have to include the full license text below. 11 | 4) You can redistribute the modified code as you wish (without the full license text below). 12 | 5) In all cases, you must include a credit mentioning Matthias Gansrigler as the original author of the source. 13 | 6) I’m not liable for anything you do with the code, no matter what. So be sensible. 14 | 7) You can’t use my name or other marks to promote your products based on the code. 15 | 8) If you agree to all of that, go ahead and download the source. Otherwise, don’t. 16 | 17 | # How To Use NSView+ESSViewCategory 18 | 19 | You’ll have to first add the NSView+ESSViewCategory.h and *.m files to your project. 20 | Please note that the category imports for Core Animation’s CAMediaTiming class, so you might have to add that framework to your project, too. 21 | 22 | fromView 23 | It has to be inside of a view hierarchy. Fades out during the transition. 24 | 25 | toView 26 | Can be in a different xib file (for example, a NSViewController) or in the same as fromView. It’s important that it is not already on screen somewhere. Fades in during the transition. 27 | 28 | Once you have set up your views, either call the class method and pass fromView and toView as well as the other parameters or call the instance method on fromView. 29 | 30 | The class method: 31 | `+ (void)transitionFromView:(NSView *)fromView toView:(NSView *)toView withZoomingTransition:(ESSViewZoomTransition)transition duration:(CGFloat)duration completionHandler:(void (^)(void))completionHandler;` 32 | 33 | The instance method: 34 | `- (void)transitionToView:(NSView *)toView withZoomingTransition:(ESSViewZoomTransition)transition duration:(CGFloat)duration completionHandler:(void (^)(void))completionHandler;` 35 | 36 | Please refer to the sample project and/or the ([Blog Post](http://wp.me/p1hxut-6f)) for more information. 37 | 38 | ## Requirements 39 | This code has been tested on OS X Yosemite 10.10.3. It might work with earlier versions of the operating system. 40 | Developed with Xcode 6.3.1 41 | 42 | ## Support 43 | The framework and code is provided as-is, but if you need help or have suggestions, you can contact me anytime at [opensource@eternalstorms.at](mailto:opensource@eternalstorms.at) or [@eternalstorms on twitter](http://twitter.com/eternalstorms) 44 | 45 | For other Open Source projects of mine, please visit http://www.eternalstorms.at/opensource 46 | 47 | # I'd like to hear from you 48 | If you use NSView+ESSViewCategory in one of your projects, please be sure to [let me know](mailto:opensource@eternalstorms.at)! I'd love to hear about your apps and mention them here on this project page :) !! -------------------------------------------------------------------------------- /ESSTransitionByZooming/NSView+ESSViewCategory.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+ESSViewCategory.m 3 | // ESSTransitionByZooming 4 | // 5 | // Created by Matthias Gansrigler on 28.04.2015. 6 | // Copyright (c) 2015 Eternal Storms Software. All rights reserved. 7 | // 8 | 9 | #import "NSView+ESSViewCategory.h" 10 | #import 11 | 12 | @implementation NSView (ESSViewCategory) 13 | 14 | + (void)transitionFromView:(NSView *)fromView 15 | toView:(NSView *)toView 16 | withZoomingTransition:(ESSViewZoomTransition)transition 17 | duration:(CGFloat)duration 18 | completionHandler:(void (^)(void))completionHandler 19 | { 20 | if (fromView == nil || toView == nil) 21 | { 22 | if (completionHandler) 23 | completionHandler(); 24 | return; 25 | } 26 | 27 | BOOL wantsLayer = fromView.superview.wantsLayer; 28 | fromView.superview.wantsLayer = YES; 29 | toView.frame = fromView.frame; 30 | 31 | //create an image of the view we're transitioning to 32 | NSBitmapImageRep *rep = [toView bitmapImageRepForCachingDisplayInRect:toView.bounds]; 33 | [toView cacheDisplayInRect:toView.bounds toBitmapImageRep:rep]; 34 | NSImage *toImage = [[NSImage alloc] initWithSize:rep.size]; 35 | [toImage addRepresentation:rep]; 36 | 37 | NSRect initialToRect = NSZeroRect; 38 | CGFloat widthDiff = (fromView.superview.frame.size.width/20.0); 39 | CGFloat heightDiff = (fromView.superview.frame.size.height/20.0); 40 | if (transition == ESSViewZoomTransitionZoomOut) 41 | initialToRect = NSMakeRect(-widthDiff, 42 | -heightDiff, 43 | fromView.superview.frame.size.width+(widthDiff*2), 44 | fromView.superview.frame.size.height+(heightDiff*2)); 45 | else if (transition == ESSViewZoomTransitionZoomIn) 46 | initialToRect = NSMakeRect(widthDiff, 47 | heightDiff, 48 | fromView.superview.frame.size.width-(widthDiff*2), 49 | fromView.superview.frame.size.height-(heightDiff*2)); 50 | 51 | NSImageView *toImageView = [[NSImageView alloc] initWithFrame:initialToRect]; 52 | toImageView.wantsLayer = YES; 53 | toImageView.image = toImage; 54 | toImageView.imageAlignment = NSImageAlignCenter; 55 | toImageView.imageScaling = NSImageScaleAxesIndependently; 56 | toImageView.editable = NO; 57 | toImageView.animates = NO; 58 | toImageView.allowsCutCopyPaste = NO; 59 | toImageView.imageFrameStyle = NSImageFrameNone; 60 | toImageView.alphaValue = 0.0; 61 | 62 | toView.alphaValue = 0.0; 63 | [fromView.superview addSubview:toView]; 64 | 65 | //create an image of the view we're transitioning from 66 | rep = [fromView bitmapImageRepForCachingDisplayInRect:fromView.bounds]; 67 | [fromView cacheDisplayInRect:fromView.bounds toBitmapImageRep:rep]; 68 | NSImage *fromImage = [[NSImage alloc] initWithSize:rep.size]; 69 | [fromImage addRepresentation:rep]; 70 | 71 | NSImageView *fromImageView = [[NSImageView alloc] initWithFrame:fromView.frame]; 72 | fromImageView.wantsLayer = YES; 73 | fromImageView.image = fromImage; 74 | fromImageView.imageAlignment = NSImageAlignCenter; 75 | fromImageView.imageScaling = NSImageScaleAxesIndependently; 76 | fromImageView.editable = NO; 77 | fromImageView.animates = NO; 78 | fromImageView.allowsCutCopyPaste = NO; 79 | fromImageView.imageFrameStyle = NSImageFrameNone; 80 | 81 | [fromView.superview addSubview:fromImageView positioned:NSWindowAbove relativeTo:nil]; 82 | [fromView.superview addSubview:toImageView positioned:NSWindowAbove relativeTo:nil]; 83 | [fromView removeFromSuperview]; 84 | 85 | [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 86 | context.duration = duration; 87 | context.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 88 | fromImageView.animator.alphaValue = 0.0; 89 | NSRect zoomRect = NSZeroRect; 90 | if (transition == ESSViewZoomTransitionZoomOut) 91 | zoomRect = NSMakeRect(widthDiff, 92 | heightDiff, 93 | fromImageView.frame.size.width-(widthDiff*2), 94 | fromImageView.frame.size.height-(heightDiff*2)); 95 | else if (transition == ESSViewZoomTransitionZoomIn) 96 | zoomRect = NSMakeRect(-widthDiff, 97 | -heightDiff, 98 | fromImageView.frame.size.width+(widthDiff*2), 99 | fromImageView.frame.size.height+(heightDiff*2)); 100 | fromImageView.animator.frame = zoomRect; 101 | 102 | toImageView.animator.alphaValue = 1.0; 103 | toImageView.animator.frame = fromImageView.superview.frame; 104 | } 105 | completionHandler:^{ 106 | toView.alphaValue = 1.0; 107 | [fromImageView.superview addSubview:toView positioned:NSWindowAbove relativeTo:nil]; 108 | [fromImageView removeFromSuperview]; 109 | [toImageView removeFromSuperview]; 110 | [fromView removeFromSuperview]; 111 | fromView.superview.wantsLayer = wantsLayer; 112 | 113 | if (completionHandler) 114 | completionHandler(); 115 | }]; 116 | } 117 | 118 | - (void)transitionToView:(NSView *)toView 119 | withZoomingTransition:(ESSViewZoomTransition)transition 120 | duration:(CGFloat)duration 121 | completionHandler:(void (^)(void))completionHandler 122 | { 123 | [[self class] transitionFromView:self 124 | toView:toView 125 | withZoomingTransition:transition 126 | duration:duration 127 | completionHandler:completionHandler]; 128 | } 129 | 130 | @end 131 | -------------------------------------------------------------------------------- /ESSTransitionByZooming.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 39240DFD1AF0273500D87089 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 39240DFC1AF0273500D87089 /* AppDelegate.m */; }; 11 | 39240DFF1AF0273500D87089 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 39240DFE1AF0273500D87089 /* main.m */; }; 12 | 39240E011AF0273500D87089 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 39240E001AF0273500D87089 /* Images.xcassets */; }; 13 | 39240E041AF0273500D87089 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 39240E021AF0273500D87089 /* MainMenu.xib */; }; 14 | 39240E101AF0273500D87089 /* ESSTransitionByZoomingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 39240E0F1AF0273500D87089 /* ESSTransitionByZoomingTests.m */; }; 15 | 39240E1B1AF0279100D87089 /* NSView+ESSViewCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 39240E1A1AF0279100D87089 /* NSView+ESSViewCategory.m */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXContainerItemProxy section */ 19 | 39240E0A1AF0273500D87089 /* PBXContainerItemProxy */ = { 20 | isa = PBXContainerItemProxy; 21 | containerPortal = 39240DEE1AF0273500D87089 /* Project object */; 22 | proxyType = 1; 23 | remoteGlobalIDString = 39240DF51AF0273500D87089; 24 | remoteInfo = ESSTransitionByZooming; 25 | }; 26 | /* End PBXContainerItemProxy section */ 27 | 28 | /* Begin PBXFileReference section */ 29 | 39240DF61AF0273500D87089 /* ESSTransitionByZooming.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ESSTransitionByZooming.app; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | 39240DFA1AF0273500D87089 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 31 | 39240DFB1AF0273500D87089 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 32 | 39240DFC1AF0273500D87089 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 33 | 39240DFE1AF0273500D87089 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 34 | 39240E001AF0273500D87089 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 35 | 39240E031AF0273500D87089 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 36 | 39240E091AF0273500D87089 /* ESSTransitionByZoomingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ESSTransitionByZoomingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | 39240E0E1AF0273500D87089 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 38 | 39240E0F1AF0273500D87089 /* ESSTransitionByZoomingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ESSTransitionByZoomingTests.m; sourceTree = ""; }; 39 | 39240E191AF0279100D87089 /* NSView+ESSViewCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSView+ESSViewCategory.h"; sourceTree = ""; }; 40 | 39240E1A1AF0279100D87089 /* NSView+ESSViewCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSView+ESSViewCategory.m"; sourceTree = ""; }; 41 | /* End PBXFileReference section */ 42 | 43 | /* Begin PBXFrameworksBuildPhase section */ 44 | 39240DF31AF0273500D87089 /* Frameworks */ = { 45 | isa = PBXFrameworksBuildPhase; 46 | buildActionMask = 2147483647; 47 | files = ( 48 | ); 49 | runOnlyForDeploymentPostprocessing = 0; 50 | }; 51 | 39240E061AF0273500D87089 /* Frameworks */ = { 52 | isa = PBXFrameworksBuildPhase; 53 | buildActionMask = 2147483647; 54 | files = ( 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | /* End PBXFrameworksBuildPhase section */ 59 | 60 | /* Begin PBXGroup section */ 61 | 39240DED1AF0273500D87089 = { 62 | isa = PBXGroup; 63 | children = ( 64 | 39240DF81AF0273500D87089 /* ESSTransitionByZooming */, 65 | 39240E0C1AF0273500D87089 /* ESSTransitionByZoomingTests */, 66 | 39240DF71AF0273500D87089 /* Products */, 67 | ); 68 | sourceTree = ""; 69 | }; 70 | 39240DF71AF0273500D87089 /* Products */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 39240DF61AF0273500D87089 /* ESSTransitionByZooming.app */, 74 | 39240E091AF0273500D87089 /* ESSTransitionByZoomingTests.xctest */, 75 | ); 76 | name = Products; 77 | sourceTree = ""; 78 | }; 79 | 39240DF81AF0273500D87089 /* ESSTransitionByZooming */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 39240DFB1AF0273500D87089 /* AppDelegate.h */, 83 | 39240DFC1AF0273500D87089 /* AppDelegate.m */, 84 | 39240E191AF0279100D87089 /* NSView+ESSViewCategory.h */, 85 | 39240E1A1AF0279100D87089 /* NSView+ESSViewCategory.m */, 86 | 39240E001AF0273500D87089 /* Images.xcassets */, 87 | 39240E021AF0273500D87089 /* MainMenu.xib */, 88 | 39240DF91AF0273500D87089 /* Supporting Files */, 89 | ); 90 | path = ESSTransitionByZooming; 91 | sourceTree = ""; 92 | }; 93 | 39240DF91AF0273500D87089 /* Supporting Files */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | 39240DFA1AF0273500D87089 /* Info.plist */, 97 | 39240DFE1AF0273500D87089 /* main.m */, 98 | ); 99 | name = "Supporting Files"; 100 | sourceTree = ""; 101 | }; 102 | 39240E0C1AF0273500D87089 /* ESSTransitionByZoomingTests */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 39240E0F1AF0273500D87089 /* ESSTransitionByZoomingTests.m */, 106 | 39240E0D1AF0273500D87089 /* Supporting Files */, 107 | ); 108 | path = ESSTransitionByZoomingTests; 109 | sourceTree = ""; 110 | }; 111 | 39240E0D1AF0273500D87089 /* Supporting Files */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | 39240E0E1AF0273500D87089 /* Info.plist */, 115 | ); 116 | name = "Supporting Files"; 117 | sourceTree = ""; 118 | }; 119 | /* End PBXGroup section */ 120 | 121 | /* Begin PBXNativeTarget section */ 122 | 39240DF51AF0273500D87089 /* ESSTransitionByZooming */ = { 123 | isa = PBXNativeTarget; 124 | buildConfigurationList = 39240E131AF0273500D87089 /* Build configuration list for PBXNativeTarget "ESSTransitionByZooming" */; 125 | buildPhases = ( 126 | 39240DF21AF0273500D87089 /* Sources */, 127 | 39240DF31AF0273500D87089 /* Frameworks */, 128 | 39240DF41AF0273500D87089 /* Resources */, 129 | ); 130 | buildRules = ( 131 | ); 132 | dependencies = ( 133 | ); 134 | name = ESSTransitionByZooming; 135 | productName = ESSTransitionByZooming; 136 | productReference = 39240DF61AF0273500D87089 /* ESSTransitionByZooming.app */; 137 | productType = "com.apple.product-type.application"; 138 | }; 139 | 39240E081AF0273500D87089 /* ESSTransitionByZoomingTests */ = { 140 | isa = PBXNativeTarget; 141 | buildConfigurationList = 39240E161AF0273500D87089 /* Build configuration list for PBXNativeTarget "ESSTransitionByZoomingTests" */; 142 | buildPhases = ( 143 | 39240E051AF0273500D87089 /* Sources */, 144 | 39240E061AF0273500D87089 /* Frameworks */, 145 | 39240E071AF0273500D87089 /* Resources */, 146 | ); 147 | buildRules = ( 148 | ); 149 | dependencies = ( 150 | 39240E0B1AF0273500D87089 /* PBXTargetDependency */, 151 | ); 152 | name = ESSTransitionByZoomingTests; 153 | productName = ESSTransitionByZoomingTests; 154 | productReference = 39240E091AF0273500D87089 /* ESSTransitionByZoomingTests.xctest */; 155 | productType = "com.apple.product-type.bundle.unit-test"; 156 | }; 157 | /* End PBXNativeTarget section */ 158 | 159 | /* Begin PBXProject section */ 160 | 39240DEE1AF0273500D87089 /* Project object */ = { 161 | isa = PBXProject; 162 | attributes = { 163 | LastUpgradeCheck = 0630; 164 | ORGANIZATIONNAME = "Eternal Storms Software"; 165 | TargetAttributes = { 166 | 39240DF51AF0273500D87089 = { 167 | CreatedOnToolsVersion = 6.3.1; 168 | }; 169 | 39240E081AF0273500D87089 = { 170 | CreatedOnToolsVersion = 6.3.1; 171 | TestTargetID = 39240DF51AF0273500D87089; 172 | }; 173 | }; 174 | }; 175 | buildConfigurationList = 39240DF11AF0273500D87089 /* Build configuration list for PBXProject "ESSTransitionByZooming" */; 176 | compatibilityVersion = "Xcode 3.2"; 177 | developmentRegion = English; 178 | hasScannedForEncodings = 0; 179 | knownRegions = ( 180 | en, 181 | Base, 182 | ); 183 | mainGroup = 39240DED1AF0273500D87089; 184 | productRefGroup = 39240DF71AF0273500D87089 /* Products */; 185 | projectDirPath = ""; 186 | projectRoot = ""; 187 | targets = ( 188 | 39240DF51AF0273500D87089 /* ESSTransitionByZooming */, 189 | 39240E081AF0273500D87089 /* ESSTransitionByZoomingTests */, 190 | ); 191 | }; 192 | /* End PBXProject section */ 193 | 194 | /* Begin PBXResourcesBuildPhase section */ 195 | 39240DF41AF0273500D87089 /* Resources */ = { 196 | isa = PBXResourcesBuildPhase; 197 | buildActionMask = 2147483647; 198 | files = ( 199 | 39240E011AF0273500D87089 /* Images.xcassets in Resources */, 200 | 39240E041AF0273500D87089 /* MainMenu.xib in Resources */, 201 | ); 202 | runOnlyForDeploymentPostprocessing = 0; 203 | }; 204 | 39240E071AF0273500D87089 /* Resources */ = { 205 | isa = PBXResourcesBuildPhase; 206 | buildActionMask = 2147483647; 207 | files = ( 208 | ); 209 | runOnlyForDeploymentPostprocessing = 0; 210 | }; 211 | /* End PBXResourcesBuildPhase section */ 212 | 213 | /* Begin PBXSourcesBuildPhase section */ 214 | 39240DF21AF0273500D87089 /* Sources */ = { 215 | isa = PBXSourcesBuildPhase; 216 | buildActionMask = 2147483647; 217 | files = ( 218 | 39240DFF1AF0273500D87089 /* main.m in Sources */, 219 | 39240DFD1AF0273500D87089 /* AppDelegate.m in Sources */, 220 | 39240E1B1AF0279100D87089 /* NSView+ESSViewCategory.m in Sources */, 221 | ); 222 | runOnlyForDeploymentPostprocessing = 0; 223 | }; 224 | 39240E051AF0273500D87089 /* Sources */ = { 225 | isa = PBXSourcesBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | 39240E101AF0273500D87089 /* ESSTransitionByZoomingTests.m in Sources */, 229 | ); 230 | runOnlyForDeploymentPostprocessing = 0; 231 | }; 232 | /* End PBXSourcesBuildPhase section */ 233 | 234 | /* Begin PBXTargetDependency section */ 235 | 39240E0B1AF0273500D87089 /* PBXTargetDependency */ = { 236 | isa = PBXTargetDependency; 237 | target = 39240DF51AF0273500D87089 /* ESSTransitionByZooming */; 238 | targetProxy = 39240E0A1AF0273500D87089 /* PBXContainerItemProxy */; 239 | }; 240 | /* End PBXTargetDependency section */ 241 | 242 | /* Begin PBXVariantGroup section */ 243 | 39240E021AF0273500D87089 /* MainMenu.xib */ = { 244 | isa = PBXVariantGroup; 245 | children = ( 246 | 39240E031AF0273500D87089 /* Base */, 247 | ); 248 | name = MainMenu.xib; 249 | sourceTree = ""; 250 | }; 251 | /* End PBXVariantGroup section */ 252 | 253 | /* Begin XCBuildConfiguration section */ 254 | 39240E111AF0273500D87089 /* Debug */ = { 255 | isa = XCBuildConfiguration; 256 | buildSettings = { 257 | ALWAYS_SEARCH_USER_PATHS = NO; 258 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 259 | CLANG_CXX_LIBRARY = "libc++"; 260 | CLANG_ENABLE_MODULES = YES; 261 | CLANG_ENABLE_OBJC_ARC = YES; 262 | CLANG_WARN_BOOL_CONVERSION = YES; 263 | CLANG_WARN_CONSTANT_CONVERSION = YES; 264 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 265 | CLANG_WARN_EMPTY_BODY = YES; 266 | CLANG_WARN_ENUM_CONVERSION = YES; 267 | CLANG_WARN_INT_CONVERSION = YES; 268 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 269 | CLANG_WARN_UNREACHABLE_CODE = YES; 270 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 271 | CODE_SIGN_IDENTITY = "-"; 272 | COPY_PHASE_STRIP = NO; 273 | DEBUG_INFORMATION_FORMAT = dwarf; 274 | ENABLE_STRICT_OBJC_MSGSEND = YES; 275 | GCC_C_LANGUAGE_STANDARD = gnu99; 276 | GCC_DYNAMIC_NO_PIC = NO; 277 | GCC_NO_COMMON_BLOCKS = YES; 278 | GCC_OPTIMIZATION_LEVEL = 0; 279 | GCC_PREPROCESSOR_DEFINITIONS = ( 280 | "DEBUG=1", 281 | "$(inherited)", 282 | ); 283 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 284 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 285 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 286 | GCC_WARN_UNDECLARED_SELECTOR = YES; 287 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 288 | GCC_WARN_UNUSED_FUNCTION = YES; 289 | GCC_WARN_UNUSED_VARIABLE = YES; 290 | MACOSX_DEPLOYMENT_TARGET = 10.10; 291 | MTL_ENABLE_DEBUG_INFO = YES; 292 | ONLY_ACTIVE_ARCH = YES; 293 | SDKROOT = macosx; 294 | }; 295 | name = Debug; 296 | }; 297 | 39240E121AF0273500D87089 /* Release */ = { 298 | isa = XCBuildConfiguration; 299 | buildSettings = { 300 | ALWAYS_SEARCH_USER_PATHS = NO; 301 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 302 | CLANG_CXX_LIBRARY = "libc++"; 303 | CLANG_ENABLE_MODULES = YES; 304 | CLANG_ENABLE_OBJC_ARC = YES; 305 | CLANG_WARN_BOOL_CONVERSION = YES; 306 | CLANG_WARN_CONSTANT_CONVERSION = YES; 307 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 308 | CLANG_WARN_EMPTY_BODY = YES; 309 | CLANG_WARN_ENUM_CONVERSION = YES; 310 | CLANG_WARN_INT_CONVERSION = YES; 311 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 312 | CLANG_WARN_UNREACHABLE_CODE = YES; 313 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 314 | CODE_SIGN_IDENTITY = "-"; 315 | COPY_PHASE_STRIP = NO; 316 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 317 | ENABLE_NS_ASSERTIONS = NO; 318 | ENABLE_STRICT_OBJC_MSGSEND = YES; 319 | GCC_C_LANGUAGE_STANDARD = gnu99; 320 | GCC_NO_COMMON_BLOCKS = YES; 321 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 322 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 323 | GCC_WARN_UNDECLARED_SELECTOR = YES; 324 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 325 | GCC_WARN_UNUSED_FUNCTION = YES; 326 | GCC_WARN_UNUSED_VARIABLE = YES; 327 | MACOSX_DEPLOYMENT_TARGET = 10.10; 328 | MTL_ENABLE_DEBUG_INFO = NO; 329 | SDKROOT = macosx; 330 | }; 331 | name = Release; 332 | }; 333 | 39240E141AF0273500D87089 /* Debug */ = { 334 | isa = XCBuildConfiguration; 335 | buildSettings = { 336 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 337 | COMBINE_HIDPI_IMAGES = YES; 338 | INFOPLIST_FILE = ESSTransitionByZooming/Info.plist; 339 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 340 | PRODUCT_NAME = "$(TARGET_NAME)"; 341 | }; 342 | name = Debug; 343 | }; 344 | 39240E151AF0273500D87089 /* Release */ = { 345 | isa = XCBuildConfiguration; 346 | buildSettings = { 347 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 348 | COMBINE_HIDPI_IMAGES = YES; 349 | INFOPLIST_FILE = ESSTransitionByZooming/Info.plist; 350 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 351 | PRODUCT_NAME = "$(TARGET_NAME)"; 352 | }; 353 | name = Release; 354 | }; 355 | 39240E171AF0273500D87089 /* Debug */ = { 356 | isa = XCBuildConfiguration; 357 | buildSettings = { 358 | BUNDLE_LOADER = "$(TEST_HOST)"; 359 | COMBINE_HIDPI_IMAGES = YES; 360 | FRAMEWORK_SEARCH_PATHS = ( 361 | "$(DEVELOPER_FRAMEWORKS_DIR)", 362 | "$(inherited)", 363 | ); 364 | GCC_PREPROCESSOR_DEFINITIONS = ( 365 | "DEBUG=1", 366 | "$(inherited)", 367 | ); 368 | INFOPLIST_FILE = ESSTransitionByZoomingTests/Info.plist; 369 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 370 | PRODUCT_NAME = "$(TARGET_NAME)"; 371 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ESSTransitionByZooming.app/Contents/MacOS/ESSTransitionByZooming"; 372 | }; 373 | name = Debug; 374 | }; 375 | 39240E181AF0273500D87089 /* Release */ = { 376 | isa = XCBuildConfiguration; 377 | buildSettings = { 378 | BUNDLE_LOADER = "$(TEST_HOST)"; 379 | COMBINE_HIDPI_IMAGES = YES; 380 | FRAMEWORK_SEARCH_PATHS = ( 381 | "$(DEVELOPER_FRAMEWORKS_DIR)", 382 | "$(inherited)", 383 | ); 384 | INFOPLIST_FILE = ESSTransitionByZoomingTests/Info.plist; 385 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 386 | PRODUCT_NAME = "$(TARGET_NAME)"; 387 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ESSTransitionByZooming.app/Contents/MacOS/ESSTransitionByZooming"; 388 | }; 389 | name = Release; 390 | }; 391 | /* End XCBuildConfiguration section */ 392 | 393 | /* Begin XCConfigurationList section */ 394 | 39240DF11AF0273500D87089 /* Build configuration list for PBXProject "ESSTransitionByZooming" */ = { 395 | isa = XCConfigurationList; 396 | buildConfigurations = ( 397 | 39240E111AF0273500D87089 /* Debug */, 398 | 39240E121AF0273500D87089 /* Release */, 399 | ); 400 | defaultConfigurationIsVisible = 0; 401 | defaultConfigurationName = Release; 402 | }; 403 | 39240E131AF0273500D87089 /* Build configuration list for PBXNativeTarget "ESSTransitionByZooming" */ = { 404 | isa = XCConfigurationList; 405 | buildConfigurations = ( 406 | 39240E141AF0273500D87089 /* Debug */, 407 | 39240E151AF0273500D87089 /* Release */, 408 | ); 409 | defaultConfigurationIsVisible = 0; 410 | }; 411 | 39240E161AF0273500D87089 /* Build configuration list for PBXNativeTarget "ESSTransitionByZoomingTests" */ = { 412 | isa = XCConfigurationList; 413 | buildConfigurations = ( 414 | 39240E171AF0273500D87089 /* Debug */, 415 | 39240E181AF0273500D87089 /* Release */, 416 | ); 417 | defaultConfigurationIsVisible = 0; 418 | }; 419 | /* End XCConfigurationList section */ 420 | }; 421 | rootObject = 39240DEE1AF0273500D87089 /* Project object */; 422 | } 423 | -------------------------------------------------------------------------------- /ESSTransitionByZooming/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 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 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 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | Default 541 | 542 | 543 | 544 | 545 | 546 | 547 | Left to Right 548 | 549 | 550 | 551 | 552 | 553 | 554 | Right to Left 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | Default 566 | 567 | 568 | 569 | 570 | 571 | 572 | Left to Right 573 | 574 | 575 | 576 | 577 | 578 | 579 | Right to Left 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. 711 | The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 760 | 768 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | --------------------------------------------------------------------------------