Files
cappuccino/AppKit/Themes/Aristo/ThemeDescriptors.j
T

3807 lines
194 KiB
Plaintext
Executable File

/*
* ThemeDescriptors.j
* Aristo
*
* Created by Francisco Tolmasky.
* Copyright 2009, 280 North, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
@import <Foundation/CPObject.j>
@import <Foundation/CPGeometry.j>
@import <AppKit/CPAlert.j>
@import <AppKit/CPApplication.j>
@import <AppKit/CPBrowser.j>
@import <AppKit/CPButton.j>
@import <AppKit/CPButtonBar.j>
@import <AppKit/CPCheckBox.j>
@import <AppKit/CPComboBox.j>
@import <AppKit/CPColorWell.j>
@import <AppKit/CPDatePicker.j>
@import <AppKit/CPLevelIndicator.j>
@import <AppKit/CPPopUpButton.j>
@import <AppKit/CPProgressIndicator.j>
@import <AppKit/CPRadio.j>
@import <AppKit/CPRuleEditor.j>
@import <AppKit/CPScroller.j>
@import <AppKit/CPScrollView.j>
@import <AppKit/CPSegmentedControl.j>
@import <AppKit/CPSlider.j>
@import <AppKit/CPSplitView.j>
@import <AppKit/CPStepper.j>
@import <AppKit/CPTableHeaderView.j>
@import <AppKit/CPSearchField.j>
@import <AppKit/CPTextField.j>
@import <AppKit/CPTokenField.j>
@import <AppKit/CPWindow.j>
@import <AppKit/_CPToolTip.j>
@import <AppKit/CPPopover.j>
@import <BlendKit/BKThemeDescriptor.j>
var themedButtonValues = nil,
themedTextFieldValues = nil,
themedVerticalScrollerValues = nil,
themedHorizontalScrollerValues = nil,
themedSegmentedControlValues = nil,
themedHorizontalSliderValues = nil,
themedVerticalSliderValues = nil,
themedCircularSliderValues = nil,
themedAlertValues = nil,
themedProgressIndicator = nil,
themedIndeterminateProgressIndicator = nil,
themedWindowViewValues = nil;
/*
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 register our values
[self registerThemeValues:themedCalendarViewValues forView:calendar];
}
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);
EXCLUDING A THEMED OBJECT FROM THE SHOWCASE
When a theme is compiled, a showcase application is created that displays all of the themed objects
by default. There are some cases in which it is either not feasible or not desirable to display
the themed object in the showcase.
You can exclude themed objects from the showcases by defining the following method in your theme class:
+ (CPArray)themeShowcaseExcludes
If such a method exists, it should return an array of themed object names to exclude from the showcase.
For example, let's say we want to exclude the themed objects that are defined by the methods
themedAlert, themedCornerview and themedTableDataView. Here is what the themeShowcaseExcludes method
could look like:
+ (CPArray)themeShowcaseExcludes
{
return ["themedAlert", "cornerview", "tableDataView"];
}
Note that to make it easier to do the right thing, the names in the array can begin with "themed" or not.
If the name does not begin with "themed", it is prepended. Name matching is case-insensitive, so you
don't have to worry about capitalization.
SUBTHEMES
If you want to create a theme that inherits from another theme, for example the way
the Aristo-HUD theme inherits from Aristo, you can do this easily by following
these steps:
1. Your subtheme should be named "<inherited>-<identifier>", where <inherited> is the name
of the theme from which you are inheriting, and <identifier> is the subtheme identifier.
For example, "Aristo-HUD" inherits from "Aristo".
2. Decide which elements in the subtheme will be changed and which will be inherited.
For example, in a HUD theme you may want to use a dark or black background
and white text.
3. If your subtheme will replace pattern colors in the inherited theme, use the same filename as
in the inherited theme and put the pattern images in a subdirectory of the inherited
directory. The subdirectory's name should be the same as the subtheme identifier.
For example, Aristo-HUD's pattern images are in a "HUD" subdirectory of the "Aristo" directory.
4. In the subtheme class (such as AristoHUDThemeDescriptor), add a method with this template:
+ (CPCalendarView)themedCalendarView
{
var calendar = [AristoThemeDescriptor makeCalendarView],
subthemeValues = nil; // This may change according to your needs, see below
[self registerThemeValues:subthemeValues forView:calendar inherit:themedCalendarViewValues];
return calendar;
}
NOTE: If you pass nil or an empty array for the subthemeValues, ALL pattern images
will be automatically inherited and MUST be present in the subtheme directory.
Depending on your subtheme, you will change subthemeValues to indicate which values you
wish to override or remove from the inherited theme.
For example, let's say in your subtheme you want to use white text instead of dark blue,
and slightly gray text when it is disabled. In addition, you decide not to inherit the
disabled bezel color pattern. Here is how your updated theme method would look:
+ (CPCalendarView)themedCalendarView
{
var calendar = [AristoThemeDescriptor makeCalendarView],
textColor = [CPColor whiteColor],
disabledTextColor = [textColor colorWithAlphaComponent:0.6],
subthemeValues =
[
[@"bezel-color", nil, CPThemeStateDisabled],
[@"text-color", textColor],
[@"text-color", disabledTextColor, CPThemeStateDisabled]
];
[self registerThemeValues:subthemeValues forView:calendar inherit:themedCalendarViewValues];
return calendar;
}
If your subtheme consistently applies the same overrides to all themed views, you may
want to create a separate method that supplies those overrides. For example, Aristo-HUD
uses the following method:
+ (CPArray)defaultThemeOverridesAddedTo:(CPArray)themeValues
For the example we used above, we could define such a method as follows:
+ (CPArray)defaultThemeOverridesAddedTo:(CPArray)themeValues
{
var textColor = [CPColor whiteColor],
disabledTextColor = [textColor colorWithAlphaComponent:0.6],
overrides = [CPArray arrayWithObjects:
[@"bezel-color", nil, CPThemeStateDisabled],
[@"text-color", textColor],
[@"text-color", disabledTextColor, CPThemeStateDisabled]
];
if (themeValues)
[overrides addObjectsFromArray:themeValues];
return overrides;
}
Note that the values in the themeValues parameter override the defaults provided
by the method.
Our themed view method becomes:
+ (CPCalendarView)themedCalendarView
{
var calendar = [AristoThemeDescriptor makeCalendarView];
[self registerThemeValues:[self defaultThemeOverridesAddedTo:nil]
forView:calendar
inherit:themedCalendarViewValues];
return calendar;
}
As a last example, let's assume another type of themed view in your subtheme wants
to add some new theme values to the default overrides. The theme method might look like this:
+ (CPCalendarView)themedCalendarHeaderView
{
var header = [AristoThemeDescriptor makeCalendarHeaderView],
headerColor = PatternColor(
[
["calendar-header-left.png", 5.0, 23.0],
["calendar-header-center.png", 1.0, 23.0],
["calendar-header-right.png", 5.0, 23.0]
],
PatternIsHorizontal),
subthemeValues =
[
[@"background-color", headerColor]
];
[self registerThemeValues:[self defaultThemeOverridesAddedTo:subthemeValues]
forView:calendar
inherit:themedCalendarHeaderViewValues];
return calendar;
}
ADDING ARISTO-HUD CONTROLS
If you want to add a new themed control to Aristo-HUD, you should use the
+defaultThemeOverridesAddedTo: method to ensure visual consistency with the rest
of Aristo-HUD. The overrides returned by this method do the following:
- Sets the "text-color" attribute to white in the normal state and
[CPColor colorWithCalibratedWhite:1.0 alpha:0.6] in the disabled state.
- Set "text-shadow-color" to black.
- Sets "text-shadow-offset" to (-1.0, -1.0).
These are the standards used by Aristo-HUD. If you want to override these defaults,
simply add those overrides to the values you pass to +defaultThemeOverridesAddedTo:.
*/
@implementation AristoThemeDescriptor : BKThemeDescriptor
{
}
+ (CPString)themeName
{
return @"Aristo";
}
+ (CPArray)themeShowcaseExcludes
{
return ["themedAlert",
"themedMenuView",
"themedMenuItemStandardView",
"themedMenuItemMenuBarView",
"themedToolbarView",
"themedBorderlessBridgeWindowView",
"themedWindowView",
"themedBrowser",
"themedRuleEditor",
"themedTableDataView",
"themedCornerview",
"themedTokenFieldTokenCloseButton"];
}
+ (CPColor)themedColor
{
var color = [CPColor blackColor],
themedColorValues =
[
[@"alternate-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]],
[@"secondary-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]],
[@"selected-text-background-color", [CPColor colorWithHexString:"99CCFF"]],
[@"selected-text-inactive-background-color", [CPColor colorWithHexString:"CCCCCC"]]
];
[self registerThemeValues:themedColorValues forObject:color];
return color;
}
+ (CPButton)makeButton
{
return [[CPButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)];
}
+ (CPButton)button
{
var button = [self makeButton],
// RoundRect
bezelColor = PatternColor(
[
["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 = PatternColor(
[
["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),
disabledBezelColor = PatternColor(
[
["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),
smallBezelColor = PatternColor(
"{style}button-bezel{state}{position}.png",
{
styles: ["", "default"],
states: ["", "highlighted", "disabled"],
width: 3.0,
height: 20.0,
orientation: PatternIsHorizontal
}),
miniBezelColor = PatternColor(
"{style}button-bezel{state}{position}.png",
{
styles: ["", "default"],
states: ["", "highlighted", "disabled"],
width: 3.0,
height: 16.0,
orientation: PatternIsHorizontal
}),
defaultBezelColor = PatternColor(
[
["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 = PatternColor(
[
["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 = PatternColor(
[
["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),
// Rounded
roundedBezelColor = PatternColor(
[
["button-bezel-rounded-left.png", 12.0, 24.0],
["button-bezel-rounded-center.png", 1.0, 24.0],
["button-bezel-rounded-right.png", 12.0, 24.0]
],
PatternIsHorizontal),
roundedHighlightedBezelColor = PatternColor(
[
["button-bezel-rounded-highlighted-left.png", 12.0, 24.0],
["button-bezel-rounded-highlighted-center.png", 1.0, 24.0],
["button-bezel-rounded-highlighted-right.png", 12.0, 24.0]
],
PatternIsHorizontal),
roundedDisabledBezelColor = PatternColor(
[
["button-bezel-rounded-disabled-left.png", 12.0, 24.0],
["button-bezel-rounded-disabled-center.png", 1.0, 24.0],
["button-bezel-rounded-disabled-right.png", 12.0, 24.0]
],
PatternIsHorizontal),
defaultRoundedBezelColor = PatternColor(
[
["default-button-bezel-rounded-left.png", 12.0, 24.0],
["default-button-bezel-rounded-center.png", 1.0, 24.0],
["default-button-bezel-rounded-right.png", 12.0, 24.0]
],
PatternIsHorizontal),
defaultRoundedHighlightedBezelColor = PatternColor(
[
["default-button-bezel-rounded-highlighted-left.png", 12.0, 24.0],
["default-button-bezel-rounded-highlighted-center.png", 1.0, 24.0],
["default-button-bezel-rounded-highlighted-right.png", 12.0, 24.0]
],
PatternIsHorizontal),
defaultRoundedDisabledBezelColor = PatternColor(
[
["default-button-bezel-rounded-disabled-left.png", 12.0, 24.0],
["default-button-bezel-rounded-disabled-center.png", 1.0, 24.0],
["default-button-bezel-rounded-disabled-right.png", 12.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:CPFontCurrentSystemSize], 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],
[@"bezel-color", bezelColor, CPThemeStateBordered],
[@"bezel-color", highlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted]],
[@"bezel-color", disabledBezelColor, [CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color", defaultBezelColor, [CPThemeStateBordered, CPThemeStateDefault]],
[@"bezel-color", defaultHighlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault]],
[@"bezel-color", defaultDisabledBezelColor, [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled]],
[@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), CPThemeStateBordered],
[@"nib2cib-adjustment-frame", CGRectMake(2.0, 2.0, 0.0, 0.0), CPThemeStateBordered],
// RoundRect CPThemeStateControlSizeSmall
[@"bezel-color",
smallBezelColor["@"]["@"],
[CPThemeStateControlSizeSmall, CPThemeStateBordered]],
[@"bezel-color",
smallBezelColor["@"]["highlighted"],
[CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateHighlighted]],
[@"bezel-color",
smallBezelColor["@"]["disabled"],
[CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color",
smallBezelColor["default"]["@"],
[CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateDefault]],
[@"bezel-color",
smallBezelColor["default"]["highlighted"],
[CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault]],
[@"bezel-color",
smallBezelColor["default"]["disabled"],
[CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled]],
[@"content-inset", CGInsetMake(0.0, 5.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateBordered]],
[@"nib2cib-adjustment-frame", CGRectMake(-3.0, 5.0, 0.0, 0.0), [CPThemeStateControlSizeSmall, CPThemeStateBordered]],
// RoundRect CPThemeStateControlSizeMini
[@"bezel-color",
miniBezelColor["@"]["@"],
[CPThemeStateControlSizeMini, CPThemeStateBordered]],
[@"bezel-color",
miniBezelColor["@"]["highlighted"],
[CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateHighlighted]],
[@"bezel-color",
miniBezelColor["@"]["disabled"],
[CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color",
miniBezelColor["default"]["@"],
[CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateDefault]],
[@"bezel-color",
miniBezelColor["default"]["highlighted"],
[CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault]],
[@"bezel-color",
miniBezelColor["default"]["disabled"],
[CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled]],
[@"content-inset", CGInsetMake(0.0, 2.0, 2.0, 2.0), [CPThemeStateControlSizeMini, CPThemeStateBordered]],
[@"nib2cib-adjustment-frame", CGRectMake(0.0, 13.0, 0.0, 0.0), [CPThemeStateControlSizeMini, CPThemeStateBordered]],
[@"bezel-color", roundedBezelColor, [CPThemeStateBordered, CPButtonStateBezelStyleRounded]],
[@"bezel-color", roundedHighlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded]],
[@"bezel-color", roundedDisabledBezelColor, [CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]],
[@"bezel-color", defaultRoundedBezelColor, [CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded]],
[@"bezel-color", defaultRoundedHighlightedBezelColor, [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded]],
[@"bezel-color", defaultRoundedDisabledBezelColor, [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]],
[@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), [CPThemeStateBordered, CPButtonStateBezelStyleRounded]],
[@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateDisabled],
[@"text-color", defaultTextColor, CPThemeStateDefault],
[@"text-color", defaultDisabledTextColor, [CPThemeStateDefault, CPThemeStateDisabled]],
[@"min-size", CGSizeMake(0.0, 24.0)],
[@"max-size", CGSizeMake(-1.0, 24.0)],
[@"min-size", CGSizeMake(0.0, 20.0), CPThemeStateControlSizeSmall],
[@"max-size", CGSizeMake(-1.0, 20.0), CPThemeStateControlSizeSmall],
[@"min-size", CGSizeMake(0.0, 16.0), CPThemeStateControlSizeMini],
[@"max-size", CGSizeMake(-1.0, 16.0), CPThemeStateControlSizeMini],
[@"image-offset", CPButtonImageOffset]
];
[self registerThemeValues:themedButtonValues forView:button];
return button;
}
+ (CPButton)themedStandardButton
{
var button = [self button];
[button setTitle:@"Cancel"];
return button;
}
+ (CPButton)themedDefaultButton
{
var button = [self button];
[button setTitle:@"OK"];
[button setThemeState:CPThemeStateDefault];
return button;
}
+ (CPButton)themedRoundedButton
{
var button = [self button];
[button setTitle:@"Save"];
[button setThemeState:CPButtonStateBezelStyleRounded];
return button;
}
+ (CPPopUpButton)themedPopUpButton
{
var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:NO],
regularColor = PatternColor(
[
["popup-bezel-left.png", 3.0, 24.0],
["popup-bezel-center.png", 1.0, 24.0],
["popup-bezel-right.png", 21.0, 24.0]
],
PatternIsHorizontal),
regularDisabledColor = PatternColor(
[
["popup-bezel-disabled-left.png", 3.0, 24.0],
["popup-bezel-disabled-center.png", 1.0, 24.0],
["popup-bezel-disabled-right.png", 21.0, 24.0]
],
PatternIsHorizontal),
smallColor = PatternColor(
"popup-bezel{state}{position}.png",
{
states: ["", "disabled"],
width: 3.0,
height: 20.0,
rightWidth: 19.0,
orientation: PatternIsHorizontal
}),
miniColor = PatternColor(
"popup-bezel{state}{position}.png",
{
states: ["", "disabled"],
width: 3.0,
height: 16.0,
rightWidth: 15.0,
orientation: PatternIsHorizontal
}),
themeValues =
[
[@"bezel-color", regularColor, CPThemeStateBordered],
[@"bezel-color", regularDisabledColor, [CPThemeStateBordered, CPThemeStateDisabled]],
[@"content-inset", CGInsetMake(0, 22.0 + 5.0, 0, 5.0), CPThemeStateBordered],
[@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]],
[@"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)],
[@"nib2cib-adjustment-frame", CGRectMake(2.0, 0.0, -5.0, 0.0)],
// CPThemeStateControlSizeSmall
[@"bezel-color", smallColor["@"], [CPThemeStateControlSizeSmall, CPThemeStateBordered]],
[@"bezel-color", smallColor["disabled"], [CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateDisabled]],
[@"content-inset", CGInsetMake(0, 17.0 + 4.0, 0, 4.0), [CPThemeStateControlSizeSmall, CPThemeStateBordered]],
[@"font", [CPFont boldSystemFontOfSize:11.0]],
[@"min-size", CGSizeMake(32.0, 20.0), CPThemeStateControlSizeSmall],
[@"max-size", CGSizeMake(-1.0, 20.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(3.0, 3.0, -6.0, 0.0), CPThemeStateControlSizeSmall],
// CPThemeStateControlSizeMini
[@"bezel-color", miniColor["@"], [CPThemeStateControlSizeMini, CPThemeStateBordered]],
[@"bezel-color", miniColor["disabled"], [CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateDisabled]],
[@"content-inset", CGInsetMake(0, 15.0 + 4.0, 2.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateBordered]],
[@"font", [CPFont boldSystemFontOfSize:9.0]],
[@"min-size", CGSizeMake(32.0, 16.0), CPThemeStateControlSizeMini],
[@"max-size", CGSizeMake(-1.0, 16.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(1.0, 9.0, -3.0, 0.0), CPThemeStateControlSizeMini],
];
[self registerThemeValues:themeValues forView:button];
[button setTitle:@"Pop Up"];
[button addItemWithTitle:@"item"];
return button;
}
+ (CPPopUpButton)themedPullDownMenu
{
var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:YES],
color = PatternColor(
[
["popup-bezel-left.png", 3.0, 24.0],
["popup-bezel-center.png", 1.0, 24.0],
["popup-bezel-right-pullsdown.png", 21.0, 24.0]
],
PatternIsHorizontal),
disabledColor = PatternColor(
[
["popup-bezel-disabled-left.png", 3.0, 24.0],
["popup-bezel-disabled-center.png", 1.0, 24.0],
["popup-bezel-disabled-right-pullsdown.png", 21.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:CPFontCurrentSystemSize]],
[@"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)]
];
[self registerThemeValues:themeValues forView:button];
[button setTitle:@"Pull Down"];
[button addItemWithTitle:@"item"];
return button;
}
+ (CPScrollView)themedScrollView
{
var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)];
var borderColor = [CPColor colorWithWhite:0.0 alpha:0.2],
bottomCornerColor = PatternColor(@"scrollview-bottom-corner-color.png", 15.0, 15.0);
var themedScrollViewValues =
[
[@"border-color", borderColor],
[@"bottom-corner-color", bottomCornerColor]
];
[self registerThemeValues:themedScrollViewValues forView:scrollView];
[scrollView setAutohidesScrollers:YES];
[scrollView setBorderType:CPLineBorder];
return scrollView;
}
+ (CPScroller)makeVerticalScroller
{
var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 9.0, 170.0)];
[scroller setFloatValue:0.1];
[scroller setKnobProportion:0.5];
[scroller setStyle:CPScrollerStyleLegacy];
return scroller;
}
+ (CPScroller)themedVerticalScroller
{
var scroller = [self makeVerticalScroller],
trackColor = PatternColor(
[
["scroller-vertical-track-top.png", 9.0, 4.0],
["scroller-vertical-track-center.png", 9.0, 1.0],
["scroller-vertical-track-bottom.png", 9.0, 4.0]
],
PatternIsVertical),
trackColorLight = PatternColor(
[
["scroller-vertical-track-light-top.png", 9.0, 4.0],
["scroller-vertical-track-light-center.png", 9.0, 1.0],
["scroller-vertical-track-light-bottom.png", 9.0, 4.0]
],
PatternIsVertical),
trackColorDark = PatternColor(
[
["scroller-vertical-track-dark-top.png", 9.0, 4.0],
["scroller-vertical-track-dark-center.png", 9.0, 1.0],
["scroller-vertical-track-dark-bottom.png", 9.0, 4.0]
],
PatternIsVertical),
trackColorLegacy = PatternColor("scroller-legacy-vertical-track-center.png", 14.0, 1.0),
incrementColorLegacy = PatternColor("scroller-legacy-vertical-track-bottom.png", 14.0, 11.0),
decrementColorLegacy = PatternColor("scroller-legacy-vertical-track-top.png", 14.0, 11.0),
knobColor = PatternColor(
[
["scroller-vertical-knob-top.png", 9.0, 4.0],
["scroller-vertical-knob-center.png", 9.0, 1.0],
["scroller-vertical-knob-bottom.png", 9.0, 4.0]
],
PatternIsVertical),
knobColorLight = PatternColor(
[
["scroller-vertical-knob-light-top.png", 9.0, 4.0],
["scroller-vertical-knob-light-center.png", 9.0, 1.0],
["scroller-vertical-knob-light-bottom.png", 9.0, 4.0]
],
PatternIsVertical),
knobColorDark = PatternColor(
[
["scroller-vertical-knob-dark-top.png", 9.0, 4.0],
["scroller-vertical-knob-dark-center.png", 9.0, 1.0],
["scroller-vertical-knob-dark-bottom.png", 9.0, 4.0]
],
PatternIsVertical),
knobColorLegacy = PatternColor(
[
["scroller-legacy-vertical-knob-top.png", 14.0, 3.0],
["scroller-legacy-vertical-knob-center.png", 14.0, 1.0],
["scroller-legacy-vertical-knob-bottom.png", 14.0, 3.0]
],
PatternIsVertical);
themedVerticalScrollerValues =
[
// Common
[@"minimum-knob-length", 21.0, CPThemeStateVertical],
// Overlay
[@"scroller-width", 9.0, CPThemeStateVertical],
[@"knob-inset", CGInsetMake(2.0, 0.0, 0.0, 0.0), CPThemeStateVertical],
[@"track-inset", CGInsetMake(2.0, 0.0, 2.0, 0.0), CPThemeStateVertical],
[@"track-border-overlay", 12.0, CPThemeStateVertical],
[@"knob-slot-color", [CPNull null], CPThemeStateVertical],
[@"knob-slot-color", trackColor, [CPThemeStateVertical, CPThemeStateSelected]],
[@"knob-slot-color", trackColorLight, [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight]],
[@"knob-slot-color", trackColorDark, [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark]],
[@"knob-color", knobColor, CPThemeStateVertical],
[@"knob-color", knobColorLight, [CPThemeStateVertical, CPThemeStateScrollerKnobLight]],
[@"knob-color", knobColorDark, [CPThemeStateVertical, CPThemeStateScrollerKnobDark]],
[@"increment-line-color", [CPNull null], CPThemeStateVertical],
[@"decrement-line-color", [CPNull null], CPThemeStateVertical],
[@"decrement-line-size", CGSizeMakeZero(), CPThemeStateVertical],
[@"increment-line-size", CGSizeMakeZero(), CPThemeStateVertical],
// Legacy
[@"scroller-width", 14.0, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"track-border-overlay", 0.0, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]],
[@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]],
[@"knob-color", knobColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]],
[@"increment-line-color", incrementColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"decrement-line-color", decrementColorLegacy, [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"decrement-line-size", CGSizeMake(14.0, 11.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]],
[@"increment-line-size", CGSizeMake(14.0, 11.0), [CPThemeStateVertical, CPThemeStateScrollViewLegacy]]
];
[self registerThemeValues:themedVerticalScrollerValues forView:scroller];
return scroller;
}
+ (CPScroller)makeHorizontalScroller
{
var scroller = [[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, 170.0, 9.0)];
[scroller setFloatValue:0.1];
[scroller setKnobProportion:0.5];
[scroller setStyle:CPScrollerStyleLegacy];
return scroller;
}
+ (CPScroller)themedHorizontalScroller
{
var scroller = [self makeHorizontalScroller],
trackColor = PatternColor(
[
["scroller-horizontal-track-left.png", 4.0, 9.0],
["scroller-horizontal-track-center.png", 1.0, 9.0],
["scroller-horizontal-track-right.png", 4.0, 9.0]
],
PatternIsHorizontal),
trackColorLight = PatternColor(
[
["scroller-horizontal-track-light-left.png", 4.0, 9.0],
["scroller-horizontal-track-light-center.png", 1.0, 9.0],
["scroller-horizontal-track-light-right.png", 4.0, 9.0]
],
PatternIsHorizontal),
trackColorDark = PatternColor(
[
["scroller-horizontal-track-dark-left.png", 4.0, 9.0],
["scroller-horizontal-track-dark-center.png", 1.0, 9.0],
["scroller-horizontal-track-dark-right.png", 4.0, 9.0]
],
PatternIsHorizontal),
trackColorLegacy = PatternColor("scroller-legacy-horizontal-track-center.png", 1.0, 14.0),
incrementColorLegacy = PatternColor("scroller-legacy-horizontal-track-right.png", 11.0, 14.0),
decrementColorLegacy = PatternColor("scroller-legacy-horizontal-track-left.png", 11.0, 14.0),
knobColor = PatternColor(
[
["scroller-horizontal-knob-left.png", 4.0, 9.0],
["scroller-horizontal-knob-center.png", 1.0, 9.0],
["scroller-horizontal-knob-right.png", 4.0, 9.0]
],
PatternIsHorizontal),
knobColorLight = PatternColor(
[
["scroller-horizontal-knob-light-left.png", 4.0, 9.0],
["scroller-horizontal-knob-light-center.png", 1.0, 9.0],
["scroller-horizontal-knob-light-right.png", 4.0, 9.0]
],
PatternIsHorizontal),
knobColorDark = PatternColor(
[
["scroller-horizontal-knob-dark-left.png", 4.0, 9.0],
["scroller-horizontal-knob-dark-center.png", 1.0, 9.0],
["scroller-horizontal-knob-dark-right.png", 4.0, 9.0]
],
PatternIsHorizontal),
knobColorLegacy = PatternColor(
[
["scroller-legacy-horizontal-knob-left.png", 3.0, 14.0],
["scroller-legacy-horizontal-knob-center.png", 1.0, 14.0],
["scroller-legacy-horizontal-knob-right.png", 3.0, 14.0]
],
PatternIsHorizontal);
themedHorizontalScrollerValues =
[
// Common
[@"minimum-knob-length", 21.0],
// Overlay
[@"scroller-width", 9.0],
[@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 2.0)],
[@"track-inset", CGInsetMake(0.0, 2.0, 0.0, 2.0)],
[@"track-border-overlay", 12.0],
[@"knob-slot-color", [CPNull null]],
[@"knob-slot-color", trackColor, CPThemeStateSelected],
[@"knob-slot-color", trackColorLight, [CPThemeStateSelected, CPThemeStateScrollerKnobLight]],
[@"knob-slot-color", trackColorDark, [CPThemeStateSelected, CPThemeStateScrollerKnobDark]],
[@"knob-color", knobColor],
[@"knob-color", knobColorLight, CPThemeStateScrollerKnobLight],
[@"knob-color", knobColorDark, CPThemeStateScrollerKnobDark],
[@"decrement-line-size", CGSizeMakeZero()],
[@"increment-line-size", CGSizeMakeZero()],
// Legacy
[@"scroller-width", 14.0, CPThemeStateScrollViewLegacy],
[@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy],
[@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy],
[@"track-border-overlay", 0.0, CPThemeStateScrollViewLegacy],
[@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateSelected]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]],
[@"knob-slot-color", trackColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]],
[@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy],
[@"knob-color", knobColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight]],
[@"knob-color", knobColorLegacy, [CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark]],
[@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy],
[@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy],
[@"decrement-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy],
[@"increment-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy]
];
[self registerThemeValues:themedHorizontalScrollerValues forView:scroller];
return scroller;
}
+ (CPTextField)themedStandardTextField
{
var textfield = [[CPTextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 29.0)],
bezelColor = PatternColor(
[
["textfield-bezel-square-0.png", 6.0, 6.0],
["textfield-bezel-square-1.png", 1.0, 6.0],
["textfield-bezel-square-2.png", 6.0, 6.0],
["textfield-bezel-square-3.png", 6.0, 1.0],
["textfield-bezel-square-4.png", 1.0, 1.0],
["textfield-bezel-square-5.png", 6.0, 1.0],
["textfield-bezel-square-6.png", 6.0, 6.0],
["textfield-bezel-square-7.png", 1.0, 6.0],
["textfield-bezel-square-8.png", 6.0, 6.0]
]),
bezelFocusedColor = PatternColor(
[
["textfield-bezel-square-focused-0.png", 6.0, 6.0],
["textfield-bezel-square-focused-1.png", 1.0, 6.0],
["textfield-bezel-square-focused-2.png", 6.0, 6.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, 6.0],
["textfield-bezel-square-focused-7.png", 1.0, 6.0],
["textfield-bezel-square-focused-8.png", 6.0, 6.0]
]),
bezelDisabledColor = PatternColor(
[
["textfield-bezel-square-disabled-0.png", 6.0, 6.0],
["textfield-bezel-square-disabled-1.png", 1.0, 6.0],
["textfield-bezel-square-disabled-2.png", 6.0, 6.0],
["textfield-bezel-square-disabled-3.png", 6.0, 1.0],
["textfield-bezel-square-disabled-4.png", 1.0, 1.0],
["textfield-bezel-square-disabled-5.png", 6.0, 1.0],
["textfield-bezel-square-disabled-6.png", 6.0, 6.0],
["textfield-bezel-square-disabled-7.png", 1.0, 6.0],
["textfield-bezel-square-disabled-8.png", 6.0, 6.0]
]);
// Global for reuse by subclasses
textDisabledColor = [CPColor colorWithCalibratedWhite:0.60 alpha:1.0];
placeholderColor = [CPColor colorWithCalibratedRed:189.0 / 255.0 green:199.0 / 255.0 blue:211.0 / 255.0 alpha:1.0];
themedTextFieldValues =
[
[@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled],
[@"bezel-color", bezelColor, CPThemeStateBezeled],
[@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]],
[@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled],
// no border
[@"bezel-inset", CGInsetMakeZero()],
[@"content-inset", CGInsetMakeZero()],
// with border
[@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled],
[@"content-inset", CGInsetMake(8.0, 7.0, 7.0, 8.0), CPThemeStateBezeled],
[@"text-color", textDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]],
[@"text-color", placeholderColor, CPTextFieldStatePlaceholder],
[@"text-color", placeholderColor, [CPTextFieldStatePlaceholder, CPThemeStateDisabled]],
[@"line-break-mode", CPLineBreakByTruncatingTail, CPThemeStateTableDataView],
[@"vertical-alignment", CPCenterVerticalTextAlignment, CPThemeStateTableDataView],
[@"content-inset", CGInsetMake(3.0, 3.0, 3.0, 5.0), CPThemeStateTableDataView],
[@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView],
[@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]],
[@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]],
[@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditable]],
[@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing]],
[@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateBezeled]],
[@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), [CPThemeStateTableDataView, CPThemeStateEditing]],
[@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]],
[@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), [CPThemeStateTableDataView, CPThemeStateEditing]],
[@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow]],
[@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]],
[@"text-shadow-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow]],
[@"text-shadow-offset", CGSizeMake(0,1), [CPThemeStateTableDataView, CPThemeStateGroupRow]],
[@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView]],
[@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateGroupRow]],
[@"min-size", CGSizeMake(-1.0, 29.0)],
[@"nib2cib-adjustment-frame", CGRectMake(2.0, 0.0, -4.0, 0.0)],
[@"nib2cib-adjustment-frame", CGRectMake(-3.0, -3.0, 6.0, 0.0), CPThemeStateBezeled],
// CPThemeStateControlSizeSmall
[@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 8.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]],
[@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 8.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateEditing]],
[@"min-size", CGSizeMake(-1.0, 25.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(2.0, 0.0, -4.0, 0.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(-3.0, 4.0, 6.0, 7.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]],
// CPThemeStateControlSizeMini
[@"content-inset", CGInsetMake(6.0, 7.0, 5.0, 7.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]],
[@"content-inset", CGInsetMake(6.0, 7.0, 5.0, 7.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateEditing]],
[@"min-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(2.0, 0.0, -4.0, 0.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(-3.0, 4.0, 6.0, 7.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]],
];
[self registerThemeValues:themedTextFieldValues forView:textfield];
[textfield setBezeled:YES];
[textfield setPlaceholderString:"placeholder"];
[textfield setStringValue:""];
[textfield setEditable:YES];
return textfield;
}
+ (CPTextField)themedRoundedTextField
{
var textfield = [[CPTextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 160.0, 30.0)],
bezelColor = PatternColor(
[
["textfield-bezel-rounded-left.png", 15.0, 30.0],
["textfield-bezel-rounded-center.png", 1.0, 30.0],
["textfield-bezel-rounded-right.png", 15.0, 30.0]
],
PatternIsHorizontal),
bezelFocusedColor = PatternColor(
[
["textfield-bezel-rounded-focused-left.png", 15.0, 30.0],
["textfield-bezel-rounded-focused-center.png", 1.0, 30.0],
["textfield-bezel-rounded-focused-right.png", 15.0, 30.0]
],
PatternIsHorizontal),
bezelDisabledColor = PatternColor(
[
["textfield-bezel-rounded-disabled-left.png", 15.0, 30.0],
["textfield-bezel-rounded-disabled-center.png", 1.0, 30.0],
["textfield-bezel-rounded-disabled-right.png", 15.0, 30.0]
],
PatternIsHorizontal);
// Global for reuse by subclasses
themedRoundedTextFieldValues =
[
[@"bezel-color", bezelColor, [CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"bezel-color", bezelFocusedColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-color", bezelDisabledColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]],
[@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]],
// The new bezel is one pixel shorter, so we add one extra empty pixel at the bottom
// for size compatibility with an earlier version.
[@"bezel-inset", CGInsetMake(0.0, 0.0, 1.0, 0.0), [CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"content-inset", CGInsetMake(7.0, 13.0, 7.0, 14.0), [CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"text-color", textDisabledColor, [CPTextFieldStateRounded, CPThemeStateDisabled]],
[@"text-color", placeholderColor, [CPTextFieldStateRounded, CPTextFieldStatePlaceholder]],
[@"min-size", CGSizeMake(0.0, 30.0), [CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"max-size", CGSizeMake(-1.0, 30.0), [CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"nib2cib-adjustment-frame", CGRectMake(-2.0, 7.0, 5.0, 10.0), [CPTextFieldStateRounded, CPThemeStateBezeled]],
// CPThemeStateControlSizeSmall
[@"content-inset", CGInsetMake(8.0, 6.0, 4.0, 6.0), [CPThemeStateControlSizeSmall, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"bezel-inset", CGInsetMake(2.0, 4.0, 2.0, 4.0), [CPThemeStateControlSizeSmall, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"min-size", CGSizeMake(0.0, 28.0), [CPThemeStateControlSizeSmall, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"max-size", CGSizeMake(-1.0, 28.0), [CPThemeStateControlSizeSmall, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"nib2cib-adjustment-frame", CGRectMake(-6.0, 5.0, 13.0, 9.0), [CPThemeStateControlSizeSmall, CPTextFieldStateRounded, CPThemeStateBezeled]],
// CPThemeStateControlSizeMini
[@"content-inset", CGInsetMake(8.0, 6.0, 4.0, 6.0), [CPThemeStateControlSizeMini, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"bezel-inset", CGInsetMake(2.0, 4.0, 2.0, 4.0), [CPThemeStateControlSizeMini, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"min-size", CGSizeMake(0.0, 26.0), [CPThemeStateControlSizeMini, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"max-size", CGSizeMake(-1.0, 26.0), [CPThemeStateControlSizeMini, CPTextFieldStateRounded, CPThemeStateBezeled]],
[@"nib2cib-adjustment-frame", CGRectMake(-6.0, 6.0, 13.0, 10.0), [CPThemeStateControlSizeMini, CPTextFieldStateRounded, CPThemeStateBezeled]]
];
[self registerThemeValues:themedRoundedTextFieldValues forView:textfield];
[textfield setBezeled:YES];
[textfield setBezelStyle:CPTextFieldRoundedBezel];
[textfield setPlaceholderString:"placeholder"];
[textfield setStringValue:""];
[textfield setEditable:YES];
return textfield;
}
+ (CPSearchField)themedSearchField
{
var searchField = [[CPSearchField alloc] initWithFrame:CGRectMake(0.0, 0.0, 160.0, 30.0)],
imageSearch = PatternImage("search-field-search.png", 25.0, 22.0),
imageFind = PatternImage("search-field-find.png", 25.0, 22.0),
imageCancel = PatternImage("search-field-cancel.png", 22.0, 22.0),
imageCancelPressed = PatternImage("search-field-cancel-pressed.png", 22.0, 22.0),
smallImageSearch = PatternImage("search-field-search.png", 25.0, 20.0),
smallImageFind = PatternImage("search-field-find.png", 25.0, 20.0),
smallImageCancel = PatternImage("search-field-cancel.png", 22.0, 20.0),
smallImageCancelPressed = PatternImage("search-field-cancel-pressed.png", 22.0, 21.0),
miniImageSearch = PatternImage("search-field-search.png", 25.0, 20.0),
miniImageFind = PatternImage("search-field-find.png", 25.0, 20.0),
miniImageCancel = PatternImage("search-field-cancel.png", 22.0, 21.0),
miniImageCancelPressed = PatternImage("search-field-cancel-pressed.png", 22.0, 21.0),
overrides =
[
[@"image-search-inset", CGInsetMake(0, 0, 0, 5)],
[@"image-cancel-inset", CGInsetMake(0, 5, 0, 0)],
[@"image-search", imageSearch],
[@"image-find", imageFind],
[@"image-cancel", imageCancel],
[@"image-cancel-pressed", imageCancelPressed],
[@"image-search", smallImageSearch, CPThemeStateControlSizeSmall],
[@"image-find", smallImageFind, CPThemeStateControlSizeSmall],
[@"image-cancel", smallImageCancel, CPThemeStateControlSizeSmall],
[@"image-cancel-pressed", smallImageCancelPressed, CPThemeStateControlSizeSmall],
[@"image-search-inset", CGInsetMake(0, 0, 0, 8), CPThemeStateControlSizeSmall],
[@"image-cancel-inset", CGInsetMake(0, 8, 0, 0), CPThemeStateControlSizeSmall],
[@"image-search", miniImageSearch, CPThemeStateControlSizeMini],
[@"image-find", miniImageFind, CPThemeStateControlSizeMini],
[@"image-cancel", miniImageCancel, CPThemeStateControlSizeMini],
[@"image-cancel-pressed", miniImageCancelPressed, CPThemeStateControlSizeMini],
[@"image-search-inset", CGInsetMake(0, 0, 0, 8), CPThemeStateControlSizeMini],
[@"image-cancel-inset", CGInsetMake(0, 8, 0, 0), CPThemeStateControlSizeMini],
];
[self registerThemeValues:overrides forView:searchField inherit:themedRoundedTextFieldValues];
return searchField;
}
+ (CPDatePicker)themedDatePicker
{
var datePicker = [[CPDatePicker alloc] initWithFrame:CGRectMake(40.0, 40.0, 170.0, 29.0)],
bezelColor = PatternColor(
[
["textfield-bezel-square-0.png", 6.0, 6.0],
["textfield-bezel-square-1.png", 1.0, 6.0],
["textfield-bezel-square-2.png", 6.0, 6.0],
["textfield-bezel-square-3.png", 6.0, 1.0],
["textfield-bezel-square-4.png", 1.0, 1.0],
["textfield-bezel-square-5.png", 6.0, 1.0],
["textfield-bezel-square-6.png", 6.0, 6.0],
["textfield-bezel-square-7.png", 1.0, 6.0],
["textfield-bezel-square-8.png", 6.0, 6.0]
]),
bezelDisabledColor = PatternColor(
[
["textfield-bezel-square-disabled-0.png", 6.0, 6.0],
["textfield-bezel-square-disabled-1.png", 1.0, 6.0],
["textfield-bezel-square-disabled-2.png", 6.0, 6.0],
["textfield-bezel-square-disabled-3.png", 6.0, 1.0],
["textfield-bezel-square-disabled-4.png", 1.0, 1.0],
["textfield-bezel-square-disabled-5.png", 6.0, 1.0],
["textfield-bezel-square-disabled-6.png", 6.0, 6.0],
["textfield-bezel-square-disabled-7.png", 1.0, 6.0],
["textfield-bezel-square-disabled-8.png", 6.0, 6.0]
]),
bezelFocusedColor = PatternColor(
[
["textfield-bezel-square-focused-0.png", 6.0, 6.0],
["textfield-bezel-square-focused-1.png", 1.0, 6.0],
["textfield-bezel-square-focused-2.png", 6.0, 6.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, 6.0],
["textfield-bezel-square-focused-7.png", 1.0, 6.0],
["textfield-bezel-square-focused-8.png", 6.0, 6.0]
]),
bezelColorDatePickerTextField = PatternColor(
[
[@"datepicker-date-segment-0.png", 4.0, 18.0],
[@"datepicker-date-segment-1.png", 1.0, 18.0],
[@"datepicker-date-segment-2.png", 4.0, 18.0]
], PatternIsHorizontal),
themeValues =
[
[@"bezel-color", bezelColor, CPThemeStateBezeled],
[@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]],
[@"font", [CPFont boldSystemFontOfSize:13.0]],
[@"text-color", textDisabledColor, CPThemeStateDisabled],
[@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal],
[@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), CPThemeStateBezeled],
[@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), [CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), CPThemeStateBezeled],
[@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), [CPThemeStateBezeled, CPThemeStateEditing]],
[@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal],
[@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected],
[@"datepicker-textfield-bezel-color", [CPColor clearColor], [CPThemeStateNormal, CPThemeStateDisabled]],
[@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, [CPThemeStateSelected, CPThemeStateDisabled]],
[@"separator-content-inset", CGInsetMake(0.0, -2.0, 0.0, -1.0)],
[@"content-inset-datepicker-textfield", CGInsetMake(2.0, 2.0, 0.0, 1.0), CPThemeStateNormal],
[@"content-inset-datepicker-textfield-separator", CGInsetMake(2.0, 0.0, 0.0, 0.0), CPThemeStateNormal],
[@"content-inset-datepicker-textfield", CGInsetMake(2.0, 2.0, 0.0, 1.0), CPThemeStateSelected],
[@"content-inset-datepicker-textfield-separator", CGInsetMake(2.0, 0.0, 0.0, 0.0), CPThemeStateSelected],
[@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)],
[@"date-hour-margin", 7.0],
[@"stepper-margin", 2.0],
[@"min-size", CGSizeMake(0, 29.0)],
[@"max-size", CGSizeMake(-1.0, 29.0)],
[@"nib2cib-adjustment-frame", CGRectMake(0.0, 4.0, -3.0, 0.0)],
// CPThemeStateControlSizeSmall
[@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
[@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]],
[@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateEditing, CPThemeStateBezeled]],
[@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall],
[@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall],
[@"stepper-margin", 3.0, CPThemeStateControlSizeSmall],
[@"stepper-margin", 3.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]],
[@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall],
[@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(1.0, 6.0, -3.0, 0.0), CPThemeStateControlSizeSmall],
// CPThemeStateControlSizeMini
[@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]],
[@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]],
[@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateEditing, CPThemeStateBezeled]],
[@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini],
[@"date-hour-margin", 2.0, CPThemeStateControlSizeMini],
[@"stepper-margin", 2.0, CPThemeStateControlSizeMini],
[@"stepper-margin", 2.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]],
[@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini],
[@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(0.0, 9.0, -3.0, 0.0), CPThemeStateControlSizeMini]
];
[datePicker setDatePickerStyle:CPTextFieldDatePickerStyle];
[self registerThemeValues:themeValues forView:datePicker];
return datePicker;
}
+ (CPDatePicker)themedDatePickerCalendar
{
var datePicker = [[CPDatePicker alloc] initWithFrame:CGRectMake(40.0, 140.0, 276.0, 148.0)],
arrowImageLeft = PatternImage("datepicker-calendar-arrow-left.png", 7.0, 10.0),
arrowImageRight = PatternImage("datepicker-calendar-arrow-right.png", 7.0, 10.0),
circleImage = PatternImage("datepicker-circle-image.png", 9.0, 10.0),
arrowImageLeftHighlighted = PatternImage("datepicker-calendar-arrow-left-highlighted.png", 7.0, 10.0),
arrowImageRightHighlighted = PatternImage("datepicker-calendar-arrow-right-highlighted.png", 7.0, 10.0),
circleImageHighlighted = PatternImage("datepicker-circle-image-highlighted.png", 9.0, 10.0),
secondHandSize = CGSizeMake(89.0, 89.0),
secondHandImage = PatternImage("datepicker-clock-second-hand.png", secondHandSize.width, secondHandSize.height),
minuteHandSize = CGSizeMake(85.0, 85.0),
minuteHandImage = PatternImage("datepicker-clock-minute-hand.png", minuteHandSize.width, minuteHandSize.height),
hourHandSize = CGSizeMake(47.0, 47.0),
hourHandImage = PatternImage("datepicker-clock-hour-hand.png", hourHandSize.width, hourHandSize.height),
middleHandSize = CGSizeMake(13.0, 13.0),
middleHandImage = PatternImage("datepicker-clock-middle-hand.png", middleHandSize.width, middleHandSize.height),
clockSize = CGSizeMake(122.0, 123.0),
clockImageColor = PatternColor("datepicker-clock.png", clockSize.width, clockSize.height),
secondHandImageDisabled = PatternImage("datepicker-clock-second-hand-disabled.png", secondHandSize.width, secondHandSize.height),
minuteHandImageDisabled = PatternImage("datepicker-clock-minute-hand-disabled.png", minuteHandSize.width, minuteHandSize.height),
hourHandImageDisabled = PatternImage("datepicker-clock-hour-hand-disabled.png", hourHandSize.width, hourHandSize.height),
middleHandImageDisabled = PatternImage("datepicker-clock-middle-hand-disabled.png", middleHandSize.width, middleHandSize.height),
clockImageColorDisabled = PatternColor("datepicker-clock-disabled.png", clockSize.width, clockSize.height),
themeValues =
[
[@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:1.0], CPThemeStateNormal],
[@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:1.0], CPThemeStateSelected],
[@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], [CPThemeStateNormal, CPThemeStateDisabled]],
[@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]],
[@"bezel-color-calendar", [CPColor whiteColor]],
[@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:1.0], CPThemeStateSelected],
[@"bezel-color-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]],
[@"bezel-color-clock", clockImageColor],
[@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled],
[@"title-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0]],
[@"title-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]],
[@"title-text-shadow-offset", CGSizeMake(0,1)],
[@"title-font", [CPFont boldSystemFontOfSize:12.0]],
[@"title-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeStateDisabled],
[@"title-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled],
[@"title-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled],
[@"title-font", [CPFont boldSystemFontOfSize:12.0], CPThemeStateDisabled],
[@"weekday-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0]],
[@"weekday-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]],
[@"weekday-text-shadow-offset", CGSizeMake(0,1)],
[@"weekday-font", [CPFont systemFontOfSize:11.0]],
[@"weekday-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeStateDisabled],
[@"weekday-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled],
[@"weekday-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled],
[@"weekday-font", [CPFont systemFontOfSize:11.0], CPThemeStateDisabled],
[@"clock-text-color", [CPColor colorWithCalibratedRed:153.0 / 255.0 green:153.0 / 255.0 blue:153.0 / 255.0 alpha:1.0]],
[@"clock-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0]],
[@"clock-text-shadow-offset", CGSizeMake(0,1)],
[@"clock-font", [CPFont systemFontOfSize:11.0]],
[@"clock-text-color", [CPColor colorWithCalibratedRed:153.0 / 255.0 green:153.0 / 255.0 blue:153.0 / 255.0 alpha:0.5], CPThemeStateDisabled],
[@"clock-text-shadow-color", [CPColor whiteColor], CPThemeStateDisabled],
[@"clock-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled],
[@"clock-font", [CPFont systemFontOfSize:11.0], CPThemeStateDisabled],
[@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeStateNormal],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateNormal],
[@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateNormal],
[@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateNormal],
[@"tile-text-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:1.0], CPThemeStateHighlighted],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateHighlighted],
[@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted],
[@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted],
[@"tile-text-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], [CPThemeStateHighlighted, CPThemeStateDisabled]],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateHighlighted, CPThemeStateDisabled]],
[@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateDisabled]],
[@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateDisabled]],
[@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeStateSelected],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateSelected],
[@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateSelected],
[@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateSelected],
[@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], [CPThemeStateHighlighted, CPThemeStateSelected]],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateHighlighted, CPThemeStateSelected]],
[@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateSelected]],
[@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateSelected]],
[@"tile-text-color", [CPColor colorWithCalibratedRed:179.0 / 255.0 green:179.0 / 255.0 blue:179.0 / 255.0 alpha:1.0], CPThemeStateDisabled],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeStateDisabled],
[@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled],
[@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled],
[@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected]],
[@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], [CPThemeStateDisabled, CPThemeStateSelected]],
[@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateDisabled, CPThemeStateSelected]],
[@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateDisabled, CPThemeStateSelected]],
[@"arrow-image-left", arrowImageLeft],
[@"arrow-image-right", arrowImageRight],
[@"arrow-image-left-highlighted", arrowImageLeftHighlighted],
[@"arrow-image-right-highlighted", arrowImageRightHighlighted],
[@"circle-image", circleImage],
[@"circle-image-highlighted", circleImageHighlighted],
[@"arrow-inset", CGInsetMake(9.0, 4.0, 0.0, 0.0)],
[@"second-hand-image", secondHandImage],
[@"hour-hand-image", hourHandImage],
[@"middle-hand-image", middleHandImage],
[@"minute-hand-image", minuteHandImage],
[@"second-hand-image", secondHandImageDisabled, CPThemeStateDisabled],
[@"hour-hand-image", hourHandImageDisabled, CPThemeStateDisabled],
[@"middle-hand-image", middleHandImageDisabled, CPThemeStateDisabled],
[@"minute-hand-image", minuteHandImageDisabled, CPThemeStateDisabled],
[@"second-hand-size", secondHandSize],
[@"hour-hand-size", hourHandSize],
[@"middle-hand-size", middleHandSize],
[@"minute-hand-size", minuteHandSize],
[@"border-width", 1.0],
[@"size-header", CGSizeMake(141.0, 39.0)],
[@"size-tile", CGSizeMake(20.0, 18.0)],
[@"size-clock", clockSize],
[@"size-calendar", CGSizeMake(141.0, 109.0)],
[@"min-size-calendar", CGSizeMake(141.0, 148.0)],
[@"max-size-calendar", CGSizeMake(141.0, 148.0)]
];
[datePicker setDatePickerStyle:CPClockAndCalendarDatePickerStyle];
[datePicker setBackgroundColor:[CPColor whiteColor]];
[self registerThemeValues:themeValues forView:datePicker];
return datePicker;
}
+ (CPTokenField)themedTokenField
{
var tokenfield = [[CPTokenField alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 29.0)],
overrides =
[
[@"bezel-inset", CGInsetMakeZero()],
[@"editor-inset", CGInsetMake(3.0, 0.0, 0.0, 0.0)],
// Non-bezeled token field with tokens
[@"content-inset", CGInsetMake(6.0, 8.0, 4.0, 8.0)],
// Non-bezeled token field with no tokens
[@"content-inset", CGInsetMake(7.0, 8.0, 6.0, 8.0), CPTextFieldStatePlaceholder],
// Bezeled token field with tokens
[@"content-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBezeled],
// Bezeled token field with no tokens
[@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), [CPThemeStateBezeled, CPTextFieldStatePlaceholder]]
];
[self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues];
return tokenfield;
}
+ (_CPTokenFieldToken)themedTokenFieldToken
{
var token = [[_CPTokenFieldToken alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 19.0)],
bezelColor = PatternColor(
[
["token-left.png", 11.0, 19.0],
["token-center.png", 1.0, 19.0],
["token-right.png", 11.0, 19.0]
],
PatternIsHorizontal),
bezelHighlightedColor = PatternColor(
[
["token-highlighted-left.png", 11.0, 19.0],
["token-highlighted-center.png", 1.0, 19.0],
["token-highlighted-right.png", 11.0, 19.0]
],
PatternIsHorizontal),
bezelColorDisabled = PatternColor(
[
["token-disabled-left.png", 11.0, 19.0],
["token-disabled-center.png", 1.0, 19.0],
["token-disabled-right.png", 11.0, 19.0]
],
PatternIsHorizontal),
textColor = [CPColor colorWithRed:41.0 / 255.0 green:51.0 / 255.0 blue:64.0 / 255.0 alpha:1.0],
textHighlightedColor = [CPColor whiteColor],
themeValues =
[
[@"bezel-color", bezelColor, CPThemeStateBezeled],
[@"bezel-color", bezelHighlightedColor, [CPThemeStateBezeled, CPThemeStateHighlighted]],
[@"bezel-color", bezelColorDisabled, [CPThemeStateBezeled, CPThemeStateDisabled]],
[@"text-color", textColor],
[@"text-color", textHighlightedColor, CPThemeStateHighlighted],
[@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled],
[@"content-inset", CGInsetMake(2.0, 20.0, 2.0, 20.0), CPThemeStateBezeled],
// Minimum height == maximum height since tokens are fixed height.
[@"min-size", CGSizeMake(0.0, 19.0)],
[@"max-size", CGSizeMake(-1.0, 19.0)],
[@"vertical-alignment", CPCenterTextAlignment]
];
[self registerThemeValues:themeValues forView:token];
return token;
}
+ (_CPTokenFieldTokenDisclosureButton)themedTokenFieldDisclosureButton
{
var button = [[_CPTokenFieldTokenDisclosureButton alloc] initWithFrame:CGRectMake(0, 0, 9, 9)],
arrowImage = PatternColor("token-disclosure.png", 7.0, 6.0),
arrowImageHiglighted = PatternColor("token-disclosure-highlighted.png", 7.0, 6.0),
themeValues =
[
[@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal],
[@"bezel-color", nil, CPThemeStateBordered],
[@"bezel-color", arrowImage, [CPThemeStateBordered, CPThemeStateHovered]],
[@"bezel-color", arrowImageHiglighted, [CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted]],
[@"min-size", CGSizeMake(7.0, 6.0)],
[@"max-size", CGSizeMake(7.0, 6.0)],
[@"offset", CGPointMake(17, 7)]
];
[self registerThemeValues:themeValues forView:button];
return button;
}
+ (_CPTokenFieldTokenCloseButton)themedTokenFieldTokenCloseButton
{
var button = [[_CPTokenFieldTokenCloseButton alloc] initWithFrame:CGRectMake(0, 0, 9, 9)],
bezelColor = PatternColor("token-close.png", 8.0, 8.0),
bezelHighlightedColor = PatternColor("token-close-highlighted.png", 8.0, 8.0),
themeValues =
[
[@"bezel-color", bezelColor, [CPThemeStateBordered, CPThemeStateHovered]],
[@"bezel-color", [bezelColor colorWithAlphaComponent:0], [CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color", bezelHighlightedColor, [CPThemeStateBordered, CPThemeStateHighlighted]],
[@"min-size", CGSizeMake(8.0, 8.0)],
[@"max-size", CGSizeMake(8.0, 8.0)],
[@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBordered],
[@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateBordered, CPThemeStateHighlighted]],
[@"offset", CGPointMake(17, 6), CPThemeStateBordered]
];
[self registerThemeValues:themeValues forView:button];
return button;
}
+ (CPColorWell)themedColorWell
{
// The CPColorPanel CPColorWell depends on requires CPApp.
[CPApplication sharedApplication];
var colorWell = [[CPColorWell alloc] initWithFrame:CGRectMake(0.0, 0.0, 60.0, 24.0)],
bezelColor = PatternColor(
[
["colorwell-bezel-left.png", 3.0, 24.0],
["colorwell-bezel-center.png", 1.0, 24.0],
["colorwell-bezel-right.png", 3.0, 24.0]
],
PatternIsHorizontal),
bezelHighlightedColor = PatternColor(
[
["colorwell-bezel-highlighted-left.png", 3.0, 24.0],
["colorwell-bezel-highlighted-center.png", 1.0, 24.0],
["colorwell-bezel-highlighted-right.png", 3.0, 24.0]
],
PatternIsHorizontal),
bezelDisabledColor = PatternColor(
[
["colorwell-bezel-disabled-left.png", 3.0, 24.0],
["colorwell-bezel-disabled-center.png", 1.0, 24.0],
["colorwell-bezel-disabled-right.png", 3.0, 24.0]
],
PatternIsHorizontal),
contentBorderColor = PatternColor(
[
["colorwell-content-border-left.png", 1.0, 15.0],
["colorwell-content-border-center.png", 1.0, 15.0],
["colorwell-content-border-right.png", 1.0, 15.0]
],
PatternIsHorizontal),
themedColorWellValues =
[
[@"bezel-color", bezelColor, CPThemeStateBordered],
[@"content-inset", CGInsetMake(5.0, 5.0, 5.0, 5.0), CPThemeStateBordered],
[@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered],
[@"content-border-color", contentBorderColor, CPThemeStateBordered],
[@"bezel-color", bezelHighlightedColor, [CPThemeStateBordered, CPThemeStateHighlighted]],
[@"bezel-color", bezelDisabledColor, [CPThemeStateBordered, CPThemeStateDisabled]],
];
[self registerThemeValues:themedColorWellValues forView:colorWell];
return colorWell;
}
+ (CPComboBox)themedComboBox
{
var combo = [[CPComboBox alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 29.0)],
regularBezelColor = PatternColor(
[
["combobox-bezel-left.png", 6.0, 29.0],
["combobox-bezel-center.png", 1.0, 29.0],
["combobox-bezel-right.png", 24.0, 29.0]
],
PatternIsHorizontal),
regularBezelFocusedColor = PatternColor(
[
["combobox-bezel-focused-left.png", 6.0, 29.0],
["combobox-bezel-focused-center.png", 1.0, 29.0],
["combobox-bezel-focused-right.png", 24.0, 29.0]
],
PatternIsHorizontal),
regularBezelDisabledColor = PatternColor(
[
["combobox-bezel-disabled-left.png", 6.0, 29.0],
["combobox-bezel-disabled-center.png", 1.0, 29.0],
["combobox-bezel-disabled-right.png", 24.0, 29.0]
],
PatternIsHorizontal),
regularBezelNoBorderColor = PatternColor(
[
["combobox-bezel-no-border-left.png", 6.0, 29.0],
["combobox-bezel-no-border-center.png", 1.0, 29.0],
["combobox-bezel-no-border-right.png", 24.0, 29.0]
],
PatternIsHorizontal),
regularBezelNoBorderFocusedColor = PatternColor(
[
["combobox-bezel-no-border-focused-left.png", 6.0, 29.0],
["combobox-bezel-no-border-focused-center.png", 1.0, 29.0],
["combobox-bezel-no-border-focused-right.png", 24.0, 29.0]
],
PatternIsHorizontal),
regularBezelNoBorderDisabledColor = PatternColor(
[
["combobox-bezel-no-border-disabled-left.png", 6.0, 29.0],
["combobox-bezel-no-border-disabled-center.png", 1.0, 29.0],
["combobox-bezel-no-border-disabled-right.png", 24.0, 29.0]
],
PatternIsHorizontal),
smallBezelColor = PatternColor(
"combobox-bezel{state}{position}.png",
{
states: ["", "disabled"],
width: 4.0,
height: 20.0,
rightWidth: 19.0,
orientation: PatternIsHorizontal
}),
smallBezelFocusedColor = PatternColor(
"combobox-bezel-focused{position}.png",
{
width: 8.0,
height: 26.0,
rightWidth: 19.0,
orientation: PatternIsHorizontal
}),
smallBezelNoBorderColor = PatternColor(
"combobox-bezel-no-border{state}{position}.png",
{
states: ["", "disabled"],
width: 4.0,
height: 20.0,
rightWidth: 19.0,
orientation: PatternIsHorizontal
}),
smallBezelNoBorderFocusedColor = PatternColor(
"combobox-bezel-no-border-focused{position}.png",
{
width: 8.0,
height: 26.0,
rightWidth: 23.0,
orientation: PatternIsHorizontal
}),
miniBezelColor = PatternColor(
"combobox-bezel{state}{position}.png",
{
states: ["", "disabled"],
width: 4.0,
height: 17.5,
rightWidth: 17.0,
orientation: PatternIsHorizontal
}),
miniBezelFocusedColor = PatternColor(
"combobox-bezel-focused{position}.png",
{
width: 6.0,
height: 22.0,
rightWidth: 17.0,
orientation: PatternIsHorizontal
}),
miniBezelNoBorderColor = PatternColor(
"combobox-bezel-no-border{state}{position}.png",
{
states: ["", "disabled"],
width: 4.0,
height: 17.5,
rightWidth: 17.0,
orientation: PatternIsHorizontal
}),
miniBezelNoBorderFocusedColor = PatternColor(
"combobox-bezel-no-border-focused{position}.png",
{
width: 6.0,
height: 22.0,
rightWidth: 19.0,
orientation: PatternIsHorizontal
}),
overrides =
[
[@"bezel-color", regularBezelColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered]],
[@"bezel-color", regularBezelFocusedColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing]],
[@"bezel-color", regularBezelDisabledColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled]],
[@"bezel-color", regularBezelNoBorderColor, CPThemeStateBezeled],
[@"bezel-color", regularBezelNoBorderFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-color", regularBezelNoBorderDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]],
[@"border-inset", CGInsetMake(3.0, 3.0, 3.0, 3.0), CPThemeStateBezeled],
[@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]],
[@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), [CPThemeStateBezeled, CPThemeStateDisabled]],
// The right border inset has to make room for the focus ring and popup button
[@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]],
[@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), CPThemeStateBezeled],
[@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]],
[@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]],
[@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled],
// Because combo box uses a three-part bezel, the height is fixed
[@"min-size", CGSizeMake(0, 29.0)],
[@"max-size", CGSizeMake(-1, 29.0)],
[@"nib2cib-adjustment-frame", CGRectMake(-3.0, 0.0, 3.0, 0.0)],
// CPThemeStateControlSizeSmall
[@"bezel-color", smallBezelColor["@"], [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPComboBoxStateButtonBordered]],
[@"bezel-color", smallBezelFocusedColor, [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing]],
[@"bezel-color", smallBezelColor["disabled"], [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled]],
[@"bezel-color", smallBezelNoBorderColor["@"], [CPThemeStateControlSizeSmall, CPThemeStateBezeled]],
[@"bezel-color", smallBezelNoBorderFocusedColor, [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-color", smallBezelNoBorderColor["disabled"], [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateDisabled]],
[@"bezel-inset", CGInsetMake(1.0, 2.0, 1.0, 2.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateControlSizeSmall]],
[@"bezel-inset", CGInsetMake(1.0, 2.0, 1.0, 0.0), [CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered, CPThemeStateControlSizeSmall]],
[@"bezel-inset", CGInsetMake(1.0, 2.0, 1.0, 2.0), [CPThemeStateBezeled, CPThemeStateDisabled, CPThemeStateControlSizeSmall]],
[@"content-inset", CGInsetMake(6.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateControlSizeSmall]],
[@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall],
[@"max-size", CGSizeMake(-1, 26.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(-2.0, -1.0, 1.0, 0.0), CPThemeStateControlSizeSmall],
// CPThemeStateControlSizeMini
[@"bezel-color", miniBezelColor["@"], [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPComboBoxStateButtonBordered]],
[@"bezel-color", miniBezelFocusedColor, [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing]],
[@"bezel-color", miniBezelColor["disabled"], [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled]],
[@"bezel-color", miniBezelNoBorderColor["@"], [CPThemeStateControlSizeMini, CPThemeStateBezeled]],
[@"bezel-color", miniBezelNoBorderFocusedColor, [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateEditing]],
[@"bezel-color", miniBezelNoBorderColor["disabled"], [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateDisabled]],
[@"bezel-inset", CGInsetMake(1.0, 2.0, 1.0, 2.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateControlSizeMini]],
[@"bezel-inset", CGInsetMake(1.0, 2.0, 1.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered, CPThemeStateControlSizeMini]],
[@"bezel-inset", CGInsetMake(1.0, 2.0, 1.0, 2.0), [CPThemeStateBezeled, CPThemeStateDisabled, CPThemeStateControlSizeMini]],
[@"content-inset", CGInsetMake(6.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateControlSizeMini]],
[@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini],
[@"max-size", CGSizeMake(-1, 22.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(-2.0, -1.0, 2.0, 0.0), CPThemeStateControlSizeMini],
];
[self registerThemeValues:overrides forView:combo inherit:themedTextFieldValues];
return combo;
}
+ (CPRadioButton)themedRadioButton
{
var button = [CPRadio radioWithTitle:@"Hello Friend!"],
regularImageNormal = PatternImage("radio-image.png", 17.0, 17.0),
regularImageSelected = PatternImage("radio-image-selected.png", 17.0, 17.0),
regularImageSelectedHighlighted = PatternImage("radio-image-selected-highlighted.png", 17.0, 17.0),
regularImageSelectedDisabled = PatternImage("radio-image-selected-disabled.png", 17.0, 17.0),
regularImageDisabled = PatternImage("radio-image-disabled.png", 17.0, 17.0),
regularImageHighlighted = PatternImage("radio-image-highlighted.png", 17.0, 17.0),
smallImageNormal = PatternImage("radio-image.png", 15.0, 15.0),
smallImageSelected = PatternImage("radio-image-selected.png", 15.0, 15.0),
smallImageSelectedHighlighted = PatternImage("radio-image-selected-highlighted.png", 15.0, 15.0),
smallImageSelectedDisabled = PatternImage("radio-image-selected.png", 15.0, 15.0),
smallImageDisabled = PatternImage("radio-image.png", 15.0, 15.0),
smallImageHighlighted = PatternImage("radio-image-highlighted.png", 15.0, 15.0),
miniImageNormal = PatternImage("radio-image.png", 14.0, 14.0),
miniImageSelected = PatternImage("radio-image-selected.png", 14.0, 14.0),
miniImageSelectedHighlighted = PatternImage("radio-image-selected-highlighted.png", 14.0, 14.0),
miniImageSelectedDisabled = PatternImage("radio-image-selected.png", 14.0, 14.0),
miniImageDisabled = PatternImage("radio-image.png", 14.0, 14.0),
miniImageHighlighted = PatternImage("radio-image-highlighted.png", 14.0, 14.0);
themeValues =
[
[@"alignment", CPLeftTextAlignment, CPThemeStateNormal],
[@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal],
[@"image", regularImageNormal, CPThemeStateNormal],
[@"image", regularImageSelected, CPThemeStateSelected],
[@"image", regularImageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]],
[@"image", regularImageHighlighted, CPThemeStateHighlighted],
[@"image", regularImageDisabled, CPThemeStateDisabled],
[@"image", regularImageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]],
[@"image-offset", CPRadioImageOffset],
[@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal],
[@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0], CPThemeStateDisabled],
[@"min-size", CGSizeMake(0.0, 17.0)],
[@"max-size", CGSizeMake(-1.0, -1.0)],
[@"nib2cib-adjustment-frame", CGRectMake(0.0, -2.0, 0.0, 0.0)],
// CPThemeStateControlSizeSmall
[@"image", smallImageNormal, [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
[@"image", smallImageSelected, [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
[@"image", smallImageSelectedHighlighted, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"image", smallImageHighlighted, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
[@"image", smallImageDisabled, [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
[@"image", smallImageSelectedDisabled, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
[@"min-size", CGSizeMake(0, 15.0), CPThemeStateControlSizeSmall],
[@"max-size", CGSizeMake(-1, 15.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(2.0, -3.0, 0.0, 0.0), CPThemeStateControlSizeSmall],
// CPThemeStateControlSizeMini
[@"image", miniImageNormal, [CPThemeStateControlSizeMini, CPThemeStateNormal]],
[@"image", miniImageSelected, [CPThemeStateControlSizeMini, CPThemeStateSelected]],
[@"image", miniImageSelectedHighlighted, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"image", miniImageHighlighted, [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
[@"image", miniImageDisabled, [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
[@"image", miniImageSelectedDisabled, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
[@"min-size", CGSizeMake(0, 14.0), CPThemeStateControlSizeMini],
[@"max-size", CGSizeMake(-1, 14.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(4.0, -3.0, 0.0, 0.0), CPThemeStateControlSizeMini],
];
[self registerThemeValues:themeValues forView:button];
return button;
}
+ (CPCheckBox)themedCheckBoxButton
{
var button = [CPCheckBox checkBoxWithTitle:@"Another Option"],
regularImageNormal = PatternImage("check-box-image.png", 15.0, 16.0),
regularImageSelected = PatternImage("check-box-image-selected.png", 15.0, 16.0),
regularImageSelectedHighlighted = PatternImage("check-box-image-selected-highlighted.png", 15.0, 16.0),
regularImageSelectedDisabled = PatternImage("check-box-image-selected-disabled.png", 15.0, 16.0),
regularImageDisabled = PatternImage("check-box-image-disabled.png", 15.0, 16.0),
regularImageHighlighted = PatternImage("check-box-image-highlighted.png", 15.0, 16.0),
smallImageNormal = PatternImage("check-box-image.png", 15.0, 16.0),
smallImageSelected = PatternImage("check-box-image-selected.png", 15.0, 16.0),
smallImageSelectedHighlighted = PatternImage("check-box-image-selected-highlighted.png", 15.0, 16.0),
smallImageSelectedDisabled = PatternImage("check-box-image-selected.png", 15.0, 16.0),
smallImageDisabled = PatternImage("check-box-image.png", 15.0, 16.0),
smallImageHighlighted = PatternImage("check-box-image-highlighted.png", 15.0, 16.0),
miniImageNormal = PatternImage("check-box-image.png", 13.0, 14.0),
miniImageSelected = PatternImage("check-box-image-selected.png", 13.0, 14.0),
miniImageSelectedHighlighted = PatternImage("check-box-image-selected-highlighted.png", 13.0, 14.0),
miniImageSelectedDisabled = PatternImage("check-box-image-selected.png", 13.0, 14.0),
miniImageDisabled = PatternImage("check-box-image.png", 13.0, 14.0),
miniImageHighlighted = PatternImage("check-box-image-highlighted.png", 13.0, 14.0),
themeValues =
[
[@"alignment", CPLeftTextAlignment, CPThemeStateNormal],
[@"content-inset", CGInsetMakeZero(), CPThemeStateNormal],
[@"image", regularImageNormal, CPThemeStateNormal],
[@"image", regularImageSelected, CPThemeStateSelected],
[@"image", regularImageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]],
[@"image", regularImageHighlighted, CPThemeStateHighlighted],
[@"image", regularImageDisabled, CPThemeStateDisabled],
[@"image", regularImageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]],
[@"image-offset", CPCheckBoxImageOffset],
[@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal],
[@"text-color", [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0], CPThemeStateDisabled],
[@"min-size", CGSizeMake(0.0, 17.0)],
[@"max-size", CGSizeMake(-1.0, -1.0)],
[@"nib2cib-adjustment-frame", CGRectMake(3.0, 0.0, 0.0, 0.0)],
// CPThemeStateControlSizeSmall
[@"image", smallImageNormal, [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
[@"image", smallImageSelected, [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
[@"image", smallImageSelectedHighlighted, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"image", smallImageHighlighted, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
[@"image", smallImageDisabled, [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
[@"image", smallImageSelectedDisabled, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
[@"min-size", CGSizeMake(16.0, 16.0), CPThemeStateControlSizeSmall],
[@"max-size", CGSizeMake(-1.0, -1.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(4.0, 0.0, 15.0, 0.0), CPThemeStateControlSizeSmall],
// CPThemeStateControlSizeMini
[@"image", miniImageNormal, [CPThemeStateControlSizeMini, CPThemeStateNormal]],
[@"image", miniImageSelected, [CPThemeStateControlSizeMini, CPThemeStateSelected]],
[@"image", miniImageSelectedHighlighted, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateHighlighted]],
[@"image", miniImageHighlighted, [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
[@"image", miniImageDisabled, [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
[@"image", miniImageSelectedDisabled, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
[@"min-size", CGSizeMake(13.0, 14.0), CPThemeStateControlSizeMini],
[@"max-size", CGSizeMake(-1.0, -1.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(5.0, 0.0, 15.0, 0.0), CPThemeStateControlSizeMini],
];
[button setThemeState:CPThemeStateSelected];
[self registerThemeValues:themeValues forView:button];
return button;
}
+ (CPCheckBox)themedMixedCheckBoxButton
{
var button = [self themedCheckBoxButton];
[button setAllowsMixedState:YES];
[button setState:CPMixedState];
var mixedHighlightedImage = PatternImage("check-box-image-mixed-highlighted.png", 15.0, 16.0),
mixedDisabledImage = PatternImage("check-box-image-mixed-disabled.png", 15.0, 16.0),
mixedImage = PatternImage("check-box-image-mixed.png", 15.0, 16.0),
themeValues =
[
[@"image", mixedImage, CPButtonStateMixed],
[@"image", mixedHighlightedImage, [CPButtonStateMixed, CPThemeStateHighlighted]],
[@"image", mixedDisabledImage, [CPButtonStateMixed, CPThemeStateDisabled]],
[@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed],
[@"max-size", CGSizeMake(-1.0, -1.0)]
];
[self registerThemeValues:themeValues forView:button];
return button;
}
+ (CPSegmentedControl)makeSegmentedControl
{
var segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 24.0)];
[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];
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);
var smallCenterBezelColor = PatternColor("segmented-control-bezel-center.png", 1.0, 20.0),
smallDividerBezelColor = PatternColor("segmented-control-bezel-divider.png", 1.0, 20.0),
smallCenterHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-center.png", 1.0, 20.0),
smallDividerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-divider.png", 1.0, 20.0),
smallLeftHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-left.png", 4.0, 20.0),
smallRightHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-right.png", 4.0, 20.0),
smallInactiveCenterBezelColor = PatternColor("segmented-control-bezel-disabled-center.png", 1.0, 20.0),
smallInactiveDividerBezelColor = PatternColor("segmented-control-bezel-disabled-divider.png", 1.0, 20.0),
smallInactiveLeftBezelColor = PatternColor("segmented-control-bezel-disabled-left.png", 4.0, 20.0),
smallInactiveRightBezelColor = PatternColor("segmented-control-bezel-disabled-right.png", 4.0, 20.0),
smallInactiveHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-center.png", 1.0, 20.0),
smallInactiveHighlightedDividerBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-divider.png", 1.0, 20.0),
smallInactiveHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-left.png", 4.0, 20.0),
smallInactiveHighlightedRightBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-right.png", 4.0, 20.0),
smallLeftBezelColor = PatternColor("segmented-control-bezel-left.png", 4.0, 20.0),
smallRightBezelColor = PatternColor("segmented-control-bezel-right.png", 4.0, 20.0),
smallPushedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-center.png", 1.0, 20.0),
smallPushedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-left.png", 4.0, 20.0),
smallPushedRightBezelColor = PatternColor("segmented-control-bezel-pushed-right.png", 4.0, 20.0),
smallPushedHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-center.png", 1.0, 20.0),
smallPushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 20.0),
smallPushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 20.0);
var miniCenterBezelColor = PatternColor("segmented-control-bezel-center.png", 1.0, 15.0),
miniDividerBezelColor = PatternColor("segmented-control-bezel-divider.png", 1.0, 15.0),
miniCenterHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-center.png", 1.0, 15.0),
miniDividerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-divider.png", 1.0, 15.0),
miniLeftHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-left.png", 4.0, 15.0),
miniRightHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-right.png", 4.0, 15.0),
miniInactiveCenterBezelColor = PatternColor("segmented-control-bezel-disabled-center.png", 1.0, 15.0),
miniInactiveDividerBezelColor = PatternColor("segmented-control-bezel-disabled-divider.png", 1.0, 15.0),
miniInactiveLeftBezelColor = PatternColor("segmented-control-bezel-disabled-left.png", 4.0, 15.0),
miniInactiveRightBezelColor = PatternColor("segmented-control-bezel-disabled-right.png", 4.0, 15.0),
miniInactiveHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-center.png", 1.0, 15.0),
miniInactiveHighlightedDividerBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-divider.png", 1.0, 15.0),
miniInactiveHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-left.png", 4.0, 15.0),
miniInactiveHighlightedRightBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-right.png", 4.0, 15.0),
miniLeftBezelColor = PatternColor("segmented-control-bezel-left.png", 4.0, 15.0),
miniRightBezelColor = PatternColor("segmented-control-bezel-right.png", 4.0, 15.0),
miniPushedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-center.png", 1.0, 15.0),
miniPushedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-left.png", 4.0, 15.0),
miniPushedRightBezelColor = PatternColor("segmented-control-bezel-pushed-right.png", 4.0, 15.0),
miniPushedHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-center.png", 1.0, 15.0),
miniPushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 15.0),
miniPushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 15.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]],
[@"center-segment-bezel-color", smallCenterBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
[@"center-segment-bezel-color", smallInactiveCenterBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
[@"center-segment-bezel-color", smallInactiveHighlightedCenterBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
[@"center-segment-bezel-color", smallCenterHighlightedBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
[@"center-segment-bezel-color", smallPushedCenterBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
[@"center-segment-bezel-color", smallPushedHighlightedCenterBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
[@"divider-bezel-color", smallDividerBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
[@"divider-bezel-color", smallInactiveDividerBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
[@"divider-bezel-color", smallInactiveHighlightedDividerBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
[@"divider-bezel-color", smallDividerHighlightedBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
[@"left-segment-bezel-color", smallLeftBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
[@"left-segment-bezel-color", smallInactiveLeftBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
[@"left-segment-bezel-color", smallInactiveHighlightedLeftBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
[@"left-segment-bezel-color", smallLeftHighlightedBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
[@"left-segment-bezel-color", smallPushedLeftBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
[@"left-segment-bezel-color", smallPushedHighlightedLeftBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
[@"right-segment-bezel-color", smallRightBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
[@"right-segment-bezel-color", smallInactiveRightBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
[@"right-segment-bezel-color", smallInactiveHighlightedRightBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
[@"right-segment-bezel-color", smallRightHighlightedBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
[@"right-segment-bezel-color", smallPushedRightBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
[@"right-segment-bezel-color", smallPushedHighlightedRightBezelColor, [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
[@"center-segment-bezel-color", miniCenterBezelColor, [CPThemeStateControlSizeMini, CPThemeStateNormal]],
[@"center-segment-bezel-color", miniInactiveCenterBezelColor, [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
[@"center-segment-bezel-color", miniInactiveHighlightedCenterBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
[@"center-segment-bezel-color", miniCenterHighlightedBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected]],
[@"center-segment-bezel-color", miniPushedCenterBezelColor, [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
[@"center-segment-bezel-color", miniPushedHighlightedCenterBezelColor, [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
[@"divider-bezel-color", miniDividerBezelColor, [CPThemeStateControlSizeMini, CPThemeStateNormal]],
[@"divider-bezel-color", miniInactiveDividerBezelColor, [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
[@"divider-bezel-color", miniInactiveHighlightedDividerBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
[@"divider-bezel-color", miniDividerHighlightedBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected]],
[@"left-segment-bezel-color", miniLeftBezelColor, [CPThemeStateControlSizeMini, CPThemeStateNormal]],
[@"left-segment-bezel-color", miniInactiveLeftBezelColor, [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
[@"left-segment-bezel-color", miniInactiveHighlightedLeftBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
[@"left-segment-bezel-color", miniLeftHighlightedBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected]],
[@"left-segment-bezel-color", miniPushedLeftBezelColor, [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
[@"left-segment-bezel-color", miniPushedHighlightedLeftBezelColor, [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
[@"right-segment-bezel-color", miniRightBezelColor, [CPThemeStateControlSizeMini, CPThemeStateNormal]],
[@"right-segment-bezel-color", miniInactiveRightBezelColor, [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
[@"right-segment-bezel-color", miniInactiveHighlightedRightBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
[@"right-segment-bezel-color", miniRightHighlightedBezelColor, [CPThemeStateControlSizeMini, CPThemeStateSelected]],
[@"right-segment-bezel-color", miniPushedRightBezelColor, [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
[@"right-segment-bezel-color", miniPushedHighlightedRightBezelColor, [CPThemeStateControlSizeMini, 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],
[@"min-size", CGSizeMake(-1.0, 24.0)],
[@"max-size", CGSizeMake(-1.0, 24.0)],
[@"nib2cib-adjustment-frame", CGRectMake(1.0, 1.0, -3.0, 0.0)],
[@"min-size", CGSizeMake(-1.0, 20.0), CPThemeStateControlSizeSmall],
[@"max-size", CGSizeMake(-1.0, 20.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(2.0, 0.0, -4.0, 0.0), CPThemeStateControlSizeSmall],
[@"min-size", CGSizeMake(-1.0, 15.0), CPThemeStateControlSizeMini],
[@"max-size", CGSizeMake(-1.0, 15.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(1.0, 0.0, -2.0, 0.0), CPThemeStateControlSizeMini],
[@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]],
[@"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]
];
[self registerThemeValues:themedSegmentedControlValues forView:segmentedControl];
return segmentedControl;
}
+ (CPSlider)makeHorizontalSlider
{
return [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 24.0)];
}
+ (CPSlider)themedHorizontalSlider
{
var slider = [self makeHorizontalSlider],
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]
];
[self registerThemeValues:themedHorizontalSliderValues forView:slider];
return slider;
}
+ (CPSlider)makeVerticalSlider
{
return [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 24.0, 50.0)];
}
+ (CPSlider)themedVerticalSlider
{
var slider = [self makeVerticalSlider],
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, [CPThemeStateVertical, CPThemeStateDisabled]],
[@"knob-size", CGSizeMake(23.0, 24.0)],
[@"knob-color", knobColor],
[@"knob-color", knobHighlightedColor, CPThemeStateHighlighted],
[@"knob-color", knobDisabledColor, CPThemeStateDisabled]
];
[self registerThemeValues:themedVerticalSliderValues forView:slider];
return slider;
}
+ (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 = [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]],
[@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular],
[@"knob-color", knobColor, CPThemeStateCircular],
[@"knob-color", knobHighlightedColor, [CPThemeStateCircular, CPThemeStateHighlighted]],
[@"knob-color", knobDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]]
];
[self registerThemeValues:themedCircularSliderValues forView:slider];
return slider;
}
+ (CPButtonBar)makeButtonBar
{
var buttonBar = [[CPButtonBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 147.0, 26.0)];
[buttonBar setHasResizeControl:YES];
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),
buttonImagePlus = PatternImage("buttonbar-image-plus.png", 11.0, 12.0),
buttonImageMinus = PatternImage("buttonbar-image-minus.png", 11.0, 4.0),
buttonImageAction = PatternImage("buttonbar-image-action.png", 22.0, 14.0),
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]],
[@"button-image-plus", buttonImagePlus],
[@"button-image-minus", buttonImageMinus],
[@"button-image-action", buttonImageAction]
];
[self registerThemeValues:themedButtonBarValues forView:buttonBar];
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 = [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]],
[@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]],
[@"text-shadow-color", [CPColor whiteColor]],
[@"text-shadow-offset", CGSizeMake(0.0, 1.0)],
[@"text-alignment", CPLeftTextAlignment],
[@"line-break-mode", CPLineBreakByTruncatingTail],
[@"background-color", pressed, CPThemeStateHighlighted],
[@"background-color", highlighted, CPThemeStateSelected],
[@"background-color", highlightedPressed, [CPThemeStateHighlighted, CPThemeStateSelected]]
];
[self registerThemeValues:themedColumnHeaderValues forView:header];
return header;
}
+ (CPTableHeaderView)themedTableHeaderRow
{
var header = [[CPTableHeaderView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 23.0)],
normal = PatternColor("tableview-headerview.png", 1.0, 23.0),
gridColor = [CPColor colorWithHexString:@"dce0e2"];
[header setValue:normal forThemeAttribute:@"background-color"];
[header setValue:gridColor forThemeAttribute:@"divider-color"];
return header;
}
+ (_CPCornerView)themedCornerview
{
var scrollerWidth = [CPScroller scrollerWidth],
corner = [[_CPCornerView alloc] initWithFrame:CGRectMake(0.0, 0.0, scrollerWidth, 23.0)],
normal = PatternColor("tableview-headerview.png", 1.0, 23.0),
dividerColor = [CPColor colorWithHexString:@"dce0e2"];
[corner setValue:normal forThemeAttribute:"background-color"];
[corner setValue:dividerColor forThemeAttribute:"divider-color"];
return corner;
}
+ (CPTableView)themedTableView
{
// 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, 0.0, 150.0, 150.0)],
sortImage = PatternImage("tableview-headerview-ascending.png", 9.0, 8.0),
sortImageReversed = PatternImage("tableview-headerview-descending.png", 9.0, 8.0),
imageGenericFile = PatternImage("tableview-image-generic-file.png", 64.0, 64.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:@"cccccc"],
selectionColor = [CPColor colorWithHexString:@"5f83b9"],
sourceListSelectionColor = @{
CPSourceListGradient: CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), [98.0 / 255.0, 143.0 / 210.0, 209.0 / 255.0, 1.0, 46.0 / 255.0, 88.0 / 176.0, 208.0 / 255.0,1.0], [0,1], 2),
CPSourceListTopLineColor: [CPColor colorWithCalibratedRed:81.0 / 255.0 green:127.0 / 255.0 blue:200.0 / 255.0 alpha:1.0],
CPSourceListBottomLineColor: [CPColor colorWithCalibratedRed:34.0 / 255.0 green:63.0 / 255.0 blue:123.0 / 255.0 alpha:1.0]
},
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],
[@"image-generic-file", imageGenericFile],
[@"default-row-height", 23.0],
[@"dropview-on-background-color", [CPColor colorWithRed:72 / 255 green:134 / 255 blue:202 / 255 alpha:0.25]],
[@"dropview-on-border-color", [CPColor colorWithHexString:@"4886ca"]],
[@"dropview-on-border-width", 3.0],
[@"dropview-on-border-radius", 8.0],
[@"dropview-on-selected-background-color", [CPColor clearColor]],
[@"dropview-on-selected-border-color", [CPColor whiteColor]],
[@"dropview-on-selected-border-width", 2.0],
[@"dropview-on-selected-border-radius", 8.0],
[@"dropview-above-border-color", [CPColor colorWithHexString:@"4886ca"]],
[@"dropview-above-border-width", 3.0],
[@"dropview-above-selected-border-color", [CPColor colorWithHexString:@"8BB6F0"]],
[@"dropview-above-selected-border-width", 2.0],
];
[self registerThemeValues:themedTableViewValues forView:tableview];
return tableview;
}
+ (CPTextField)themedTableDataView
{
var view = [self themedStandardTextField];
[view setBezeled:NO];
[view setEditable:NO];
[view setThemeState:CPThemeStateTableDataView];
return view;
}
+ (CPSplitView)themedSplitView
{
var splitView = [[CPSplitView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 200.0)],
leftView = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 75.0, 150.0)],
rightView = [[CPView alloc] initWithFrame:CGRectMake(75.0, 0.0, 75.0, 150.0)],
horizontalDividerColor = PatternImage("splitview-divider-horizontal.png", 5.0, 10.0),
verticalDividerColor = PatternImage("splitview-divider-vertical.png", 10.0, 5.0);
[splitView addSubview:leftView];
[splitView addSubview:rightView];
[splitView setIsPaneSplitter:YES];
var themedSplitViewValues =
[
[@"divider-thickness", 1.0],
[@"pane-divider-thickness", 10.0],
[@"pane-divider-color", [CPColor colorWithRed:165.0 / 255.0 green:165.0 / 255.0 blue:165.0 / 255.0 alpha:1.0]],
[@"horizontal-divider-color", horizontalDividerColor],
[@"vertical-divider-color", verticalDividerColor]
];
[self registerThemeValues:themedSplitViewValues forView:splitView];
return splitView;
}
+ (CPAlert)themedAlert
{
var alert = [CPAlert new],
buttonOffset = 10.0,
defaultElementsMargin = 3.0,
errorIcon = PatternImage("alert-error.png", 53.0, 46.0),
helpIcon = PatternImage("alert-help.png", 24.0, 24.0),
helpIconPressed = PatternImage("alert-help-pressed.png", 24.0, 24.0),
helpLeftOffset = 15,
imageOffset = CGPointMake(15, 18),
informationIcon = PatternImage("alert-info.png", 53.0, 46.0),
informativeFont = [CPFont systemFontOfSize:CPFontCurrentSystemSize],
inset = CGInsetMake(15, 15, 15, 80),
messageFont = [CPFont boldSystemFontOfSize:CPFontDefaultSystemFontSize + 1],
size = CGSizeMake(400.0, 110.0),
suppressionButtonXOffset = 2.0,
suppressionButtonYOffset = 10.0,
suppressionButtonFont = [CPFont systemFontOfSize:CPFontCurrentSystemSize],
warningIcon = PatternImage("alert-warning.png", 53.0, 46.0);
themedAlertValues =
[
[@"button-offset", buttonOffset],
[@"content-inset", inset],
[@"default-elements-margin", defaultElementsMargin],
[@"error-image", errorIcon],
[@"help-image", helpIcon],
[@"help-image-left-offset", helpLeftOffset],
[@"help-image-pressed", helpIconPressed],
[@"image-offset", imageOffset],
[@"information-image", informationIcon],
[@"informative-text-alignment", CPJustifiedTextAlignment],
[@"informative-text-color", [CPColor blackColor]],
[@"informative-text-font", informativeFont],
[@"message-text-alignment", CPJustifiedTextAlignment],
[@"message-text-color", [CPColor blackColor]],
[@"message-text-font", messageFont],
[@"modal-window-button-margin-x", -1.0],
[@"modal-window-button-margin-y", 23.0],
[@"suppression-button-text-color", [CPColor blackColor]],
[@"suppression-button-text-font", suppressionButtonFont],
[@"size", size],
[@"suppression-button-x-offset", suppressionButtonXOffset],
[@"suppression-button-y-offset", suppressionButtonYOffset],
[@"warning-image", warningIcon]
];
[self registerThemeValues:themedAlertValues forView:alert];
return [alert themeView];
}
+ (CPStepper)themedStepper
{
var stepper = [CPStepper stepper],
bezelUp = PatternColor(
[
["stepper-bezel-big-up-left.png", 3.0, 13.0],
["stepper-bezel-big-up-center.png", 13.0, 13.0],
["stepper-bezel-big-up-right.png", 3.0, 13.0]
],
PatternIsHorizontal),
bezelDown = PatternColor(
[
["stepper-bezel-big-down-left.png", 3.0, 12.0],
["stepper-bezel-big-down-center.png", 13.0, 12.0],
["stepper-bezel-big-down-right.png", 3.0, 12.0]
],
PatternIsHorizontal),
bezelUpDisabled = PatternColor(
[
["stepper-bezel-big-disabled-up-left.png", 3.0, 13.0],
["stepper-bezel-big-disabled-up-center.png", 13.0, 13.0],
["stepper-bezel-big-disabled-up-right.png", 3.0, 13.0]
],
PatternIsHorizontal),
bezelDownDisabled = PatternColor(
[
["stepper-bezel-big-disabled-down-left.png", 3.0, 12.0],
["stepper-bezel-big-disabled-down-center.png", 13.0, 12.0],
["stepper-bezel-big-disabled-down-right.png", 3.0, 12.0]
],
PatternIsHorizontal),
bezelUpHighlighted = PatternColor(
[
[@"stepper-bezel-big-highlighted-up-left.png", 3.0, 13.0],
[@"stepper-bezel-big-highlighted-up-center.png", 13.0, 13.0],
[@"stepper-bezel-big-highlighted-up-right.png", 3.0, 13.0]
],
PatternIsHorizontal),
bezelDownHighlighted = PatternColor(
[
[@"stepper-bezel-big-highlighted-down-left.png", 3.0, 12.0],
[@"stepper-bezel-big-highlighted-down-center.png", 13.0, 12.0],
[@"stepper-bezel-big-highlighted-down-right.png", 3.0, 12.0]
],
PatternIsHorizontal),
smallBezelUp = PatternColor(
"stepper-bezel-big{state}-up{position}.png",
{
states: ["", "highlighted", "disabled"],
width: 3.0,
height: 11.0,
centerWidth: 11.0,
orientation: PatternIsHorizontal
}),
smallBezelDown = PatternColor(
"stepper-bezel-big{state}-down{position}.png",
{
states: ["", "highlighted", "disabled"],
width: 3.0,
height: 10.0,
centerWidth: 11.0,
orientation: PatternIsHorizontal
}),
miniBezelUp = PatternColor(
"stepper-bezel-big{state}-up{position}.png",
{
states: ["", "highlighted", "disabled"],
width: 2.0,
height: 8.0,
centerWidth: 8.0,
orientation: PatternIsHorizontal
}),
miniBezelDown = PatternColor(
"stepper-bezel-big{state}-down{position}.png",
{
states: ["", "highlighted", "disabled"],
width: 2.0,
height: 7.0,
centerWidth: 8.0,
orientation: PatternIsHorizontal
}),
themeValues =
[
[@"bezel-color-up-button", bezelUp, CPThemeStateBordered],
[@"bezel-color-down-button", bezelDown, CPThemeStateBordered],
[@"bezel-color-up-button", bezelUpDisabled, [CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color-down-button", bezelDownDisabled, [CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color-up-button", bezelUpHighlighted, [CPThemeStateBordered, CPThemeStateHighlighted]],
[@"bezel-color-down-button", bezelDownHighlighted, [CPThemeStateBordered, CPThemeStateHighlighted]],
[@"up-button-size", CGSizeMake(19.0, 13.0)],
[@"down-button-size", CGSizeMake(19.0, 12.0)],
[@"nib2cib-adjustment-frame", CGRectMake(3.0, -25.0, 0.0, 0.0)],
// CPThemeStateControlSizeSmall
[@"bezel-color-up-button", smallBezelUp["@"], [CPThemeStateControlSizeSmall, CPThemeStateBordered]],
[@"bezel-color-down-button", smallBezelDown["@"], [CPThemeStateControlSizeSmall, CPThemeStateBordered]],
[@"bezel-color-up-button", smallBezelUp["disabled"], [CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color-down-button", smallBezelDown["disabled"], [CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color-up-button", smallBezelUp["highlighted"], [CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateHighlighted]],
[@"bezel-color-down-button", smallBezelDown["highlighted"], [CPThemeStateControlSizeSmall, CPThemeStateBordered, CPThemeStateHighlighted]],
[@"up-button-size", CGSizeMake(17.0, 11.0), CPThemeStateControlSizeSmall],
[@"down-button-size", CGSizeMake(17.0, 10.0), CPThemeStateControlSizeSmall],
[@"nib2cib-adjustment-frame", CGRectMake(3.0, -21.0, 0.0, 0.0), CPThemeStateControlSizeSmall],
// CPThemeStateControlSizeMini
[@"bezel-color-up-button", miniBezelUp["@"], [CPThemeStateControlSizeMini, CPThemeStateBordered]],
[@"bezel-color-down-button", miniBezelDown["@"], [CPThemeStateControlSizeMini, CPThemeStateBordered]],
[@"bezel-color-up-button", miniBezelUp["disabled"], [CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color-down-button", miniBezelDown["disabled"], [CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateDisabled]],
[@"bezel-color-up-button", miniBezelUp["highlighted"], [CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateHighlighted]],
[@"bezel-color-down-button", miniBezelDown["highlighted"], [CPThemeStateControlSizeMini, CPThemeStateBordered, CPThemeStateHighlighted]],
[@"up-button-size", CGSizeMake(12.0, 8.0), CPThemeStateControlSizeMini],
[@"down-button-size", CGSizeMake(12.0, 7.0), CPThemeStateControlSizeMini],
[@"nib2cib-adjustment-frame", CGRectMake(3.0, -14.0, 0.0, 0.0), CPThemeStateControlSizeMini],
];
[self registerThemeValues:themeValues forView:stepper];
return stepper;
}
+ (CPRuleEditor)themedRuleEditor
{
var ruleEditor = [[CPRuleEditor alloc] initWithFrame:CGRectMake(0, 0, 400, 300)],
backgroundColors = [[CPColor whiteColor], [CPColor colorWithRed:235 / 255 green:239 / 255 blue:252 / 255 alpha:1]],
selectedActiveRowColor = [CPColor colorWithHexString:@"5f83b9"],
selectedInactiveRowColor = [CPColor colorWithWhite:0.83 alpha:1],
sliceTopBorderColor = [CPColor colorWithWhite:0.9 alpha:1],
sliceBottomBorderColor = [CPColor colorWithWhite:0.729412 alpha:1],
sliceLastBottomBorderColor = [CPColor colorWithWhite:0.6 alpha:1],
addImage = PatternImage(@"rule-editor-add.png", 8.0, 8.0),
removeImage = PatternImage(@"rule-editor-remove.png", 8.0, 8.0),
ruleEditorThemedValues =
[
[@"alternating-row-colors", backgroundColors],
[@"selected-color", selectedActiveRowColor, CPThemeStateNormal],
[@"selected-color", selectedInactiveRowColor, CPThemeStateDisabled],
[@"slice-top-border-color", sliceTopBorderColor],
[@"slice-bottom-border-color", sliceBottomBorderColor],
[@"slice-last-bottom-border-color", sliceLastBottomBorderColor],
[@"font", [CPFont systemFontOfSize:10.0]],
[@"add-image", addImage],
[@"remove-image", removeImage],
[@"vertical-alignment", CPCenterVerticalTextAlignment]
];
[self registerThemeValues:ruleEditorThemedValues forView:ruleEditor];
return ruleEditor;
}
+ (_CPToolTipWindowView)themedTooltip
{
var toolTipView = [[_CPToolTipWindowView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 100.0) styleMask:_CPToolTipWindowMask],
themeValues =
[
[@"stroke-color", [CPColor colorWithHexString:@"E3E3E3"]],
[@"stroke-width", 1.0],
[@"border-radius", 2.0],
[@"background-color", [CPColor colorWithHexString:@"FFFFCA"]],
[@"color", [CPColor blackColor]]
];
[self registerThemeValues:themeValues forView:toolTipView];
return toolTipView;
}
+ (CPProgressIndicator)themedBarProgressIndicator
{
var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, 75, 16)];
[progressBar setDoubleValue:30];
var bezelColor = PatternColor(
[
["progress-indicator-bezel-border-left.png", 3.0, 16.0],
["progress-indicator-bezel-border-center.png", 1.0, 16.0],
["progress-indicator-bezel-border-right.png", 3.0, 16.0]
],
PatternIsHorizontal),
barColor = PatternColor(
[
["progress-indicator-bar-left.png", 3.0, 16.0],
["progress-indicator-bar-center.png", 1.0, 16.0],
["progress-indicator-bar-right.png", 3.0, 16.0]
],
PatternIsHorizontal);
themedProgressIndicator =
[
[@"bezel-color", bezelColor],
[@"bar-color", barColor]
];
[self registerThemeValues:themedProgressIndicator forView:progressBar];
return progressBar;
}
+ (CPProgressIndicator)themedIndeterminateBarProgressIndicator
{
var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, 75, 16)];
[progressBar setIndeterminate:YES];
var bezelColor = PatternColor(
[
["progress-indicator-bezel-border-left.png", 3.0, 16.0],
["progress-indicator-bezel-border-center.png", 1.0, 16.0],
["progress-indicator-bezel-border-right.png", 3.0, 16.0]
],
PatternIsHorizontal),
barColor = PatternColor(
[
["progress-indicator-indeterminate-bar-left.png", 3.0, 16.0],
["progress-indicator-indeterminate-bar-center.png", 1.0, 16.0],
["progress-indicator-indeterminate-bar-right.png", 3.0, 16.0]
],
PatternIsHorizontal);
themedIndeterminateProgressIndicator =
[
[@"bezel-color", bezelColor],
[@"indeterminate-bar-color", barColor]
];
[self registerThemeValues:themedIndeterminateProgressIndicator forView:progressBar];
return progressBar;
}
+ (CPProgressIndicator)themedSpinningProgressIndicator
{
var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0,0,64,64)];
[progressBar setStyle:CPProgressIndicatorSpinningStyle];
var spinningMini = PatternColor(@"progress-indicator-spinning-style-mini.gif", 16.0, 16.0),
spinningSmall = PatternColor(@"progress-indicator-spinning-style-small.gif", 32.0, 32.0),
spinningRegular = PatternColor(@"progress-indicator-spinning-style-regular.gif", 64.0, 64.0),
themeValues =
[
[@"spinning-mini-gif", spinningMini],
[@"spinning-small-gif", spinningSmall],
[@"spinning-regular-gif", spinningRegular]
];
[self registerThemeValues:themeValues forView:progressBar];
return progressBar;
}
+ (CPProgressIndicator)themedCircularProgressIndicator
{
var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
[progressBar setStyle:CPProgressIndicatorSpinningStyle];
[progressBar setIndeterminate:NO];
var themeValues =
[
[@"circular-border-color", [CPColor colorWithHexString:@"C7C7C7"]],
[@"circular-border-size", 1],
[@"circular-color", [CPColor colorWithHexString:@"89B5CD"]]
];
[self registerThemeValues:themeValues forView:progressBar];
return progressBar;
}
+ (CPBox)themedBox
{
var box = [[CPBox alloc] initWithFrame:CGRectMake(0,0,100,100)],
themeValues =
[
[@"background-color", [CPColor colorWithHexString:@"E4E4E4"]],
[@"border-width", 1.0],
[@"border-color", [CPColor colorWithHexString:@"B7B7B7"]],
[@"corner-radius", 3.0],
[@"inner-shadow-offset", CGSizeMakeZero()],
[@"inner-shadow-color", [CPColor blackColor]],
[@"inner-shadow-size", 6.0],
[@"content-margin", CGSizeMakeZero()]
];
[self registerThemeValues:themeValues forView:box];
return box;
}
+ (CPLevelIndicator)themedLevelIndicator
{
var levelIndicator = [[CPLevelIndicator alloc] initWithFrame:CGRectMake(0,0,100,100)],
bezelColor = PatternColor(
[
[@"level-indicator-bezel-left.png", 3.0, 18.0],
[@"level-indicator-bezel-center.png", 1.0, 18.0],
[@"level-indicator-bezel-right.png", 3.0, 18.0]
]),
emptyColor = PatternColor(
[
[@"level-indicator-segment-empty-left.png", 3.0, 17.0],
[@"level-indicator-segment-empty-center.png", 1.0, 17.0],
[@"level-indicator-segment-empty-right.png", 3.0, 17.0]
]),
normalColor = PatternColor(
[
[@"level-indicator-segment-normal-left.png", 3.0, 17.0],
[@"level-indicator-segment-normal-center.png", 1.0, 17.0],
[@"level-indicator-segment-normal-right.png", 3.0, 17.0]
]),
warningColor = PatternColor(
[
[@"level-indicator-segment-warning-left.png", 3.0, 17.0],
[@"level-indicator-segment-warning-center.png", 1.0, 17.0],
[@"level-indicator-segment-warning-right.png", 3.0, 17.0]
]),
criticalColor = PatternColor(
[
[@"level-indicator-segment-critical-left.png", 3.0, 17.0],
[@"level-indicator-segment-critical-center.png", 1.0, 17.0],
[@"level-indicator-segment-critical-right.png", 3.0, 17.0]
]),
themeValues =
[
[@"bezel-color", bezelColor],
[@"color-empty", emptyColor],
[@"color-normal", normalColor],
[@"color-warning", warningColor],
[@"color-critical", criticalColor],
[@"spacing", 1.0]
];
[self registerThemeValues:themeValues forView:levelIndicator];
return levelIndicator;
}
+ (CPShadowView)themedShadowView
{
var shadowView = [[CPShadowView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 100)],
lightColor = PatternColor(
[
[@"shadow-view-light-top-left.png", 9.0, 9.0],
[@"shadow-view-light-top.png", 1.0, 9.0],
[@"shadow-view-light-top-right.png", 9.0, 9.0],
[@"shadow-view-light-left.png", 9.0, 1.0],
nil,
[@"shadow-view-light-right.png", 9.0, 1.0],
[@"shadow-view-light-bottom-left.png", 9.0, 9.0],
[@"shadow-view-light-bottom.png", 1.0, 9.0],
[@"shadow-view-light-bottom-right.png", 9.0, 9.0]
]),
heavyColor = PatternColor(
[
[@"shadow-view-heavy-top-left.png", 17.0, 17.0],
[@"shadow-view-heavy-top.png", 1.0, 17.0],
[@"shadow-view-heavy-top-right.png", 17.0, 17.0],
[@"shadow-view-heavy-left.png", 17.0, 1.0],
nil,
[@"shadow-view-heavy-right.png", 17.0, 1.0],
[@"shadow-view-heavy-bottom-left.png", 17.0, 17.0],
[@"shadow-view-heavy-bottom.png", 1.0, 17.0],
[@"shadow-view-heavy-bottom-right.png", 17.0, 17.0]
]),
themedShadowViewValues =
[
[@"bezel-color", lightColor, CPThemeStateShadowViewLight],
[@"bezel-color", heavyColor, CPThemeStateShadowViewHeavy],
[@"content-inset", CGInsetMake(3.0, 3.0, 5.0, 3.0), CPThemeStateShadowViewLight],
[@"content-inset", CGInsetMake(5.0, 7.0, 5.0, 7.0), CPThemeStateShadowViewHeavy]
];
[self registerThemeValues:themedShadowViewValues forView:shadowView];
return shadowView;
}
+ (CPBrowser)themedBrowser
{
var browser = [[CPBrowser alloc] initWithFrame:CGRectMakeZero()],
imageResize = PatternImage(@"browser-image-resize-control.png", 15.0, 14.0),
imageLeaf = PatternImage(@"browser-image-leaf.png", 9.0, 9.0),
imageLeafPressed = PatternImage(@"browser-image-leaf-pressed.png", 9.0, 9.0),
themedBrowser =
[
["image-control-resize", imageResize],
["image-control-leaf", imageLeaf],
["image-control-leaf-pressed", imageLeafPressed]
];
[self registerThemeValues:themedBrowser forView:browser];
return browser;
}
+ (_CPModalWindowView)themedModalWindowView
{
var modalWindowView = [[_CPModalWindowView alloc] initWithFrame:CGRectMake(0,0,200,200) styleMask:_CPModalWindowView];
var bezelColor = PatternColor(
[
["window-popup-top-left.png", 16.0, 5.0],
["window-popup-top-center.png", 1.0, 5.0],
["window-popup-top-right.png", 16.0, 5.0],
["window-popup-center-left.png", 16.0, 1.0],
["window-popup-center-center.png", 1.0, 1.0],
["window-popup-center-right.png", 16.0, 1.0],
["window-popup-bottom-left.png", 16.0, 56.0],
["window-popup-bottom-center.png", 1.0, 56.0],
["window-popup-bottom-right.png", 16.0, 56.0]
]),
themeValues =
[
[@"bezel-color", bezelColor]
];
[self registerThemeValues:themeValues forView:modalWindowView];
return modalWindowView;
}
+ (_CPWindowView)themedWindowView
{
var windowView = [[_CPWindowView alloc] initWithFrame:CGRectMakeZero()],
sheetShadow = PatternColor(@"window-attached-sheet-shadow.png", 1, 8),
resizeIndicator = PatternImage(@"window-resize-indicator.png", 12, 12),
shadowColor = PatternColor(
[
[@"window-shadow-0.png", 20.0, 19.0],
[@"window-shadow-1.png", 1.0, 19.0],
[@"window-shadow-2.png", 19.0, 19.0],
[@"window-shadow-3.png", 20.0, 1.0],
[@"window-shadow-4.png", 1.0, 1.0],
[@"window-shadow-5.png", 19.0, 1.0],
[@"window-shadow-6.png", 20.0, 18.0],
[@"window-shadow-7.png", 1.0, 18.0],
[@"window-shadow-8.png", 19.0, 18.0],
]);
themedWindowViewValues =
[
[@"shadow-inset", CGInsetMake(10.0, 19.0, 10.0, 20.0)],
[@"shadow-distance", 5.0],
[@"window-shadow-color", shadowColor],
[@"resize-indicator", resizeIndicator],
[@"attached-sheet-shadow-color", sheetShadow],
[@"shadow-height", 8],
[@"size-indicator", CGSizeMake(12, 12)]
];
[self registerThemeValues:themedWindowViewValues forView:windowView];
return windowView;
}
+ (_CPHUDWindowView)themedHUDWindowView
{
var HUDWindowView = [[_CPHUDWindowView alloc] initWithFrame:CGRectMake(0,0,200,200) styleMask:CPHUDBackgroundWindowMask | CPClosableWindowMask],
HUDBezelColor = PatternColor(
[
["HUD/window-bezel-top-left.png", 5.0, 37.0],
["HUD/window-bezel-top-center.png", 1.0, 37.0],
["HUD/window-bezel-top-right.png", 5.0, 37.0],
["HUD/window-bezel-center-left.png", 5.0, 1.0],
["HUD/window-bezel-center-center.png", 1.0, 1.0],
["HUD/window-bezel-center-right.png", 5.0, 1.0],
["HUD/window-bezel-bottom-left.png", 5.0, 2.0],
["HUD/window-bezel-bottom-center.png", 1.0, 2.0],
["HUD/window-bezel-bottom-right.png", 5.0, 2.0]
]),
closeImage = PatternImage(@"HUD/window-close.png", 18.0, 18.0),
closeActiveImage = PatternImage(@"HUD/window-close-active.png", 18.0, 18.0),
themeValues =
[
[@"close-image-size", CGSizeMake(18.0, 18.0)],
[@"close-image-origin", CGPointMake(6.0,4.0)],
[@"close-image", closeImage],
[@"close-active-image", closeActiveImage],
[@"bezel-color", HUDBezelColor],
[@"title-font", [CPFont systemFontOfSize:14]],
[@"title-text-color", [CPColor colorWithWhite:255.0 / 255.0 alpha:1]],
[@"title-text-color", [CPColor colorWithWhite:255.0 / 255.0 alpha:1], CPThemeStateKeyWindow],
[@"title-text-shadow-color", [CPColor blackColor]],
[@"title-text-shadow-offset", CGSizeMake(0.0, 1.0)],
[@"title-alignment", CPCenterTextAlignment],
[@"title-line-break-mode", CPLineBreakByTruncatingTail],
[@"title-vertical-alignment", CPCenterVerticalTextAlignment],
[@"title-bar-height", 26],
];
[self registerThemeValues:themeValues forView:HUDWindowView inherit:themedWindowViewValues];
[HUDWindowView setTitle:@"HUDWindow"];
return HUDWindowView;
}
+ (_CPStandardWindowView)themedStandardWindowView
{
var standardWindowView = [[_CPStandardWindowView alloc] initWithFrame:CGRectMake(0,0,200,200) styleMask:CPClosableWindowMask],
bezelHeadColor = PatternColor(
[
[@"window-standard-head-left.png", 5.0, 31.0],
[@"window-standard-head-center.png", 1.0, 31.0],
[@"window-standard-head-right.png", 5.0, 31.0]
], PatternIsHorizontal),
solidColor = PatternColor(
[
[@"window-standard-head-solid-top-left.png", 5.0, 1.0],
[@"window-standard-head-solid-top-center.png", 1.0, 1.0],
[@"window-standard-head-solid-top-right.png", 5.0, 1.0],
[@"window-standard-head-solid-center-left.png", 5.0, 1.0],
[@"window-standard-head-solid-center-center.png", 1.0, 1.0],
[@"window-standard-head-solid-center-right.png", 5.0, 1.0],
[@"window-standard-head-solid-bottom-left.png", 5.0, 1.0],
[@"window-standard-head-solid-bottom-center.png", 1.0, 1.0],
[@"window-standard-head-solid-bottom-right.png", 5.0, 1.0]
]
),
bezelColor = PatternColor(
[
[@"window-standard-top-left.png", 2.0, 1.0],
[@"window-standard-top-center.png", 1.0, 1.0],
[@"window-standard-top-right.png", 2.0, 1.0],
[@"window-standard-center-left.png", 2.0, 1.0],
[@"window-standard-center-center.png", 1.0, 1.0],
[@"window-standard-center-right.png", 2.0, 1.0],
[@"window-standard-bottom-left.png", 2.0, 2.0],
[@"window-standard-bottom-center.png", 1.0, 2.0],
[@"window-standard-bottom-right.png", 2.0, 2.0]
]),
dividerColor = PatternColor(
"window-standard-divider{position}.png",
{
width: 1.0,
height: 1.0,
orientation: PatternIsHorizontal
}),
closeButtonImage = PatternImage(@"window-standard-close-button.png", 16, 16),
closeButtonImageInactive = PatternImage(@"window-standard-close-button-inactive.png", 16, 16),
closeButtonImageHighlighted = PatternImage(@"window-standard-button-highlighted.png",16, 16),
unsavedButtonImage = PatternImage(@"window-standard-button-unsaved.png",16, 16),
unsavedButtonImageHighlighted = PatternImage(@"window-standard-close-button-unsaved-highlighted.png",16, 16),
minimizeButtonImage = PatternImage(@"window-standard-minimize-button.png",16, 16),
minimizeButtonImageHighlighted = PatternImage(@"window-standard-minimize-button-highlighted.png",16, 16),
resizeIndicator = PatternImage(@"window-resize-indicator.png", 12, 12),
themeValues =
[
[@"gradient-height", 31.0],
[@"bezel-head-color", bezelHeadColor],
[@"bezel-head-sheet-color", solidColor],
[@"solid-color", solidColor],
[@"title-font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]],
[@"title-text-color", [CPColor colorWithWhite:22.0 / 255.0 alpha:0.75]],
[@"title-text-color", [CPColor colorWithWhite:22.0 / 255.0 alpha:1], CPThemeStateKeyWindow],
[@"title-text-shadow-color", [CPColor whiteColor]],
[@"title-text-shadow-offset", CGSizeMake(0.0, 1.0)],
[@"title-alignment", CPCenterTextAlignment],
// FIXME: Make this to CPLineBreakByTruncatingMiddle once it's implemented.
[@"title-line-break-mode", CPLineBreakByTruncatingTail],
[@"title-vertical-alignment", CPCenterVerticalTextAlignment],
[@"title-bar-height", 31],
[@"divider-color", dividerColor],
[@"body-color", bezelColor],
[@"title-bar-height", 31],
[@"unsaved-image-button" ,unsavedButtonImage],
[@"unsaved-image-highlighted-button" ,unsavedButtonImageHighlighted],
[@"close-image-button" ,closeButtonImageInactive, CPThemeStateNormal],
[@"close-image-button" ,closeButtonImage, CPThemeStateKeyWindow],
[@"close-image-button" ,closeButtonImage, CPThemeStateMainWindow],
[@"close-image-highlighted-button" ,closeButtonImageHighlighted],
[@"minimize-image-button" ,minimizeButtonImage],
[@"minimize-image-highlighted-button" ,minimizeButtonImageHighlighted],
[@"close-image-size", CGSizeMake(16.0, 16.0)],
[@"close-image-origin", CGPointMake(8.0, 10.0)],
[@"resize-indicator", resizeIndicator],
[@"size-indicator", CGSizeMake(12, 12)]
];
[self registerThemeValues:themeValues forView:standardWindowView inherit:themedWindowViewValues];
return standardWindowView;
}
+ (_CPDocModalWindowView)themedDocModalWindowView
{
var docModalWindowView = [[_CPDocModalWindowView alloc] initWithFrame:CGRectMake(0, 0, 200, 200) styleMask:nil],
bezelColor = PatternColor(
[
[@"window-standard-top-left.png", 2.0, 1.0],
[@"window-standard-top-center.png", 1.0, 1.0],
[@"window-standard-top-right.png", 2.0, 1.0],
[@"window-standard-center-left.png", 2.0, 1.0],
[@"window-standard-center-center.png", 1.0, 1.0],
[@"window-standard-center-right.png", 2.0, 1.0],
[@"window-standard-bottom-left.png", 2.0, 2.0],
[@"window-standard-bottom-center.png", 1.0, 2.0],
[@"window-standard-bottom-right.png", 2.0, 2.0]
]),
themeValues =
[
[@"body-color", bezelColor]
];
[self registerThemeValues:themeValues forView:docModalWindowView inherit:themedWindowViewValues];
return docModalWindowView;
}
+ (_CPBorderlessBridgeWindowView)themedBorderlessBridgeWindowView
{
var bordelessBridgeWindowView = [[_CPBorderlessBridgeWindowView alloc] initWithFrame:CGRectMake(0,0,0,0)],
toolbarBackgroundColor = PatternColor(
[
[@"toolbar-background-top.png", 1.0, 1.0],
[@"toolbar-background-center.png", 1.0, 57.0],
[@"toolbar-background-bottom.png", 1.0, 1.0]
], PatternIsVertical),
themeValues =
[
[@"toolbar-background-color", toolbarBackgroundColor]
];
[self registerThemeValues:themeValues forView:bordelessBridgeWindowView inherit:themedWindowViewValues];
return bordelessBridgeWindowView;
}
+ (_CPToolbarView)themedToolbarView
{
var toolbarView = [[_CPToolbarView alloc] initWithFrame:CGRectMakeZero()],
toolbarExtraItemsImage = PatternImage(@"toolbar-view-extra-items-image.png", 10.0, 15.0),
toolbarExtraItemsAlternateImage = PatternImage(@"toolbar-view-extra-items-alternate-image.png", 10.0, 15.0),
toolbarSeparatorColor = PatternColor([
[@"toolbar-item-separator-0.png", 2.0, 26.0],
[@"toolbar-item-separator-1.png", 2.0, 1.0],
[@"toolbar-item-separator-2.png", 2.0, 26.0]
], PatternIsVertical),
themeValues =
[
[@"extra-item-extra-image", toolbarExtraItemsImage],
[@"extra-item-extra-alternate-image", toolbarExtraItemsAlternateImage],
[@"item-margin", 10.0],
[@"extra-item-width", 20.0],
[@"content-inset", CGInsetMake(4.0, 4.0, 4.0, 10)],
[@"regular-size-height", 59.0],
[@"small-size-height", 46.0],
[@"image-item-separator-color", toolbarSeparatorColor],
[@"image-item-separator-size", CGRectMake(0.0, 0.0, 2.0, 32.0)]
];
[self registerThemeValues:themeValues forView:toolbarView];
return toolbarView;
}
+ (_CPMenuItemMenuBarView)themedMenuItemMenuBarView
{
var menuItemMenuBarView = [[_CPMenuItemMenuBarView alloc] initWithFrame:CGRectMake(0.0, 0.0, 16.0, 16.0)],
themeValues =
[
[@"horizontal-margin", 12.0],
[@"submenu-indicator-margin", 3.0],
[@"vertical-margin", 4.0]
];
[self registerThemeValues:themeValues forView:menuItemMenuBarView];
return menuItemMenuBarView;
}
+ (_CPMenuItemStandardView)themedMenuItemStandardView
{
var menuItemStandardView = [[_CPMenuItemStandardView alloc] initWithFrame:CGRectMake(0.0, 0.0, 16.0, 16.0)],
menuItemDefaultOnStateImage = PatternImage(@"menu-item-on-state.png", 14.0, 14.0),
menuItemDefaultOnStateHighlightedImage = PatternImage(@"menu-item-on-state-highlighted.png", 14.0, 14.0),
themeValues =
[
[@"submenu-indicator-color", [CPColor grayColor]],
[@"menu-item-selection-color", [CPColor colorWithHexString:@"5C85D8"]],
[@"menu-item-text-color", [CPColor colorWithHexString:@"333333"]],
[@"menu-item-text-shadow-color", [CPColor colorWithWhite:1.0 alpha:0.8]],
[@"menu-item-default-off-state-image", nil],
[@"menu-item-default-off-state-highlighted-image", nil],
[@"menu-item-default-on-state-image", menuItemDefaultOnStateImage],
[@"menu-item-default-on-state-highlighted-image", menuItemDefaultOnStateHighlightedImage],
[@"menu-item-separator-color", [CPColor lightGrayColor]],
[@"menu-item-default-mixed-state-image", nil],
[@"menu-item-default-mixed-state-highlighted-image", nil],
[@"left-margin", 3.0],
[@"right-margin", 17.0],
[@"state-column-width", 14.0],
[@"indentation-width", 17.0],
[@"vertical-margin", 4.0],
[@"right-columns-margin", 30.0]
];
[self registerThemeValues:themeValues forView:menuItemStandardView];
return menuItemStandardView;
}
+ (_CPMenuView)themedMenuView
{
var menuView = [[_CPMenuView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 100.0)],
menuWindowMoreAboveImage = PatternImage(@"menu-window-more-above.png", 38.0, 18.0),
menuWindowMoreBelowImage = PatternImage(@"menu-window-more-below.png", 38.0, 18.0),
generalIconNew = PatternImage(@"menu-general-icon-new.png", 16.0, 16.0),
generalIconNewHighlighted = PatternImage(@"menu-general-icon-new-highlighted.png", 16.0, 16.0),
generalIconOpen = PatternImage(@"menu-general-icon-open.png", 16.0, 16.0),
generalIconOpenHighlighted = PatternImage(@"menu-general-icon-open-highlighted.png", 16.0, 16.0),
generalIconSave = PatternImage(@"menu-general-icon-save.png", 16.0, 16.0),
generalIconSaveHighlighted = PatternImage(@"menu-general-icon-save-highlighted.png", 16.0, 16.0),
menuWindowPopUpBackgroundStyleColor = PatternColor(
[
[@"menu-window-rounded-0.png", 4.0, 4.0],
[@"menu-window-1.png", 1.0, 4.0],
[@"menu-window-rounded-2.png", 4.0, 4.0],
[@"menu-window-3.png", 4.0, 1.0],
[@"menu-window-4.png", 1.0, 1.0],
[@"menu-window-5.png", 4.0, 1.0],
[@"menu-window-rounded-6.png", 4.0, 4.0],
[@"menu-window-7.png", 1.0, 4.0],
[@"menu-window-rounded-8.png", 4.0, 4.0]
]
),
menuWindowMenuBarBackgroundStyleColor = PatternColor(
[
[@"menu-window-3.png", 4.0, 0.0],
[@"menu-window-4.png", 1.0, 0.0],
[@"menu-window-5.png", 4.0, 0.0],
[@"menu-window-3.png", 4.0, 1.0],
[@"menu-window-4.png", 1.0, 1.0],
[@"menu-window-5.png", 4.0, 1.0],
[@"menu-window-rounded-6.png", 4.0, 4.0],
[@"menu-window-7.png", 1.0, 4.0],
[@"menu-window-rounded-8.png", 4.0, 4.0]
]
),
menuBarWindowBackgroundColor = PatternColor(@"menu-bar-window-background.png", 1.0, 28.0),
menuBarWindowBackgroundSelectedColor = PatternColor(@"menu-bar-window-background-selected.png", 1.0, 28.0),
themeValues =
[
[@"menu-window-more-above-image", menuWindowMoreAboveImage],
[@"menu-window-more-below-image", menuWindowMoreBelowImage],
[@"menu-window-pop-up-background-style-color", menuWindowPopUpBackgroundStyleColor],
[@"menu-window-menu-bar-background-style-color", menuWindowMenuBarBackgroundStyleColor],
[@"menu-window-margin-inset", CGInsetMake(3.0, 1.0, 3.0, 1.0)],
[@"menu-window-scroll-indicator-height", 16.0],
[@"menu-bar-window-background-color", menuBarWindowBackgroundColor],
[@"menu-bar-window-background-selected-color", menuBarWindowBackgroundSelectedColor],
[@"menu-bar-window-font", [CPFont boldSystemFontOfSize:[CPFont systemFontSize]]],
[@"menu-bar-window-height", 28.0],
[@"menu-bar-window-margin", 10.0],
[@"menu-bar-window-left-margin", 10.0],
[@"menu-bar-window-right-margin", 10.0],
[@"menu-bar-text-color", [CPColor colorWithRed:0.051 green:0.2 blue:0.275 alpha:1.0]],
[@"menu-bar-title-color", [CPColor colorWithRed:0.051 green:0.2 blue:0.275 alpha:1.0]],
[@"menu-bar-text-shadow-color", [CPColor whiteColor]],
[@"menu-bar-title-shadow-color", [CPColor whiteColor]],
[@"menu-bar-highlight-color", [CPColor colorWithCalibratedRed:94.0 / 255.0 green:130.0 / 255.0 blue:186.0 / 255.0 alpha:1.0]],
[@"menu-bar-highlight-text-color", [CPColor whiteColor]],
[@"menu-bar-highlight-text-shadow-color", [CPColor blackColor]],
[@"menu-bar-height", 28.0],
[@"menu-bar-icon-image", nil],
[@"menu-bar-icon-image-alpha-value", 1.0],
[@"menu-general-icon-new", generalIconNew],
[@"menu-general-icon-new", generalIconNewHighlighted, CPThemeStateHighlighted],
[@"menu-general-icon-save", generalIconSave],
[@"menu-general-icon-save", generalIconSaveHighlighted, CPThemeStateHighlighted],
[@"menu-general-icon-open", generalIconOpen],
[@"menu-general-icon-open", generalIconOpenHighlighted, CPThemeStateHighlighted]
];
[self registerThemeValues:themeValues forView:menuView];
return menuView;
}
+ (_CPPopoverWindowView)themedPopoverWindowView
{
var popoverWindowView = [[_CPPopoverWindowView alloc] initWithFrame:CGRectMake(0, 0, 200, 200) styleMask:nil],
gradient = CGGradientCreateWithColorComponents(
CGColorSpaceCreateDeviceRGB(),
[
(254.0 / 255), (254.0 / 255), (254.0 / 255), 0.93,
(231.0 / 255), (231.0 / 255), (231.0 / 255), 0.93
],
[0, 1],
2
),
gradientHUD = CGGradientCreateWithColorComponents(
CGColorSpaceCreateDeviceRGB(),
[
(38.0 / 255), (38.0 / 255), (38.0 / 255), 0.93,
(18.0 / 255), (18.0 / 255), (18.0 / 255), 0.93
],
[0, 1],
2),
strokeColor = [CPColor colorWithHexString:@"B8B8B8"],
strokeColorHUD = [CPColor colorWithHexString:@"222222"],
themeValues =
[
[@"border-radius", 5.0],
[@"stroke-width", 1.0],
[@"shadow-size", CGSizeMake(0, 6)],
[@"shadow-blur", 15.0],
[@"background-gradient", gradient],
[@"background-gradient-hud", gradientHUD],
[@"stroke-color", strokeColor],
[@"stroke-color-hud", strokeColorHUD]
];
[self registerThemeValues:themeValues forView:popoverWindowView];
return popoverWindowView;
}
@end
@implementation AristoHUDThemeDescriptor : BKThemeDescriptor
{
}
+ (CPString)themeName
{
return @"Aristo-HUD";
}
+ (CPArray)themeShowcaseExcludes
{
return ["alert"];
}
+ (CPColor)defaultShowcaseBackgroundColor
{
return [CPColor blackColor];
}
+ (CPArray)defaultThemeOverridesAddedTo:(CPArray)themeValues
{
var overrides = [CPArray arrayWithObjects:
[@"text-color", [CPColor whiteColor]],
[@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:0.6], CPThemeStateDisabled],
[@"text-shadow-color", [CPColor blackColor]],
[@"text-shadow-color", [CPColor blackColor], CPThemeStateDisabled],
[@"text-shadow-offset", CGSizeMake(-1.0, -1.0)]
];
if (themeValues)
[overrides addObjectsFromArray:themeValues];
return overrides;
}
+ (CPPopUpButton)themedSegmentedControl
{
var segmentedControl = [AristoThemeDescriptor makeSegmentedControl];
[self registerThemeValues:[self defaultThemeOverridesAddedTo:nil] forView:segmentedControl inherit:themedSegmentedControlValues];
return segmentedControl;
}
+ (CPButton)button
{
var button = [AristoThemeDescriptor makeButton];
[self registerThemeValues:[self defaultThemeOverridesAddedTo:nil] forView:button inherit:themedButtonValues];
return button;
}
+ (CPButton)themedStandardButton
{
var button = [self button];
[button setTitle:@"Cancel"];
return button;
}
+ (CPButton)themedDefaultButton
{
var button = [self button];
[button setTitle:@"OK"];
[button setThemeState:CPThemeStateDefault];
return button;
}
// We need an artwork for the legacy scroller here.
// For the moment I just deactivate it to avoid 404 with HUD theme
// + (CPScroller)themedVerticalScroller
// {
// var scroller = [AristoThemeDescriptor makeVerticalScroller],
// overrides =
// [
// [@"knob-color", nil, [CPThemeStateVertical, CPThemeStateDisabled]]
// ];
//
// [self registerThemeValues:[self defaultThemeOverridesAddedTo:overrides] forView:scroller inherit:themedVerticalScrollerValues];
//
// return scroller;
// }
// + (CPScroller)themedHorizontalScroller
// {
// var scroller = [AristoThemeDescriptor makeHorizontalScroller],
// overrides =
// [
// [@"knob-color", nil, CPThemeStateDisabled]
// ];
//
// [self registerThemeValues:[self defaultThemeOverridesAddedTo:overrides] forView:scroller inherit:themedHorizontalScrollerValues];
//
// return scroller;
// }
+ (CPSlider)themedHorizontalSlider
{
var slider = [AristoThemeDescriptor makeHorizontalSlider];
[self registerThemeValues:[self defaultThemeOverridesAddedTo:nil] forView:slider inherit:themedHorizontalSliderValues];
return slider;
}
+ (CPSlider)themedVerticalSlider
{
var slider = [AristoThemeDescriptor makeVerticalSlider];
[self registerThemeValues:[self defaultThemeOverridesAddedTo:nil] forView:slider inherit:themedVerticalSliderValues];
return slider;
}
+ (CPSlider)themedCircularSlider
{
var slider = [AristoThemeDescriptor makeCircularSlider];
[self registerThemeValues:[self defaultThemeOverridesAddedTo:nil] forView:slider inherit:themedCircularSliderValues];
return slider;
}
+ (CPAlert)themedAlert
{
var alert = [CPAlert new],
hudSpecificValues =
[
[@"message-text-color", [CPColor whiteColor]],
[@"informative-text-color", [CPColor whiteColor]],
[@"suppression-button-text-color", [CPColor whiteColor]],
];
[self registerThemeValues:hudSpecificValues forView:alert inherit:themedAlertValues];
return [alert themeView];
}
+ (CPProgressIndicator)themedBarProgressIndicator
{
var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, 75, 16)];
[progressBar setDoubleValue:30];
[self registerThemeValues:nil forView:progressBar inherit:themedProgressIndicator];
return progressBar;
}
+ (CPProgressIndicator)themedIndeterminateBarProgressIndicator
{
var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, 75, 16)];
[progressBar setIndeterminate:YES];
[self registerThemeValues:nil forView:progressBar inherit:themedIndeterminateProgressIndicator];
return progressBar;
}
@end