From 9f9daf5c51940e13f62b75826ed2935435aabd0d Mon Sep 17 00:00:00 2001 From: panupan Date: Thu, 16 Aug 2012 17:42:02 -0400 Subject: [PATCH] first commit --- FramesVsBounds.xcodeproj/project.pbxproj | 310 ++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 14610 bytes .../xcschemes/FramesVsBounds.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 22 + FramesVsBounds/AppDelegate.h | 23 + FramesVsBounds/AppDelegate.m | 132 + FramesVsBounds/BGView.h | 13 + FramesVsBounds/BGView.m | 31 + FramesVsBounds/FramesVsBounds-Info.plist | 34 + FramesVsBounds/FramesVsBounds-Prefix.pch | 7 + FramesVsBounds/en.lproj/Credits.rtf | 29 + FramesVsBounds/en.lproj/InfoPlist.strings | 2 + FramesVsBounds/en.lproj/MainMenu.xib | 3864 +++++++++++++++++ FramesVsBounds/main.m | 14 + README.md | 16 + 16 files changed, 4590 insertions(+) create mode 100644 FramesVsBounds.xcodeproj/project.pbxproj create mode 100644 FramesVsBounds.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 FramesVsBounds.xcodeproj/project.xcworkspace/xcuserdata/panupan.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 FramesVsBounds.xcodeproj/xcuserdata/panupan.xcuserdatad/xcschemes/FramesVsBounds.xcscheme create mode 100644 FramesVsBounds.xcodeproj/xcuserdata/panupan.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 FramesVsBounds/AppDelegate.h create mode 100644 FramesVsBounds/AppDelegate.m create mode 100644 FramesVsBounds/BGView.h create mode 100644 FramesVsBounds/BGView.m create mode 100644 FramesVsBounds/FramesVsBounds-Info.plist create mode 100644 FramesVsBounds/FramesVsBounds-Prefix.pch create mode 100644 FramesVsBounds/en.lproj/Credits.rtf create mode 100644 FramesVsBounds/en.lproj/InfoPlist.strings create mode 100644 FramesVsBounds/en.lproj/MainMenu.xib create mode 100644 FramesVsBounds/main.m create mode 100644 README.md diff --git a/FramesVsBounds.xcodeproj/project.pbxproj b/FramesVsBounds.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b401622 --- /dev/null +++ b/FramesVsBounds.xcodeproj/project.pbxproj @@ -0,0 +1,310 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 82727F2D15DD630B00B14F42 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82727F2C15DD630B00B14F42 /* Cocoa.framework */; }; + 82727F3715DD630B00B14F42 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 82727F3515DD630B00B14F42 /* InfoPlist.strings */; }; + 82727F3915DD630B00B14F42 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 82727F3815DD630B00B14F42 /* main.m */; }; + 82727F3D15DD630B00B14F42 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 82727F3B15DD630B00B14F42 /* Credits.rtf */; }; + 82727F4015DD630B00B14F42 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 82727F3F15DD630B00B14F42 /* AppDelegate.m */; }; + 82727F4315DD630B00B14F42 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 82727F4115DD630B00B14F42 /* MainMenu.xib */; }; + 82727F4A15DD63B700B14F42 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82727F4915DD63B700B14F42 /* QuartzCore.framework */; }; + 82727F4D15DD6C2E00B14F42 /* BGView.m in Sources */ = {isa = PBXBuildFile; fileRef = 82727F4C15DD6C2E00B14F42 /* BGView.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 82727F2815DD630B00B14F42 /* FramesVsBounds.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FramesVsBounds.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 82727F2C15DD630B00B14F42 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 82727F2F15DD630B00B14F42 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 82727F3015DD630B00B14F42 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 82727F3115DD630B00B14F42 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 82727F3415DD630B00B14F42 /* FramesVsBounds-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "FramesVsBounds-Info.plist"; sourceTree = ""; }; + 82727F3615DD630B00B14F42 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 82727F3815DD630B00B14F42 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 82727F3A15DD630B00B14F42 /* FramesVsBounds-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FramesVsBounds-Prefix.pch"; sourceTree = ""; }; + 82727F3C15DD630B00B14F42 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + 82727F3E15DD630B00B14F42 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 82727F3F15DD630B00B14F42 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 82727F4215DD630B00B14F42 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + 82727F4915DD63B700B14F42 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 82727F4B15DD6C2E00B14F42 /* BGView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BGView.h; sourceTree = ""; }; + 82727F4C15DD6C2E00B14F42 /* BGView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BGView.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 82727F2515DD630B00B14F42 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 82727F4A15DD63B700B14F42 /* QuartzCore.framework in Frameworks */, + 82727F2D15DD630B00B14F42 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 82727F1D15DD630B00B14F42 = { + isa = PBXGroup; + children = ( + 82727F4915DD63B700B14F42 /* QuartzCore.framework */, + 82727F3215DD630B00B14F42 /* FramesVsBounds */, + 82727F2B15DD630B00B14F42 /* Frameworks */, + 82727F2915DD630B00B14F42 /* Products */, + ); + sourceTree = ""; + }; + 82727F2915DD630B00B14F42 /* Products */ = { + isa = PBXGroup; + children = ( + 82727F2815DD630B00B14F42 /* FramesVsBounds.app */, + ); + name = Products; + sourceTree = ""; + }; + 82727F2B15DD630B00B14F42 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 82727F2C15DD630B00B14F42 /* Cocoa.framework */, + 82727F2E15DD630B00B14F42 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 82727F2E15DD630B00B14F42 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 82727F2F15DD630B00B14F42 /* AppKit.framework */, + 82727F3015DD630B00B14F42 /* CoreData.framework */, + 82727F3115DD630B00B14F42 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 82727F3215DD630B00B14F42 /* FramesVsBounds */ = { + isa = PBXGroup; + children = ( + 82727F3E15DD630B00B14F42 /* AppDelegate.h */, + 82727F3F15DD630B00B14F42 /* AppDelegate.m */, + 82727F4115DD630B00B14F42 /* MainMenu.xib */, + 82727F3315DD630B00B14F42 /* Supporting Files */, + 82727F4B15DD6C2E00B14F42 /* BGView.h */, + 82727F4C15DD6C2E00B14F42 /* BGView.m */, + ); + path = FramesVsBounds; + sourceTree = ""; + }; + 82727F3315DD630B00B14F42 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 82727F3415DD630B00B14F42 /* FramesVsBounds-Info.plist */, + 82727F3515DD630B00B14F42 /* InfoPlist.strings */, + 82727F3815DD630B00B14F42 /* main.m */, + 82727F3A15DD630B00B14F42 /* FramesVsBounds-Prefix.pch */, + 82727F3B15DD630B00B14F42 /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 82727F2715DD630B00B14F42 /* FramesVsBounds */ = { + isa = PBXNativeTarget; + buildConfigurationList = 82727F4615DD630B00B14F42 /* Build configuration list for PBXNativeTarget "FramesVsBounds" */; + buildPhases = ( + 82727F2415DD630B00B14F42 /* Sources */, + 82727F2515DD630B00B14F42 /* Frameworks */, + 82727F2615DD630B00B14F42 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FramesVsBounds; + productName = FramesVsBounds; + productReference = 82727F2815DD630B00B14F42 /* FramesVsBounds.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 82727F1F15DD630B00B14F42 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0440; + ORGANIZATIONNAME = "WILL Interactive, Inc."; + }; + buildConfigurationList = 82727F2215DD630B00B14F42 /* Build configuration list for PBXProject "FramesVsBounds" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 82727F1D15DD630B00B14F42; + productRefGroup = 82727F2915DD630B00B14F42 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 82727F2715DD630B00B14F42 /* FramesVsBounds */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 82727F2615DD630B00B14F42 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 82727F3715DD630B00B14F42 /* InfoPlist.strings in Resources */, + 82727F3D15DD630B00B14F42 /* Credits.rtf in Resources */, + 82727F4315DD630B00B14F42 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 82727F2415DD630B00B14F42 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 82727F3915DD630B00B14F42 /* main.m in Sources */, + 82727F4015DD630B00B14F42 /* AppDelegate.m in Sources */, + 82727F4D15DD6C2E00B14F42 /* BGView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 82727F3515DD630B00B14F42 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 82727F3615DD630B00B14F42 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 82727F3B15DD630B00B14F42 /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 82727F3C15DD630B00B14F42 /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + 82727F4115DD630B00B14F42 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 82727F4215DD630B00B14F42 /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 82727F4415DD630B00B14F42 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 82727F4515DD630B00B14F42 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + SDKROOT = macosx; + }; + name = Release; + }; + 82727F4715DD630B00B14F42 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "FramesVsBounds/FramesVsBounds-Prefix.pch"; + INFOPLIST_FILE = "FramesVsBounds/FramesVsBounds-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 82727F4815DD630B00B14F42 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "FramesVsBounds/FramesVsBounds-Prefix.pch"; + INFOPLIST_FILE = "FramesVsBounds/FramesVsBounds-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 82727F2215DD630B00B14F42 /* Build configuration list for PBXProject "FramesVsBounds" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 82727F4415DD630B00B14F42 /* Debug */, + 82727F4515DD630B00B14F42 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 82727F4615DD630B00B14F42 /* Build configuration list for PBXNativeTarget "FramesVsBounds" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 82727F4715DD630B00B14F42 /* Debug */, + 82727F4815DD630B00B14F42 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 82727F1F15DD630B00B14F42 /* Project object */; +} diff --git a/FramesVsBounds.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/FramesVsBounds.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..e25f8c5 --- /dev/null +++ b/FramesVsBounds.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/FramesVsBounds.xcodeproj/project.xcworkspace/xcuserdata/panupan.xcuserdatad/UserInterfaceState.xcuserstate b/FramesVsBounds.xcodeproj/project.xcworkspace/xcuserdata/panupan.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..48b8c1d4353cfa737ad6027e8e18382ab1e61803 GIT binary patch literal 14610 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FramesVsBounds.xcodeproj/xcuserdata/panupan.xcuserdatad/xcschemes/xcschememanagement.plist b/FramesVsBounds.xcodeproj/xcuserdata/panupan.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..c0110ed --- /dev/null +++ b/FramesVsBounds.xcodeproj/xcuserdata/panupan.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + FramesVsBounds.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 82727F2715DD630B00B14F42 + + primary + + + + + diff --git a/FramesVsBounds/AppDelegate.h b/FramesVsBounds/AppDelegate.h new file mode 100644 index 0000000..9c77bc5 --- /dev/null +++ b/FramesVsBounds/AppDelegate.h @@ -0,0 +1,23 @@ +// +// AppDelegate.h +// FramesVsBounds +// +// Created by Panupan Sriautharawong on 8/16/12. +// Copyright (c) 2012 WILL Interactive, Inc. All rights reserved. +// + +#import + +@interface AppDelegate : NSObject + +@property (assign) IBOutlet NSWindow *window; + +@property IBOutlet NSTextField *descriptionTextField; +@property IBOutlet NSTextField *frameTextField; +@property IBOutlet NSTextField *boundsTextField; +@property IBOutlet NSButton *applyButton; +@property IBOutlet NSButton *nextButton; + +- (IBAction)onNext:(id)sender; +- (IBAction)onApply:(id)sender; +@end diff --git a/FramesVsBounds/AppDelegate.m b/FramesVsBounds/AppDelegate.m new file mode 100644 index 0000000..530d1d0 --- /dev/null +++ b/FramesVsBounds/AppDelegate.m @@ -0,0 +1,132 @@ +// +// AppDelegate.m +// FramesVsBounds +// +// Created by Panupan Sriautharawong on 8/16/12. +// Copyright (c) 2012 WILL Interactive, Inc. All rights reserved. +// + +#import "AppDelegate.h" +#import "BGView.h" + +@implementation AppDelegate { + BGView *redView; + BGView *greenView; + BGView *blueView; + NSMutableArray *actionsArray; + int currentIndex; +} + +- (void)updateLabels +{ + NSMutableDictionary *currentAction = [actionsArray objectAtIndex:currentIndex]; + self.descriptionTextField.stringValue = [currentAction objectForKey:@"description"]; + + self.frameTextField.stringValue = [NSString stringWithFormat:@"redView.frame: %@", NSStringFromRect(redView.frame)]; + self.boundsTextField.stringValue = [NSString stringWithFormat:@"redView.bounds: %@", NSStringFromRect(redView.bounds)]; +} + +- (IBAction)onNext:(id)sender +{ + NSView *contentView = self.window.contentView; + redView.frame = NSMakeRect(0, + 70, + contentView.frame.size.width, + contentView.frame.size.height-70); + redView.bounds = NSMakeRect(0, + 0, + contentView.frame.size.width, + contentView.frame.size.height-70); + redView.boundsRotation = 0; + + if (currentIndex < 0 || currentIndex >= actionsArray.count-1) currentIndex = 0; + else { + currentIndex++; + } + + [self updateLabels]; +} + +- (IBAction)onApply:(id)sender +{ + if ([self.descriptionTextField.stringValue isEqualToString:@"Halve redView.frame.size"]) { + redView.frame = NSMakeRect(redView.frame.origin.x, + redView.frame.origin.y, + redView.frame.size.width/2, + redView.frame.size.height/2); + } + else if ([self.descriptionTextField.stringValue isEqualToString:@"redView.bounds.origin.x += 100"]) { + redView.bounds = NSMakeRect(redView.bounds.origin.x+100, + redView.bounds.origin.y, + redView.bounds.size.width, + redView.bounds.size.height); + } + else if ([self.descriptionTextField.stringValue isEqualToString:@"Halve redView.bounds.size"]) { + redView.bounds = NSMakeRect(redView.bounds.origin.x, + redView.bounds.origin.y, + redView.bounds.size.width/2, + redView.bounds.size.height/2); + } + else if ([self.descriptionTextField.stringValue isEqualToString:@"Double redView.bounds.size"]) { + redView.bounds = NSMakeRect(redView.bounds.origin.x, + redView.bounds.origin.y, + redView.bounds.size.width*2, + redView.bounds.size.height*2); + } + else if ([self.descriptionTextField.stringValue isEqualToString:@"Scale redView by .5"]) { + NSLog(@"redView.bounds before: %@", NSStringFromRect(redView.bounds)); + [redView scaleUnitSquareToSize:NSMakeSize(.5, .5)]; + [redView setNeedsDisplay:YES]; + NSLog(@"redView.bounds after: %@", NSStringFromRect(redView.bounds)); + } + else if ([self.descriptionTextField.stringValue isEqualToString:@"Rotate redView"]) { + NSLog(@"redView.bounds before: %@", NSStringFromRect(redView.bounds)); + redView.boundsRotation += 10; + [redView setNeedsDisplay:YES]; + NSLog(@"redView.bounds after: %@", NSStringFromRect(redView.bounds)); + } + + [self updateLabels]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + NSView *contentView = self.window.contentView; + + actionsArray = [[NSMutableArray alloc] init]; + [actionsArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Halve redView.frame.size", @"description", nil]]; + [actionsArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"redView.bounds.origin.x += 100", @"description", nil]]; + [actionsArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Halve redView.bounds.size", @"description", nil]]; + [actionsArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Double redView.bounds.size", @"description", nil]]; + [actionsArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Scale redView by .5", @"description", nil]]; + [actionsArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rotate redView", @"description", nil]]; + + redView = [[BGView alloc] initWithFrame:NSMakeRect(0, + 70, + contentView.frame.size.width, + contentView.frame.size.height-70)]; + redView.autoresizingMask = NSViewNotSizable; + redView.backgroundColor = [NSColor redColor]; + [contentView addSubview:redView]; + + greenView = [[BGView alloc] initWithFrame:NSMakeRect(redView.frame.size.width/2 - redView.frame.size.width/4, + redView.frame.size.height/2 - redView.frame.size.height/4, + redView.frame.size.width/2, + redView.frame.size.height/2)]; + greenView.autoresizingMask = NSViewNotSizable; + greenView.backgroundColor = [NSColor greenColor]; + [redView addSubview:greenView]; + + blueView = [[BGView alloc] initWithFrame:NSMakeRect(greenView.frame.size.width/2 - greenView.frame.size.width/4, + greenView.frame.size.height/2 - greenView.frame.size.height/4, + greenView.frame.size.width/2, + greenView.frame.size.height/2)]; + blueView.backgroundColor = [NSColor blueColor]; + blueView.autoresizingMask = NSViewNotSizable; + [greenView addSubview:blueView]; + + currentIndex=-1; + [self onNext:nil]; +} + +@end diff --git a/FramesVsBounds/BGView.h b/FramesVsBounds/BGView.h new file mode 100644 index 0000000..6639af0 --- /dev/null +++ b/FramesVsBounds/BGView.h @@ -0,0 +1,13 @@ +// +// BGView.h +// FramesVsBounds +// +// Created by Panupan Sriautharawong on 8/16/12. +// Copyright (c) 2012 WILL Interactive, Inc. All rights reserved. +// + +#import + +@interface BGView : NSView +@property (strong) NSColor *backgroundColor; +@end diff --git a/FramesVsBounds/BGView.m b/FramesVsBounds/BGView.m new file mode 100644 index 0000000..9180cd3 --- /dev/null +++ b/FramesVsBounds/BGView.m @@ -0,0 +1,31 @@ +// +// BGView.m +// FramesVsBounds +// +// Created by Panupan Sriautharawong on 8/16/12. +// Copyright (c) 2012 WILL Interactive, Inc. All rights reserved. +// + +#import "BGView.h" + +@implementation BGView + +- (id)initWithFrame:(NSRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code here. + self.backgroundColor = [NSColor blackColor]; + } + + return self; +} + +- (void)drawRect:(NSRect)dirtyRect +{ + // Drawing code here. + [self.backgroundColor setFill]; + NSRectFill(self.bounds); +} + +@end diff --git a/FramesVsBounds/FramesVsBounds-Info.plist b/FramesVsBounds/FramesVsBounds-Info.plist new file mode 100644 index 0000000..537e0d9 --- /dev/null +++ b/FramesVsBounds/FramesVsBounds-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.willinteractive.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 WILL Interactive, Inc. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/FramesVsBounds/FramesVsBounds-Prefix.pch b/FramesVsBounds/FramesVsBounds-Prefix.pch new file mode 100644 index 0000000..87c77e1 --- /dev/null +++ b/FramesVsBounds/FramesVsBounds-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'FramesVsBounds' target in the 'FramesVsBounds' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/FramesVsBounds/en.lproj/Credits.rtf b/FramesVsBounds/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/FramesVsBounds/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/FramesVsBounds/en.lproj/InfoPlist.strings b/FramesVsBounds/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/FramesVsBounds/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/FramesVsBounds/en.lproj/MainMenu.xib b/FramesVsBounds/en.lproj/MainMenu.xib new file mode 100644 index 0000000..a3b04d1 --- /dev/null +++ b/FramesVsBounds/en.lproj/MainMenu.xib @@ -0,0 +1,3864 @@ + + + + 1070 + 11E53 + 2549 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2549 + + + IBNSLayoutConstraint + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + FramesVsBounds + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + FramesVsBounds + + + + About FramesVsBounds + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide FramesVsBounds + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit FramesVsBounds + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find and Replace… + f + 1572864 + 2147483647 + + + 12 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + + + Font + + 2147483647 + + + submenuAction: + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligatures + + 2147483647 + + + submenuAction: + + Ligatures + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + FramesVsBounds Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{335, 390}, {858, 675}} + 1954021376 + FramesVsBounds + NSWindow + + + + + 256 + + + + 268 + {{14, 12}, {76, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Apply + + LucidaGrande + 13 + 1044 + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + + + + 268 + {{17, 48}, {286, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Label + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{90, 12}, {70, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Next + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + + + + 268 + {{312, 48}, {529, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + frame label + + _NS:1535 + + + + + + + + 268 + {{312, 20}, {529, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + bounds label + + _NS:1535 + + + + + + + {858, 675} + + + + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + YES + + + AppDelegate + + + NSFontManager + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + performFindPanelAction: + + + + 535 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + window + + + + 532 + + + + descriptionTextField + + + + 551 + + + + applyButton + + + + 552 + + + + nextButton + + + + 553 + + + + onApply: + + + + 554 + + + + onNext: + + + + 555 + + + + boundsTextField + + + + 568 + + + + frameTextField + + + + 569 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 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 + + + + + 450 + + + + + + + + 451 + + + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 534 + + + + + 536 + + + + + + + + 537 + + + + + 538 + + + + + 539 + + + + + 540 + + + + + + 7 + 0 + + 0 + 1 + + 280 + + 1000 + + 3 + 9 + 1 + + + + + + 541 + + + + + 544 + + + + + 545 + + + + + 546 + + + + + + + + 547 + + + + + 548 + + + + + 549 + + + + + 556 + + + + + + 7 + 0 + + 0 + 1 + + 523 + + 1000 + + 3 + 9 + 1 + + + + + + 557 + + + + + 558 + + + + + 560 + + + + + + + + 561 + + + + + 562 + + + + + 571 + + + + + 573 + + + + + 574 + + + + + 576 + + + + + 577 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 577 + + + + + AppDelegate + NSObject + + id + id + + + + onApply: + id + + + onNext: + id + + + + NSButton + NSTextField + NSTextField + NSTextField + NSButton + NSWindow + + + + applyButton + NSButton + + + boundsTextField + NSTextField + + + descriptionTextField + NSTextField + + + frameTextField + NSTextField + + + nextButton + NSButton + + + window + NSWindow + + + + IBProjectSource + ./Classes/AppDelegate.h + + + + NSDocument + + id + id + id + id + id + id + + + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + IBProjectSource + ./Classes/NSDocument.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/FramesVsBounds/main.m b/FramesVsBounds/main.m new file mode 100644 index 0000000..d4b8fe5 --- /dev/null +++ b/FramesVsBounds/main.m @@ -0,0 +1,14 @@ +// +// main.m +// FramesVsBounds +// +// Created by Panupan Sriautharawong on 8/16/12. +// Copyright (c) 2012 WILL Interactive, Inc. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..8228844 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +NSView Frames vs Bounds +======================= + +- Both are NSRect properties expressing a view’s location and size. +- View's location and sized expressed in two ways: + - **Frame** is in terms of superview's coordinate system. + - **Bounds** is in terms of local coordinate system. +- **Prior Misconception:** Bounds size is always the same as Frame size. It’s easy to think this because updating a view’s frame scales its bounds accordingly. +- But actually... a view’s frames and bounds might be different from each other caused by: + - Setting a view’s bounds directly does not scale its frame. + - Scaling a view using scaleUnitSquareToSize: updates its bounds, but not its frame. + - Rotating a view with boundsRotation updates its bounds, but not its frame. +- When to use frame? + - When using a view, e.g., creating, positioning. +- When to use bounds? + - When implementing a view, e.g., drawing, event handling.