From ffab4bdf562b4e3bbbe69ba6ba84681b17c80d28 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Thu, 21 May 2009 16:38:59 -0700 Subject: [PATCH 1/6] README/Download fix. Reviewed by me. --- Rakefile | 14 +++----------- Tools/READMEs/STARTER-README | 5 ++--- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/Rakefile b/Rakefile index f251169aa..4f0a3da62 100644 --- a/Rakefile +++ b/Rakefile @@ -31,7 +31,6 @@ $TOOLS_DOWNLOAD_INSTALLER = File.join($TOOLS_DOWNLOAD, 'install-tools' $STARTER_README = File.join('Tools', 'READMEs', 'STARTER-README') $STARTER_DOWNLOAD = File.join($BUILD_DIR, 'Cappuccino', 'Starter') $STARTER_DOWNLOAD_APPLICATION = File.join($STARTER_DOWNLOAD, 'NewApplication') -$STARTER_DOWNLOAD_NIBAPPLICATION = File.join($STARTER_DOWNLOAD, 'NibApplication') $STARTER_DOWNLOAD_README = File.join($STARTER_DOWNLOAD, 'README') task :downloads => [:starter_download, :tools_download] @@ -60,7 +59,7 @@ end task :tools_download => [$TOOLS_DOWNLOAD_ENV, $TOOLS_DOWNLOAD_EDITORS, $TOOLS_DOWNLOAD_README, $TOOLS_DOWNLOAD_INSTALLER, :objj_gem] -task :starter_download => [$STARTER_DOWNLOAD_NIBAPPLICATION, $STARTER_DOWNLOAD_APPLICATION, $STARTER_DOWNLOAD_README] +task :starter_download => [$STARTER_DOWNLOAD_APPLICATION, $STARTER_DOWNLOAD_README] task :deploy => [:downloads, :docs] do #copy the docs into the starter pack @@ -89,15 +88,8 @@ file_d $STARTER_DOWNLOAD_APPLICATION => [$TOOLS_DOWNLOAD_ENV] do mkdir_p($STARTER_DOWNLOAD) system %{capp gen #{$STARTER_DOWNLOAD_APPLICATION} -t Application --noconfig } -end - -file_d $STARTER_DOWNLOAD_NIBAPPLICATION => [$TOOLS_DOWNLOAD_ENV] do - - ENV['PATH'] = "#{File.join($TOOLS_DOWNLOAD_ENV, 'bin')}:#{ENV['PATH']}" - - rm_rf($STARTER_DOWNLOAD_NIBAPPLICATION) - mkdir_p($STARTER_DOWNLOAD) - system %{capp gen #{$STARTER_DOWNLOAD_NIBAPPLICATION} -t NibApplication --noconfig } + # No tools means no objective-j gem + rm(File.join($STARTER_DOWNLOAD_APPLICATION, 'Rakefile')) end diff --git a/Tools/READMEs/STARTER-README b/Tools/READMEs/STARTER-README index 034063a99..f747a995f 100644 --- a/Tools/READMEs/STARTER-README +++ b/Tools/READMEs/STARTER-README @@ -4,11 +4,10 @@ Included you should find the following: 1. Documentation 2. NewApplication -3. NibApplication 4. README NewApplication is a stand alone Cappuccino application that you can use as a template to start building your own apps. To get started, just open up NewApplication/index.html in your favorite web browser. A great place to go from there is to read the "Downloading and Getting Started" tutorial found at http://cappuccino.org/learn/tutorials/starter-tutorial.php. This will walk you through these initial steps as well as getting you to do a little coding. If you want to debug your application, try running it with index-debug.html instead, which should make it easier. -NibApplication is a stand alone Cappuccino application that uses .cib files for its interface. You will find two files of interest in the Resources folder: MainMenu.xib and MainMenu.cib. To edit the interface, open MainMenu.xib in Interface Builder. When you are done, run the nib2cib command on MainMenu.xib to generate a new MainMenu.cib file, and refresh your application. - You can build your entire application right from either of these sample projects, but if you want to dig a little deeper, you can also download the Tools package found at http://cappuccino.org/download/. This will set you up with some great additions like syntax modules for certain text editors and build tools to get extra performance. + +NOTE: If you'd like to make a nib-based application, you will need to download the Tools package from cappuccino.org/download From 15bff97388c48460f540e632940a7d6ac47d55ba Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Fri, 22 May 2009 03:23:08 -0700 Subject: [PATCH 2/6] Fix for MainMenu.cib not displaying images. Closes #140. Reviewed by me. --- AppKit/CPApplication.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 8a3b04522..de8572111 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -841,7 +841,7 @@ var _CPAppBootstrapperActions = nil; if (mainCibFile) { - [CPBundle loadCibFile:[mainBundle pathForResource:mainCibFile] + [mainBundle loadCibFile:mainCibFile externalNameTable:[CPDictionary dictionaryWithObject:CPApp forKey:CPCibOwner] loadDelegate:self]; From aebbdbe0a335a7ae8b7bbeb5cc7f39062482d4b0 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 23 May 2009 12:33:24 -0700 Subject: [PATCH 3/6] Fixed a few graphics bugs and made the automatically generated theme gallery nicer. Reviewed by me. --- AppKit/CPApplication.j | 5 + AppKit/CPPopUpButton.j | 2 +- AppKit/Themes/Aristo/ThemeDescriptors.j | 250 ++++++----- AppKit/Tools/BlendKit/BKShowcaseController.j | 392 ++++++++++++++---- AppKit/Tools/BlendKit/BKThemeDescriptor.j | 200 +++++++++ AppKit/Tools/BlendKit/BKUtilities.j | 91 ---- AppKit/Tools/BlendKit/BlendKit.j | 1 + .../BlendKit/Resources/dark-checkers.png | Bin 0 -> 131 bytes .../BlendKit/Resources/light-checkers.png | Bin 0 -> 3471 bytes AppKit/Tools/BlendKit/Resources/selection.png | Bin 0 -> 4090 bytes 10 files changed, 648 insertions(+), 293 deletions(-) create mode 100644 AppKit/Tools/BlendKit/BKThemeDescriptor.j create mode 100644 AppKit/Tools/BlendKit/Resources/dark-checkers.png create mode 100644 AppKit/Tools/BlendKit/Resources/light-checkers.png create mode 100644 AppKit/Tools/BlendKit/Resources/selection.png diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index de8572111..012cc2ffb 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -476,6 +476,11 @@ CPRunContinuesResponse = -1002; _mainMenu = aMenu; } +- (void)orderFrontColorPanel:(id)aSender +{ + [[CPColorPanel sharedColorPanel] orderFront:self]; +} + - (void)orderFrontStandardAboutPanel:(id)aSender { [self orderFrontStandardAboutPanelWithOptions:nil]; diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index eeaa785b7..acaecb870 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -502,7 +502,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); { if ([self title] === aTitle) return; - + if ([self pullsDown]) { var items = [_menu itemArray]; diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 06588e24f..f5ecf0d27 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -10,7 +10,7 @@ @import -@implementation AristoThemeDescriptor : CPObject +@implementation AristoThemeDescriptor : BKThemeDescriptor { } @@ -19,6 +19,137 @@ return @"Aristo"; } ++ (CPButton)button +{ + var button = [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)], + + bezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-right.png" size:CGSizeMake(4.0, 24.0)] + ] + isVertical:NO]], + + highlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"button-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)] + ] + isVertical:NO]], + + defaultBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"default-button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"default-button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"default-button-bezel-right.png" size:CGSizeMake(4.0, 24.0)] + ] + isVertical:NO]], + + defaultHighlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)] + ] + isVertical:NO]]; + + [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateBordered]; + [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; + [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateBordered]; + [button setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateBordered]; + [button setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; + + [button setValue:bezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; + [button setValue:highlightedBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateHighlighted]; + [button setValue:CGInsetMake(0.0, 5.0, 0.0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; + + [button setValue:defaultBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDefault]; + [button setValue:defaultHighlightedBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateHighlighted|CPThemeStateDefault]; + [button setValue:[CPColor colorWithCalibratedRed:13.0/255.0 green:51.0/255.0 blue:70.0/255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDefault]; + + [button setValue:CGSizeMake(0.0, 24.0) forThemeAttribute:@"min-size"]; + [button setValue:CGSizeMake(-1.0, 24.0) forThemeAttribute:@"max-size"]; + + return button; +} + ++ (CPButton)themedStandardButton +{ + var button = [self button]; + + [button setTitle:@"Cancel"]; + + return button; +} + ++ (CPButton)themedDefaultButton +{ + var button = [self button]; + + [button setTitle:@"OK"]; + [button setDefaultButton:YES]; + + return button; +} + ++ (CPPopUpButton)themedPopUpButton +{ + var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:NO], + color = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"popup-bezel-right.png" size:CGSizeMake(27.0, 24.0)] + ] + isVertical:NO]]; + + [button setTitle:@"Pop Up"]; + + [button setValue:color forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; + [button setValue:CGInsetMake(0, 27.0 + 5.0, 0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; + [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font"]; + [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; + [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color"]; + [button setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset"]; + + [button setValue:CGSizeMake(32.0, 24.0) forThemeAttribute:@"min-size"]; + [button setValue:CGSizeMake(-1.0, 24.0) forThemeAttribute:@"max-size"]; + + [button addItemWithTitle:@"item"]; + + return button; +} + ++ (CPPopUpButton)themedPullDownMenu +{ + var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:YES], + color = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + [ + [_CPCibCustomResource imageResourceWithName:"button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], + [_CPCibCustomResource imageResourceWithName:"popup-bezel-right-pullsdown.png" size:CGSizeMake(27.0, 24.0)] + ] + isVertical:NO]]; + + [button setTitle:@"Pull Down"]; + + [button setValue:color forThemeAttribute:@"bezel-color" inState:CPPopUpButtonStatePullsDown|CPThemeStateBordered]; + [button setValue:CGInsetMake(0, 27.0 + 5.0, 0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; + [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font"]; + [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; + [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color"]; + [button setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset"]; + + [button setValue:CGSizeMake(32.0, 24.0) forThemeAttribute:@"min-size"]; + [button setValue:CGSizeMake(-1.0, 24.0) forThemeAttribute:@"max-size"]; + + [button addItemWithTitle:@"item"]; + + return button; +} + + (CPScroller)themedVerticalScroller { var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 17.0, 170.0)], @@ -69,11 +200,11 @@ { var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 170.0, 17.0)], trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-horizontal-track.png" size:CGSizeMake(1.0, 17.0)]), - disabledTrackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-vertical-track-disabled.png" size:CGSizeMake(17.0, 1.0)]); + disabledTrackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-horizontal-track-disabled.png" size:CGSizeMake(17.0, 1.0)]); [scroller setValue:19.0 forThemeAttribute:@"minimum-knob-length"]; [scroller setValue:CGInsetMake(2.0, 0.0, 0.0, 0.0) forThemeAttribute:@"knob-inset"]; - [scroller setValue:CGInsetMake(0.0, -9.0, 0.0, -11.0) forThemeAttribute:@"track-inset"]; + [scroller setValue:CGInsetMake(0.0, -10.0, 0.0, -11.0) forThemeAttribute:@"track-inset"]; [scroller setValue:trackColor forThemeAttribute:@"knob-slot-color"]; [scroller setValue:disabledTrackColor forThemeAttribute:@"knob-slot-color" inState:CPThemeStateDisabled]; @@ -200,65 +331,6 @@ return textfield; } -+ (CPButton)themedButton -{ - var button = [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)], - - bezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - highlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"button-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - defaultBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - defaultHighlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]]; - - - [button setTitle:@"Cancel"]; - - [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateBordered]; - [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; - [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateBordered]; - [button setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateBordered]; - [button setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; - - [button setValue:bezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [button setValue:highlightedBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateHighlighted]; - [button setValue:CGInsetMake(0.0, 5.0, 0.0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; - - [button setValue:defaultBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDefault]; - [button setValue:defaultHighlightedBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateHighlighted|CPThemeStateDefault]; - [button setValue:[CPColor colorWithCalibratedRed:13.0/255.0 green:51.0/255.0 blue:70.0/255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDefault]; - - [button setValue:CGSizeMake(0.0, 24.0) forThemeAttribute:@"min-size"]; - [button setValue:CGSizeMake(-1.0, 24.0) forThemeAttribute:@"max-size"]; - - return button; -} - + (CPRadioButton)themedRadioButton { var button = [[CPRadio alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 17.0)]; @@ -315,56 +387,6 @@ return button; } -+ (CPPopUpButton)themedPopUpButton -{ - var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:NO], - color = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"popup-bezel-right.png" size:CGSizeMake(27.0, 24.0)] - ] - isVertical:NO]]; - - [button setTitle:@"Pop Up"]; - - [button setValue:color forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [button setValue:CGInsetMake(0, 27.0 + 5.0, 0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; - [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font"]; - [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; - [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color"]; - [button setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset"]; - - [button addItemWithTitle:@"item"]; - - return button; -} - -+ (CPPopUpButton)themedPullDownMenu -{ - var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:YES], - color = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"popup-bezel-right-pullsdown.png" size:CGSizeMake(27.0, 24.0)] - ] - isVertical:NO]]; - - [button setTitle:@"Pop Up"]; - - [button setValue:color forThemeAttribute:@"bezel-color" inState:CPPopUpButtonStatePullsDown|CPThemeStateBordered]; - [button setValue:CGInsetMake(0, 27.0 + 5.0, 0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; - [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font"]; - [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; - [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color"]; - [button setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset"]; - - [button addItemWithTitle:@"item"]; - - return button; -} - + (CPPopUpButton)themedSegmentedControl { var segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 24.0)]; @@ -527,7 +549,7 @@ @end -@implementation AristoHUDThemeDescriptor : CPObject +@implementation AristoHUDThemeDescriptor : BKThemeDescriptor { } @@ -536,7 +558,7 @@ return @"Aristo-HUD"; } -+ (CPColor)themeShowcaseBackgroundColor ++ (CPColor)defaultShowcaseBackgroundColor { return [CPColor blackColor]; } diff --git a/AppKit/Tools/BlendKit/BKShowcaseController.j b/AppKit/Tools/BlendKit/BKShowcaseController.j index 4b5a15fa3..623aba85f 100644 --- a/AppKit/Tools/BlendKit/BKShowcaseController.j +++ b/AppKit/Tools/BlendKit/BKShowcaseController.j @@ -5,108 +5,344 @@ @import "BKUtilities.j" +var LEFT_PANEL_WIDTH = 176.0; + +var BKStateToolbarItemIdentifier = @"BKStateToolbarItemIdentifier", + BKBackgroundColorToolbarItemIdentifier = @"BKBackgroundColorToolbarItemIdentifier"; + @implementation BKShowcaseController : CPObject { + CPArray _themeDescriptorClasses; + + CPCollectionView _themesCollectionView; + CPCollectionView _themedObjectsCollectionView; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification { + _themeDescriptorClasses = [BKThemeDescriptor allThemeDescriptorClasses]; + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], - contentView = [theWindow contentView], + toolbar = [[CPToolbar alloc] initWithIdentifier:@"Toolbar"]; + + [toolbar setDelegate:self]; + [theWindow setToolbar:toolbar]; + + var contentView = [theWindow contentView], bounds = [contentView bounds], - themeDescriptorClasses = BKThemeDescriptorClasses(); - - var tabView = [[CPTabView alloc] initWithFrame:bounds]; - - [tabView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - - [contentView addSubview:tabView]; - - var index = 0, - count = [themeDescriptorClasses count]; - - for (; index < count; ++index) + splitView = [[CPSplitView alloc] initWithFrame:bounds]; + + [splitView setIsPaneSplitter:YES]; + [splitView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + + [contentView addSubview:splitView]; + + // Left Pane + var label = [CPTextField labelWithTitle:@"THEMES"]; + + [label setFont:[CPFont boldSystemFontOfSize:11.0]]; + [label setTextColor:[CPColor colorWithCalibratedRed:92.0 / 255.0 green:110.0 / 255.0 blue:129.0 / 255.0 alpha:1.0]]; + [label setTextShadowColor:[CPColor colorWithCalibratedRed:225.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.7]]; + [label setTextShadowOffset:CGSizeMake(0.0, 1.0)]; + [label sizeToFit]; + [label setFrameOrigin:CGPointMake(5.0, 2.0)]; + + var themeDescriptorItem = [[CPCollectionViewItem alloc] init]; + + [themeDescriptorItem setView:[[BKThemeDescriptorCell alloc] init]]; + + _themesCollectionView = [[CPCollectionView alloc] initWithFrame:CGRectMake(0.0, 0.0, LEFT_PANEL_WIDTH, CGRectGetHeight(bounds))]; + + [_themesCollectionView setDelegate:self]; + [_themesCollectionView setItemPrototype:themeDescriptorItem]; + [_themesCollectionView setMinItemSize:CGSizeMake(20.0, 36.0)]; + [_themesCollectionView setMaxItemSize:CGSizeMake(10000000.0, 36.0)]; + [_themesCollectionView setMaxNumberOfColumns:1]; + [_themesCollectionView setContent:_themeDescriptorClasses]; + [_themesCollectionView setAutoresizingMask:CPViewWidthSizable]; + [_themesCollectionView setVerticalMargin:0.0]; + [_themesCollectionView setSelectable:YES]; + [_themesCollectionView setFrameOrigin:CGPointMake(0.0, 20.0)]; + [_themesCollectionView setAutoresizingMask:CPViewWidthSizable]; + + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, LEFT_PANEL_WIDTH, CGRectGetHeight(bounds))], + contentView = [scrollView contentView]; + + [scrollView setAutohidesScrollers:YES]; + [scrollView setDocumentView:_themesCollectionView]; + + [contentView setBackgroundColor:[CPColor colorWithRed:212.0 / 255.0 green:221.0 / 255.0 blue:230.0 / 255.0 alpha:1.0]]; + [contentView addSubview:label]; + + [splitView addSubview:scrollView]; + + // Right Pane + _themedObjectsCollectionView = [[CPCollectionView alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(bounds) - LEFT_PANEL_WIDTH - 1.0, 10.0)]; + + var collectionViewItem = [[CPCollectionViewItem alloc] init]; + + [collectionViewItem setView:[[BKShowcaseCell alloc] init]]; + + [_themedObjectsCollectionView setItemPrototype:collectionViewItem]; + [_themedObjectsCollectionView setVerticalMargin:20.0]; + [_themedObjectsCollectionView setAutoresizingMask:CPViewWidthSizable]; + + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(LEFT_PANEL_WIDTH + 1.0, 0.0, CGRectGetWidth(bounds) - LEFT_PANEL_WIDTH - 1.0, CGRectGetHeight(bounds))]; + + [scrollView setHasHorizontalScroller:NO]; + [scrollView setAutohidesScrollers:YES]; + [scrollView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + [scrollView setDocumentView:_themedObjectsCollectionView]; + + [splitView addSubview:scrollView]; + + [_themesCollectionView setSelectionIndexes:[CPIndexSet indexSetWithIndex:0]]; + + [theWindow setFullBridge:YES]; + [theWindow makeKeyAndOrderFront:self]; +} + +- (void)collectionViewDidChangeSelection:(CPCollectionView)aCollectionView +{ + var themeDescriptorClass = _themeDescriptorClasses[[[aCollectionView selectionIndexes] firstIndex]], + itemSize = [themeDescriptorClass itemSize]; + + // Make room for label and apply a minimum size. + itemSize.width = MAX(100.0, itemSize.width + 20.0); + itemSize.height = MAX(100.0, itemSize.height + 30.0); + + [_themedObjectsCollectionView setMinItemSize:itemSize]; + [_themedObjectsCollectionView setMaxItemSize:itemSize]; + + [_themedObjectsCollectionView setContent:[themeDescriptorClass themedObjectTemplates]]; + [BKShowcaseCell setBackgroundColor:[themeDescriptorClass showcaseBackgroundColor]]; +} + +- (CPArray)toolbarAllowedItemIdentifiers:(CPToolbar)aToolbar +{ + return [CPToolbarSpaceItemIdentifier, CPToolbarFlexibleSpaceItemIdentifier, BKBackgroundColorToolbarItemIdentifier, BKStateToolbarItemIdentifier]; +} + +- (CPArray)toolbarDefaultItemIdentifiers:(CPToolbar)aToolbar +{ + return [CPToolbarFlexibleSpaceItemIdentifier, BKBackgroundColorToolbarItemIdentifier, BKStateToolbarItemIdentifier]; +} + +- (CPToolbarItem)toolbar:(CPToolbar)aToolbar itemForItemIdentifier:(CPString)anItemIdentifier willBeInsertedIntoToolbar:(BOOL)aFlag +{ + var toolbarItem = [[CPToolbarItem alloc] initWithItemIdentifier:anItemIdentifier]; + + [toolbarItem setTarget:self]; + + if (anItemIdentifier === BKStateToolbarItemIdentifier) { - var theClass = themeDescriptorClasses[index], - item = [[CPTabViewItem alloc] initWithIdentifier:[theClass themeName]], - templates = BKThemeObjectTemplatesForClass(theClass), - templatesCount = [templates count], - viewTemplates = [], - itemSize = CGSizeMake(0.0, 0.0); - - while (templatesCount--) - { - var template = templates[templatesCount], - object = [template valueForKey:@"themedObject"]; + var popUpButton = [CPPopUpButton buttonWithTitle:@"Enabled"]; - if ([object isKindOfClass:[CPView class]]) - { - var size = [object frame].size, - labelWidth = [[template valueForKey:@"label"] sizeWithFont:[CPFont boldSystemFontOfSize:12.0]].width + 20.0; + [popUpButton addItemWithTitle:@"Disabled"]; - if (size.width > itemSize.width) - itemSize.width = size.width; - - if (labelWidth > itemSize.width) - itemSize.width = labelWidth; - - if (size.height > itemSize.height) - itemSize.height = size.height; - - [viewTemplates addObject:template]; - } - } - - itemSize.width += 20.0; - itemSize.height += 30.0; + [toolbarItem setView:popUpButton]; + [toolbarItem setTarget:nil]; + [toolbarItem setAction:@selector(changeState:)]; + [toolbarItem setLabel:@"State"]; - var collectionView = [[CPCollectionView alloc] initWithFrame:CGRectMakeZero()], - collectionViewItem = [[CPCollectionViewItem alloc] init]; + var width = CGRectGetWidth([popUpButton frame]); - var backgroundColor = nil; + [toolbarItem setMinSize:CGSizeMake(width + 20.0, 32.0)]; + [toolbarItem setMaxSize:CGSizeMake(width + 20.0, 32.0)]; + } + + else if (BKBackgroundColorToolbarItemIdentifier) + { + var popUpButton = [CPPopUpButton buttonWithTitle:@"Light Checkers"]; - if ([theClass respondsToSelector:@selector(themeShowcaseBackgroundColor)]) - backgroundColor = [theClass themeShowcaseBackgroundColor]; + [popUpButton addItemWithTitle:@"Dark Checkers"]; + [popUpButton addItemWithTitle:@"Window Background Color"]; + [popUpButton addItemWithTitle:@"White"]; + [popUpButton addItemWithTitle:@"Black"]; + [popUpButton addItemWithTitle:@"More Choices..."]; - [collectionViewItem setView:[[BKShowcaseCell alloc] initWithShowcaseBackgroundColor:backgroundColor]]; + var itemArray = [popUpButton itemArray]; - [collectionView setItemPrototype:collectionViewItem]; - [collectionView setMinItemSize:itemSize]; - [collectionView setMaxItemSize:itemSize]; - [collectionView setVerticalMargin:5.0]; - [collectionView setContent:viewTemplates]; - - [item setLabel:[theClass themeName]]; - [item setView:collectionView]; + [itemArray[0] setRepresentedObject:[BKThemeDescriptor lightCheckersColor]]; + [itemArray[1] setRepresentedObject:[BKThemeDescriptor darkCheckersColor]]; + [itemArray[2] setRepresentedObject:[BKThemeDescriptor windowBackgroundColor]]; + [itemArray[3] setRepresentedObject:[CPColor whiteColor]]; + [itemArray[4] setRepresentedObject:[CPColor blackColor]]; - [tabView addTabViewItem:item]; + [toolbarItem setView:popUpButton]; + [toolbarItem setTarget:nil]; + [toolbarItem setAction:@selector(changeColor:)]; + [toolbarItem setLabel:@"Background Color"]; + + var width = CGRectGetWidth([popUpButton frame]); + + [toolbarItem setMinSize:CGSizeMake(width, 32.0)]; + [toolbarItem setMaxSize:CGSizeMake(width, 32.0)]; } - [theWindow orderFront:self]; + return toolbarItem; +} + +- (BKThemeDescriptor)selectedThemeDescriptor +{ + return _themeDescriptorClasses[[[_themesCollectionView selectionIndexes] firstIndex]]; +} + +- (void)changeState:(id)aSender +{ + var themedObjectTemplates = [[self selectedThemeDescriptor] themedObjectTemplates], + count = [themedObjectTemplates count]; + + while (count--) + { + var themedObject = [themedObjectTemplates[count] valueForKey:@"themedObject"]; + + if ([themedObject respondsToSelector:@selector(setEnabled:)]) + [themedObject setEnabled:[aSender title] === @"Enabled" ? YES : NO]; + } +} + +- (void)changeColor:(id)aSender +{ + var color = nil; + + if ([aSender isKindOfClass:[CPColorPanel class]]) + color = [aSender color]; + + else + { + if ([aSender titleOfSelectedItem] === @"More Choices...") + { + [aSender addItemWithTitle:@"Other"]; + [aSender selectItemWithTitle:@"Other"]; + + [CPApp orderFrontColorPanel:self]; + } + else + { + color = [[aSender selectedItem] representedObject]; + + [aSender removeItemWithTitle:@"Other"]; + } + } + + if (color) + { + [[self selectedThemeDescriptor] setShowcaseBackgroundColor:color]; + [BKShowcaseCell setBackgroundColor:color]; + } +} + +@end + +var SelectionColor = nil; + +@implementation BKThemeDescriptorCell : CPView +{ + CPTextField _label; +} + ++ (CPImage)selectionColor +{ + if (!SelectionColor) + SelectionColor = [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle bundleForClass:[BKThemeDescriptorCell class]] pathForResource:@"selection.png"] size:CGSizeMake(1.0, 36.0)]]; + + return SelectionColor; +} + +- (void)setRepresentedObject:(id)aThemeDescriptor +{ + if (!_label) + { + _label = [CPTextField labelWithTitle:@"hello"]; + + [_label setFont:[CPFont systemFontOfSize:11.0]]; + [_label setFrame:CGRectMake(10.0, 0.0, CGRectGetWidth([self bounds]) - 20.0, CGRectGetHeight([self bounds]))]; + + [_label setVerticalAlignment:CPCenterVerticalTextAlignment]; + [_label setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + + [self addSubview:_label]; + } + + [_label setStringValue:[aThemeDescriptor themeName] + " (" + [[aThemeDescriptor themedObjectTemplates] count] + ")"]; +} + +- (void)setSelected:(BOOL)isSelected +{ + [self setBackgroundColor:isSelected ? [[self class] selectionColor] : nil]; + + [_label setTextShadowOffset:isSelected ? CGSizeMake(0.0, 1.0) : CGSizeMakeZero()]; + [_label setTextShadowColor:isSelected ? [CPColor blackColor] : nil]; + [_label setFont:isSelected ? [CPFont boldSystemFontOfSize:11.0] : [CPFont systemFontOfSize:11.0]]; + [_label setTextColor:isSelected ? [CPColor whiteColor] : [CPColor blackColor]]; } @end +var ShowcaseCellBackgroundColor = nil; + +var BKShowcaseCellBackgroundColorDidChangeNotification = @"BKShowcaseCellBackgroundColorDidChangeNotification"; + @implementation BKShowcaseCell : CPView { - CPColor _showcaseBackgroundColor; CPView _backgroundView; CPView _view; CPTextField _label; } -- (id)initWithShowcaseBackgroundColor:(CPColor)aColor ++ (void)setBackgroundColor:(CPColor)aColor +{ + if (ShowcaseCellBackgroundColor === aColor) + return; + + ShowcaseCellBackgroundColor = aColor; + + [[CPNotificationCenter defaultCenter] + postNotificationName:BKShowcaseCellBackgroundColorDidChangeNotification + object:nil]; +} + ++ (CPColor)backgroundColor +{ + return ShowcaseCellBackgroundColor; +} + +- (id)init { self = [super init]; if (self) - _showcaseBackgroundColor = aColor; + [[CPNotificationCenter defaultCenter] + addObserver:self + selector:@selector(showcaseBackgroundDidChange:) + name:BKShowcaseCellBackgroundColorDidChangeNotification + object:nil]; return self; } +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super initWithCoder:aCoder]; + + if (self) + [[CPNotificationCenter defaultCenter] + addObserver:self + selector:@selector(showcaseBackgroundDidChange:) + name:BKShowcaseCellBackgroundColorDidChangeNotification + object:nil]; + + return self; +} + +- (void)showcaseBackgroundDidChange:(CPNotification)aNotification +{ + [_backgroundView setBackgroundColor:[BKShowcaseCell backgroundColor]]; +} + - (void)setSelected:(BOOL)isSelected { } @@ -116,26 +352,24 @@ if (!_label) { _label = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; - + [_label setAlignment:CPCenterTextAlignment]; [_label setAutoresizingMask:CPViewMinYMargin | CPViewWidthSizable]; - [_label setFont:[CPFont boldSystemFontOfSize:12.0]]; - + [_label setFont:[CPFont boldSystemFontOfSize:11.0]]; + [self addSubview:_label]; } - + [_label setStringValue:[anObject valueForKey:@"label"]]; [_label sizeToFit]; - + [_label setFrame:CGRectMake(0.0, CGRectGetHeight([self bounds]) - CGRectGetHeight([_label frame]), CGRectGetWidth([self bounds]), CGRectGetHeight([_label frame]))]; - + if (!_backgroundView) { _backgroundView = [[CPView alloc] init]; - [_backgroundView setBackgroundColor:_showcaseBackgroundColor]; - [self addSubview:_backgroundView]; } @@ -153,23 +387,7 @@ (CGRectGetHeight([_backgroundView bounds]) - CGRectGetHeight([_view frame])) / 2.0)]; [_backgroundView addSubview:_view]; -} - -- (id)initWithCoder:(CPCoder)aCoder -{ - self = [super initWithCoder:aCoder]; - - if (self) - _showcaseBackgroundColor = [aCoder decodeObjectForKey:@"showcase-background-color"]; - - return self -} - -- (void)encodeWithCoder:(CPCoder)aCoder -{ - [super encodeWithCoder:aCoder]; - - [aCoder encodeObject:_showcaseBackgroundColor forKey:@"showcase-background-color"]; + [_backgroundView setBackgroundColor:[BKShowcaseCell backgroundColor]]; } @end diff --git a/AppKit/Tools/BlendKit/BKThemeDescriptor.j b/AppKit/Tools/BlendKit/BKThemeDescriptor.j new file mode 100644 index 000000000..fde4743fd --- /dev/null +++ b/AppKit/Tools/BlendKit/BKThemeDescriptor.j @@ -0,0 +1,200 @@ + +@import + + +var ItemSizes = { }, + ThemedObjects = { }, + BackgroundColors = { }, + + LightCheckersColor = nil, + DarkCheckersColor = nil, + WindowBackgroundColor = nil; + +@implementation BKThemeDescriptor : CPObject +{ +} + ++ (CPArray)allThemeDescriptorClasses +{ + // Grab Theme Descriptor Classes. + var themeDescriptorClasses = []; + + for (candidate in window) + { + var theClass = objj_getClass(candidate), + theClassName = class_getName(theClass); + + if (theClassName === "BKThemeDescriptor") + continue; + + var index = theClassName.indexOf("ThemeDescriptor"); + + if ((index >= 0) && (index === theClassName.length - "ThemeDescriptor".length)) + themeDescriptorClasses.push(theClass); + } + + [themeDescriptorClasses sortUsingSelector:@selector(compare:)]; + + return themeDescriptorClasses; +} + ++ (CPColor)lightCheckersColor +{ + if (!LightCheckersColor) + LightCheckersColor = [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle bundleForClass:[BKThemeDescriptor class]] pathForResource:@"light-checkers.png"] size:CGSizeMake(12.0, 12.0)]]; + + return LightCheckersColor; +} + ++ (CPColor)darkCheckersColor +{ + if (!DarkCheckersColor) + DarkCheckersColor = [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle bundleForClass:[BKThemeDescriptor class]] pathForResource:@"dark-checkers.png"] size:CGSizeMake(12.0, 12.0)]]; + + return DarkCheckersColor; +} + ++ (CPColor)windowBackgroundColor +{ + return [_CPStandardWindowView bodyBackgroundColor]; +} + ++ (CPColor)defaultShowcaseBackgroundColor +{ + return [self lightCheckersColor]; +} + ++ (CPColor)showcaseBackgroundColor +{ + var className = [self className]; + + if (!BackgroundColors[className]) + BackgroundColors[className] = [self defaultShowcaseBackgroundColor]; + + return BackgroundColors[className]; +} + ++ (void)setShowcaseBackgroundColor:(CPColor)aColor +{ + BackgroundColors[[self className]] = aColor; +} + ++ (CGSize)itemSize +{ + var className = [self className]; + + if (!ItemSizes[className]) + [self calculateThemedObjectTemplates]; + + return CGSizeMakeCopy(ItemSizes[className]); +} + ++ (CPArray)themedObjectTemplates +{ + var className = [self className]; + + if (!ThemedObjects[className]) + [self calculateThemedObjectTemplates]; + + return ThemedObjects[className]; +} + ++ (void)calculateThemedObjectTemplates +{ + var templates = [], + itemSize = CGSizeMake(0.0, 0.0), + methods = class_copyMethodList([self class].isa), + index = 0, + count = [methods count]; + + for (; index < count; ++index) + { + var method = methods[index], + selector = method_getName(method); + + if (selector.indexOf("themed") !== 0) + continue; + + var impl = method_getImplementation(method), + object = impl(self, selector); + + if (!object) + continue; + + var template = [[BKThemeObjectTemplate alloc] init]; + + [template setValue:object forKey:@"themedObject"]; + [template setValue:BKLabelFromIdentifier(selector) forKey:@"label"]; + + [templates addObject:template]; + + if ([object isKindOfClass:[CPView class]]) + { + var size = [object frame].size, + labelWidth = [[template valueForKey:@"label"] sizeWithFont:[CPFont boldSystemFontOfSize:12.0]].width + 20.0; + + if (size.width > itemSize.width) + itemSize.width = size.width; + + if (labelWidth > itemSize.width) + itemSize.width = labelWidth; + + if (size.height > itemSize.height) + itemSize.height = size.height; + } + } + + var className = [self className]; + + ItemSizes[className] = itemSize; + ThemedObjects[className] = templates; +} + ++ (int)compare:(BKThemeDescriptor)aThemeDescriptor +{ + return [[self themeName] compare:[aThemeDescriptor themeName]]; +} + +@end + +function BKLabelFromIdentifier(anIdentifier) +{ + var string = anIdentifier.substr("themed".length); + index = 0, + count = string.length, + label = "", + lastCapital = null, + isLeadingCapital = YES; + + for (; index < count; ++index) + { + var character = string.charAt(index), + isCapital = /^[A-Z]/.test(character); + + if (isCapital) + { + if (!isLeadingCapital) + { + if (lastCapital === null) + label += ' ' + character.toLowerCase(); + else + label += character; + } + + lastCapital = character; + } + else + { + if (isLeadingCapital && lastCapital !== null) + label += lastCapital; + + label += character; + + lastCapital = null; + isLeadingCapital = NO; + } + } + + return label; +} + diff --git a/AppKit/Tools/BlendKit/BKUtilities.j b/AppKit/Tools/BlendKit/BKUtilities.j index 42e3de0c2..ca8986cdd 100644 --- a/AppKit/Tools/BlendKit/BKUtilities.j +++ b/AppKit/Tools/BlendKit/BKUtilities.j @@ -52,94 +52,3 @@ } @end - -function BKThemeDescriptorClasses() -{ - // Grab Theme Descriptor Classes. - var themeDescriptorClasses = []; - - for (candidate in window) - { - var theClass = objj_getClass(candidate), - theClassName = class_getName(theClass), - index = theClassName.indexOf("ThemeDescriptor"); - - if ((index >= 0) && (index === theClassName.length - "ThemeDescriptor".length)) - themeDescriptorClasses.push(theClass); - } - - return themeDescriptorClasses; -} - -function BKThemeObjectTemplatesForClass(aClass) -{ - var templates = [], - methods = class_copyMethodList(aClass.isa), - count = [methods count]; - - while (count--) - { - var method = methods[count], - selector = method_getName(method); - - if (selector.indexOf("themed") === 0) - { - var impl = method_getImplementation(method), - object = impl(aClass, selector); - - if (object) - { - var template = [[BKThemeObjectTemplate alloc] init]; - - [template setValue:object forKey:@"themedObject"]; - [template setValue:BKLabelFromIdentifier(selector) forKey:@"label"]; - - [templates addObject:template]; - } - } - } - - return templates; -} - -function BKLabelFromIdentifier(anIdentifier) -{ - var string = anIdentifier.substr("themed".length); - index = 0, - count = string.length, - label = "", - lastCapital = null, - isLeadingCapital = YES; - - for (; index < count; ++index) - { - var character = string.charAt(index), - isCapital = /^[A-Z]/.test(character); - - if (isCapital) - { - if (!isLeadingCapital) - { - if (lastCapital === null) - label += ' ' + character.toLowerCase(); - else - label += character; - } - - lastCapital = character; - } - else - { - if (isLeadingCapital && lastCapital !== null) - label += lastCapital; - - label += character; - - lastCapital = null; - isLeadingCapital = NO; - } - } - - return label; -} - diff --git a/AppKit/Tools/BlendKit/BlendKit.j b/AppKit/Tools/BlendKit/BlendKit.j index 09821ddd7..9b0cf5122 100644 --- a/AppKit/Tools/BlendKit/BlendKit.j +++ b/AppKit/Tools/BlendKit/BlendKit.j @@ -1,3 +1,4 @@ @import "BKShowcaseController.j" +@import "BKThemeDescriptor.j" @import "BKUtilities.j" diff --git a/AppKit/Tools/BlendKit/Resources/dark-checkers.png b/AppKit/Tools/BlendKit/Resources/dark-checkers.png new file mode 100644 index 0000000000000000000000000000000000000000..838362cf07125ad4855555977e141b151f13d90b GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1SD^YpWXnZBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%sd~CNhE&{2x^nq)vIFaMy;vvV#3ThK9yiyX8BR0)$!^-m c%wfRLGLd=V=_irPfEpM)UHx3vIVCg!0KPmYF8}}l literal 0 HcmV?d00001 diff --git a/AppKit/Tools/BlendKit/Resources/light-checkers.png b/AppKit/Tools/BlendKit/Resources/light-checkers.png new file mode 100644 index 0000000000000000000000000000000000000000..83499084f527444f7180658cfefc0dd462eecbc2 GIT binary patch literal 3471 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 literal 0 HcmV?d00001 diff --git a/AppKit/Tools/BlendKit/Resources/selection.png b/AppKit/Tools/BlendKit/Resources/selection.png new file mode 100644 index 0000000000000000000000000000000000000000..aafc65dcf4a393b7427afd4986d2b0dce3d26095 GIT binary patch literal 4090 zcmVz1000k8X+uL$Nkc;* zP;zf(X>4Tx0C)kdn0Yvq-T%kWYz)R=tl4I)$riHj`%dr#>zez#&gZ;8pU=7Pb6@AoxdGrI z1X8JyZ~#CQg-&y^G9`F<`w&=P0TjRhUZ4Zy0*SFy6DKEoNb)ab@dbb}y9Sh)vHnH$ zZ)PkFN(cZ<5fbo)Y_TzugSOa>$q95S9nyp{nHU;Kf;bssMVgz78N^p0#)fQhGn0e1 z_#uKOf zP83Co<>N&N7bKOXT4ju6JLPP4v@2LCwkqRy7OEoD_U(GEp{dExn%6PcEztXHU}%_N zbi)K@YHa3be%hkf@{2Wxjl8X;9nn73q0q5q_d92}%XU|Lw+Q#c9wnZ4yoSB!eYfpV z-D~C-=${;r7g!#2lh{idAx{UdgtCS4hKoi>M9N0(q^Lz}Q?+7rXlk(v^c`^$@j?lF z``GubC4Na7-Tx^0X3EtA`KhUC;pq+;ng{Wj?3v#V^&h^Gm4D>mQPMGs<5Jo1>`x~q zPp;&M=4$5c{=+XnuHe||>cZAD{Y7KNU(c~Igw9J}(70$>;#TT+DYPu1eE;RFikvIQ zub!&Rt;(y;t6^L#s?Dp*uFq`P-xzm2<_59J3UzkOSYS*d-=im!`4UTJ;!?KeV&h%9xpzrdb;-+_p{Fa=;!$7LjxIuI|ttk zWxvpSF+E)L()Q)btBMh?QTEZ6G4gBv*L`mi$9IgseVg;n_}$$5iV2@d>}2!(KT!X90-gZXD;?Fw*k*tUKYLx z{>OsaLN&s|BFUl?;>P&P5}cBuQhhQivRT{5cF4)o6grjol-+g~sEnye?ebE;q%ooe zv~_jjbxZUf>dzTU7&#e-nBQO=&|m_>5cQ@^%dPCu~*bj#9t&pBoH4YOyno=lG%bm@N&qP(Dz|4!}}uIBCDeq zl#|hE)YzC1nsclQU4&_TxO+VkZ<&YMe66G0wHg^Zg?*pHx6Sy}$6#nd3#LiZ7lmIakYQJ>PZV z$;B5XuS+K`&6NGRjHp0g!Cn=rl&ey&HmI?==2GibN3M@+NN&u$e)2|fQ`ODe&G%aR zZoO}vYFlha-@$c=-j%nrZ`8+G$KSub{_gnuzzMBM%;d*EyQj)O zq<`G|N&hop8Z|vT(>L4nrSxm|w|(D3=X~a!7Hoc)Eb9K$SkhS5{-wWSuxh#Hv>v!& zyE*?@paO`X0xZK^VJ&b4_*H}&q6dG2ujrW=zS|!?nWQK+af!vy`_Vw!=hvF?u$iO9tMB*y-zWP=pWl(7R5}OS z84nMh%Zxu{by)Q9LRR0A(xZvTT#m~_>&nQ9#*+o7qI0Zs3AxL8FaBuGFDRg$wk_O# z26<+@=yvh>vvKD<85-yLE`W>h5=<%X5?`5MxyWUF1^$W%^fvKV@m2HI@Ll7t6{-`d z7ir*c6ugeVA=jjIQ>j_K#q^eQYhYXK?ZfSiI}bX>@2+%8-?!~b>aKtA>5+6#KyPW^ z(i7LGb^YAW69(pojt=v_Y#fOh+x2>FeC0iI(rT*elkSY}*Aw&2%eBn;-`e|_djg9l z0B8IG@D>BW*$RMceE_y=Lwi*K08X3$xak16G9Q5bxCdaSr@-(1V;j%~J|Gz|z+Gq` zLBix<_An|eAJzgJhqJ(y;qLGhcscwTd>J8ya7LscDiN=cXrwkW6j_XXfUWro0c*R=8y~S7YWrW>?b%{#Jy;3--F6k5*ZJD34E!$J&EO&71cqLz^kf>;@ zB&Up09^cueaz*u+TEZ@}`W_8e&D~lS+Lk&tx{i7Q`e6nMh8adB#w{jereDl)7CM$8 zR(aNyHs!WCcIoy>4phhZ-7!uv&SV#gYqVRcd$z|3&qA+j-uHa^eW&(p_=)=)1b7B! z1eFpWkrBbFA*9gauz?5=X&QBe@{B4H6GpocyB-%1-?Wc2k&^T*StI3ADo@&h^o@g& znX`wZvSyBk9{ZY2J+X8uGgmIJA>XcGsPI6M)mb-2<8B<+;ZK8f# zWAKghH$U9cZ;NezdY7{^uLe44pLv$gQkxIw_+GKF^&A`=WRANS8B99nJ*OS#Ei3_>g2ayHQVlhLpY4P)TJNy!%P9j_qFF7hz zA{`{NU1mnMZhM;C?j2$~e#$>lxU6_YDOlNRr;3WODvRoZ+QhEs>YW-Ln%A`&wHtLB zbX)Y=^}7uQ4c{7lHbI(V&9<8xTI{h*vMRK$v1zcaw5zhOb!c&Xu)E)B*m>OLyBo}1 z+(XGz+soaX?sL?)bkCi=@BCQ;!~^Yu!igtHjpVTq)=^Ppp9$)UL{%|p{lkfyEdR+t5Nj&Lep4t%dP8ejP~>n z(mmh%`rYae2|c`hoR62Dj`w#BG!0!DKK?3l)b_RExWL=F_k)u)QyCvUK8sIJ&$fQe z`tC4~UFcaXSaSHqxze^q*_?kJkN|Fg1=ucF46FgR0M~%;gWpEL5mty3h!;paG7{O0 zVnKPLuA)|099ha)Hdwt_>(JcjSoCu?bv6b&D?5#SoWqUdKE?pk%&ExPh*ihlAN_0-_mUu3nNZ2L8Au%J_ zEmbC+B@->{yWL*SaEG$If`X)?l#;lz+)gDGEmdnZ-(At_r!*=wpKATo!RuP-#p>4> zOc{wA?=d-RI&Q9Lk!m?;Eo?)#9k7>iIO#a!z9Oveixuo}%Sq@^0n36s#4VE5a4WpB-g5oxgigv*hX}@v_p(vK5tAl`9*owQAaG zjqAD^Y#QI)pfxQvC$+4#{&8ET{Yr=Y-Re%|`?cLF52_zwd$RjD9@CyoJag`^8^8`m z4m}!{d71X=#i-Dj*XuKHhTrnPb9tXNac#2m&(W!kkNlscK1)tZ%;0CmzHIxl_VvxT z_V0|j(0SGQ`Gxu)QHzAdp`UR}n5D91_2oOi?0)sE=&W2>6?o6Y~fOH^bWbSB#@IOvL@1Uc@8Y9@cA z(w*F(S^)a}ij8-*fNE~&IK&+sW@+;m6G(yPb`Xm~c9o=1Ge?Lq5ZedSEL|Xmd|_VU zfwoQ%V84D*5X2YBu@=8I%}Jqdo`3oF(BfR&A(n;jfy5A~~&34%T@=}6UW@fzjO`ixb1#y&rSOyJ>^`Fs+P~V#TTiP%{f>gil%=nvjX7;Ft;P^AqiMk%4NLi#B zQUhsV`o=?!<_i6Wg%+Sawe_Q`6 zD+q(WV{D$^p(hPkp!ee(bS4L&v!3~h;6DqUybn6t17H?SO{9f|gwhEn(ANvHBEg12 zR8}OYsi^3H{{jC-P3}9U(K!GB010qNS#tmY3ljhU3ljkVnw%H_002@+L_t&t9aW66 z5r9At0vU1>6C1KH%lo4KK<;(MF*?`-a9)GQzEKucreqpsReZGkX#=cTwDIT3bhh+# sklb8-(Tn##I=$xT&E9_Vj&GiO19!7tTT1E$E&u=k07*qoM6N<$f?Eb15C8xG literal 0 HcmV?d00001 From 354fddf6b274baa17d8d398a21053109e1e2fc3d Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 23 May 2009 12:43:35 -0700 Subject: [PATCH 4/6] Updated template theme project to use new theme gallery. Reviewed by me. --- AppKit/Tools/blend/main.j | 4 ++-- Tools/capp/Templates/ThemeDescriptor/ThemeDescriptors.j | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/Tools/blend/main.j b/AppKit/Tools/blend/main.j index 5af515ee3..92cadf4de 100755 --- a/AppKit/Tools/blend/main.j +++ b/AppKit/Tools/blend/main.j @@ -53,7 +53,7 @@ function main() objj_import(descriptorFiles, YES, function() { - var themeDescriptorClasses = BKThemeDescriptorClasses(), + var themeDescriptorClasses = [BKThemeDescriptor allThemeDescriptorClasses], count = [themeDescriptorClasses count]; while (count--) @@ -63,7 +63,7 @@ function main() [themeTemplate setValue:[theClass themeName] forKey:@"name"]; - var objectTemplates = BKThemeObjectTemplatesForClass(theClass), + var objectTemplates = [theClass themedObjectTemplates], data = cibDataFromTopLevelObjects(objectTemplates.concat([themeTemplate])), temporaryCibFile = Packages.java.io.File.createTempFile("temp", ".cib"), temporaryCibFilePath = String(temporaryCibFile.getAbsolutePath()); diff --git a/Tools/capp/Templates/ThemeDescriptor/ThemeDescriptors.j b/Tools/capp/Templates/ThemeDescriptor/ThemeDescriptors.j index 8e17474d0..c30d70946 100644 --- a/Tools/capp/Templates/ThemeDescriptor/ThemeDescriptors.j +++ b/Tools/capp/Templates/ThemeDescriptor/ThemeDescriptors.j @@ -6,10 +6,10 @@ * Copyright __project.year__, __organization.name__ All rights reserved. */ -@import +@import -@implementation __project.nameasidentifier__ThemeDescriptor : CPObject +@implementation __project.nameasidentifier__ThemeDescriptor : BKThemeDescriptor { } From f6a731ff910618f01fe3e0464398b797c4e35744 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 23 May 2009 12:55:20 -0700 Subject: [PATCH 5/6] Updated loading page and removed some unused resources from Aristo blend. Reviewed by me. --- .../scroller-down-arrow-disabled.png | Bin 3116 -> 0 bytes .../scroller-down-arrow-highlighted.png | Bin 3403 -> 0 bytes .../old-scroller/scroller-down-arrow.png | Bin 3247 -> 0 bytes .../scroller-up-arrow-disabled.png | Bin 3070 -> 0 bytes .../scroller-up-arrow-highlighted.png | Bin 3360 -> 0 bytes .../old-scroller/scroller-up-arrow.png | Bin 3281 -> 0 bytes .../scroller-vertical-knob-bottom.png | Bin 397 -> 0 bytes .../scroller-vertical-knob-center.png | Bin 2815 -> 0 bytes .../scroller-vertical-knob-top.png | Bin 341 -> 0 bytes .../scroller-vertical-track-disabled.png | Bin 2806 -> 0 bytes .../old-scroller/scroller-vertical-track.png | Bin 2835 -> 0 bytes AppKit/Themes/Aristo/index-debug.html | 60 +++++++++++++---- AppKit/Themes/Aristo/index.html | 61 +++++++++++++----- 13 files changed, 93 insertions(+), 28 deletions(-) delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-down-arrow-disabled.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-down-arrow-highlighted.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-down-arrow.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-up-arrow-disabled.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-up-arrow-highlighted.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-up-arrow.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-knob-bottom.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-knob-center.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-knob-top.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-track-disabled.png delete mode 100644 AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-track.png diff --git a/AppKit/Themes/Aristo/Resources/old-scroller/scroller-down-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/old-scroller/scroller-down-arrow-disabled.png deleted file mode 100644 index 79d1d716c421e72a8f4d70a06d1dbcd4913d63c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3116 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 diff --git a/AppKit/Themes/Aristo/Resources/old-scroller/scroller-down-arrow.png b/AppKit/Themes/Aristo/Resources/old-scroller/scroller-down-arrow.png deleted file mode 100644 index 683c6b42ab64a7dc2d7c45acfbaf03c627b7e2b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3247 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 diff --git a/AppKit/Themes/Aristo/Resources/old-scroller/scroller-up-arrow-disabled.png b/AppKit/Themes/Aristo/Resources/old-scroller/scroller-up-arrow-disabled.png deleted file mode 100644 index 3a3a9164fea49ab4dd8114bb20ea99acbcb1e5b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3070 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 R^UVMN002ovPDHLkV1k|aRQdn_ diff --git a/AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-knob-top.png b/AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-knob-top.png deleted file mode 100644 index be784b0c951af7bf6e672a9b126d67a00e317ca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^{6NgX!3HGNE-(EAq!f}pf_xbms#F;m8k!jxe*Op2 zFBuq04Hy_+B``2p&0t^<&z}^3)D5VXv%n*=n1O*?7=#%aX3dcR3f}f~aSV|N@4ev7 zb;v+~EkU#6#jT|e1X%?4v|JZ*v2pfa&@o$XVV>@*RkOvm>Pg*N_MYvM;r<08;+Gse zjAr(GE;F8a&boKy-FM$3Bd4)zKAn8!K$r2O9r@4d&2QhW6L7t_XmdKI;Vst0H~dTmH+?% diff --git a/AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-track-disabled.png b/AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-track-disabled.png deleted file mode 100644 index 8979c96479f2e56746f6dfaf6078312e28f070e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2806 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 IM6N<$f*p%VI{*Lx diff --git a/AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-track.png b/AppKit/Themes/Aristo/Resources/old-scroller/scroller-vertical-track.png deleted file mode 100644 index bd9c1930be78af8828c22f2ab34ad040b67b7a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2835 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 diff --git a/AppKit/Themes/Aristo/index-debug.html b/AppKit/Themes/Aristo/index-debug.html index df94938fc..90e9a5ce7 100644 --- a/AppKit/Themes/Aristo/index-debug.html +++ b/AppKit/Themes/Aristo/index-debug.html @@ -4,17 +4,16 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + - Hello World + Aristo + + + + - -
-
- -
+ +
+ + +
+ diff --git a/AppKit/Themes/Aristo/index.html b/AppKit/Themes/Aristo/index.html index 6088568e4..7be70d855 100644 --- a/AppKit/Themes/Aristo/index.html +++ b/AppKit/Themes/Aristo/index.html @@ -4,17 +4,16 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + - Hello World + Aristo + + + - -
-
- -
+ +
+ + +
- - + From 83bceaa867a2d26cc441c115c7ea4da51f0b54f5 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Sat, 23 May 2009 13:04:29 -0700 Subject: [PATCH 6/6] Fix for HUD button misrendered in Aristo theme gallery until pressed for first time. Closes #141. Reviewed by me. --- AppKit/CPView.j | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 4dc5dc61d..61cba8ec6 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2107,6 +2107,9 @@ setBoundsOrigin: for (var attributeName in _themeAttributes) if (_themeAttributes.hasOwnProperty(attributeName)) [_themeAttributes[attributeName] setParentAttribute:[theme _attributeWithName:attributeName forClass:themeClass]]; + + [self setNeedsLayout]; + [self setNeedsDisplay:YES]; } - (CPDictionary)_themeAttributeDictionary