From ecbbe57709d46c8dd3be436433aaa72711c1a61b Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Mon, 2 Aug 2010 17:52:59 -0400 Subject: [PATCH] Radically simplified the whole theming mechanism. Theming can now be done declaratively with less typing, better readability, easier maintenance. Also fixed some oversights in the existing themes: text was not dimmed in disabled state for segmented controls, text was not dimmed for default buttons in disabled state in HUD (IIRC). --- AppKit/Themes/Aristo/ThemeDescriptors.j | 1934 ++++++++++---------- AppKit/Themes/BlendKit/BKThemeDescriptor.j | 129 ++ 2 files changed, 1133 insertions(+), 930 deletions(-) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index ec1245de8..3130fe1f7 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1,5 +1,5 @@ /* - * AppController.j + * ThemeDescriptors.j * Aristo * * Created by Francisco Tolmasky. @@ -10,6 +10,210 @@ @import @import +/* + HOW TO ADD OR MODIFY THEMED ELEMENTS + + This file serves both as a means of defining default theme values + and of defining an interface for the automatically generated theme showcase, + so you have to keep both in mind. + + Let's say you define a new view class and you want to theme it. + Here's how to do it with minimum work. + + 1. Define +themeAttributes in your class if you define custom attributes. + + 2. If you want a custom name to appear in the theme showcase, define +themeClass + and return a string with the name all in lowercase and words separated by + dashes. If you don't provide +themeClass, Cappuccino will separate the themed + class name into words at each uppercased letter followed by lowercase letters. + + 3. Use the following template for defining your themed view (using a calendar view as an example). + Note that we make a separate method for creating and configuring the view. + This is to more clearly separate the two functions of ThemeDescriptors.j (defining + themes and defining the showcase interface), and also to allow us to easily reuse + the creation/configuration code if we make a HUD version of our themed view. + + // Create a private variable to hold the theme values, we can share this with the HUD theme + var themedCalendarViewValues = nil; + + + (CPCalendarView)makeCalendarView + { + // Define the size of the sample that will appear in the theme showcase. + // The maximum width/height is around 180 pixels. + + var calendar = [[CPCalendarView alloc] initWithFrame:CGRectMake(0.0, 0.0, 150.0, 100.0)]; + + // Do any other initialization of the calendar you want to do here. In this case + // we want the calendar to show our birthdate instead of the current date. + [calendar setDate:new Date(1961, 2, 30)]; + + return calendar; + } + + + (CPCalendarView)themedCalendarView + { + var calendar = [self makeCalendarView], + + // Now define some pattern colors. We want to define the bezel for the calendar + // using a nine part image, which consists of nine slices in the order top/left, + // top, top/right, left, center, right, bottom/left, bottom, bottom/right. + // We can do this declaritively using the PatternColor function, which takes an array + // of slice declarations, with each declaration being an array of [filename, width, height]. + + bezelColor = PatternColor( + [ + [@"calendar-bezel-0.png", 10.0, 10.0], + [@"calendar-bezel-1.png", 1.0, 10.0], + [@"calendar-bezel-2.png", 10.0, 10.0], + [@"calendar-bezel-3.png", 10.0, 1.0], + [@"calendar-bezel-4.png", 1.0, 1.0], + [@"calendar-bezel-5.png", 10.0, 1.0], + [@"calendar-bezel-6.png", 10.0, 10.0], + [@"calendar-bezel-7.png", 1.0, 10.0], + [@"calendar-bezel-8.png", 10.0, 10.0] + ]), + + // Define an alternate bezel for when the calendar is disabled. + + disabledBezelColor = PatternColor( + [ + [@"calendar-disabled-bezel-0.png", 10.0, 10.0], + [@"calendar-disabled-bezel-1.png", 1.0, 10.0], + [@"calendar-disabled-bezel-2.png", 10.0, 10.0], + [@"calendar-disabled-bezel-3.png", 10.0, 1.0], + [@"calendar-disabled-bezel-4.png", 1.0, 1.0], + [@"calendar-disabled-bezel-5.png", 10.0, 1.0], + [@"calendar-disabled-bezel-6.png", 10.0, 10.0], + [@"calendar-disabled-bezel-7.png", 1.0, 10.0], + [@"calendar-disabled-bezel-8.png", 10.0, 10.0] + ]), + + // We would like the font to be dark blue and lighter blue when disabled + + textColor = [CPColor colorWithHexString:@"001B48"], + disabledTextColor = [textColor colorWithAlphaComponent:0.6]; + + // Now we will define our theme values. These are done declaratively in an array, + // where each element is an array of 2 or 3 values: attribute name, value, and optional state. + + themedCalendarViewValues = + [ + [@"bezel-color", bezelColor], + [@"bezel-color", disabledBezelColor, CPThemeStateDisabled], + + [@"text-color", textColor], + [@"text-color", disabledTextColor, CPThemeStateDisabled], + + // We will also define a minimum size + [@"min-size", CGSizeMake(100.0, 100.0)] + ]; + + // Now we just pass our values to utility function + + SetThemeValues(calendar, themedCalendarViewValues); + } + + That's all there is to it. Note that PatternColor can also be used to create a simple + patterned color: + + color = PatternColor(filename, width, height); + + It can also be used to create a three part image by specifying three images slices + with [filename, width, height] and an orientation: + + trackColor = PatternColor( + [ + ["horizontal-track-left.png", 4.0, 5.0], + ["horizontal-track-center.png", 1.0, 5.0], + ["horizontal-track-right.png", 4.0, 5.0] + ], + PatternIsHorizontal); + + trackColor = PatternColor( + [ + ["vertical-track-top.png", 5.0, 6.0], + ["vertical-track-center.png", 5.0, 1.0], + ["vertical-track-bottom.png", 5.0, 4.0] + ], + PatternIsVertical); + + + HUD THEMES + + If you want to modify the look of your view when it is within a HUD window, + follow these steps: + + 1. Decide which elements will be changed and which will stay the same. + For example, in a HUD window you may want to use a dark or black background + and white text. + + 2. If you are using different color pattern artwork, use the same filename as + the main theme but put it in the HUD directory of the main theme directory. + + 3. In the HUD class (such as AristoHUDThemeDescriptor), add a method with this template: + + + (CPCalendarView)themedCalendarView + { + var calendar = [AristoThemeDescriptor makeCalendarView]; + + SetHUDThemeValues(calendar, themedCalendarViewValues); + + return calendar; + } + + In many cases that's all you need to do! SetHUDThemeValues() does the following: + + - Finds all colors defined with a pattern image, and redirects them to an image + with the same filename in the HUD directory. + + - Converts any "text-color" attributes to white in the normal state and + [CPColor colorWithCalibratedWhite:1.0 alpha:0.6] in the disabled state. + + - Converts any "text-shadow-color" to black. + + - Converts any "text-shadow-offset" to (-1.0, -1.0). + + These are the standards used by Aristo-HUD. If you want to override these defaults, + you can declare an array of overrides and pass it to SetHUDThemeValues(). + For example, let's say with our calendar we decide to do the following for HUD: + + - Use a different, dark background bezel in normal state + - Use the same bezel in disabled state + - Use light blue text in normal state with a dark blue shadow + - Use the same text color with alpha 0.6 in disabled state + + Here is our modified method: + + + (CPCalendarView)themedCalendarView + { + var calendar = [AristoThemeDescriptor makeCalendarView], + + textColor = [CPColor colorWithHexString:@"#EEF3FF"], + disabledTextColor = [textColor colorWithAlphaComponent:0.6], + + overrides = + [ + // We don't have to specify the normal bezel, that will be + // used automatically from the HUD directory. But we have + // to remove the disabled bezel by passing a nil value. + + [@"bezel-color", nil, CPThemeStateDisabled], + + // Now override the text colors + + [@"text-color", textColor], + [@"text-color", disabledTextColor, CPThemeStateDisabled] + ]; + + // Pass the overrides when setting the theme values + + SetHUDThemeValues(calendar, themedCalendarViewValues, overrides); + + return calendar; + } + + That's it! +*/ @implementation AristoThemeDescriptor : BKThemeDescriptor { @@ -20,81 +224,96 @@ return @"Aristo"; } +var themedButtonValues = nil; + ++ (CPButton)makeButton +{ + return [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)]; +} + + (CPButton)button { - var button = [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)], + var button = [self makeButton], - bezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + bezelColor = PatternColor( [ - [_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]], + ["button-bezel-left.png", 4.0, 24.0], + ["button-bezel-center.png", 1.0, 24.0], + ["button-bezel-right.png", 4.0, 24.0] + ], + PatternIsHorizontal), - highlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + highlightedBezelColor = PatternColor( [ - [_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]], + ["button-bezel-highlighted-left.png", 4.0, 24.0], + ["button-bezel-highlighted-center.png", 1.0, 24.0], + ["button-bezel-highlighted-right.png", 4.0, 24.0] + ], + PatternIsHorizontal), - defaultBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + defaultBezelColor = PatternColor( [ - [_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]], + ["default-button-bezel-left.png", 4.0, 24.0], + ["default-button-bezel-center.png", 1.0, 24.0], + ["default-button-bezel-right.png", 4.0, 24.0] + ], + PatternIsHorizontal), - defaultHighlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + defaultHighlightedBezelColor = PatternColor( [ - [_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]], + ["default-button-bezel-highlighted-left.png", 4.0, 24.0], + ["default-button-bezel-highlighted-center.png", 1.0, 24.0], + ["default-button-bezel-highlighted-right.png", 4.0, 24.0] + ], + PatternIsHorizontal), - defaultDisabledBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + defaultDisabledBezelColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"default-button-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], + ["default-button-bezel-disabled-left.png", 4.0, 24.0], + ["default-button-bezel-disabled-center.png", 1.0, 24.0], + ["default-button-bezel-disabled-right.png", 4.0, 24.0] + ], + PatternIsHorizontal), - disabledBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + disabledBezelColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]]; + ["button-bezel-disabled-left.png", 4.0, 24.0], + ["button-bezel-disabled-center.png", 1.0, 24.0], + ["button-bezel-disabled-right.png", 4.0, 24.0] + ], + PatternIsHorizontal), + + defaultTextColor = [CPColor colorWithCalibratedRed:13.0/255.0 green:51.0/255.0 blue:70.0/255.0 alpha:1.0], + defaultDisabledTextColor = [CPColor colorWithCalibratedRed:13.0/255.0 green:51.0/255.0 blue:70.0/255.0 alpha:0.6]; + + themedButtonValues = + [ + [@"font", [CPFont boldSystemFontOfSize:12.0], CPThemeStateBordered], + [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateBordered], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateBordered | CPThemeStateDisabled], + [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateBordered], + [@"line-break-mode", CPLineBreakByTruncatingTail], + [@"content-inset", CGInsetMake(0.0, 5.0, 0.0, 5.0), CPThemeStateBordered], + + [@"bezel-color", bezelColor, CPThemeStateBordered], + [@"bezel-color", highlightedBezelColor, CPThemeStateBordered | CPThemeStateHighlighted], + + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateDisabled], + [@"bezel-color", disabledBezelColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", defaultDisabledBezelColor, CPThemeStateBordered | CPThemeStateDefault | CPThemeStateDisabled], + + [@"text-color", defaultTextColor, CPThemeStateDefault], + [@"text-color", defaultDisabledTextColor, CPThemeStateDefault | CPThemeStateDisabled], + [@"bezel-color", defaultBezelColor, CPThemeStateBordered | CPThemeStateDefault], + [@"bezel-color", defaultHighlightedBezelColor, CPThemeStateBordered | CPThemeStateHighlighted | CPThemeStateDefault], + + [@"min-size", CGSizeMake(0.0, 24.0)], + [@"max-size", CGSizeMake(-1.0, 24.0)] + ]; - [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:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - [button setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateBordered]; - [button setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; + SetThemeValues(button, themedButtonValues); - [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:[CPColor colorWithCalibratedWhite:0.6 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled]; - [button setValue:disabledBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - [button setValue:defaultDisabledBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDefault|CPThemeStateDisabled]; - - [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:[CPColor colorWithCalibratedRed:13.0/255.0 green:51.0/255.0 blue:70.0/255.0 alpha:0.6] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled|CPThemeStateDefault]; - - [button setValue:CGSizeMake(0.0, 24.0) forThemeAttribute:@"min-size"]; - [button setValue:CGSizeMake(-1.0, 24.0) forThemeAttribute:@"max-size"]; - return button; } @@ -120,40 +339,43 @@ + (CPPopUpButton)themedPopUpButton { var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:NO], - color = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + color = PatternColor( [ - [_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-bezel-left.png", 4.0, 24.0], + ["button-bezel-center.png", 1.0, 24.0], + ["popup-bezel-right.png", 27.0, 24.0] + ], + PatternIsHorizontal), - var disabledBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + disabledColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"popup-bezel-disabled-right.png" size:CGSizeMake(27.0, 24.0)] - ] - isVertical:NO]]; + ["button-bezel-disabled-left.png", 4.0, 24.0], + ["button-bezel-disabled-center.png", 1.0, 24.0], + ["popup-bezel-disabled-right.png", 27.0, 24.0] + ], + PatternIsHorizontal), - [button setTitle:@"Pop Up"]; + themeValues = + [ + [@"bezel-color", color, CPThemeStateBordered], + [@"bezel-color", disabledColor, CPThemeStateBordered | CPThemeStateDisabled], + + [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], + [@"font", [CPFont boldSystemFontOfSize:12.0]], + [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]], + + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateBordered | CPThemeStateDisabled], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeStateBordered | CPThemeStateDisabled], + + [@"min-size", CGSizeMake(32.0, 24.0)], + [@"max-size", CGSizeMake(-1.0, 24.0)] + ]; + + SetThemeValues(button, themeValues); - [button setValue:color forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [button setValue:disabledBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - - [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 setTitle:@"Pop Up"]; [button addItemWithTitle:@"item"]; - - [button setValue:[CPColor colorWithCalibratedWhite:0.6 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; return button; } @@ -161,399 +383,468 @@ + (CPPopUpButton)themedPullDownMenu { var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:YES], - color = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + color = PatternColor( [ - [_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-bezel-left.png", 4.0, 24.0], + ["button-bezel-center.png", 1.0, 24.0], + ["popup-bezel-right-pullsdown.png", 27.0, 24.0] + ], + PatternIsHorizontal), - var disabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + disabledColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"button-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"popup-bezel-disabled-right-pullsdown.png" size:CGSizeMake(27.0, 24.0)] - ] - isVertical:NO]]; + ["button-bezel-disabled-left.png", 4.0, 24.0], + ["button-bezel-disabled-center.png", 1.0, 24.0], + ["popup-bezel-disabled-right-pullsdown.png", 27.0, 24.0] + ], + PatternIsHorizontal), + + themeValues = + [ + [@"bezel-color", color, CPPopUpButtonStatePullsDown | CPThemeStateBordered], + [@"bezel-color", disabledColor, CPPopUpButtonStatePullsDown | CPThemeStateBordered | CPThemeStateDisabled], + + [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], + [@"font", [CPFont boldSystemFontOfSize:12.0]], + [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateBordered | CPThemeStateDisabled], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeStateBordered | CPThemeStateDisabled], + + [@"min-size", CGSizeMake(32.0, 24.0)], + [@"max-size", CGSizeMake(-1.0, 24.0)] + ]; + + SetThemeValues(button, themeValues); + [button setTitle:@"Pull Down"]; - - [button setValue:color forThemeAttribute:@"bezel-color" inState:CPPopUpButtonStatePullsDown|CPThemeStateBordered]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled|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 setValue:[CPColor colorWithCalibratedWhite:0.6 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - [button setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - [button addItemWithTitle:@"item"]; return button; } -+ (CPScroller)themedVerticalScroller +var themedVerticalScrollerValues = nil; + ++ (CPScroller)makeVerticalScroller { - var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 15.0, 170.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-vertical-track.png" size:CGSizeMake(15.0, 1.0)]), - disabledTrackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-vertical-track-disabled.png" size:CGSizeMake(15.0, 1.0)]); - - [scroller setValue:21.0 forThemeAttribute:@"minimum-knob-length" inState:CPThemeStateVertical]; - [scroller setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"knob-inset" inState:CPThemeStateVertical]; - [scroller setValue:CGInsetMake(-10.0, 0.0, -10.0, 0.0) forThemeAttribute:@"track-inset" inState:CPThemeStateVertical]; - - [scroller setValue:trackColor forThemeAttribute:@"knob-slot-color" inState:CPThemeStateVertical]; - [scroller setValue:disabledTrackColor forThemeAttribute:@"knob-slot-color" inState:CPThemeStateVertical | CPThemeStateDisabled]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-up-arrow.png" size:CGSizeMake(15.0, 24.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-up-arrow-highlighted.png" size:CGSizeMake(15.0, 24.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-up-arrow-disabled.png" size:CGSizeMake(15.0, 24.0)]); - - [scroller setValue:CGSizeMake(15.0, 24.0) forThemeAttribute:@"decrement-line-size" inState:CPThemeStateVertical]; - [scroller setValue:arrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateVertical]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateVertical | CPThemeStateHighlighted], - [scroller setValue:disabledArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateVertical | CPThemeStateDisabled]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-down-arrow.png" size:CGSizeMake(15.0, 24.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-down-arrow-highlighted.png" size:CGSizeMake(15.0, 24.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-down-arrow-disabled.png" size:CGSizeMake(15.0, 24.0)]); - - [scroller setValue:CGSizeMake(15.0, 24.0) forThemeAttribute:@"increment-line-size" inState:CPThemeStateVertical]; - [scroller setValue:arrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateVertical]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateVertical | CPThemeStateHighlighted]; - [scroller setValue:disabledArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateVertical | CPThemeStateDisabled]; - - var knobColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"scroller-vertical-knob-top.png" size:CGSizeMake(15.0, 10.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-vertical-knob-center.png" size:CGSizeMake(15.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-vertical-knob-bottom.png" size:CGSizeMake(15.0, 10.0)] - ] - isVertical:YES]); - - var knobDisabledColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"scroller-vertical-knob-disabled-top.png" size:CGSizeMake(15.0, 10.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-vertical-knob-disabled-center.png" size:CGSizeMake(15.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-vertical-knob-disabled-bottom.png" size:CGSizeMake(15.0, 10.0)] - ] - isVertical:YES]); - - [scroller setValue:knobColor forThemeAttribute:@"knob-color" inState:CPThemeStateVertical]; - [scroller setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateVertical|CPThemeStateDisabled]; + var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 15.0, 170.0)]; [scroller setFloatValue:0.1]; [scroller setKnobProportion:0.5]; + + return scroller; +} ++ (CPScroller)themedVerticalScroller +{ + var scroller = [self makeVerticalScroller], + trackColor = PatternColor("scroller-vertical-track.png", 15.0, 1.0), + disabledTrackColor = PatternColor("scroller-vertical-track-disabled.png", 15.0, 1.0), + + upArrowColor = PatternColor("scroller-up-arrow.png", 15.0, 24.0), + highlightedUpArrowColor = PatternColor("scroller-up-arrow-highlighted.png", 15.0, 24.0), + disabledUpArrowColor = PatternColor("scroller-up-arrow-disabled.png", 15.0, 24.0), + + downArrowColor = PatternColor("scroller-down-arrow.png", 15.0, 24.0), + highlightedDownArrowColor = PatternColor("scroller-down-arrow-highlighted.png", 15.0, 24.0), + disabledDownArrowColor = PatternColor("scroller-down-arrow-disabled.png", 15.0, 24.0), + + knobColor = PatternColor( + [ + ["scroller-vertical-knob-top.png", 15.0, 10.0], + ["scroller-vertical-knob-center.png", 15.0, 1.0], + ["scroller-vertical-knob-bottom.png", 15.0, 10.0] + ], + PatternIsVertical), + + disabledKnobColor = PatternColor( + [ + ["scroller-vertical-knob-disabled-top.png", 15.0, 10.0], + ["scroller-vertical-knob-disabled-center.png", 15.0, 1.0], + ["scroller-vertical-knob-disabled-bottom.png", 15.0, 10.0] + ], + PatternIsVertical); + + themedVerticalScrollerValues = + [ + [@"minimum-knob-length", 21.0, CPThemeStateVertical], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical], + [@"track-inset", CGInsetMake(-10.0, 0.0, -10.0, 0.0), CPThemeStateVertical], + + [@"knob-color", knobColor, CPThemeStateVertical], + [@"knob-color", disabledKnobColor, CPThemeStateVertical | CPThemeStateDisabled], + + [@"knob-slot-color", trackColor, CPThemeStateVertical], + [@"knob-slot-color", disabledTrackColor, CPThemeStateVertical | CPThemeStateDisabled], + + [@"decrement-line-size", CGSizeMake(15.0, 24.0), CPThemeStateVertical], + [@"decrement-line-color", upArrowColor, CPThemeStateVertical], + [@"decrement-line-color", highlightedUpArrowColor, CPThemeStateVertical | CPThemeStateHighlighted], + [@"decrement-line-color", disabledUpArrowColor, CPThemeStateVertical | CPThemeStateDisabled], + + [@"increment-line-size", CGSizeMake(15.0, 24.0), CPThemeStateVertical], + [@"increment-line-color", downArrowColor, CPThemeStateVertical], + [@"increment-line-color", highlightedDownArrowColor, CPThemeStateVertical | CPThemeStateHighlighted], + [@"increment-line-color", disabledDownArrowColor, CPThemeStateVertical | CPThemeStateDisabled] + ]; + + SetThemeValues(scroller, themedVerticalScrollerValues); + + return scroller; +} + +var themedHorizontalScrollerValues = nil; + ++ (CPScroller)makeHorizontalScroller +{ + var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 170.0, 15.0)]; + + [scroller setFloatValue:0.1]; + [scroller setKnobProportion:0.5]; + return scroller; } + (CPScroller)themedHorizontalScroller { - var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 170.0, 15.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-horizontal-track.png" size:CGSizeMake(1.0, 15.0)]), - disabledTrackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-horizontal-track-disabled.png" size:CGSizeMake(1.0, 15.0)]); + var scroller = [self makeHorizontalScroller], + trackColor = PatternColor("scroller-horizontal-track.png", 1.0, 15.0), + disabledTrackColor = PatternColor("scroller-horizontal-track-disabled.png", 1.0, 15.0), + + leftArrowColor = PatternColor("scroller-left-arrow.png", 24.0, 15.0), + highlightedLeftArrowColor = PatternColor("scroller-left-arrow-highlighted.png", 24.0, 15.0), + disabledLeftArrowColor = PatternColor("scroller-left-arrow-disabled.png", 24.0, 15.0), + + rightArrowColor = PatternColor("scroller-right-arrow.png", 24.0, 15.0), + highlightedRightArrowColor = PatternColor("scroller-right-arrow-highlighted.png", 24.0, 15.0), + disabledRightArrowColor = PatternColor("scroller-right-arrow-disabled.png", 24.0, 15.0), + + knobColor = PatternColor( + [ + ["scroller-horizontal-knob-left.png", 10.0, 15.0], + ["scroller-horizontal-knob-center.png", 1.0, 15.0], + ["scroller-horizontal-knob-right.png", 10.0, 15.0] + ], + PatternIsHorizontal), + + disabledKnobColor = PatternColor( + [ + ["scroller-horizontal-knob-disabled-left.png", 10.0, 15.0], + ["scroller-horizontal-knob-disabled-center.png", 1.0, 15.0], + ["scroller-horizontal-knob-disabled-right.png", 10.0, 15.0] + ], + PatternIsHorizontal); + + themedHorizontalScrollerValues = + [ + [@"minimum-knob-length", 21.0], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0)], + [@"track-inset", CGInsetMake(0.0, -10.0, 0.0, -11.0)], + + [@"knob-color", knobColor], + [@"knob-color", disabledKnobColor, CPThemeStateDisabled], + + [@"knob-slot-color", trackColor], + [@"knob-slot-color", disabledTrackColor, CPThemeStateDisabled], + + [@"decrement-line-size", CGSizeMake(24.0, 15.0)], + [@"decrement-line-color", leftArrowColor], + [@"decrement-line-color", highlightedLeftArrowColor, CPThemeStateHighlighted], + [@"decrement-line-color", disabledLeftArrowColor, CPThemeStateDisabled], + + [@"increment-line-size", CGSizeMake(24.0, 15.0)], + [@"increment-line-color", rightArrowColor], + [@"increment-line-color", highlightedRightArrowColor, CPThemeStateHighlighted], + [@"increment-line-color", disabledRightArrowColor, CPThemeStateDisabled] + ]; - [scroller setValue:21.0 forThemeAttribute:@"minimum-knob-length"]; - [scroller setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"knob-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]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-left-arrow.png" size:CGSizeMake(24.0, 15.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-left-arrow-highlighted.png" size:CGSizeMake(24.0, 15.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-left-arrow-disabled.png" size:CGSizeMake(24.0, 15.0)]); - - [scroller setValue:CGSizeMake(24.0, 15.0) forThemeAttribute:@"decrement-line-size"]; - [scroller setValue:arrowColor forThemeAttribute:@"decrement-line-color"]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateHighlighted], - [scroller setValue:disabledArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateDisabled]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-right-arrow.png" size:CGSizeMake(24.0, 15.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-right-arrow-highlighted.png" size:CGSizeMake(24.0, 15.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"scroller-right-arrow-disabled.png" size:CGSizeMake(24.0, 15.0)]); - - [scroller setValue:CGSizeMake(24.0, 15.0) forThemeAttribute:@"increment-line-size"]; - [scroller setValue:arrowColor forThemeAttribute:@"increment-line-color"]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateHighlighted]; - [scroller setValue:disabledArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateDisabled]; + SetThemeValues(scroller, themedHorizontalScrollerValues); - var knobColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"scroller-horizontal-knob-left.png" size:CGSizeMake(10.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-horizontal-knob-center.png" size:CGSizeMake(1.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-horizontal-knob-right.png" size:CGSizeMake(10.0, 15.0)] - ] - isVertical:NO]); - - var knobDisabledColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"scroller-horizontal-knob-disabled-left.png" size:CGSizeMake(10.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-horizontal-knob-disabled-center.png" size:CGSizeMake(1.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"scroller-horizontal-knob-disabled-right.png" size:CGSizeMake(10.0, 15.0)] - ] - isVertical:NO]); - - [scroller setValue:knobColor forThemeAttribute:@"knob-color"]; - [scroller setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; - - [scroller setFloatValue:0.1]; - [scroller setKnobProportion:0.5]; - return scroller; } + (CPTextField)themedStandardTextField { var textfield = [[CPTextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 29.0)], - bezelColor = [CPColor colorWithPatternImage:[[CPNinePartImage alloc] initWithImageSlices: + + bezelColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-0.png" size:CGSizeMake(2.0, 3.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-1.png" size:CGSizeMake(1.0, 3.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-2.png" size:CGSizeMake(2.0, 3.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-3.png" size:CGSizeMake(2.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-4.png" size:CGSizeMake(1.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-5.png" size:CGSizeMake(2.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-6.png" size:CGSizeMake(2.0, 2.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-7.png" size:CGSizeMake(1.0, 2.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-8.png" size:CGSizeMake(2.0, 2.0)] - ]]], + ["textfield-bezel-square-0.png", 2.0, 3.0], + ["textfield-bezel-square-1.png", 1.0, 3.0], + ["textfield-bezel-square-2.png", 2.0, 3.0], + ["textfield-bezel-square-3.png", 2.0, 1.0], + ["textfield-bezel-square-4.png", 1.0, 1.0], + ["textfield-bezel-square-5.png", 2.0, 1.0], + ["textfield-bezel-square-6.png", 2.0, 2.0], + ["textfield-bezel-square-7.png", 1.0, 2.0], + ["textfield-bezel-square-8.png", 2.0, 2.0] + ]), - bezelFocusedColor = [CPColor colorWithPatternImage:[[CPNinePartImage alloc] initWithImageSlices: + bezelFocusedColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-0.png" size:CGSizeMake(6.0, 7.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-1.png" size:CGSizeMake(1.0, 7.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-2.png" size:CGSizeMake(6.0, 7.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-3.png" size:CGSizeMake(6.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-4.png" size:CGSizeMake(1.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-5.png" size:CGSizeMake(6.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-6.png" size:CGSizeMake(6.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-7.png" size:CGSizeMake(1.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-square-focused-8.png" size:CGSizeMake(6.0, 5.0)] - ]]]; + ["textfield-bezel-square-focused-0.png", 6.0, 7.0], + ["textfield-bezel-square-focused-1.png", 1.0, 7.0], + ["textfield-bezel-square-focused-2.png", 6.0, 7.0], + ["textfield-bezel-square-focused-3.png", 6.0, 1.0], + ["textfield-bezel-square-focused-4.png", 1.0, 1.0], + ["textfield-bezel-square-focused-5.png", 6.0, 1.0], + ["textfield-bezel-square-focused-6.png", 6.0, 5.0], + ["textfield-bezel-square-focused-7.png", 1.0, 5.0], + ["textfield-bezel-square-focused-8.png", 6.0, 5.0] + ]), + + placeholderColor = [CPColor colorWithCalibratedRed:189.0 / 255.0 green:199.0 / 255.0 blue:211.0 / 255.0 alpha:1.0], + + themeValues = + [ + [@"bezel-color", bezelColor, CPThemeStateBezeled], + [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], + [@"font", [CPFont systemFontOfSize:12.0], CPThemeStateBezeled], + + [@"content-inset", CGInsetMake(9.0, 7.0, 5.0, 8.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(4.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBezeled | CPThemeStateEditing], + + [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], + + [@"line-break-mode", CPLineBreakByTruncatingTail, CPThemeStateTableDataView], + [@"vertical-alignment", CPCenterVerticalTextAlignment, CPThemeStateTableDataView], + [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], + [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], + [@"text-color", [CPColor whiteColor], CPThemeStateTableDataView | CPThemeStateSelectedTableDataView], + [@"font", [CPFont boldSystemFontOfSize:12.0], CPThemeStateTableDataView | CPThemeStateSelectedTableDataView], + ]; + + SetThemeValues(textfield, themeValues); + [textfield setBezeled:YES]; - [textfield setValue:bezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBezeled]; - [textfield setValue:bezelFocusedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBezeled|CPThemeStateEditing]; - [textfield setValue:[CPFont systemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateBezeled]; - [textfield setValue:CGInsetMake(9.0, 7.0, 5.0, 8.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBezeled]; - - [textfield setValue:CGInsetMake(4.0, 4.0, 3.0, 4.0) forThemeAttribute:@"bezel-inset" inState:CPThemeStateBezeled]; - [textfield setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"bezel-inset" inState:CPThemeStateBezeled|CPThemeStateEditing]; - - [textfield setValue:[CPColor colorWithCalibratedRed:189.0 / 255.0 green:199.0 / 255.0 blue:211.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder]; - [textfield setPlaceholderString:"placeholder"]; [textfield setStringValue:""]; [textfield setEditable:YES]; - - - // tableview dataview stuff - [textfield setValue:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0] forThemeAttribute:"text-color" inState:CPThemeStateTableDataView]; - [textfield setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode" inState:CPThemeStateTableDataView|CPThemeStateTableDataView]; - [textfield setValue:CPCenterVerticalTextAlignment forThemeAttribute:@"vertical-alignment" inState:CPThemeStateTableDataView|CPThemeStateTableDataView]; - [textfield setValue:CGInsetMake(0.0, 0.0, 0.0, 5.0) forThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView|CPThemeStateTableDataView]; - [textfield setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateTableDataView|CPThemeStateSelectedTableDataView]; - [textfield setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateTableDataView|CPThemeStateSelectedTableDataView]; - return textfield; } + (CPTextField)themedRoundedTextField { var textfield = [[CPTextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 30.0)], - bezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + bezelColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-rounded-left.png" size:CGSizeMake(13.0, 22.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-rounded-center.png" size:CGSizeMake(1.0, 22.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-rounded-right.png" size:CGSizeMake(13.0, 22.0)] - ] isVertical:NO]], + ["textfield-bezel-rounded-left.png", 13.0, 22.0], + ["textfield-bezel-rounded-center.png", 1.0, 22.0], + ["textfield-bezel-rounded-right.png", 13.0, 22.0] + ], + PatternIsHorizontal), - bezelFocusedColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: + bezelFocusedColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-rounded-focused-left.png" size:CGSizeMake(17.0, 30.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-rounded-focused-center.png" size:CGSizeMake(1.0, 30.0)], - [_CPCibCustomResource imageResourceWithName:"textfield-bezel-rounded-focused-right.png" size:CGSizeMake(17.0, 30.0)] - ] isVertical:NO]]; + ["textfield-bezel-rounded-focused-left.png", 17.0, 30.0], + ["textfield-bezel-rounded-focused-center.png", 1.0, 30.0], + ["textfield-bezel-rounded-focused-right.png", 17.0, 30.0] + ], + PatternIsHorizontal), + + placeholderColor = [CPColor colorWithCalibratedRed:189.0 / 255.0 green:199.0 / 255.0 blue:211.0 / 255.0 alpha:1.0], + themeValues = + [ + [@"bezel-color", bezelColor, CPTextFieldStateRounded | CPThemeStateBezeled], + [@"bezel-color", bezelFocusedColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + [@"font", [CPFont systemFontOfSize:12.0]], + + [@"content-inset", CGInsetMake(9.0, 14.0, 6.0, 14.0), CPTextFieldStateRounded | CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(4.0, 4.0, 4.0, 4.0), CPTextFieldStateRounded | CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + + [@"text-color", placeholderColor, CPTextFieldStateRounded | CPTextFieldStatePlaceholder], + + [@"min-size", CGSizeMake(0.0, 30.0), CPTextFieldStateRounded | CPThemeStateBezeled], + [@"max-size", CGSizeMake(-1.0, 30.0), CPTextFieldStateRounded | CPThemeStateBezeled] + ]; + + SetThemeValues(textfield, themeValues); + [textfield setBezeled:YES]; [textfield setBezelStyle:CPTextFieldRoundedBezel]; - [textfield setValue:bezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBezeled | CPTextFieldStateRounded]; - [textfield setValue:bezelFocusedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBezeled | CPTextFieldStateRounded | CPThemeStateEditing]; - - [textfield setValue:[CPFont systemFontOfSize:12.0] forThemeAttribute:@"font"]; - [textfield setValue:CGInsetMake(9.0, 14.0, 6.0, 14.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBezeled | CPTextFieldStateRounded]; - - [textfield setValue:CGInsetMake(4.0, 4.0, 4.0, 4.0) forThemeAttribute:@"bezel-inset" inState:CPThemeStateBezeled|CPTextFieldStateRounded]; - [textfield setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"bezel-inset" inState:CPThemeStateBezeled|CPTextFieldStateRounded|CPThemeStateEditing]; - - [textfield setValue:[CPColor colorWithCalibratedRed:189.0 / 255.0 green:199.0 / 255.0 blue:211.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder]; - [textfield setPlaceholderString:"placeholder"]; [textfield setStringValue:""]; [textfield setEditable:YES]; - [textfield setValue:CGSizeMake(0.0, 30.0) forThemeAttribute:@"min-size" inState:CPThemeStateBezeled|CPTextFieldStateRounded]; - [textfield setValue:CGSizeMake(-1.0, 30.0) forThemeAttribute:@"max-size" inState:CPThemeStateBezeled|CPTextFieldStateRounded]; - return textfield; } + (CPRadioButton)themedRadioButton { - var button = [[CPRadio alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 17.0)]; + var button = [[CPRadio alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 17.0)], + + bezelColor = PatternColor( + [ + ["radio-bezel.png", 17.0, 17.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorSelected = PatternColor( + [ + ["radio-bezel-selected.png", 17.0, 17.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorSelectedHighlighted = PatternColor( + [ + ["radio-bezel-selected-highlighted.png", 17.0, 17.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorSelectedDisabled = PatternColor( + [ + ["radio-bezel-selected-disabled.png", 17.0, 17.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorDisabled = PatternColor( + [ + ["radio-bezel-disabled.png", 17.0, 17.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorHighlighted = PatternColor( + [ + ["radio-bezel-highlighted.png", 17.0, 17.0], nil, nil + ], + PatternIsHorizontal), + + themeValues = + [ + [@"alignment", CPLeftTextAlignment, CPThemeStateBordered], + [@"font", [CPFont systemFontOfSize:12.0], CPThemeStateBordered], + [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 20.0), CPThemeStateBordered], + [@"bezel-color", bezelColor, CPThemeStateBordered], + [@"bezel-color", bezelColorSelected, CPThemeStateBordered | CPThemeStateSelected], + [@"bezel-color", bezelColorSelectedHighlighted, CPThemeStateBordered | CPThemeStateSelected | CPThemeStateHighlighted], + [@"bezel-color", bezelColorHighlighted, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColorDisabled, CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", bezelColorSelectedDisabled, CPThemeStateBordered | CPThemeStateSelected | CPThemeStateDisabled], + + [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0], CPThemeStateDisabled], + + [@"min-size", CGSizeMake(0.0, 17.0)] + ]; + + SetThemeValues(button, themeValues); [button setTitle:@"Hello Friend!"]; - [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled]; - - var bezelColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"radio-bezel.png" size:CGSizeMake(17.0, 17.0)], nil, nil - ] - isVertical:NO]), - bezelColorSelected = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"radio-bezel-selected.png" size:CGSizeMake(17.0, 17.0)], nil, nil - ] - isVertical:NO]), - bezelColorSelectedHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"radio-bezel-selected-highlighted.png" size:CGSizeMake(17.0, 17.0)], nil, nil - ] - isVertical:NO]), - bezelColorSelectedDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"radio-bezel-selected-disabled.png" size:CGSizeMake(17.0, 17.0)], nil, nil - ] - isVertical:NO]), - bezelColorDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"radio-bezel-disabled.png" size:CGSizeMake(17.0, 17.0)], nil, nil - ] - isVertical:NO]), - bezelColorHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"radio-bezel-highlighted.png" size:CGSizeMake(17.0, 17.0)], nil, nil - ] - isVertical:NO]); - - [button setValue:CPLeftTextAlignment forThemeAttribute:@"alignment" inState:CPThemeStateBordered]; - [button setValue:[CPFont systemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateBordered]; - [button setValue:CGInsetMake(0.0, 0.0, 0.0, 20.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; - [button setValue:bezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [button setValue:bezelColorSelected forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected]; - [button setValue:bezelColorSelectedHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected | CPThemeStateHighlighted]; - [button setValue:bezelColorHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; - [button setValue:bezelColorDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; - [button setValue:bezelColorSelectedDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled | CPThemeStateSelected]; - - [button setValue:CGSizeMake(0.0, 17.0) forThemeAttribute:@"min-size"]; - return button; } + (CPRadioButton)themedCheckBoxButton { - var button = [[CPCheckBox alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 17.0)]; + var button = [[CPCheckBox alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 17.0)], + bezelColor = PatternColor( + [ + ["check-box-bezel.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorSelected = PatternColor( + [ + ["check-box-bezel-selected.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorSelectedHighlighted = PatternColor( + [ + ["check-box-bezel-selected-highlighted.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorSelectedDisabled = PatternColor( + [ + ["check-box-bezel-selected-disabled.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorDisabled = PatternColor( + [ + ["check-box-bezel-disabled.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), + + bezelColorHighlighted = PatternColor( + [ + ["check-box-bezel-highlighted.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), + + themeValues = + [ + [@"alignment", CPLeftTextAlignment, CPThemeStateBordered], + [@"font", [CPFont systemFontOfSize:12.0], CPThemeStateBordered], + [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 20.0), CPThemeStateBordered], + [@"bezel-color", bezelColor, CPThemeStateBordered], + [@"bezel-color", bezelColorSelected, CPThemeStateBordered | CPThemeStateSelected], + [@"bezel-color", bezelColorSelectedHighlighted, CPThemeStateBordered | CPThemeStateSelected | CPThemeStateHighlighted], + [@"bezel-color", bezelColorHighlighted, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColorDisabled, CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", bezelColorSelectedDisabled, CPThemeStateBordered | CPThemeStateSelected | CPThemeStateDisabled], + + [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0], CPThemeStateDisabled], + + [@"min-size", CGSizeMake(0.0, 17.0)] + ]; + + SetThemeValues(button, themeValues); + [button setTitle:@"Another option"]; - [button setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled]; - - var bezelColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]), - bezelColorSelected = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-selected.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]), - bezelColorSelectedHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-selected-highlighted.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]), - bezelColorSelectedDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-selected-disabled.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]), - bezelColorDisabled = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-disabled.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]), - bezelColorHighlighted = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-highlighted.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]); - - [button setValue:CPLeftTextAlignment forThemeAttribute:@"alignment" inState:CPThemeStateBordered]; - [button setValue:[CPFont systemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateBordered]; - [button setValue:CGInsetMake(0.0, 0.0, 0.0, 20.0) forThemeAttribute:@"content-inset" inState:CPThemeStateBordered]; - [button setValue:bezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [button setValue:bezelColorSelected forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected]; - [button setValue:bezelColorSelectedHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateSelected | CPThemeStateHighlighted]; - [button setValue:bezelColorHighlighted forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; - [button setValue:bezelColorDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; - [button setValue:bezelColorSelectedDisabled forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled | CPThemeStateSelected]; - - [button setValue:CGSizeMake(0.0, 17.0) forThemeAttribute:@"min-size"]; - return button; } + (CPRadioButton)themedMixedCheckBoxButton { - button = [self themedCheckBoxButton]; + var button = [self themedCheckBoxButton]; [button setAllowsMixedState:YES]; [button setState:CPMixedState]; - var mixedSelectedColor = - PatternColor([[CPThreePartImage alloc] initWithImageSlices: + var mixedSelectedColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-mixed-highlighted.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]), + ["check-box-bezel-mixed-highlighted.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), - mixedDisabledColor = - PatternColor([[CPThreePartImage alloc] initWithImageSlices: + mixedDisabledColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-mixed-disabled.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]), + ["check-box-bezel-mixed-disabled.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), - mixedColor = - PatternColor([[CPThreePartImage alloc] initWithImageSlices: + mixedColor = PatternColor( [ - [_CPCibCustomResource imageResourceWithName:"check-box-bezel-mixed.png" size:CGSizeMake(15.0, 16.0)], nil, nil - ] - isVertical:NO]); + ["check-box-bezel-mixed.png", 15.0, 16.0], nil, nil + ], + PatternIsHorizontal), + + themeValues = + [ + [@"bezel-color", mixedColor, CPButtonStateMixed | CPThemeStateBordered], + [@"bezel-color", mixedSelectedColor, CPButtonStateMixed | CPThemeStateBordered | CPThemeStateSelected], + [@"bezel-color", mixedDisabledColor, CPButtonStateMixed | CPThemeStateBordered | CPThemeStateDisabled] + ]; - [button setValue:mixedSelectedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeState("mixed")|CPThemeStateHighlighted]; - [button setValue:mixedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeState("mixed")]; - [button setValue:mixedDisabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeState("mixed")|CPThemeStateDisabled]; + SetThemeValues(button, themeValues); return button; } -+ (CPPopUpButton)themedSegmentedControl +var themedSegmentedControlValues = nil; + ++ (CPSegmentedControl)makeSegmentedControl { var segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 24.0)]; @@ -572,247 +863,325 @@ [segmentedControl setLabel:@"1" forSegment:2]; [segmentedControl setTag:3 forSegment:2]; - //various colors - var centerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-center.png" size:CGSizeMake(1.0, 24.0)]), - dividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-divider.png" size:CGSizeMake(1.0, 24.0)]), - centerHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]), - dividerHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-divider.png" size:CGSizeMake(1.0, 24.0)]), - leftHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]), - rightHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]), - inactiveCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)]), - inactiveDividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-disabled-divider.png" size:CGSizeMake(1.0, 24.0)]), - inactiveLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)]), - inactiveRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)]), - inactiveHighlightedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-disabled-center.png" size:CGSizeMake(1.0, 24.0)]), - inactiveHighlightedDividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-disabled-divider.png" size:CGSizeMake(1.0, 24.0)]), - inactiveHighlightedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-disabled-left.png" size:CGSizeMake(4.0, 24.0)]), - inactiveHighlightedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-disabled-right.png" size:CGSizeMake(4.0, 24.0)]), - leftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-left.png" size:CGSizeMake(4.0, 24.0)]), - rightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-right.png" size:CGSizeMake(4.0, 24.0)]), - pushedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-center.png" size:CGSizeMake(1.0, 24.0)]), - pushedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-left.png" size:CGSizeMake(4.0, 24.0)]), - pushedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-right.png" size:CGSizeMake(4.0, 24.0)]); - pushedHighlightedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]), - pushedHighlightedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]), - pushedHighlightedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]); - - [segmentedControl setValue:centerBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:centerHighlightedBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:pushedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateHighlighted]; - [segmentedControl setValue:pushedHighlightedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; - - [segmentedControl setValue:dividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveDividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedDividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:dividerHighlightedBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:dividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateHighlighted]; - - [segmentedControl setValue:rightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:rightHighlightedBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:pushedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateHighlighted]; - [segmentedControl setValue:pushedHighlightedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; - - [segmentedControl setValue:leftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:leftHighlightedBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:pushedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateHighlighted]; - [segmentedControl setValue:pushedHighlightedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; - - [segmentedControl setValue:CGInsetMake(0.0, 4.0, 0.0, 4.0) forThemeAttribute:@"content-inset" inState:CPThemeStateNormal]; - - [segmentedControl setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"bezel-inset" inState:CPThemeStateNormal]; - - [segmentedControl setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font"]; - [segmentedControl setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; - [segmentedControl setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color"]; - [segmentedControl setValue:CGSizeMake(0.0, 1.0) forThemeAttribute:@"text-shadow-offset"]; - [segmentedControl setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; - - [segmentedControl setValue:1.0 forThemeAttribute:@"divider-thickness"]; - [segmentedControl setValue:24.0 forThemeAttribute:@"default-height"]; - return segmentedControl; +}; + ++ (CPSegmentedControl)themedSegmentedControl +{ + var segmentedControl = [self makeSegmentedControl], + + centerBezelColor = PatternColor("segmented-control-bezel-center.png", 1.0, 24.0), + dividerBezelColor = PatternColor("segmented-control-bezel-divider.png", 1.0, 24.0), + centerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-center.png", 1.0, 24.0), + dividerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-divider.png", 1.0, 24.0), + leftHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-left.png", 4.0, 24.0), + rightHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-right.png", 4.0, 24.0), + inactiveCenterBezelColor = PatternColor("segmented-control-bezel-disabled-center.png", 1.0, 24.0), + inactiveDividerBezelColor = PatternColor("segmented-control-bezel-disabled-divider.png", 1.0, 24.0), + inactiveLeftBezelColor = PatternColor("segmented-control-bezel-disabled-left.png", 4.0, 24.0), + inactiveRightBezelColor = PatternColor("segmented-control-bezel-disabled-right.png", 4.0, 24.0), + inactiveHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-center.png", 1.0, 24.0), + inactiveHighlightedDividerBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-divider.png", 1.0, 24.0), + inactiveHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-left.png", 4.0, 24.0), + inactiveHighlightedRightBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-right.png", 4.0, 24.0), + leftBezelColor = PatternColor("segmented-control-bezel-left.png", 4.0, 24.0), + rightBezelColor = PatternColor("segmented-control-bezel-right.png", 4.0, 24.0), + pushedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-center.png", 1.0, 24.0), + pushedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-left.png", 4.0, 24.0), + pushedRightBezelColor = PatternColor("segmented-control-bezel-pushed-right.png", 4.0, 24.0); + pushedHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-center.png", 1.0, 24.0), + pushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 24.0), + pushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 24.0); + + themedSegmentedControlValues = + [ + [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], + [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], + [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"center-segment-bezel-color", centerHighlightedBezelColor, CPThemeStateSelected], + [@"center-segment-bezel-color", pushedCenterBezelColor, CPThemeStateHighlighted], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + + [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], + [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], + [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"divider-bezel-color", dividerHighlightedBezelColor, CPThemeStateSelected], + + [@"left-segment-bezel-color", leftBezelColor, CPThemeStateNormal], + [@"left-segment-bezel-color", inactiveLeftBezelColor, CPThemeStateDisabled], + [@"left-segment-bezel-color", inactiveHighlightedLeftBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"left-segment-bezel-color", leftHighlightedBezelColor, CPThemeStateSelected], + [@"left-segment-bezel-color", pushedLeftBezelColor, CPThemeStateHighlighted], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + + [@"right-segment-bezel-color", rightBezelColor, CPThemeStateNormal], + [@"right-segment-bezel-color", inactiveRightBezelColor, CPThemeStateDisabled], + [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"right-segment-bezel-color", rightHighlightedBezelColor, CPThemeStateSelected], + [@"right-segment-bezel-color", pushedRightBezelColor, CPThemeStateHighlighted], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + + [@"content-inset", CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], + + [@"font", [CPFont boldSystemFontOfSize:12.0]], + [@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateDisabled], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled], + [@"text-shadow-offset", CGSizeMake(0.0, 1.0)], + [@"line-break-mode", CPLineBreakByTruncatingTail], + + [@"divider-thickness", 1.0], + [@"default-height", 24.0] + ]; + + SetThemeValues(segmentedControl, themedSegmentedControlValues); + + return segmentedControl; +} + +var themedHorizontalSliderValues = nil; + ++ (CPSlider)makeHorizontalSlider +{ + return [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 24.0)]; } + (CPSlider)themedHorizontalSlider { - var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 24.0)], - trackColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"horizontal-track-left.png" size:CGSizeMake(4.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"horizontal-track-center.png" size:CGSizeMake(1.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"horizontal-track-right.png" size:CGSizeMake(4.0, 5.0)] - ] - isVertical:NO]], - - trackDisabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"horizontal-track-disabled-left.png" size:CGSizeMake(4.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"horizontal-track-disabled-center.png" size:CGSizeMake(1.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"horizontal-track-disabled-right.png" size:CGSizeMake(4.0, 5.0)] - ] - isVertical:NO]]; - - [slider setValue:5.0 forThemeAttribute:@"track-width"]; - [slider setValue:trackColor forThemeAttribute:@"track-color"]; - [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled]; + var slider = [self makeHorizontalSlider], - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"knob.png" size:CGSizeMake(23.0, 24.0)]], - knobHighlightedColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"knob-highlighted.png" size:CGSizeMake(23.0, 24.0)]], - knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"knob-disabled.png" size:CGSizeMake(23.0, 24.0)]]; - - [slider setValue:CGSizeMake(23.0, 24.0) forThemeAttribute:@"knob-size"]; - [slider setValue:knobColor forThemeAttribute:@"knob-color"]; - [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateHighlighted]; - [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; + trackColor = PatternColor( + [ + ["horizontal-track-left.png", 4.0, 5.0], + ["horizontal-track-center.png", 1.0, 5.0], + ["horizontal-track-right.png", 4.0, 5.0] + ], + PatternIsHorizontal), + + trackDisabledColor = PatternColor( + [ + ["horizontal-track-disabled-left.png", 4.0, 5.0], + ["horizontal-track-disabled-center.png", 1.0, 5.0], + ["horizontal-track-disabled-right.png", 4.0, 5.0] + ], + PatternIsHorizontal), + + knobColor = PatternColor("knob.png", 23.0, 24.0), + knobHighlightedColor = PatternColor("knob-highlighted.png", 23.0, 24.0), + knobDisabledColor = PatternColor("knob-disabled.png", 23.0, 24.0); + + themedHorizontalSliderValues = + [ + [@"track-width", 5.0], + [@"track-color", trackColor], + [@"track-color", trackDisabledColor, CPThemeStateDisabled], + + [@"knob-size", CGSizeMake(23.0, 24.0)], + [@"knob-color", knobColor], + [@"knob-color", knobHighlightedColor, CPThemeStateHighlighted], + [@"knob-color", knobDisabledColor, CPThemeStateDisabled] + ]; + + SetThemeValues(slider, themedHorizontalSliderValues); return slider; } +var themedVerticalSliderValues = nil; + ++ (CPSlider)makeVerticalSlider +{ + return [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 24.0, 50.0)]; +} + + (CPSlider)themedVerticalSlider { - var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 24.0, 50.0)], - trackColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"vertical-track-top.png" size:CGSizeMake(5.0, 6.0)], - [_CPCibCustomResource imageResourceWithName:"vertical-track-center.png" size:CGSizeMake(5.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"vertical-track-bottom.png" size:CGSizeMake(5.0, 4.0)] - ] - isVertical:YES]], - trackDisabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"vertical-track-disabled-top.png" size:CGSizeMake(5.0, 6.0)], - [_CPCibCustomResource imageResourceWithName:"vertical-track-disabled-center.png" size:CGSizeMake(5.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"vertical-track-disabled-bottom.png" size:CGSizeMake(5.0, 4.0)] - ] - isVertical:YES]]; - - [slider setValue:5.0 forThemeAttribute:@"track-width"]; - [slider setValue:trackColor forThemeAttribute:@"track-color" inState:CPThemeStateVertical]; - [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled]; + var slider = [self makeVerticalSlider], - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"knob.png" size:CGSizeMake(23.0, 24.0)]], - knobHighlightedColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"knob-highlighted.png" size:CGSizeMake(23.0, 24.0)]], - knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"knob-disabled.png" size:CGSizeMake(23.0, 24.0)]]; + trackColor = PatternColor( + [ + ["vertical-track-top.png", 5.0, 6.0], + ["vertical-track-center.png", 5.0, 1.0], + ["vertical-track-bottom.png", 5.0, 4.0] + ], + PatternIsVertical), + + trackDisabledColor = PatternColor( + [ + ["vertical-track-disabled-top.png", 5.0, 6.0], + ["vertical-track-disabled-center.png", 5.0, 1.0], + ["vertical-track-disabled-bottom.png", 5.0, 4.0] + ], + PatternIsVertical), + + knobColor = PatternColor("knob.png", 23.0, 24.0), + knobHighlightedColor = PatternColor("knob-highlighted.png", 23.0, 24.0), + knobDisabledColor = PatternColor("knob-disabled.png", 23.0, 24.0); + + themedVerticalSliderValues = + [ + [@"track-width", 5.0], + [@"track-color", trackColor, CPThemeStateVertical], + [@"track-color", trackDisabledColor, CPThemeStateDisabled], + + [@"knob-size", CGSizeMake(23.0, 24.0)], + [@"knob-color", knobColor], + [@"knob-color", knobHighlightedColor, CPThemeStateHighlighted], + [@"knob-color", knobDisabledColor, CPThemeStateDisabled] + ] + + SetThemeValues(slider, themedVerticalSliderValues); + + return slider; +} - [slider setValue:CGSizeMake(23.0, 24.0) forThemeAttribute:@"knob-size"]; - [slider setValue:knobColor forThemeAttribute:@"knob-color"]; - [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateHighlighted]; - [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; +var themedCircularSliderValues = nil; + ++ (CPSlider)makeCircularSlider +{ + var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 34.0, 34.0)]; + + [slider setSliderType:CPCircularSlider]; return slider; } + (CPSlider)themedCircularSlider { - var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 34.0, 34.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"slider-circular-bezel.png" size:CGSizeMake(34.0, 34.0)]), - trackDisabledColor = PatternColor([_CPCibCustomResource imageResourceWithName:"slider-circular-disabled-bezel.png" size:CGSizeMake(34.0, 34.0)]); - - [slider setSliderType:CPCircularSlider]; - [slider setValue:trackColor forThemeAttribute:@"track-color" inState:CPThemeStateCircular]; - [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled|CPThemeStateCircular]; - - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"slider-circular-knob.png" size:CGSizeMake(5.0, 5.0)]], - knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"slider-circular-disabled-knob.png" size:CGSizeMake(5.0, 5.0)]], + var slider = [self makeCircularSlider], + + trackColor = PatternColor("slider-circular-bezel.png", 34.0, 34.0), + trackDisabledColor = PatternColor("slider-circular-disabled-bezel.png", 34.0, 34.0) + knobColor = PatternColor("slider-circular-knob.png", 5.0, 5.0), + knobDisabledColor = PatternColor("slider-circular-disabled-knob.png", 5.0, 5.0), knobHighlightedColor = knobColor; + + themedCircularSliderValues = + [ + [@"track-color", trackColor, CPThemeStateCircular], + [@"track-color", trackDisabledColor, CPThemeStateCircular | CPThemeStateDisabled], - [slider setValue:CGSizeMake(5.0, 5.0) forThemeAttribute:@"knob-size" inState:CPThemeStateCircular]; - [slider setValue:knobColor forThemeAttribute:@"knob-color" inState:CPThemeStateCircular]; - [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled|CPThemeStateCircular]; - [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateCircular|CPThemeStateHighlighted]; + [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], + [@"knob-color", knobColor, CPThemeStateCircular], + [@"knob-color", knobHighlightedColor, CPThemeStateCircular | CPThemeStateHighlighted], + [@"knob-color", knobDisabledColor, CPThemeStateCircular | CPThemeStateDisabled] + ]; + SetThemeValues(slider, themedCircularSliderValues); + return slider; } -+ (CPButtonBar)themedButtonBar +var themedButtonBarValues = nil; + ++ (CPButtonBar)makeButtonBar { - var buttonBar = [[CPButtonBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 147.0, 26.0)], - color = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"buttonbar-bezel.png" size:CGSizeMake(1.0, 26.0)]]; - + var buttonBar = [[CPButtonBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 147.0, 26.0)]; + [buttonBar setHasResizeControl:YES]; - - [buttonBar setValue:color forThemeAttribute:@"bezel-color"]; - - var resizeColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"buttonbar-resize-control.png" size:CGSizeMake(5.0, 10.0)]]; - - [buttonBar setValue:CGSizeMake(5.0, 10.0) forThemeAttribute:@"resize-control-size"]; - [buttonBar setValue:CGInsetMake(9.0, 4.0, 7.0, 4.0) forThemeAttribute:@"resize-control-inset"]; - [buttonBar setValue:resizeColor forThemeAttribute:@"resize-control-color"]; - - var buttonBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-left.png" size:CGSizeMake(2.0, 25.0)], - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-center.png" size:CGSizeMake(1.0, 25.0)], - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-right.png" size:CGSizeMake(2.0, 25.0)] - ] - isVertical:NO]], - - buttonBezelHighlightedColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-highlighted-left.png" size:CGSizeMake(2.0, 25.0)], - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 25.0)], - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-highlighted-right.png" size:CGSizeMake(2.0, 25.0)] - ] - isVertical:NO]], - - buttonBezelDisabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-disabled-left.png" size:CGSizeMake(2.0, 25.0)], - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-disabled-center.png" size:CGSizeMake(1.0, 25.0)], - [_CPCibCustomResource imageResourceWithName:"buttonbar-button-bezel-disabled-right.png" size:CGSizeMake(2.0, 25.0)] - ] - isVertical:NO]]; - - [buttonBar setValue:buttonBezelColor forThemeAttribute:@"button-bezel-color"]; - [buttonBar setValue:buttonBezelHighlightedColor forThemeAttribute:@"button-bezel-color" inState:CPThemeStateHighlighted]; - [buttonBar setValue:buttonBezelDisabledColor forThemeAttribute:@"button-bezel-color" inState:CPThemeStateDisabled]; - [buttonBar setValue:[CPColor blackColor] forThemeAttribute:@"button-text-color"]; - + var popup = [CPButtonBar actionPopupButton]; [popup addItemWithTitle:"Item 1"]; [popup addItemWithTitle:"Item 2"]; [buttonBar setButtons:[[CPButtonBar plusButton], [CPButtonBar minusButton], popup]]; - + return buttonBar; } ++ (CPButtonBar)themedButtonBar +{ + var buttonBar = [self makeButtonBar], + + color = PatternColor("buttonbar-bezel.png", 1.0, 26.0), + resizeColor = PatternColor("buttonbar-resize-control.png", 5.0, 10.0), + buttonBezelColor = PatternColor( + [ + ["buttonbar-button-bezel-left.png", 2.0, 25.0], + ["buttonbar-button-bezel-center.png", 1.0, 25.0], + ["buttonbar-button-bezel-right.png", 2.0, 25.0] + ], + PatternIsHorizontal), + + buttonBezelHighlightedColor = PatternColor( + [ + ["buttonbar-button-bezel-highlighted-left.png", 2.0, 25.0], + ["buttonbar-button-bezel-highlighted-center.png", 1.0, 25.0], + ["buttonbar-button-bezel-highlighted-right.png", 2.0, 25.0] + ], + PatternIsHorizontal), + + buttonBezelDisabledColor = PatternColor( + [ + ["buttonbar-button-bezel-disabled-left.png", 2.0, 25.0], + ["buttonbar-button-bezel-disabled-center.png", 1.0, 25.0], + ["buttonbar-button-bezel-disabled-right.png", 2.0, 25.0] + ], + PatternIsHorizontal); + + themedButtonBarValues = + [ + [@"bezel-color", color], + + [@"resize-control-size", CGSizeMake(5.0, 10.0)], + [@"resize-control-inset", CGInsetMake(9.0, 4.0, 7.0, 4.0)], + [@"resize-control-color", resizeColor], + + [@"button-bezel-color", buttonBezelColor], + [@"button-bezel-color", buttonBezelHighlightedColor, CPThemeStateHighlighted], + [@"button-bezel-color", buttonBezelDisabledColor, CPThemeStateDisabled], + [@"button-text-color", [CPColor blackColor]] + ]; + + SetThemeValues(buttonBar, themedButtonBarValues); + + return buttonBar; +} + ++ (_CPTableColumnHeaderView)makeColumnHeader +{ + var header = [[_CPTableColumnHeaderView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0)]; + + [header setStringValue:@"Table Header"]; + + return header; +} + + (_CPTableColumnHeaderView)themedColumnHeader { - var header = [[_CPTableColumnHeaderView alloc] initWithFrame:CGRectMake(0,0,50,24)], - highlightedPressed = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"tableview-headerview-highlighted-pressed.png" size:CGSizeMake(1.0, 23.0)]], - highlighted = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"tableview-headerview-highlighted.png" size:CGSizeMake(1.0, 23.0)]], - pressed = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"tableview-headerview-pressed.png" size:CGSizeMake(1.0, 23.0)]], - normal = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"tableview-headerview.png" size:CGSizeMake(1.0, 23.0)]]; - - - [header setStringValue:@"Table Header"]; - - [header setValue:normal forThemeAttribute:@"background-color"]; - [header setValue:CGInsetMake(0, 5, 0, 5) forThemeAttribute:@"text-inset"]; - [header setValue:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; - [header setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"text-font"]; - [header setValue:[CPColor whiteColor] forThemeAttribute:@"text-shadow-color"]; - [header setValue:CGSizeMake(0,1) forThemeAttribute:@"text-shadow-offset"]; - [header setValue:CPLeftTextAlignment forThemeAttribute:@"text-alignment"]; - - [header setValue:pressed forThemeAttribute:@"background-color" inState:CPThemeStateHighlighted]; - [header setValue:highlighted forThemeAttribute:@"background-color" inState:CPThemeStateSelected]; - [header setValue:highlightedPressed forThemeAttribute:@"background-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; + var header = [self makeColumnHeader], + highlightedPressed = PatternColor("tableview-headerview-highlighted-pressed.png", 1.0, 23.0), + highlighted = PatternColor("tableview-headerview-highlighted.png", 1.0, 23.0), + pressed = PatternColor("tableview-headerview-pressed.png", 1.0, 23.0), + normal = PatternColor("tableview-headerview.png", 1.0, 23.0), + + themedColumnHeaderValues = + [ + [@"background-color", normal], + + [@"text-inset", CGInsetMake(0, 5, 0, 5)], + [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0]], + [@"text-font", [CPFont boldSystemFontOfSize:12.0]], + [@"text-shadow-color", [CPColor whiteColor]], + [@"text-shadow-offset", CGSizeMake(0.0, 1.0)], + [@"text-alignment", CPLeftTextAlignment], + + [@"background-color", pressed, CPThemeStateHighlighted], + [@"background-color", highlighted, CPThemeStateSelected], + [@"background-color", highlightedPressed, CPThemeStateHighlighted | CPThemeStateSelected] + ]; + SetThemeValues(header, themedColumnHeaderValues); + return header; } + (CPTableHeaderView)themedTableHeaderRow { - var header = [[CPTableHeaderView alloc] initWithFrame:CGRectMake(0,0,50,24)], - normal = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"tableview-headerview.png" size:CGSizeMake(1.0, 23.0)]]; + var header = [[CPTableHeaderView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0)], + normal = PatternColor("tableview-headerview.png", 1.0, 23.0); [header setValue:normal forThemeAttribute:@"background-color"]; @@ -821,8 +1190,9 @@ + (_CPCornerView)themedCornerview { - var corner = [[_CPCornerView alloc] initWithFrame:CGRectMake(0,0,25, 23)], - normal = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"tableview-headerview.png" size:CGSizeMake(1.0, 23.0)]]; + var scrollerWidth = [CPScroller scrollerWidth], + corner = [[_CPCornerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 25.0, scrollerWidth)], + normal = PatternColor("tableview-headerview.png", 1.0, scrollerWidth); [corner setValue:normal forThemeAttribute:"background-color"]; @@ -833,27 +1203,31 @@ { // This is a bit more complicated than the rest because we actually set theme values for several different (table related) controls in this method - var tableview = [[CPTableView alloc] initWithFrame:CGRectMake(0,0,200,200)]; - - // Now theme the tableview - var sortImage = [_CPCibCustomResource imageResourceWithName:"tableview-headerview-ascending.png" size:CGSizeMake(9.0, 8.0)], - sortImageReversed = [_CPCibCustomResource imageResourceWithName:"tableview-headerview-descending.png" size:CGSizeMake(9.0, 8.0)], + var tableview = [[CPTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 150.0, 150.0)], + + sortImage = PatternColor("tableview-headerview-ascending.png", 9.0, 8.0), + sortImageReversed = PatternColor("tableview-headerview-descending.png", 9.0, 8.0), alternatingRowColors = [[CPColor whiteColor], [CPColor colorWithRed:245.0 / 255.0 green:249.0 / 255.0 blue:252.0 / 255.0 alpha:1.0]], gridColor = [CPColor colorWithHexString:@"dce0e2"], selectionColor = [CPColor colorWithHexString:@"5f83b9"], - sourceListSelectionColor = [CPDictionary dictionaryWithObjects: [ CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), [89.0/255.0, 153.0/255.0, 209.0/255.0,1.0, 33.0/255.0, 94.0/255.0, 208.0/255.0,1.0], [0,1], 2), + sourceListSelectionColor = [CPDictionary dictionaryWithObjects: [CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), [89.0/255.0, 153.0/255.0, 209.0/255.0,1.0, 33.0/255.0, 94.0/255.0, 208.0/255.0,1.0], [0,1], 2), [CPColor colorWithCalibratedRed:(61.0/255.0) green:(123.0/255.0) blue:(218.0/255.0) alpha:1.0], [CPColor colorWithCalibratedRed:(31.0/255.0) green:(92.0/255.0) blue:(207.0/255.0) alpha:1.0] ] - forKeys: [CPSourceListGradient, CPSourceListTopLineColor, CPSourceListBottomLineColor]]; + forKeys: [CPSourceListGradient, CPSourceListTopLineColor, CPSourceListBottomLineColor]], + + themedTableViewValues = + [ + [@"alternating-row-colors", alternatingRowColors], + [@"grid-color", gridColor], + [@"highlighted-grid-color", [CPColor whiteColor]], + [@"selection-color", selectionColor], + [@"sourcelist-selection-color", sourceListSelectionColor], + [@"sort-image", sortImage], + [@"sort-image-reversed", sortImageReversed] + ]; - [tableview setValue:alternatingRowColors forThemeAttribute:"alternating-row-colors"]; - [tableview setValue:gridColor forThemeAttribute:"grid-color"]; - [tableview setValue:[CPColor whiteColor] forThemeAttribute:"highlighted-grid-color"]; - [tableview setValue:selectionColor forThemeAttribute:"selection-color"]; - [tableview setValue:sourceListSelectionColor forThemeAttribute:"sourcelist-selection-color"]; - [tableview setValue:sortImage forThemeAttribute:"sort-image"]; - [tableview setValue:sortImageReversed forThemeAttribute:"sort-image-reversed"]; + SetThemeValues(tableview, themedTableViewValues); return tableview; } @@ -887,166 +1261,20 @@ + (CPPopUpButton)themedSegmentedControl { - var segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 24.0)]; + var segmentedControl = [AristoThemeDescriptor makeSegmentedControl]; - [segmentedControl setTrackingMode:CPSegmentSwitchTrackingSelectAny]; - [segmentedControl setSegmentCount:3]; - - [segmentedControl setWidth:40.0 forSegment:0]; - [segmentedControl setLabel:@"foo" forSegment:0]; - [segmentedControl setTag:1 forSegment:0]; - - [segmentedControl setWidth:60.0 forSegment:1]; - [segmentedControl setLabel:@"bar" forSegment:1]; - [segmentedControl setTag:2 forSegment:1]; - - [segmentedControl setWidth:35.0 forSegment:2]; - [segmentedControl setLabel:@"1" forSegment:2]; - [segmentedControl setTag:3 forSegment:2]; - - //various colors - var centerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-center.png" size:CGSizeMake(1.0, 24.0)]), - dividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-divider.png" size:CGSizeMake(1.0, 24.0)]), - centerHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]), - dividerHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-divider.png" size:CGSizeMake(1.0, 24.0)]), - leftHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]), - rightHighlightedBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]), - inactiveCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)]), - inactiveDividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-divider.png" size:CGSizeMake(1.0, 24.0)]), - inactiveLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)]), - inactiveRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)]), - inactiveHighlightedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-center.png" size:CGSizeMake(1.0, 24.0)]), - inactiveHighlightedDividerBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-divider.png" size:CGSizeMake(1.0, 24.0)]), - inactiveHighlightedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-left.png" size:CGSizeMake(4.0, 24.0)]), - inactiveHighlightedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-highlighted-disabled-right.png" size:CGSizeMake(4.0, 24.0)]), - leftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-left.png" size:CGSizeMake(4.0, 24.0)]), - rightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-right.png" size:CGSizeMake(4.0, 24.0)]), - pushedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-center.png" size:CGSizeMake(1.0, 24.0)]), - pushedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-left.png" size:CGSizeMake(4.0, 24.0)]), - pushedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-right.png" size:CGSizeMake(4.0, 24.0)]); - pushedHighlightedCenterBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]), - pushedHighlightedLeftBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]), - pushedHighlightedRightBezelColor = PatternColor([_CPCibCustomResource imageResourceWithName:@"HUD/segmented-control-bezel-pushed-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]); - - [segmentedControl setValue:centerBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:centerHighlightedBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:pushedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateHighlighted]; - [segmentedControl setValue:pushedHighlightedCenterBezelColor forThemeAttribute:@"center-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; - - [segmentedControl setValue:dividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveDividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedDividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:dividerHighlightedBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:dividerBezelColor forThemeAttribute:@"divider-bezel-color" inState:CPThemeStateHighlighted]; - - [segmentedControl setValue:rightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:rightHighlightedBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:pushedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateHighlighted]; - [segmentedControl setValue:pushedHighlightedRightBezelColor forThemeAttribute:@"right-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; - - [segmentedControl setValue:leftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateNormal]; - [segmentedControl setValue:inactiveLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateDisabled]; - [segmentedControl setValue:inactiveHighlightedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateSelected|CPThemeStateDisabled]; - [segmentedControl setValue:leftHighlightedBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateSelected]; - [segmentedControl setValue:pushedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateHighlighted]; - [segmentedControl setValue:pushedHighlightedLeftBezelColor forThemeAttribute:@"left-segment-bezel-color" inState:CPThemeStateHighlighted|CPThemeStateSelected]; - - [segmentedControl setValue:CGInsetMake(0.0, 4.0, 0.0, 4.0) forThemeAttribute:@"content-inset" inState:CPThemeStateNormal]; - - [segmentedControl setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"bezel-inset" inState:CPThemeStateNormal]; - - [segmentedControl setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font"]; - [segmentedControl setValue:[CPColor colorWithCalibratedWhite:255.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; - [segmentedControl setValue:[CPColor colorWithCalibratedWhite:0.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color"]; - [segmentedControl setValue:CGSizeMake(-1.0, -1.0) forThemeAttribute:@"text-shadow-offset"]; - [segmentedControl setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; - - [segmentedControl setValue:1.0 forThemeAttribute:@"divider-thickness"]; - [segmentedControl setValue:24.0 forThemeAttribute:@"default-height"]; + SetHUDThemeValues(segmentedControl, themedSegmentedControlValues); return segmentedControl; } +var + (CPButton)button { - var button = [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)], + var button = [AristoThemeDescriptor makeButton]; - bezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - highlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - defaultBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - defaultHighlightedBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - defaultDisabledBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/default-button-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]], - - disabledBezelColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-disabled-left.png" size:CGSizeMake(4.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-disabled-center.png" size:CGSizeMake(1.0, 24.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/button-bezel-disabled-right.png" size:CGSizeMake(4.0, 24.0)] - ] - isVertical:NO]]; - - [button setValue:[CPFont boldSystemFontOfSize:12.0] forThemeAttribute:@"font" inState:CPThemeStateBordered]; - - [button setValue:[CPColor colorWithCalibratedWhite:255.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-color"]; - [button setValue:[CPColor colorWithCalibratedWhite:0.0 / 255.0 alpha:1.0] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateBordered]; - [button setValue:[CPColor colorWithCalibratedWhite:0.0 / 255.0 alpha:0.6] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - [button setValue:CGSizeMake(-1.0,-1.0) forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateBordered]; - [button setValue:CPLineBreakByTruncatingTail forThemeAttribute:@"line-break-mode"]; + SetHUDThemeValues(button, themedButtonValues); - [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:[CPColor colorWithCalibratedWhite:0.97 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled]; - [button setValue:disabledBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDisabled]; - [button setValue:defaultDisabledBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDefault|CPThemeStateDisabled]; - - [button setValue:defaultBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateDefault]; - [button setValue:defaultHighlightedBezelColor forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered|CPThemeStateHighlighted|CPThemeStateDefault]; - [button setValue:[CPColor colorWithCalibratedRed:250.0/255.0 green:250.0/255.0 blue:250.0/255.0 alpha:1.0] forThemeAttribute:@"text-color" inState:CPThemeStateDefault]; - [button setValue:[CPColor colorWithCalibratedRed:250.0/255.0 green:250.0/255.0 blue:250.0/255.0 alpha:0.6] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled|CPThemeStateDefault]; - - [button setValue:CGSizeMake(0.0, 24.0) forThemeAttribute:@"min-size"]; - [button setValue:CGSizeMake(-1.0, 24.0) forThemeAttribute:@"max-size"]; - return button; } @@ -1071,209 +1299,55 @@ + (CPScroller)themedVerticalScroller { - var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 15.0, 170.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-track.png" size:CGSizeMake(15.0, 1.0)]), - disabledTrackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-track-disabled.png" size:CGSizeMake(15.0, 1.0)]); - - [scroller setValue:21.0 forThemeAttribute:@"minimum-knob-length" inState:CPThemeStateVertical]; - [scroller setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"knob-inset" inState:CPThemeStateVertical]; - [scroller setValue:CGInsetMake(-9.0, 0.0, -9.0, 0.0) forThemeAttribute:@"track-inset" inState:CPThemeStateVertical]; - - [scroller setValue:trackColor forThemeAttribute:@"knob-slot-color" inState:CPThemeStateVertical]; - [scroller setValue:disabledTrackColor forThemeAttribute:@"knob-slot-color" inState:CPThemeStateVertical | CPThemeStateDisabled]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-up-arrow.png" size:CGSizeMake(15.0, 24.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-up-arrow-highlighted.png" size:CGSizeMake(15.0, 24.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-up-arrow-disabled.png" size:CGSizeMake(15.0, 24.0)]); - - [scroller setValue:CGSizeMake(15.0, 24.0) forThemeAttribute:@"decrement-line-size" inState:CPThemeStateVertical]; - [scroller setValue:arrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateVertical]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateVertical | CPThemeStateHighlighted], - [scroller setValue:disabledArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateVertical | CPThemeStateDisabled]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-down-arrow.png" size:CGSizeMake(15.0, 24.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-down-arrow-highlighted.png" size:CGSizeMake(15.0, 24.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-down-arrow-disabled.png" size:CGSizeMake(15.0, 24.0)]); - - [scroller setValue:CGSizeMake(15.0, 24.0) forThemeAttribute:@"increment-line-size" inState:CPThemeStateVertical]; - [scroller setValue:arrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateVertical]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateVertical | CPThemeStateHighlighted]; - [scroller setValue:disabledArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateVertical | CPThemeStateDisabled]; + var scroller = [AristoThemeDescriptor makeVerticalScroller], + overrides = + [ + [@"knob-color", nil, CPThemeStateVertical | CPThemeStateDisabled] + ]; - var knobColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-knob-top.png" size:CGSizeMake(15.0, 10.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-knob-center.png" size:CGSizeMake(15.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-knob-bottom.png" size:CGSizeMake(15.0, 10.0)] - ] - isVertical:YES]); - - /*var knobDisabledColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-knob-disabled-top.png" size:CGSizeMake(15.0, 10.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-knob-disabled-center.png" size:CGSizeMake(15.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-vertical-knob-disabled-bottom.png" size:CGSizeMake(15.0, 10.0)] - ] - isVertical:YES]);*/ + SetHUDThemeValues(scroller, themedVerticalScrollerValues, overrides); - [scroller setValue:knobColor forThemeAttribute:@"knob-color" inState:CPThemeStateVertical]; - //[scroller setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateVertical|CPThemeStateDisabled]; - - [scroller setFloatValue:0.1]; - [scroller setKnobProportion:0.5]; - return scroller; } + (CPScroller)themedHorizontalScroller { - var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 170.0, 15.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-track.png" size:CGSizeMake(1.0, 15.0)]), - disabledTrackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-track-disabled.png" size:CGSizeMake(1.0, 15.0)]); - - [scroller setValue:21.0 forThemeAttribute:@"minimum-knob-length"]; - [scroller setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemeAttribute:@"knob-inset"]; - [scroller setValue:CGInsetMake(0.0, -7.0, 0.0, -9.0) forThemeAttribute:@"track-inset"]; - - [scroller setValue:trackColor forThemeAttribute:@"knob-slot-color"]; - [scroller setValue:disabledTrackColor forThemeAttribute:@"knob-slot-color" inState:CPThemeStateDisabled]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-left-arrow.png" size:CGSizeMake(24.0, 15.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-left-arrow-highlighted.png" size:CGSizeMake(24.0, 15.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-left-arrow-disabled.png" size:CGSizeMake(24.0, 15.0)]); - - [scroller setValue:CGSizeMake(24.0, 15.0) forThemeAttribute:@"decrement-line-size"]; - [scroller setValue:arrowColor forThemeAttribute:@"decrement-line-color"]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateHighlighted], - [scroller setValue:disabledArrowColor forThemeAttribute:@"decrement-line-color" inState:CPThemeStateDisabled]; - - var arrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-right-arrow.png" size:CGSizeMake(24.0, 15.0)]), - highlightedArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-right-arrow-highlighted.png" size:CGSizeMake(24.0, 15.0)]), - disabledArrowColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/scroller-right-arrow-disabled.png" size:CGSizeMake(24.0, 15.0)]); - - [scroller setValue:CGSizeMake(24.0, 15.0) forThemeAttribute:@"increment-line-size"]; - [scroller setValue:arrowColor forThemeAttribute:@"increment-line-color"]; - [scroller setValue:highlightedArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateHighlighted]; - [scroller setValue:disabledArrowColor forThemeAttribute:@"increment-line-color" inState:CPThemeStateDisabled]; + var scroller = [AristoThemeDescriptor makeHorizontalScroller], + overrides = + [ + [@"knob-color", nil, CPThemeStateDisabled] + ]; - var knobColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-knob-left.png" size:CGSizeMake(10.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-knob-center.png" size:CGSizeMake(1.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-knob-right.png" size:CGSizeMake(10.0, 15.0)] - ] - isVertical:NO]); - - /*var knobDisabledColor = PatternColor([[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-knob-disabled-left.png" size:CGSizeMake(10.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-knob-disabled-center.png" size:CGSizeMake(1.0, 15.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/scroller-horizontal-knob-disabled-right.png" size:CGSizeMake(10.0, 15.0)] - ] - isVertical:NO]);*/ - - [scroller setValue:knobColor forThemeAttribute:@"knob-color"]; - //[scroller setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; - - [scroller setFloatValue:0.1]; - [scroller setKnobProportion:0.5]; + SetHUDThemeValues(scroller, themedHorizontalScrollerValues, overrides); return scroller; } + (CPSlider)themedHorizontalSlider { - var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 24.0)], - trackColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-left.png" size:CGSizeMake(4.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-center.png" size:CGSizeMake(1.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-right.png" size:CGSizeMake(4.0, 5.0)] - ] - isVertical:NO]], - - trackDisabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-disabled-left.png" size:CGSizeMake(4.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-disabled-center.png" size:CGSizeMake(1.0, 5.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/horizontal-track-disabled-right.png" size:CGSizeMake(4.0, 5.0)] - ] - isVertical:NO]]; - - [slider setValue:5.0 forThemeAttribute:@"track-width"]; - [slider setValue:trackColor forThemeAttribute:@"track-color"]; - [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled]; + var slider = [AristoThemeDescriptor makeHorizontalSlider]; - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob.png" size:CGSizeMake(23.0, 24.0)]], - knobHighlightedColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-highlighted.png" size:CGSizeMake(23.0, 24.0)]], - knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-disabled.png" size:CGSizeMake(23.0, 24.0)]]; - - [slider setValue:CGSizeMake(23.0, 24.0) forThemeAttribute:@"knob-size"]; - [slider setValue:knobColor forThemeAttribute:@"knob-color"]; - [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateHighlighted]; - [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; + SetHUDThemeValues(slider, themedHorizontalSliderValues); return slider; } + (CPSlider)themedVerticalSlider { - var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 24.0, 50.0)], - trackColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-top.png" size:CGSizeMake(5.0, 6.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-center.png" size:CGSizeMake(5.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-bottom.png" size:CGSizeMake(5.0, 4.0)] - ] - isVertical:YES]], - trackDisabledColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-disabled-top.png" size:CGSizeMake(5.0, 6.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-disabled-center.png" size:CGSizeMake(5.0, 1.0)], - [_CPCibCustomResource imageResourceWithName:"HUD/vertical-track-disabled-bottom.png" size:CGSizeMake(5.0, 4.0)] - ] - isVertical:YES]]; - - [slider setValue:5.0 forThemeAttribute:@"track-width"]; - [slider setValue:trackColor forThemeAttribute:@"track-color" inState:CPThemeStateVertical]; - [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled]; + var slider = [AristoThemeDescriptor makeVerticalSlider]; - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob.png" size:CGSizeMake(23.0, 24.0)]], - knobHighlightedColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-highlighted.png" size:CGSizeMake(23.0, 24.0)]], - knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/knob-disabled.png" size:CGSizeMake(23.0, 24.0)]]; - - [slider setValue:CGSizeMake(23.0, 24.0) forThemeAttribute:@"knob-size"]; - [slider setValue:knobColor forThemeAttribute:@"knob-color"]; - [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateHighlighted]; - [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled]; + SetHUDThemeValues(slider, themedVerticalSliderValues); return slider; } + + (CPSlider)themedCircularSlider { - var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 34.0, 34.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/slider-circular-bezel.png" size:CGSizeMake(34.0, 34.0)]), - trackDisabledColor = PatternColor([_CPCibCustomResource imageResourceWithName:"HUD/slider-circular-disabled-bezel.png" size:CGSizeMake(34.0, 34.0)]); - - [slider setSliderType:CPCircularSlider]; - [slider setValue:trackColor forThemeAttribute:@"track-color" inState:CPThemeStateCircular]; - [slider setValue:trackDisabledColor forThemeAttribute:@"track-color" inState:CPThemeStateDisabled|CPThemeStateCircular]; - - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/slider-circular-knob.png" size:CGSizeMake(5.0, 5.0)]], - knobDisabledColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"HUD/slider-circular-disabled-knob.png" size:CGSizeMake(5.0, 5.0)]], - knobHighlightedColor = knobColor; - - [slider setValue:CGSizeMake(5.0, 5.0) forThemeAttribute:@"knob-size" inState:CPThemeStateCircular]; - [slider setValue:knobColor forThemeAttribute:@"knob-color" inState:CPThemeStateCircular]; - [slider setValue:knobDisabledColor forThemeAttribute:@"knob-color" inState:CPThemeStateDisabled|CPThemeStateCircular]; - [slider setValue:knobHighlightedColor forThemeAttribute:@"knob-color" inState:CPThemeStateCircular|CPThemeStateHighlighted]; - + var slider = [AristoThemeDescriptor makeCircularSlider]; + + SetHUDThemeValues(slider, themedCircularSliderValues); + return slider; } @end - -function PatternColor(anImage) -{ - return [CPColor colorWithPatternImage:anImage]; -} \ No newline at end of file diff --git a/AppKit/Themes/BlendKit/BKThemeDescriptor.j b/AppKit/Themes/BlendKit/BKThemeDescriptor.j index 4c4801ffb..b32680053 100644 --- a/AppKit/Themes/BlendKit/BKThemeDescriptor.j +++ b/AppKit/Themes/BlendKit/BKThemeDescriptor.j @@ -219,3 +219,132 @@ function BKLabelFromIdentifier(anIdentifier) return label; } + + +PatternIsVertical = YES, +PatternIsHorizontal = NO; + +/* + To create a simple color with a pattern image: + PatternColor(name, width, height) + + To create a color with a three part pattern image: + PatternColor(slices, orientation) + + where slices is an array of three [name, width, height] arrays, + and orientation is PatternIsVertical or PatternIsHorizontal. + + To create a color with a nine part pattern image: + PatternColor(slices); + + where slices is an array of nine [name, width, height] arrays. +*/ +function PatternColor() +{ + if (arguments.length < 3) + { + var slices = arguments[0], + imageSlices = []; + + for (var i = 0; i < slices.length; ++i) + { + var slice = slices[i]; + + imageSlices.push(slice ? [_CPCibCustomResource imageResourceWithName:slice[0] size:CGSizeMake(slice[1], slice[2])] : nil); + } + + if (arguments.length == 2) + return [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:imageSlices isVertical:arguments[1]]]; + else + return [CPColor colorWithPatternImage:[[CPNinePartImage alloc] initWithImageSlices:imageSlices]]; + } + else if (arguments.length == 3) + { + return [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:arguments[0] size:CGSizeMake(arguments[1], arguments[2])]]; + } + else + { + return nil; + } +} + +function SetThemeValues(object, values) +{ + for (var i = 0; i < values.length; ++i) + { + var attributeValueState = values[i], + attribute = attributeValueState[0], + value = attributeValueState[1], + state = attributeValueState[2]; + + if (state) + [object setValue:value forThemeAttribute:attribute inState:state]; + else + [object setValue:value forThemeAttribute:attribute]; + } +} + +function SetHUDThemeValues(object, values, overrides) +{ + for (var i = 0; i < values.length; ++i) + { + var attributeValueState = values[i], + attribute = attributeValueState[0], + value = attributeValueState[1], + state = attributeValueState[2]; + + if (attribute == "text-color" || attribute == "text-shadow-color") + { + var whiteValue = attribute == "text-color" ? 1.0 : 0.0, + alpha = (state && (state & CPThemeStateDisabled)) ? 0.6 : 1.0; + + value = [CPColor colorWithCalibratedWhite:whiteValue alpha:alpha]; + } + else if (typeof(value) === "object" && value.hasOwnProperty("isa") && [value isKindOfClass:CPColor]) + { + var pattern = [value patternImage]; + + if (pattern) + { + if ([pattern isThreePartImage] || [pattern isNinePartImage]) + { + var slices = [pattern imageSlices], + newSlices = []; + + for (var sliceIndex = 0; sliceIndex < slices.length; ++sliceIndex) + { + var slice = slices[sliceIndex], + filename = "HUD/" + [[slice filename] lastPathComponent], + size = [slice size]; + + newSlices.push([filename, size.width, size.height]); + } + + if ([pattern isThreePartImage]) + value = PatternColor(newSlices, [pattern isVertical]); + else + value = PatternColor(newSlices); + } + else + { + var filename = "HUD/" + [[pattern filename] lastPathComponent], + size = [pattern size]; + + value = PatternColor(filename, size.width, size.height); + } + } + } + else if (attribute == "text-shadow-offset") + { + value = CGSizeMake(-1.0, -1.0); + } + + if (state) + [object setValue:value forThemeAttribute:attribute inState:state]; + else + [object setValue:value forThemeAttribute:attribute]; + } + + if (overrides) + SetThemeValues(object, overrides); +}