From 8147f648a17aa02d7688c3970d516f91f475faea Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 7 Feb 2014 16:36:05 -0800 Subject: [PATCH 01/33] Fixed: Textual CPDatePicker issue with number of digit Previously, the day/month/hour of the textual datePicker had always two digits, even when the number was under 10. For instance the day 8 was displayed 08. Now it's like in cocoa, 8 is displayed 8. Fixes #2059 --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 8dbb21eaf..9b1cd4910 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -1222,6 +1222,7 @@ var CPMonthDateType = 0, int _maxNumber @accessors(getter=maxNumber); int _minNumber @accessors(getter=minNumber); + BOOL _firstEvent; CPTimer _timerEdition; } @@ -1231,6 +1232,7 @@ var CPMonthDateType = 0, - (BOOL)acceptFirstResponder { + _firstEvent = YES; return NO; } @@ -1339,7 +1341,7 @@ var CPMonthDateType = 0, if (keyCode != CPDeleteKeyCode && keyCode != CPDeleteForwardKeyCode && keyCode < CPZeroKeyCode || keyCode > CPNineKeyCode) return; - var newValue = [self stringValue], + var newValue = [self stringValue].replace(/\s/g, ''), length = [newValue length], eventKeyValue = parseInt([anEvent characters]).toString(); @@ -1355,7 +1357,7 @@ var CPMonthDateType = 0, { _timerEdition = [CPTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(_timerKeyEvent:) userInfo:nil repeats:NO]; - if ((_dateType == CPYearDateType && length == 4) || (_dateType != CPYearDateType && length == 2) || !length) + if (_firstEvent || !length) newValue = eventKeyValue; else newValue = parseInt(newValue).toString() + eventKeyValue; @@ -1374,6 +1376,8 @@ var CPMonthDateType = 0, if (parseInt(newValue) > [self _maxNumberWithMaxDate] || ([_datePicker _isEnglishFormat] && _dateType == CPHourDateType && parseInt(newValue) > 12)) return; + _firstEvent = NO; + [super setObjectValue:newValue]; } @@ -1473,7 +1477,13 @@ var CPMonthDateType = 0, } while ([aStringValue length] < 2) - aStringValue = "0" + aStringValue; + { + if (_dateType == CPSecondDateType || _dateType == CPMinuteDateType) + aStringValue = @"0" + aStringValue; + else + aStringValue = @" " + aStringValue; + } + } [super setObjectValue:aStringValue]; @@ -1612,6 +1622,7 @@ var CPMonthDateType = 0, */ - (void)makeDeselectable { + _firstEvent = YES; [self unsetThemeState:CPThemeStateSelected]; } From 2e015c98161e565bfa0429da84a9ffb9255facff Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 17 Feb 2014 15:15:57 -0800 Subject: [PATCH 02/33] NEW: Doxygen theme refresh See screenshots attached to the PR for example. --- Tools/Documentation/doxygen.css | 210 ++++++++++++++++---------------- 1 file changed, 102 insertions(+), 108 deletions(-) diff --git a/Tools/Documentation/doxygen.css b/Tools/Documentation/doxygen.css index 3a4678440..e3afc6fcb 100644 --- a/Tools/Documentation/doxygen.css +++ b/Tools/Documentation/doxygen.css @@ -116,6 +116,7 @@ div.qindex, div.navtab { div.qindex, div.navpath { width: 100%; line-height: 140%; + background: white; } div.qindex+table { @@ -175,7 +176,11 @@ a.elRef { } a.code { - color: #4765A1; + color: #8AACE5; +} + +a.code:visited { + color: #8AACE5; } a.codeRef { @@ -188,24 +193,33 @@ dl.el { margin-left: -1cm; } +.fragment { + margin-top: 20px; + background-color: #27292C; + width: 100%; + border-radius: 3px; +} +.fragment .line:first-child { + padding-top: 20px; +} .fragment .line { font-family: Consolas, Courier, monospace, fixed; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ font-size: 11px; margin-bottom: 3px; + color: #d4d4d4; } .fragment .lineno { - color: #d4d4d4; + color: #555; margin-right: 10px; } .fragment .lineno a { - color: #d4d4d4; + color: #777; } pre.fragment { @@ -221,21 +235,14 @@ pre.fragment { } div.ah { - background-color: black; + background-color: #333; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); + background-color: #F6F6F6; } div.groupHeader { @@ -252,8 +259,8 @@ div.groupText { body { background-color: white; - color: black; - margin: 0; + color: #333; + margin: 0; } div.contents { @@ -301,7 +308,7 @@ table tr.memlist > td { tr.memlist td { font-family: Consolas, "Lucida Console", Courier, monospace; padding: .25em 0; - border-bottom: 1px solid #eee; + border-bottom: 1px solid #F6F6F6; } /* Don't show the [static] column in full member list */ @@ -340,16 +347,18 @@ address.footer { img.footer { border: 0px; vertical-align: middle; + height: 15px; + margin-top: -5px; } /* @group Code Colorization */ span.keyword { - color: #008000 + color: #D67C7B } span.keywordtype { - color: #604020 + color: #C0A7C6 } span.keywordflow { @@ -357,7 +366,7 @@ span.keywordflow { } span.comment { - color: #A085E4 + color: #6A6C73 } span.preprocessor { @@ -365,7 +374,7 @@ span.preprocessor { } span.stringliteral { - color: #002080 + color: #C2C67F; } span.charliteral { @@ -427,7 +436,7 @@ th.dirtab { hr { height: 0px; border: none; - border-top: 2px solid #ddd; + border-top: 1px solid #ddd; margin: 1em 0; } @@ -458,7 +467,7 @@ table.memberdecls { } .memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #f3f3f3; + border-top: 1px solid #F3F3F3; } .memItemLeft, .memTemplItemLeft { @@ -513,50 +522,27 @@ table.memberdecls { } .memproto, dl.reflist dt { - border-top: 1px solid #BDBDBD; - border-left: 1px solid #BDBDBD; - border-right: 1px solid #BDBDBD; padding: 6px 0px 6px 0px; color: #333; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 8px; - border-top-left-radius: 8px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 5px; - -moz-border-radius-topright: 3px; - -moz-border-radius-topleft: 3px; - /* webkit specific markup */ - -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 3px; - -webkit-border-top-left-radius: 3px; - background-color: #E2E2E2; + font-weight: normal; + background-color: #F6F6F6; padding-left: 9px; } .memdoc > p { margin-top: 0; } + +.memdoc > p:last-child { + color: #AAAAAA; + font-size: 80%; +} .memdoc, dl.reflist dd { - border-bottom: 1px solid #BDBDBD; - border-left: 1px solid #BDBDBD; - border-right: 1px solid #BDBDBD; + border-bottom: 1px solid #F6F6F6; + border-left: 1px solid #F6F6F6; + border-right: 1px solid #F6F6F6; background-color: white; border-top-width: 0; - /* opera specific markup */ - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-bottomright: 3px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.15); padding: .8em 12px 0 12px; } @@ -595,6 +581,15 @@ dl.reflist dt { color: #602020; white-space: nowrap; } + +.params .paramname { + color: #602020 !important; + white-space: nowrap; + text-align: right; + font-family: Consolas, "Lucida Console", Courier, monospace; + padding: 3px; +} + .paramname em { font-style: normal; } @@ -751,12 +746,6 @@ table.fieldtable { margin-bottom: 10px; border: 1px solid #A9B9D8; border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } .fieldtable td, .fieldtable th { @@ -788,12 +777,6 @@ table.fieldtable { padding-bottom: 4px; padding-top: 5px; text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; border-bottom: 1px solid #A9B9D8; } @@ -811,12 +794,11 @@ table.fieldtable { .navpath ul { font-size: 11px; - background: -moz-linear-gradient(-90deg, whiteSmoke, #CCC); - background: -webkit-gradient(linear, left top, left bottom, from(whiteSmoke), to(#CCC)); + background-color: white; height:30px; line-height:30px; color:#333; - border:solid 1px #CCC; + border:solid 1px #f3f3f3; overflow:hidden; margin:0px; padding:0px; @@ -824,7 +806,7 @@ table.fieldtable { .navpath li { - list-style-type:none; + list-style-type: none; float:left; padding-left:10px; padding-right: 15px; @@ -843,6 +825,7 @@ table.fieldtable { color: #333; } + .navpath li.navelem a:hover { color:#6985BC; @@ -858,7 +841,7 @@ table.fieldtable { background-image:none; background-repeat:no-repeat; background-position:right; - color:#374E7C; + color:#aaa; font-size: 8pt; } @@ -902,17 +885,14 @@ div.header { background-color: #F9FAFC; margin: 0px; - border-bottom: 1px solid #C5CFE5; + border-bottom: 1px solid #eaeaea; } div.headertitle { padding: 10px 5px 10px 20px; - background: #333; - background: -moz-linear-gradient(-90deg, #444, #333); - background: -webkit-gradient(linear, left top, left bottom, from(#444), to(#333)); - color: white; - text-shadow: -1px -1px black; + background-color: #f6f6f6; + color: #333; min-height: 36px; } @@ -977,16 +957,24 @@ dl.bug border-collapse: separate; } -#projectlogo img +#projectlogo { border: 0px none; - max-height: 55px; padding-left: 5px; + margin-top: 8px; + display: block; + float: right; + width: 200px; +} + +#projectlogo img +{ + max-height: 40px; } #projectname { - font: 300% Tahoma, Arial,sans-serif; + font: 200% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } @@ -1010,13 +998,9 @@ dl.bug padding: 0px; margin: 0px; width: 100%; - border-bottom: 1px solid #CCC; color: white; font-weight: bold; - text-shadow: -1px -1px black; - background: #485D77; - background: -moz-linear-gradient(-90deg, #485D77, #252D38); - background: -webkit-gradient(linear, left top, left bottom, from(#485D77), to(#252D38)); + background: #FA7622; } .image @@ -1093,9 +1077,8 @@ dl.citelist dd { /* ADDITIONS */ .tabs, .tabs2, .tabs3 { - background: -moz-linear-gradient(-90deg, #fff, #eee); - background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee)); - border-bottom: 1px solid #ccc; + background: #F6F6F6 !important; + border-bottom: 1px solid #eaeaea; width: 100%; z-index: 101; font-size: 100%; @@ -1128,17 +1111,15 @@ dl.citelist dd { display: block; padding: 0 20px; font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; outline: none; background: none; color: #444; - border-right: 1px solid #ccc; + border-right: 1px solid #eaeaea; } .tablist a:hover { background: inherit; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); text-decoration: none; text-shadow: none; color: gray; @@ -1164,10 +1145,9 @@ dl.citelist dd { } .tablist li.current a { - background: -moz-linear-gradient(-90deg, #eee, #fff); - background: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#fff)); + background: #ddd; color: #444; - text-shadow: 0px 1px 1px #f2f2f2; + text-shadow: none; } .tabs2 li{ @@ -1191,7 +1171,7 @@ dl.citelist dd { #nav-tree li { white-space:nowrap; margin:0px; - padding:0px; + padding-top: 5px; } #nav-tree .plus { @@ -1199,17 +1179,23 @@ dl.citelist dd { } #nav-tree .selected { - background: -moz-linear-gradient(-90deg, #62B9ED, #308CD9) !important; - background: -webkit-gradient(linear, left top, left bottom, from(#62B9ED), to(#308CD9)) !important; - border-top: 1px solid #308CD9; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + background-color: #F87631 !important; + border-top: none; + background-image: none; } #nav-tree img { margin:0px; padding:0px; border:0px; - vertical-align: middle; + -webkit-filter: grayscale(1); + width: 8px; + height: 11px; + margin-top: -4px; +} + +#nav-tree .selected img { + -webkit-filter: grayscale(0); } #nav-tree a { @@ -1233,7 +1219,9 @@ dl.citelist dd { text-decoration:none; padding:2px; margin:0px; - color:#fff; + color: white; + text-shadow: none; + font-weight: bold; } #nav-tree .children_ul { @@ -1243,17 +1231,16 @@ dl.citelist dd { #nav-tree .item { margin:0px; - padding:0px; + padding:0px;; } #nav-tree { padding: 0px 0px; - background: #E8EAEE; + background: white; font-size:14px; overflow:auto; padding-right: 0px !important; margin-right: -5px !important; - background: #E8EAEE !important; } #doc-content { @@ -1280,7 +1267,7 @@ dl.citelist dd { } .ui-resizable-e { - background: #CCC !important; + background: #eaeaea !important; cursor:e-resize; height:100%; right:0; @@ -1314,7 +1301,14 @@ dl.citelist dd { right: 5px; } #nav-sync img { - width: 16px; + width: 10px; + height: 10px; } -} \ No newline at end of file +.mlabels-right { + visibility: hidden; +} + +.groupheader { + color: #FA7622; +} From 7d304fbd51e96e65de299397b361c21340607049 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 12 Feb 2014 16:59:13 -0800 Subject: [PATCH 03/33] First round of changes to change theming system to use arrays and not bitmasks as their underlying datatype --- AppKit/CPBrowser.j | 2 +- AppKit/CPButton.j | 2 +- AppKit/CPButtonBar.j | 12 +- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 34 +- AppKit/CPScroller.j | 2 +- AppKit/CPSegmentedControl.j | 27 +- AppKit/CPStepper.j | 8 +- AppKit/CPTheme.j | 307 ++++++++++-------- AppKit/CPTokenField.j | 4 +- AppKit/CPView.j | 20 +- AppKit/Themes/Aristo/ThemeDescriptors.j | 287 +++++++++-------- AppKit/Themes/Aristo2/ThemeDescriptors.j | 328 ++++++++++---------- AppKit/_CPAutocompleteMenu.j | 4 +- Tests/AppKit/CPViewTest.j | 2 +- Tests/Manual/ThemeBrowser/AppController.j | 2 +- Tools/dump_theme/dump_theme | 2 +- Tools/nib2cib/NSTableColumn.j | 6 +- Tools/nib2cib/_NSCornerView.j | 2 +- 18 files changed, 544 insertions(+), 507 deletions(-) diff --git a/AppKit/CPBrowser.j b/AppKit/CPBrowser.j index a6a16306d..1dcdea712 100644 --- a/AppKit/CPBrowser.j +++ b/AppKit/CPBrowser.j @@ -980,7 +980,7 @@ var imageView = [self layoutEphemeralSubviewNamed:@"image-view" positioned:CPWindowAbove relativeToEphemeralSubviewNamed:nil], - isHighlighted = [self themeState] & CPThemeStateSelectedDataView; + isHighlighted = [self hasThemeState:CPThemeStateSelectedDataView]; [imageView setImage: _isLeaf ? (isHighlighted ? _highlightedBranchImage : _branchImage) : nil]; [imageView setImageScaling:CPImageScaleNone]; diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 213fc6ed0..99d3ca36b 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -268,7 +268,7 @@ CPButtonImageOffset = 3.0; break; case CPOffState: - [self unsetThemeState:CPThemeStateSelected | CPButtonStateMixed | CPThemeStateHighlighted]; + [self unsetThemeState:CPThemeState(CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted)]; } } diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 8efe075b4..9de237609 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -250,15 +250,15 @@ currentButtonOffset += width - 1; } - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeStateNormal | CPThemeStateBordered]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateHighlighted | CPThemeStateBordered]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled | CPThemeStateBordered]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered)]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered)]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; [button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered]; // FIXME shouldn't need this - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeStateNormal | CPThemeStateBordered | CPPopUpButtonStatePullsDown]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeStateHighlighted | CPThemeStateBordered | CPPopUpButtonStatePullsDown]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeStateDisabled | CPThemeStateBordered | CPPopUpButtonStatePullsDown]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; [self addSubview:button]; } diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index a7d713585..63dd02be9 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -1020,30 +1020,30 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"font" inState:CPThemeStateDisabled | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"text-color" inState:CPThemeStateDisabled | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled | CPThemeStateSelected] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled | CPThemeStateSelected]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted] forThemeAttribute:@"font" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"font" inState:CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted | CPThemeStateSelected]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"font" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected] forThemeAttribute:@"text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted | CPThemeStateSelected]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"font" inState: CPThemeStateDisabled | CPThemeStateHighlighted ]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"text-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"text-shadow-color" inState: CPThemeStateDisabled | CPThemeStateHighlighted ]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted ] forThemeAttribute:@"text-shadow-offset" inState: CPThemeStateDisabled | CPThemeStateHighlighted]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; [self addSubview:_textField]; @@ -1156,7 +1156,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" var themeState = [self themeState], context = [[CPGraphicsContext currentContext] graphicsPort]; - if (themeState & CPThemeStateSelected) + if (themeState.hasThemeState(CPThemeStateSelected)) { [self setBackgroundColor:[_datePicker valueForThemeAttribute:@"bezel-color-calendar" inState:themeState]]; CGContextSetLineWidth(context, [_datePicker valueForThemeAttribute:@"border-width"]); diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 6561af112..c927a90e2 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -733,7 +733,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); var themeState = _themeState; if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) - themeState &= ~CPThemeStateHighlighted; + themeState = CPThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); return [self valueForThemeAttribute:anAttributeName inState:themeState]; } diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 3bf94a0c2..613c7e198 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -285,7 +285,6 @@ CPSegmentSwitchTrackingMomentary = 2; - (void)setWidth:(float)aWidth forSegment:(unsigned)aSegment { [_segments[aSegment] setWidth:aWidth]; - [self tileWithChangedSegment:aSegment]; } @@ -432,9 +431,9 @@ CPSegmentSwitchTrackingMomentary = 2; [_segments[aSegment] setEnabled:shouldBeEnabled]; if (shouldBeEnabled) - _themeStates[aSegment] &= ~CPThemeStateDisabled; + _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); else - _themeStates[aSegment] |= CPThemeStateDisabled; + _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateDisabled); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -478,9 +477,9 @@ CPSegmentSwitchTrackingMomentary = 2; - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { if (shouldHighlight) - _themeStates[aSegment] |= CPThemeStateHighlighted; + _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateHighlighted); else - _themeStates[aSegment] &= ~CPThemeStateHighlighted; + _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -574,9 +573,10 @@ CPSegmentSwitchTrackingMomentary = 2; if (_segments.length <= 0) return; - var themeState = _themeStates[0]; + var themeState = _themeStates[0], + isDisabled = [self hasThemeState:CPThemeStateDisabled]; - themeState |= _themeState & CPThemeStateDisabled; + themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; var leftCapColor = [self valueForThemeAttribute:@"left-segment-bezel-color" inState:themeState], @@ -589,7 +589,7 @@ CPSegmentSwitchTrackingMomentary = 2; var themeState = _themeStates[_themeStates.length - 1]; - themeState |= _themeState & CPThemeStateDisabled; + themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; var rightCapColor = [self valueForThemeAttribute:@"right-segment-bezel-color" inState:themeState], @@ -604,7 +604,7 @@ CPSegmentSwitchTrackingMomentary = 2; { var themeState = _themeStates[i]; - themeState |= _themeState & CPThemeStateDisabled; + themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; var bezelColor = [self valueForThemeAttribute:@"center-segment-bezel-color" inState:themeState], @@ -642,11 +642,12 @@ CPSegmentSwitchTrackingMomentary = 2; if (i == count - 1) continue; - var borderState = _themeStates[i] | _themeStates[i + 1]; + var borderState = CPThemeState(_themeStates[i], _themeStates[i + 1]); - borderState = (borderState & CPThemeStateSelected & ~CPThemeStateHighlighted) ? CPThemeStateSelected : CPThemeStateNormal; + borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal; - borderState |= _themeState & CPThemeStateDisabled; + if (_themeState.hasThemeState(CPThemeStateDisabled)) + borderState = CPThemeState(borderState, CPThemeStateDisabled); var borderColor = [self valueForThemeAttribute:@"divider-bezel-color" inState:borderState], @@ -676,7 +677,7 @@ CPSegmentSwitchTrackingMomentary = 2; var segment = _segments[aSegment], segmentWidth = [segment width], - themeState = _themeStates[aSegment] | (_themeState & CPThemeStateDisabled), + themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? CPThemeState(_themeStates[aSegment], CPThemeStateDisabled) : _themeStates[aSegment]; contentInset = [self valueForThemeAttribute:@"content-inset" inState:themeState], font = [self font]; diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j index ba5da1462..f39e37fab 100644 --- a/AppKit/CPStepper.j +++ b/AppKit/CPStepper.j @@ -182,11 +182,11 @@ [_buttonDown setFrame:downFrame]; [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered | CPThemeStateDisabled] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered | CPThemeStateHighlighted] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered | CPThemeStateDisabled] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateDisabled]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered | CPThemeStateHighlighted] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered | CPThemeStateHighlighted]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; } - (void)_sizeToFit diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index dac337fd3..4401101e6 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -314,6 +314,159 @@ var CPThemeNameKey = @"CPThemeNameKey", @end +function ThemeState(stateNames) +{ + // We sort here to make toString and hasThemeState more efficient since those get called more. + this._stateNames = stateNames.sort(); +} + +ThemeState.prototype.toString = function() +{ + if (typeof this._stateNames === 'undefined') + this._stateNames = []; + + var stringOutput = this._stateNames[0]; + if (stringOutput === undefined) + return "" + + for (var stateIndex = 1; stateIndex < this._stateNames.length; stateIndex++) + stringOutput = stringOutput + "+" + this._stateNames[stateIndex]; + + return stringOutput; +} + +ThemeState.prototype.hasThemeState = function(aState) +{ + if (aState === undefined || aState === nil || aState._stateNames === undefined) + return false; + // We can do this in O(n) because both states have their stateNames already sorted. + var statePointer1 = 0, + statePointer2 = 0, + array1 = this._stateNames, + array2 = aState._stateNames, + stateLength1 = array1.length, + stateLength2 = array2.length; + + while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + { + if (array1[statePointer1] < array2[statePointer2]) + statePointer1++; + + else if (array1[statePointer1] === array2[statePointer2]) + { + statePointer1++; + statePointer2++; + } + if (array1[statePointer1] > array2[statePointer2]) + return false; + } + if (statePointer2 < stateLength2) + return false; + else + return true; +} + +var CPThemeStates = {}; + +/* + * This method can be called in multiple ways: + * CPThemeState('state1') - creates a new CPThemeState that corresponds to the string 'state1' + * CPThemeState('state1', 'state2') - creates a new CPThemeState made up of both 'state1' or 'state2' + * CPThemeState('state1+state2') - The same as CPThemeState('state1', 'state2') + * CPThemeState(state1, state2) - creates a new CPThemeState that corresponds to both state1 or state2 + * where state1 and state2 are not strings but are themselves CPThemeStates. + */ +function CPThemeState() +{ + if (arguments.length < 1) + throw "CPThemeState() must be called with at least one string argument"; + + var stateNames = {}; + for (var argIndex = 0; argIndex < arguments.length; argIndex++) + { + if (arguments[argIndex] === [CPNull null] || arguments[argIndex] === nil || arguments[argIndex] === undefined) + continue; + + if (typeof arguments[argIndex] === 'object') + { + for (var stateIndex = 0; stateIndex < arguments[argIndex]._stateNames.length; stateIndex++) + { + var stateName = arguments[argIndex]._stateNames[stateIndex]; + if (!stateNames[stateName]) + stateNames[stateName] = true; + } + } + else + { + var allNames = arguments[argIndex].split('+'); + for (var nameIndex = 0; nameIndex < allNames.length; nameIndex++) + { + if (!stateNames[allNames[nameIndex]]) + stateNames[allNames[nameIndex]] = true; + } + } + } + + var stateNameKeys = []; + for (key in stateNames) + { + if (!stateNames.hasOwnProperty(key)) + continue; + stateNameKeys.push(key); + } + var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNameKeys)); + return themeState; +} + +CPThemeState.subtractThemeStates = function(aState1, aState2) +{ + if (aState2 === undefined || aState2 === nil || aState2._stateNames === undefined) + return aState1; + + var statePointer1 = 0, + statePointer2 = 0, + array1 = aState1._stateNames, + array2 = aState2._stateNames, + stateLength1 = array1.length, + stateLength2 = array2.length, + newThemeState = new ThemeState([]); + + while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + { + if (array1[statePointer1] == array2[statePointer2]) + { + statePointer1++; + statePointer2++; + } + else + { + newThemeState._stateNames.push(array1[statePointer1]); + statePointer1++; + } + } + + while (statePointer1 < stateLength1) + { + newThemeState._stateNames.push(array1[statePointer1]); + statePointer1++; + } + newThemeState._stateNames.sort(); + return CPThemeState._cacheThemeState(newThemeState); + +} + +CPThemeState._cacheThemeState = function(aState) +{ + // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. + var themeState = CPThemeStates[String(aState)]; + if (themeState === undefined) + { + themeState = aState; + CPThemeState[String(themeState)] = themeState; + } + return themeState; +} + @implementation _CPThemeKeyedUnarchiver : CPKeyedUnarchiver { CPBundle _bundle; @@ -341,71 +494,7 @@ var CPThemeNameKey = @"CPThemeNameKey", @end -var CPThemeStates = {}, - CPThemeStateNames = {}, - CPThemeStateCount = 0; - -function CPThemeState(aStateName) -{ - var state = CPThemeStates[aStateName]; - - if (state === undefined) - { - if (aStateName.indexOf('+') === -1) - state = 1 << CPThemeStateCount++; - else - { - var state = 0, - states = aStateName.split('+'), - count = states.length; - - while (count--) - { - var stateName = states[count], - individualState = CPThemeStates[stateName]; - - if (individualState === undefined) - { - individualState = 1 << CPThemeStateCount++; - CPThemeStates[stateName] = individualState; - CPThemeStateNames[individualState] = stateName; - } - - state |= individualState; - } - } - - CPThemeStates[aStateName] = state; - CPThemeStateNames[state] = aStateName; - } - - return state; -} - -function CPThemeStateName(aState) -{ - var name = CPThemeStateNames[aState]; - - if (name !== undefined) - return name; - - if (!(aState & (aState - 1))) - return ""; - - var state = 1, - name = ""; - - for (; state < aState; state <<= 1) - if (aState & state) - name += (name.length === 0 ? '' : '+') + CPThemeStateNames[state]; - - CPThemeStateNames[aState] = name; - - return name; -} - -CPThemeStateNames[0] = "normal"; -CPThemeStateNormal = CPThemeStates["normal"] = 0; +CPThemeStateNormal = CPThemeState("normal"); CPThemeStateDisabled = CPThemeState("disabled"); CPThemeStateHovered = CPThemeState("hovered"); CPThemeStateHighlighted = CPThemeState("highlighted"); @@ -466,7 +555,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); - (BOOL)isTrivial { - return ([_values count] === 1) && (Number([_values allKeys][0]) === CPThemeStateNormal); + return ([_values count] === 1) && ([_values allKeys][0] === CPThemeStateNormal); } - (void)setValue:(id)aValue @@ -483,10 +572,14 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { _cache = { }; - if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:String(aState)]; - else - [_values setObject:aValue forKey:String(aState)]; + var componentStates = aState._stateNames; + for (var stateIndex = 0; stateIndex < [componentStates count]; stateIndex++) + { + if ((aValue === undefined) || (aValue === nil)) + [_values removeObjectForKey:componentStates[stateIndex]]; + else + [_values setObject:aValue forKey:componentStates[stateIndex]]; + } } - (id)value @@ -494,46 +587,27 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [self valueForState:CPThemeStateNormal]; } +// If aState is a state comprised of multiple CPThemeStates, this will return the value for the first state it finds. - (id)valueForState:(CPThemeState)aState { - var value = _cache[aState]; + var stateName = String(aState); + var value = _cache[stateName]; // This can be nil. if (value !== undefined) return value; - value = [_values objectForKey:String(aState)]; + value = [_values objectForKey:stateName]; // If we don't have a value, and we have a non-normal state... if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) { - // If this is a composite state (not a power of 2), find the closest partial subset match. - if (aState & (aState - 1)) + var stateCount = [aState._stateNames count]; + for (var stateIndex = 0; stateIndex < stateCount; stateIndex++) { - var highestOneCount = 0, - states = [_values allKeys], - count = states.length; - - while (count--) - { - // states[count] is a string! - var state = Number(states[count]); - - // A & B = A iff A < B - if ((state & aState) === state) - { - var oneCount = cachedNumberOfOnes[state]; - - if (oneCount === undefined) - oneCount = numberOfOnes(state); - - if (oneCount > highestOneCount) - { - highestOneCount = oneCount; - value = [_values objectForKey:String(state)]; - } - } - } + value = [_values objectForKey:aState._stateNames[stateIndex]]; + if (value !== undefined && value !== nil) + break; } // Still don't have a value? OK, let's use the normal value. @@ -554,7 +628,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); value = nil; } - _cache[aState] = value; + _cache[stateName] = value; return value; } @@ -633,8 +707,8 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var onlyKey = keys[0]; - if (Number(onlyKey) !== CPThemeStateNormal) - [aCoder encodeObject:CPThemeStateName(Number(onlyKey)) forKey:@"state"]; + if (onlyKey !== CPThemeStateNormal) + [aCoder encodeObject:String(onlyKey) forKey:@"state"]; [aCoder encodeObject:[_values objectForKey:onlyKey] forKey:@"value"]; } @@ -646,7 +720,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var key = keys[count]; - [encodedValues setObject:[_values objectForKey:key] forKey:CPThemeStateName(Number(key))]; + [encodedValues setObject:[_values objectForKey:key] forKey:String(key)]; } [aCoder encodeObject:encodedValues forKey:@"values"]; @@ -655,35 +729,6 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); @end -var cachedNumberOfOnes = [ 0 /*000000*/, 1 /*000001*/, 1 /*000010*/, 2 /*000011*/, 1 /*000100*/, 2 /*000101*/, 2 /*000110*/, - 3 /*000111*/, 1 /*001000*/, 2 /*001001*/, 2 /*001010*/, 3 /*001011*/, 2 /*001100*/, 3 /*001101*/, - 3 /*001110*/, 4 /*001111*/, 1 /*010000*/, 2 /*010001*/, 2 /*010010*/, 3 /*010011*/, 2 /*010100*/, - 3 /*010101*/, 3 /*010110*/, 4 /*010111*/, 2 /*011000*/, 3 /*011001*/, 3 /*011010*/, 4 /*011011*/, - 3 /*011100*/, 4 /*011101*/, 4 /*011110*/, 5 /*011111*/, 1 /*100000*/, 2 /*100001*/, 2 /*100010*/, - 3 /*100011*/, 2 /*100100*/, 3 /*100101*/, 3 /*100110*/, 4 /*100111*/, 2 /*101000*/, 3 /*101001*/, - 3 /*101010*/, 4 /*101011*/, 3 /*101100*/, 4 /*101101*/, 4 /*101110*/, 5 /*101111*/, 2 /*110000*/, - 3 /*110001*/, 3 /*110010*/, 4 /*110011*/, 3 /*110100*/, 4 /*110101*/, 4 /*110110*/, 5 /*110111*/, - 3 /*111000*/, 4 /*111001*/, 4 /*111010*/, 5 /*111011*/, 4 /*111100*/, 5 /*111101*/, 5 /*111110*/, - 6 /*111111*/ ]; - -var numberOfOnes = function(aNumber) -{ - var count = 0, - slot = aNumber; - - while (aNumber) - { - ++count; - aNumber &= (aNumber - 1); - } - - cachedNumberOfOnes[slot] = count; - - return count; -}; - -numberOfOnes.displayName = "numberOfOnes"; - function CPThemeAttributeEncode(aCoder, aThemeAttribute) { var values = aThemeAttribute._values, diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 05fa8e13d..ebfb0cf7b 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1394,7 +1394,7 @@ CPTokenFieldDeleteButtonType = 1; var r = [super setThemeState:aState]; // Share hover state with the disclosure and delete buttons. - if (aState & CPThemeStateHovered) + if (aState.hasThemeState(CPThemeStateHovered)) { [_disclosureButton setThemeState:CPThemeStateHovered]; [_deleteButton setThemeState:CPThemeStateHovered]; @@ -1408,7 +1408,7 @@ CPTokenFieldDeleteButtonType = 1; var r = [super unsetThemeState:aState]; // Share hover state with the disclosure and delete button. - if (aState & CPThemeStateHovered) + if (aState.hasThemeState(CPThemeStateHovered)) { [_disclosureButton unsetThemeState:CPThemeStateHovered]; [_deleteButton unsetThemeState:CPThemeStateHovered]; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 7eb044c58..aaf376585 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2889,21 +2889,15 @@ setBoundsOrigin: - (BOOL)hasThemeState:(CPThemeState)aState { - // Because CPThemeStateNormal is defined as 0 we need to check for it explicitly here - if (aState === CPThemeStateNormal && _themeState === CPThemeStateNormal) - return YES; - - return !!(_themeState & ((typeof aState === "string") ? CPThemeState(aState) : aState)); + return _themeState.hasThemeState(aState); } - (BOOL)setThemeState:(CPThemeState)aState { - var newState = (typeof aState === "string") ? CPThemeState(aState) : aState; - - if (_themeState & newState) + if (_themeState.hasThemeState(aState)) return NO; - _themeState |= newState; + _themeState = CPThemeState(_themeState, aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -2913,12 +2907,10 @@ setBoundsOrigin: - (BOOL)unsetThemeState:(CPThemeState)aState { - var newState = ((typeof aState === "string") ? CPThemeState(aState) : aState); - - if (!(_themeState & newState)) + if (!_themeState.hasThemeState(aState)) return NO; - _themeState &= ~newState; + _themeState = CPThemeState.subtractThemeStates(_themeState, aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -3452,7 +3444,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", [aCoder encodeConditionalObject:previousKeyView forKey:CPViewPreviousKeyViewKey]; [aCoder encodeObject:[self themeClass] forKey:CPViewThemeClassKey]; - [aCoder encodeInt:CPThemeStateName(_themeState) forKey:CPViewThemeStateKey]; + [aCoder encodeObject:String(_themeState) forKey:CPViewThemeStateKey]; for (var attributeName in _themeAttributes) if (_themeAttributes.hasOwnProperty(attributeName)) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index c37ed8181..78f88313a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -502,29 +502,29 @@ var themedButtonValues = nil, [@"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-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(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], + [@"bezel-color", highlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", disabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", defaultBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [@"bezel-color", defaultHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], + [@"bezel-color", defaultDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), 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], + [@"bezel-color", roundedBezelColor, CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [@"bezel-color", roundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], + [@"bezel-color", roundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [@"bezel-color", defaultRoundedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [@"bezel-color", defaultRoundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [@"bezel-color", defaultRoundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateDisabled], [@"text-color", defaultTextColor, CPThemeStateDefault], - [@"text-color", defaultDisabledTextColor, CPThemeStateDefault | CPThemeStateDisabled], + [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], [@"min-size", CGSizeMake(0.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)], @@ -588,15 +588,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color, CPThemeStateBordered], - [@"bezel-color", disabledColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", disabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0, 21.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], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)] @@ -631,16 +631,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color, CPPopUpButtonStatePullsDown | CPThemeStateBordered], - [@"bezel-color", disabledColor, CPPopUpButtonStatePullsDown | CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", color, CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], + [@"bezel-color", disabledColor, CPThemeState(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], + [@"text-color", [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)] @@ -761,35 +761,35 @@ var themedButtonValues = nil, [@"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-slot-color", trackColor, CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLight, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor, CPThemeStateVertical], - [@"knob-color", knobColorLight, CPThemeStateVertical | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorDark, CPThemeStateVertical | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColorLight, CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorDark, CPThemeState(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] + [@"scroller-width", 14.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -884,8 +884,8 @@ var themedButtonValues = nil, [@"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-slot-color", trackColorLight, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor], [@"knob-color", knobColorLight, CPThemeStateScrollerKnobLight], [@"knob-color", knobColorDark, CPThemeStateScrollerKnobDark], @@ -898,12 +898,12 @@ var themedButtonValues = nil, [@"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-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy], @@ -965,8 +965,8 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], @@ -978,30 +978,30 @@ var themedButtonValues = nil, [@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled], [@"content-inset", CGInsetMake(8.0, 7.0, 7.0, 8.0), CPThemeStateBezeled], - [@"text-color", textDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"text-color", textDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], - [@"text-color", placeholderColor, CPTextFieldStatePlaceholder | CPThemeStateDisabled], + [@"text-color", placeholderColor, CPThemeState(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], - [@"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 whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateBezeled)], + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), CPThemeState(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] + [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -1045,21 +1045,21 @@ var themedButtonValues = nil, // Global for reuse by subclasses themedRoundedTextFieldValues = [ - [@"bezel-color", bezelColor, CPTextFieldStateRounded | CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelDisabledColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelDisabledColor, CPThemeState(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(8.0, 13.0, 7.0, 14.0), CPTextFieldStateRounded | CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 1.0, 0.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"content-inset", CGInsetMake(8.0, 13.0, 7.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"text-color", textDisabledColor, CPTextFieldStateRounded | CPThemeStateDisabled], - [@"text-color", placeholderColor, CPTextFieldStateRounded | CPTextFieldStatePlaceholder], + [@"text-color", textDisabledColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateDisabled)], + [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], - [@"min-size", CGSizeMake(0.0, 30.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"max-size", CGSizeMake(-1.0, 30.0), CPTextFieldStateRounded | CPThemeStateBezeled] + [@"min-size", CGSizeMake(0.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"max-size", CGSizeMake(-1.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -1135,7 +1135,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -1147,8 +1147,8 @@ var themedButtonValues = nil, [@"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], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -1209,12 +1209,12 @@ var themedButtonValues = nil, [ [@"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], + [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeState(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-calendar", [CPColor colorWithCalibratedRed:159.0 / 255.0 green:201.0 / 255.0 blue:225.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"bezel-color-clock", clockImageColor], [@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled], @@ -1258,35 +1258,35 @@ var themedButtonValues = nil, [@"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:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(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:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(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], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(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], + [@"tile-text-color", [CPColor colorWithCalibratedRed:13.0 / 255.0 green:51.0 / 255.0 blue:70.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"arrow-image-left", arrowImageLeft], [@"arrow-image-right", arrowImageRight], @@ -1347,7 +1347,7 @@ var themedButtonValues = nil, [@"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] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -1389,8 +1389,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelHighlightedColor, CPThemeStateBezeled | CPThemeStateHighlighted], - [@"bezel-color", bezelColorDisabled, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], + [@"bezel-color", bezelColorDisabled, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -1422,8 +1422,8 @@ var themedButtonValues = nil, [@"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], + [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(7.0, 6.0)], [@"max-size", CGSizeMake(7.0, 6.0)], @@ -1445,15 +1445,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeStateBordered | CPThemeStateHovered], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelHighlightedColor, CPThemeState(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], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"offset", CGPointMake(17, 6), CPThemeStateBordered] ]; @@ -1509,9 +1509,9 @@ var themedButtonValues = nil, [@"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", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color", bezelDisabledColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -1573,24 +1573,24 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateEditing], - [@"bezel-color", bezelDisabledColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateDisabled], + [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], + [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], [@"bezel-color", bezelNoBorderColor, CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelNoBorderDisabledColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelNoBorderDisabledColor, CPThemeState(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 | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], // 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), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeStateBezeled | CPComboBoxStateButtonBordered], + [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], // Because combo box uses a three-part bezel, the height is fixed @@ -1621,10 +1621,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPRadioImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1657,10 +1657,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1691,8 +1691,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPButtonStateMixed | CPThemeStateHighlighted], - [@"image", mixedDisabledImage, CPButtonStateMixed | CPThemeStateDisabled], + [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], + [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1755,29 +1755,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"center-segment-bezel-color", centerHighlightedBezelColor, CPThemeStateSelected], [@"center-segment-bezel-color", pushedCenterBezelColor, CPThemeStateHighlighted], - [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(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", inactiveHighlightedLeftBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"left-segment-bezel-color", leftHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", pushedLeftBezelColor, CPThemeStateHighlighted], - [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeState(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", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"right-segment-bezel-color", rightHighlightedBezelColor, CPThemeStateSelected], [@"right-segment-bezel-color", pushedRightBezelColor, CPThemeStateHighlighted], - [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeState(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], @@ -1878,7 +1878,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeStateVertical | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(23.0, 24.0)], [@"knob-color", knobColor], @@ -1913,12 +1913,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeStateCircular | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeStateCircular | CPThemeStateHighlighted], - [@"knob-color", knobDisabledColor, CPThemeStateCircular | CPThemeStateDisabled] + [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], + [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -2029,7 +2029,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeStateHighlighted | CPThemeStateSelected] + [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -2260,10 +2260,10 @@ var themedButtonValues = nil, [ [@"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], + [@"bezel-color-up-button", bezelUpDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-down-button", bezelDownDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-up-button", bezelUpHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color-down-button", bezelDownHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(19.0, 13.0)], [@"down-button-size", CGSizeMake(19.0, 12.0)] @@ -2429,6 +2429,7 @@ var themedButtonValues = nil, return box; } + + (CPLevelIndicator)themedLevelIndicator { var levelIndicator = [[CPLevelIndicator alloc] initWithFrame:CGRectMake(0,0,100,100)], @@ -2803,7 +2804,6 @@ var themedButtonValues = nil, + (_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([ @@ -3014,7 +3014,6 @@ var themedButtonValues = nil, @end - @implementation AristoHUDThemeDescriptor : BKThemeDescriptor { } @@ -3094,7 +3093,7 @@ var themedButtonValues = nil, // var scroller = [AristoThemeDescriptor makeVerticalScroller], // overrides = // [ -// [@"knob-color", nil, CPThemeStateVertical | CPThemeStateDisabled] +// [@"knob-color", nil, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)] // ]; // // [self registerThemeValues:[self defaultThemeOverridesAddedTo:overrides] forView:scroller inherit:themedVerticalScrollerValues]; diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index 4b4bbf13b..be515268b 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -139,14 +139,14 @@ var themedButtonValues = nil, [@"text-shadow-color", regularTextShadowColor, CPThemeStateBordered], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], - [@"text-color", defaultTextColor, CPThemeStateBordered | CPThemeStateDefault], + [@"text-color", defaultTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], [@"text-color", defaultTextColor, CPThemeStateDefault], - [@"text-shadow-color", defaultTextShadowColor, CPThemeStateBordered | CPThemeStateDefault], + [@"text-shadow-color", defaultTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], - [@"text-color", defaultDisabledTextColor, CPThemeStateDefault | CPThemeStateDisabled], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeStateDefault | CPThemeStateDisabled], + [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeStateDefault | CPThemeStateDisabled], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateBordered], [@"line-break-mode", CPLineBreakByTruncatingTail], @@ -155,41 +155,41 @@ var themedButtonValues = nil, CPThemeStateBordered], [@"bezel-color", bezelColor["@"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"bezel-color", bezelColor["@"]["disabled"], - CPThemeStateBordered | CPThemeStateDisabled], + CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"bezel-color", bezelColor["default"]["@"], - CPThemeStateBordered | CPThemeStateDefault], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], [@"bezel-color", bezelColor["default"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted | CPThemeStateDefault], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], [@"bezel-color", bezelColor["default"]["disabled"], - CPThemeStateBordered | CPThemeStateDefault | CPThemeStateDisabled], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), CPThemeStateBordered], [@"bezel-color", roundedBezelColor["@"]["@"], - CPThemeStateBordered | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["@"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["@"]["disabled"], - CPThemeStateBordered | CPThemeStateDisabled | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["default"]["@"], - CPThemeStateBordered | CPThemeStateDefault | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["default"]["highlighted"], - CPThemeStateBordered | CPThemeStateHighlighted | CPThemeStateDefault | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], [@"bezel-color", roundedBezelColor["default"]["disabled"], - CPThemeStateBordered | CPThemeStateDefault | CPThemeStateDisabled | CPButtonStateBezelStyleRounded], + CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], - [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeStateBordered | CPButtonStateBezelStyleRounded], + [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], [@"min-size", CGSizeMake(0.0, CPButtonDefaultHeight)], [@"max-size", CGSizeMake(-1.0, CPButtonDefaultHeight)], @@ -235,7 +235,7 @@ var themedButtonValues = nil, var button = [self button]; [button setTitle:@"OK"]; - [button setThemeState:CPButtonStateBezelStyleRounded | CPThemeStateDefault]; + [button setThemeState:CPThemeState(CPButtonStateBezelStyleRounded, CPThemeStateDefault)]; return button; } @@ -256,15 +256,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color["@"], CPThemeStateBordered], - [@"bezel-color", color["disabled"], CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", color["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0, 21.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -293,16 +293,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color["@"], CPPopUpButtonStatePullsDown | CPThemeStateBordered], - [@"bezel-color", color["disabled"], CPPopUpButtonStatePullsDown | CPThemeStateBordered | CPThemeStateDisabled], + [@"bezel-color", color["@"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], + [@"bezel-color", color["disabled"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -403,35 +403,35 @@ var themedButtonValues = nil, [@"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", trackColor["light"], CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColor["dark"], CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColor["@"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], + [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor["@"], CPThemeStateVertical], - [@"knob-color", knobColor["light"], CPThemeStateVertical | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColor["dark"], CPThemeStateVertical | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColor["dark"], CPThemeState(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] + [@"scroller-width", 14.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], + [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -484,8 +484,8 @@ var themedButtonValues = nil, [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor["@"], CPThemeStateSelected], - [@"knob-slot-color", trackColor["light"], CPThemeStateSelected | CPThemeStateScrollerKnobLight], - [@"knob-slot-color", trackColor["dark"], CPThemeStateSelected | CPThemeStateScrollerKnobDark], + [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColor["@"]], [@"knob-color", knobColor["light"], CPThemeStateScrollerKnobLight], [@"knob-color", knobColor["dark"], CPThemeStateScrollerKnobDark], @@ -498,12 +498,12 @@ var themedButtonValues = nil, [@"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-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobLight], - [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateScrollerKnobDark], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], + [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], [@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy], [@"decrement-line-size", CGSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy], @@ -541,16 +541,16 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], - [@"text-color", regularDisabledTextColor, CPThemeStateBezeled | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBezeled | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], @@ -559,20 +559,20 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], CPThemeStateTableDataView | CPThemeStateSelectedDataView], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateSelectedDataView], - [@"text-color", [CPColor blackColor], CPThemeStateTableDataView | CPThemeStateEditing], - [@"text-color", [CPColor blackColor], CPThemeStateTableDataView | CPThemeStateSelectedDataView | CPThemeStateEditable], - [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), CPThemeStateTableDataView | CPThemeStateEditable], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateTableDataView | CPThemeStateEditing], - [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), CPThemeStateTableDataView | CPThemeStateEditing], + [@"text-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable)], + [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), CPThemeState(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] + [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-offset", CGSizeMake(0, 1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], + [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], + [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -610,25 +610,25 @@ var themedButtonValues = nil, themedRoundedTextFieldValues = [ [@"bezel-color", - bezelColor["@"], CPTextFieldStateRounded | CPThemeStateBezeled], + bezelColor["@"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], [@"bezel-color", - bezelFocusedColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], [@"bezel-color", - bezelColor["disabled"], CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], + bezelColor["disabled"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont systemFontOfSize:12.0]], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], - [@"text-color", placeholderColor, CPTextFieldStateRounded | CPTextFieldStatePlaceholder], - [@"text-color", regularDisabledTextColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPTextFieldStateRounded | CPThemeStateBezeled | CPThemeStateDisabled], + [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], + [@"text-color", regularDisabledTextColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], - [@"min-size", CGSizeMake(0.0, 29.0), CPTextFieldStateRounded | CPThemeStateBezeled], - [@"max-size", CGSizeMake(-1.0, 29.0), CPTextFieldStateRounded | CPThemeStateBezeled] + [@"min-size", CGSizeMake(0.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"max-size", CGSizeMake(-1.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -688,7 +688,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -700,8 +700,8 @@ var themedButtonValues = nil, [@"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", [CPColor clearColor], CPThemeStateSelected | CPThemeStateDisabled], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -762,12 +762,12 @@ var themedButtonValues = nil, [ [@"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:68.0 / 255.0 green:109.0 / 255.0 blue:198.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:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], CPThemeStateSelected | CPThemeStateDisabled], + [@"border-color", [CPColor colorWithCalibratedRed:217.0 / 255.0 green:217.0 / 255.0 blue:211.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], + [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"bezel-color-calendar", [CPColor whiteColor]], [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeStateSelected | CPThemeStateDisabled], + [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"bezel-color-clock", clockImageColor], [@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled], @@ -811,15 +811,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted], - [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-text-shadow-color", [CPColor whiteColor], CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted | CPThemeStateDisabled], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted | CPThemeStateDisabled], + [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-color", [CPColor whiteColor], CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted | CPThemeStateSelected], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted | CPThemeStateSelected], + [@"tile-text-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"tile-text-color", [CPColor whiteColor], CPThemeStateSelected], [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateSelected], @@ -831,15 +831,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled], - [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeStateDisabled | CPThemeStateSelected | CPThemeStateHighlighted], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], 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:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled | CPThemeStateSelected], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled | CPThemeStateSelected], + [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"arrow-image-left", arrowImageLeft], [@"arrow-image-right", arrowImageRight], @@ -888,7 +888,7 @@ var themedButtonValues = nil, [ [@"bezel-inset", CGInsetMakeZero()], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], [@"editor-inset", CGInsetMake(3.0, 0.0, 0.0, 0.0)], @@ -902,7 +902,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(4.0, 8.0, 4.0, 8.0), CPThemeStateBezeled], // Bezeled token field with no tokens - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeStateBezeled | CPTextFieldStatePlaceholder] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -930,8 +930,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["highlighted"], CPThemeStateBezeled | CPThemeStateHighlighted], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -964,8 +964,8 @@ var themedButtonValues = nil, [@"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], + [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(7.0, 6.0)], [@"max-size", CGSizeMake(7.0, 6.0)], @@ -987,15 +987,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeStateBordered | CPThemeStateHovered], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color", bezelHighlightedColor, CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], + [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelHighlightedColor, CPThemeState(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], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"offset", CGPointMake(16, 6), CPThemeStateBordered] ]; @@ -1049,36 +1049,36 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor["@"], CPThemeStateBezeled | CPComboBoxStateButtonBordered], - [@"bezel-color", bezelFocusedColor, CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateEditing], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBezeled | CPComboBoxStateButtonBordered | CPThemeStateDisabled], + [@"bezel-color", bezelColor["@"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], [@"bezel-color", bezelNoBorderColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-color", bezelNoBorderColor["disabled"], CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-color", bezelNoBorderColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], [@"border-inset", CGInsetMake(3.0, 3.0, 3.0, 3.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeStateBezeled | CPThemeStateEditing | CPComboBoxStateButtonBordered], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled | CPThemeStateDisabled | CPComboBoxStateButtonBordered], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered)], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled, CPComboBoxStateButtonBordered)], - [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), CPThemeStateBezeled | CPThemeStateEditing], - [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), CPThemeStateBezeled | CPThemeStateDisabled], + [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled | CPComboBoxStateButtonBordered], + [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), CPThemeStateBezeled | CPThemeStateEditing], + [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeStateBezeled | CPComboBoxStateButtonBordered], + [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(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, 31.0)], [@"max-size", CGSizeMake(-1, 31.0)], - [@"text-color", regularDisabledTextColor, CPThemeStateBordered | CPThemeStateDisabled], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateBordered | CPThemeStateDisabled], + [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], ]; [self registerThemeValues:overrides forView:combo inherit:themedTextFieldValues]; @@ -1105,10 +1105,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPRadioImageOffset], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], @@ -1140,10 +1140,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1174,8 +1174,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPButtonStateMixed | CPThemeStateHighlighted], - [@"image", mixedDisabledImage, CPButtonStateMixed | CPThemeStateDisabled], + [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], + [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1238,29 +1238,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"center-segment-bezel-color", centerHighlightedBezelColor, CPThemeStateSelected], [@"center-segment-bezel-color", pushedCenterBezelColor, CPThemeStateHighlighted], - [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeStateSelected | CPThemeStateDisabled], + [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(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", inactiveHighlightedLeftBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"left-segment-bezel-color", leftHighlightedBezelColor, CPThemeStateSelected], [@"left-segment-bezel-color", pushedLeftBezelColor, CPThemeStateHighlighted], - [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, CPThemeState(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", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"right-segment-bezel-color", rightHighlightedBezelColor, CPThemeStateSelected], [@"right-segment-bezel-color", pushedRightBezelColor, CPThemeStateHighlighted], - [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeStateHighlighted | CPThemeStateSelected], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, CPThemeState(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], @@ -1272,14 +1272,14 @@ var themedButtonValues = nil, // The "default" button state is the same theme color as the "selected" segmented control state, so we can use // the same text theme values. [@"text-color", defaultTextColor, CPThemeStateSelected], - [@"text-color", defaultDisabledTextColor, CPThemeStateDisabled | CPThemeStateSelected], + [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"text-shadow-color", regularTextShadowColor], [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateDisabled], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeStateDisabled | CPThemeStateSelected], + [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.2], CPThemeStateSelected], [@"text-shadow-offset", CGSizeMake(0.0, 1.0)], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateSelected], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeStateSelected | CPThemeStateDisabled], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"line-break-mode", CPLineBreakByTruncatingTail], [@"divider-thickness", 1.0], @@ -1365,7 +1365,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeStateVertical | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(21.0, 21.0)], [@"knob-color", knobColor], @@ -1400,12 +1400,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeStateCircular | CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeStateCircular | CPThemeStateHighlighted], - [@"knob-color", knobDisabledColor, CPThemeStateCircular | CPThemeStateDisabled] + [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], + [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -1500,7 +1500,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeStateHighlighted | CPThemeStateSelected] + [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -1708,10 +1708,10 @@ var themedButtonValues = nil, [ [@"bezel-color-up-button", bezelUp["@"], CPThemeStateBordered], [@"bezel-color-down-button", bezelDown["@"], CPThemeStateBordered], - [@"bezel-color-up-button", bezelUp["disabled"], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color-down-button", bezelDown["disabled"], CPThemeStateBordered | CPThemeStateDisabled], - [@"bezel-color-up-button", bezelUp["highlighted"], CPThemeStateBordered | CPThemeStateHighlighted], - [@"bezel-color-down-button", bezelDown["highlighted"], CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color-up-button", bezelUp["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-down-button", bezelDown["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color-up-button", bezelUp["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color-down-button", bezelDown["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(25.0, 13.0)], [@"down-button-size", CGSizeMake(25.0, 12.0)] @@ -1800,9 +1800,9 @@ var themedButtonValues = nil, [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], - [@"bezel-color", bezelColor["highlighted"], CPThemeStateBordered | CPThemeStateHighlighted], + [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color", bezelColor["disabled"], CPThemeStateBordered | CPThemeStateDisabled] + [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -2627,13 +2627,13 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled], + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPButtonStateMixed | CPThemeStateHighlighted], - [@"image", mixedDisabledImage, CPButtonStateMixed | CPThemeStateDisabled] + [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], + [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedCheckBoxValues]; @@ -2667,10 +2667,10 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeStateSelected | CPThemeStateHighlighted], + [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeStateSelected | CPThemeStateDisabled] + [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedRadioButtonValues]; diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index 5dc6121f9..753e75f45 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -171,9 +171,9 @@ var _CPAutocompleteMenuMaximumHeight = 307; var dataView = [tableColumn dataView], fontNormal = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView], - fontSelected = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView], + fontSelected = [dataView valueForThemeAttribute:@"font" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], contentInsetNormal = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView], - contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView]; + contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; var mergedString = contentArray.join("\n"); diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index bc44eccb3..a4e70d826 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -53,7 +53,7 @@ [view setThemeState:CPThemeStateHighlighted]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"Theme state should be CPThemeStateHighlighted"]; - [view setThemeState:CPThemeStateNormal | CPThemeStateHighlighted]; + [view setThemeState:CPThemeState(CPThemeStateNormal, CPThemeStateHighlighted)]; [self assertFalse:[view hasThemeState:CPThemeStateNormal] message:@"CPThemeStateNormal cannot exist as part of a compound state"]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; } diff --git a/Tests/Manual/ThemeBrowser/AppController.j b/Tests/Manual/ThemeBrowser/AppController.j index f60e077d3..445b3bce4 100644 --- a/Tests/Manual/ThemeBrowser/AppController.j +++ b/Tests/Manual/ThemeBrowser/AppController.j @@ -113,7 +113,7 @@ var BrowserColumnTheme = 0, var value = [theme valueForAttributeWithName:[attribute name] inState:state forClass:className]; - [valueLabel setStringValue:[SCString stringWithTemplate:ValueLabelTemplate, [theme name], className, [attribute name], CPThemeStateName(state)]] + [valueLabel setStringValue:[SCString stringWithTemplate:ValueLabelTemplate, [theme name], className, [attribute name], String(state)]] [self showValueDescription:value]; } diff --git a/Tools/dump_theme/dump_theme b/Tools/dump_theme/dump_theme index 379b5c6fa..14db96b9f 100755 --- a/Tools/dump_theme/dump_theme +++ b/Tools/dump_theme/dump_theme @@ -136,7 +136,7 @@ function main(args) value = [theme valueForAttributeWithName:attributeName inState:state forClass:className], description = CPDescriptionOfObject(value).replace(/^/mg, " "); - colorPrint("cyan", " " + CPThemeStateName(state)); + colorPrint("cyan", " " + String(state)); stream.print(description + "\n"); } } diff --git a/Tools/nib2cib/NSTableColumn.j b/Tools/nib2cib/NSTableColumn.j index cd53c1827..2a55492f6 100644 --- a/Tools/nib2cib/NSTableColumn.j +++ b/Tools/nib2cib/NSTableColumn.j @@ -113,10 +113,10 @@ var IBDefaultFontSizeTableHeader = 11.0; if (![textColor isEqual:defaultColor]) { - var selectedColor = [self valueForDataViewThemeAttribute:@"text-color" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView]; + var selectedColor = [self valueForDataViewThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; - [dataView setValue:selectedColor forThemeAttribute:@"text-color" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView]; - [dataView setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateTableDataView | CPThemeStateSelectedDataView | CPThemeStateEditing]; + [dataView setValue:selectedColor forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; + [dataView setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing)]; } } diff --git a/Tools/nib2cib/_NSCornerView.j b/Tools/nib2cib/_NSCornerView.j index 83e667d50..541b3acb5 100644 --- a/Tools/nib2cib/_NSCornerView.j +++ b/Tools/nib2cib/_NSCornerView.j @@ -51,7 +51,7 @@ { var theme = [Nib2Cib defaultTheme], height = [theme valueForAttributeWithName:@"default-row-height" forClass:[CPTableView class]], - width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeStateVertical | CPThemeStateScrollViewLegacy forClass:[CPScroller class]]; + width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy) forClass:[CPScroller class]]; _frame.size.height = height; _bounds.size.height = height; From 0450fdb542a723bbe7556dabf57934ad7639ece8 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 12 Feb 2014 17:35:55 -0800 Subject: [PATCH 04/33] Get jaking working --- AppKit/CPSegmentedControl.j | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 613c7e198..6e1715ae6 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -918,6 +918,11 @@ var CPSegmentedControlSegmentsKey = "CPSegmentedControlSegmentsKey", for (var i = 0; i < _segments.length; i++) { _themeStates[i] = [_segments[i] selected] ? CPThemeStateSelected : CPThemeStateNormal; + } + + // We do this in a second loop because it relies on all the themeStates being set first + for (var i = 0; i < _segments.length; i++) + { [self tileWithChangedSegment:i]; } From 45a237af169c9bb56f584957975389ac4cfd3b0d Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 13 Feb 2014 14:22:03 -0800 Subject: [PATCH 05/33] Handle null inputs for subtracting CPThemes. --- AppKit/CPTheme.j | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 4401101e6..c9fc47124 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -420,7 +420,10 @@ function CPThemeState() CPThemeState.subtractThemeStates = function(aState1, aState2) { - if (aState2 === undefined || aState2 === nil || aState2._stateNames === undefined) + if (aState1 === undefined || aState1 === nil || aState1 === [CPNull null]) + return CPThemeState._cacheThemeState(new ThemeState([])); + + if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) return aState1; var statePointer1 = 0, From c644e8a30facfa14bc77472551aef309b295c25d Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 13 Feb 2014 23:49:59 -0800 Subject: [PATCH 06/33] Change CPTheme to be hash-backed to make it a bit faster --- AppKit/CPTheme.j | 136 ++++++++------------- AppKit/CPView.j | 2 +- AppKit/Themes/Aristo/ThemeDescriptors.j | 3 - AppKit/Themes/BlendKit/BKThemeDescriptor.j | 2 +- 4 files changed, 51 insertions(+), 92 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index c9fc47124..e0495eebc 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -316,23 +316,28 @@ var CPThemeNameKey = @"CPThemeNameKey", function ThemeState(stateNames) { - // We sort here to make toString and hasThemeState more efficient since those get called more. - this._stateNames = stateNames.sort(); + this._stateNames = stateNames; + + var stateNameKeys = []; + for (key in stateNames) + { + if (!stateNames.hasOwnProperty(key)) + continue; + stateNameKeys.push(key); + } + stateNameKeys.sort(); + this._stateNameString = stateNameKeys[0]; + if (this._stateNameString === undefined) + this._stateNameString = ""; + + var stateNameLength = stateNameKeys.length; + for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++) + this._stateNameString = this._stateNameString + "+" + stateNameKeys[stateIndex]; } ThemeState.prototype.toString = function() { - if (typeof this._stateNames === 'undefined') - this._stateNames = []; - - var stringOutput = this._stateNames[0]; - if (stringOutput === undefined) - return "" - - for (var stateIndex = 1; stateIndex < this._stateNames.length; stateIndex++) - stringOutput = stringOutput + "+" + this._stateNames[stateIndex]; - - return stringOutput; + return this._stateNameString; } ThemeState.prototype.hasThemeState = function(aState) @@ -340,30 +345,14 @@ ThemeState.prototype.hasThemeState = function(aState) if (aState === undefined || aState === nil || aState._stateNames === undefined) return false; // We can do this in O(n) because both states have their stateNames already sorted. - var statePointer1 = 0, - statePointer2 = 0, - array1 = this._stateNames, - array2 = aState._stateNames, - stateLength1 = array1.length, - stateLength2 = array2.length; - - while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + for (var stateName in aState._stateNames) { - if (array1[statePointer1] < array2[statePointer2]) - statePointer1++; - - else if (array1[statePointer1] === array2[statePointer2]) - { - statePointer1++; - statePointer2++; - } - if (array1[statePointer1] > array2[statePointer2]) + if (!aState._stateNames.hasOwnProperty(stateName)) + continue; + if (!this._stateNames[stateName]) return false; } - if (statePointer2 < stateLength2) - return false; - else - return true; + return true; } var CPThemeStates = {}; @@ -389,73 +378,41 @@ function CPThemeState() if (typeof arguments[argIndex] === 'object') { - for (var stateIndex = 0; stateIndex < arguments[argIndex]._stateNames.length; stateIndex++) + for (var stateName in arguments[argIndex]._stateNames) { - var stateName = arguments[argIndex]._stateNames[stateIndex]; - if (!stateNames[stateName]) - stateNames[stateName] = true; + if (!arguments[argIndex]._stateNames.hasOwnProperty(stateName)) + continue; + stateNames[stateName] = true; } } else { var allNames = arguments[argIndex].split('+'); for (var nameIndex = 0; nameIndex < allNames.length; nameIndex++) - { - if (!stateNames[allNames[nameIndex]]) - stateNames[allNames[nameIndex]] = true; - } + stateNames[allNames[nameIndex]] = true; } } - var stateNameKeys = []; - for (key in stateNames) - { - if (!stateNames.hasOwnProperty(key)) - continue; - stateNameKeys.push(key); - } - var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNameKeys)); + var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); return themeState; } CPThemeState.subtractThemeStates = function(aState1, aState2) { - if (aState1 === undefined || aState1 === nil || aState1 === [CPNull null]) - return CPThemeState._cacheThemeState(new ThemeState([])); - if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) return aState1; - var statePointer1 = 0, - statePointer2 = 0, - array1 = aState1._stateNames, - array2 = aState2._stateNames, - stateLength1 = array1.length, - stateLength2 = array2.length, - newThemeState = new ThemeState([]); - - while (statePointer1 < stateLength1 && statePointer2 < stateLength2) + var newThemeState = new ThemeState({}); + for (var stateName in aState1._stateNames) { - if (array1[statePointer1] == array2[statePointer2]) - { - statePointer1++; - statePointer2++; - } - else - { - newThemeState._stateNames.push(array1[statePointer1]); - statePointer1++; - } + if (!aState1._stateNames.hasOwnProperty(stateName)) + continue; + + if (!aState2._stateNames[stateName]) + newThemeState[stateName] = true; } - while (statePointer1 < stateLength1) - { - newThemeState._stateNames.push(array1[statePointer1]); - statePointer1++; - } - newThemeState._stateNames.sort(); return CPThemeState._cacheThemeState(newThemeState); - } CPThemeState._cacheThemeState = function(aState) @@ -576,12 +533,15 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); _cache = { }; var componentStates = aState._stateNames; - for (var stateIndex = 0; stateIndex < [componentStates count]; stateIndex++) + for (var state in componentStates) { - if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:componentStates[stateIndex]]; - else - [_values setObject:aValue forKey:componentStates[stateIndex]]; + if (componentStates.hasOwnProperty(state)) + { + if ((aValue === undefined) || (aValue === nil)) + [_values removeObjectForKey:componentStates[state]]; + else + [_values setObject:aValue forKey:componentStates[state]]; + } } } @@ -605,10 +565,12 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); // If we don't have a value, and we have a non-normal state... if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) { - var stateCount = [aState._stateNames count]; - for (var stateIndex = 0; stateIndex < stateCount; stateIndex++) + for (var state in aState._stateNames) { - value = [_values objectForKey:aState._stateNames[stateIndex]]; + if (!aState._stateNames.hasOwnProperty(state)) + continue; + + value = [_values objectForKey:state]; if (value !== undefined && value !== nil) break; } diff --git a/AppKit/CPView.j b/AppKit/CPView.j index aaf376585..b96d4c161 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -3142,7 +3142,7 @@ setBoundsOrigin: { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i], + var attributeValueState = themeValues[i]; attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 78f88313a..a5524d16a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -2883,8 +2883,6 @@ var themedButtonValues = nil, + (_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), @@ -3177,5 +3175,4 @@ var themedButtonValues = nil, return progressBar; } - @end diff --git a/AppKit/Themes/BlendKit/BKThemeDescriptor.j b/AppKit/Themes/BlendKit/BKThemeDescriptor.j index 522050def..1afc65621 100644 --- a/AppKit/Themes/BlendKit/BKThemeDescriptor.j +++ b/AppKit/Themes/BlendKit/BKThemeDescriptor.j @@ -221,7 +221,7 @@ var ItemSizes = { }, { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i], + var attributeValueState = themeValues[i]; attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; From 9e61991ad2973db54ce29fcd7c86b8851415091e Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Tue, 18 Feb 2014 13:18:45 -0800 Subject: [PATCH 07/33] Fix bug when setting themeStates in a themeAttribute --- AppKit/CPTheme.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index e0495eebc..0a3b63e4e 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -538,9 +538,9 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); if (componentStates.hasOwnProperty(state)) { if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:componentStates[state]]; + [_values removeObjectForKey:state]; else - [_values setObject:aValue forKey:componentStates[state]]; + [_values setObject:aValue forKey:state]; } } } From f8ef6ab3977a528c45f28b5b6643d97ff94bf230 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Tue, 18 Feb 2014 13:20:16 -0800 Subject: [PATCH 08/33] Fix accidental semicolon --- AppKit/CPView.j | 2 +- AppKit/Themes/BlendKit/BKThemeDescriptor.j | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index b96d4c161..aaf376585 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -3142,7 +3142,7 @@ setBoundsOrigin: { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i]; + var attributeValueState = themeValues[i], attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; diff --git a/AppKit/Themes/BlendKit/BKThemeDescriptor.j b/AppKit/Themes/BlendKit/BKThemeDescriptor.j index 1afc65621..522050def 100644 --- a/AppKit/Themes/BlendKit/BKThemeDescriptor.j +++ b/AppKit/Themes/BlendKit/BKThemeDescriptor.j @@ -221,7 +221,7 @@ var ItemSizes = { }, { for (var i = 0; i < themeValues.length; ++i) { - var attributeValueState = themeValues[i]; + var attributeValueState = themeValues[i], attribute = attributeValueState[0], value = attributeValueState[1], state = attributeValueState[2]; From 5309cc591609cf047ae9ad156bb4193e31cbeecb Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 19 Feb 2014 14:19:39 -0800 Subject: [PATCH 09/33] Change CPTheme implementation to fix how searching for a matching theme works --- AppKit/CPTheme.j | 58 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 0a3b63e4e..554af8326 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -333,6 +333,7 @@ function ThemeState(stateNames) var stateNameLength = stateNameKeys.length; for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++) this._stateNameString = this._stateNameString + "+" + stateNameKeys[stateIndex]; + this._stateNameCount = stateNameLength; } ThemeState.prototype.toString = function() @@ -355,6 +356,21 @@ ThemeState.prototype.hasThemeState = function(aState) return true; } +ThemeState.prototype.isSubsetOf = function(aState) +{ + if (aState._stateNameCount < this._stateNameCount) + return false; + + for (key in this._stateNames) + { + if (!this._stateNames.hasOwnProperty(key)) + continue; + if (!aState._stateNames[key]) + return false; + } + return true; +} + var CPThemeStates = {}; /* @@ -370,6 +386,13 @@ function CPThemeState() if (arguments.length < 1) throw "CPThemeState() must be called with at least one string argument"; + if (arguments.length === 1 && typeof arguments[0] === 'string') + { + var themeState = CPThemeStates[arguments[0]]; + if (themeState !== undefined) + return themeState; + } + var stateNames = {}; for (var argIndex = 0; argIndex < arguments.length; argIndex++) { @@ -532,17 +555,10 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { _cache = { }; - var componentStates = aState._stateNames; - for (var state in componentStates) - { - if (componentStates.hasOwnProperty(state)) - { - if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:state]; - else - [_values setObject:aValue forKey:state]; - } - } + if ((aValue === undefined) || (aValue === nil)) + [_values removeObjectForKey:String(aState)]; + else + [_values setObject:aValue forKey:String(aState)]; } - (id)value @@ -565,14 +581,20 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); // If we don't have a value, and we have a non-normal state... if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) { - for (var state in aState._stateNames) - { - if (!aState._stateNames.hasOwnProperty(state)) - continue; + // If this is a composite state, find the closest partial subset match. + var states = [_values allKeys], + count = states.length, + largestThemeState = 0; - value = [_values objectForKey:state]; - if (value !== undefined && value !== nil) - break; + while (count--) + { + var stateObject = CPThemeState(states[count]); + + if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) + { + value = [_values objectForKey:String(states[count])]; + largestThemeState = stateObject._stateNameCount; + } } // Still don't have a value? OK, let's use the normal value. From bad731c86f481e39b3e30e03c2ce19327cefe985 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 19 Feb 2014 14:45:18 -0800 Subject: [PATCH 10/33] Fix subtracting theme states --- AppKit/CPTheme.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 554af8326..911e2ceca 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -425,17 +425,17 @@ CPThemeState.subtractThemeStates = function(aState1, aState2) if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) return aState1; - var newThemeState = new ThemeState({}); + var newStates = {}; for (var stateName in aState1._stateNames) { if (!aState1._stateNames.hasOwnProperty(stateName)) continue; if (!aState2._stateNames[stateName]) - newThemeState[stateName] = true; + newStates[stateName] = true; } - return CPThemeState._cacheThemeState(newThemeState); + return CPThemeState._cacheThemeState(new ThemeState(newStates)); } CPThemeState._cacheThemeState = function(aState) From 1563b0bf5528fab99b9a8bc8de74f6ab7aabbb09 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:36:34 -0800 Subject: [PATCH 11/33] Get all tests to pass --- AppKit/CPTheme.j | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 911e2ceca..530584f52 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -316,15 +316,26 @@ var CPThemeNameKey = @"CPThemeNameKey", function ThemeState(stateNames) { - this._stateNames = stateNames; - var stateNameKeys = []; + this._stateNames = {}; + for (key in stateNames) { if (!stateNames.hasOwnProperty(key)) continue; - stateNameKeys.push(key); + if (key != 'normal') + { + this._stateNames[key] = true; + stateNameKeys.push(key); + } } + + if (stateNameKeys.length === 0) + { + stateNameKeys.push('normal'); + this._stateNames['normal'] = true; + } + stateNameKeys.sort(); this._stateNameString = stateNameKeys[0]; if (this._stateNameString === undefined) @@ -566,7 +577,6 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [self valueForState:CPThemeStateNormal]; } -// If aState is a state comprised of multiple CPThemeStates, this will return the value for the first state it finds. - (id)valueForState:(CPThemeState)aState { var stateName = String(aState); @@ -578,22 +588,24 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); value = [_values objectForKey:stateName]; - // If we don't have a value, and we have a non-normal state... - if ((value === undefined || value === nil) && aState !== CPThemeStateNormal) + if (value === undefined || value === nil) { // If this is a composite state, find the closest partial subset match. - var states = [_values allKeys], - count = states.length, - largestThemeState = 0; - - while (count--) + if (aState._stateNameCount > 1) { - var stateObject = CPThemeState(states[count]); + var states = [_values allKeys], + count = states.length, + largestThemeState = 0; - if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) + while (count--) { - value = [_values objectForKey:String(states[count])]; - largestThemeState = stateObject._stateNameCount; + var stateObject = CPThemeState(states[count]); + + if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) + { + value = [_values objectForKey:String(states[count])]; + largestThemeState = stateObject._stateNameCount; + } } } From 7eb35ef33d859ad57c110d2692a40ab1ab9a9105 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:41:56 -0800 Subject: [PATCH 12/33] Clarify documentation for CPThemeState() --- AppKit/CPTheme.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 530584f52..705d90896 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -384,12 +384,12 @@ ThemeState.prototype.isSubsetOf = function(aState) var CPThemeStates = {}; -/* +/*! * This method can be called in multiple ways: * CPThemeState('state1') - creates a new CPThemeState that corresponds to the string 'state1' - * CPThemeState('state1', 'state2') - creates a new CPThemeState made up of both 'state1' or 'state2' + * CPThemeState('state1', 'state2') - creates a new composite CPThemeState made up of both 'state1' or 'state2' * CPThemeState('state1+state2') - The same as CPThemeState('state1', 'state2') - * CPThemeState(state1, state2) - creates a new CPThemeState that corresponds to both state1 or state2 + * CPThemeState(state1, state2) - creates a new composite CPThemeState made up of state1 and state2 * where state1 and state2 are not strings but are themselves CPThemeStates. */ function CPThemeState() From 883c4a185d94aecc3ac520eecc0a7ef0423fc828 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:58:20 -0800 Subject: [PATCH 13/33] Some cleanup of CPSegmentedControl.j --- AppKit/CPSegmentedControl.j | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 6e1715ae6..eeda55448 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -646,8 +646,7 @@ CPSegmentSwitchTrackingMomentary = 2; borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal; - if (_themeState.hasThemeState(CPThemeStateDisabled)) - borderState = CPThemeState(borderState, CPThemeStateDisabled); + borderState = isDisabled ? CPThemeState(borderState, CPThemeStateDisabled) : borderState; var borderColor = [self valueForThemeAttribute:@"divider-bezel-color" inState:borderState], @@ -916,15 +915,11 @@ var CPSegmentedControlSegmentsKey = "CPSegmentedControlSegmentsKey", // HACK for (var i = 0; i < _segments.length; i++) - { _themeStates[i] = [_segments[i] selected] ? CPThemeStateSelected : CPThemeStateNormal; - } // We do this in a second loop because it relies on all the themeStates being set first for (var i = 0; i < _segments.length; i++) - { [self tileWithChangedSegment:i]; - } var difference = MAX(originalWidth - [self frame].size.width, 0.0), remainingWidth = FLOOR(difference / _segments.length); From d862d701f383f266aea53a9de050393e0484a620 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 13:58:29 -0800 Subject: [PATCH 14/33] Add note to ThemeState object about it being private --- AppKit/CPTheme.j | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 705d90896..a84435326 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -314,6 +314,10 @@ var CPThemeNameKey = @"CPThemeNameKey", @end +/*! + * ThemeStates are immutable objects representing a particular ThemeState. Applications should never be creating + * ThemeStates directly but should instead use the CPThemeState helper methods. + */ function ThemeState(stateNames) { var stateNameKeys = []; From c3d2decdeca5ef2dddf35925006642e778901d40 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 14:17:09 -0800 Subject: [PATCH 15/33] Fix bugs with CPThemeAttribute encoding and decoding --- AppKit/CPTheme.j | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index a84435326..990ab0428 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -607,7 +607,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); if (stateObject.isSubsetOf(aState) && stateObject._stateNameCount > largestThemeState) { - value = [_values objectForKey:String(states[count])]; + value = [_values objectForKey:states[count]]; largestThemeState = stateObject._stateNameCount; } } @@ -710,8 +710,8 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var onlyKey = keys[0]; - if (onlyKey !== CPThemeStateNormal) - [aCoder encodeObject:String(onlyKey) forKey:@"state"]; + if (onlyKey !== String(CPThemeStateNormal)) + [aCoder encodeObject:onlyKey forKey:@"state"]; [aCoder encodeObject:[_values objectForKey:onlyKey] forKey:@"value"]; } @@ -723,7 +723,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var key = keys[count]; - [encodedValues setObject:[_values objectForKey:key] forKey:String(key)]; + [encodedValues setObject:[_values objectForKey:key] forKey:key]; } [aCoder encodeObject:encodedValues forKey:@"values"]; @@ -742,7 +742,7 @@ function CPThemeAttributeEncode(aCoder, aThemeAttribute) { var state = [values allKeys][0]; - if (Number(state) === 0) + if (state === String(CPThemeStateNormal)) { [aCoder encodeObject:[values objectForKey:state] forKey:key]; From 861d093d800807b5ec09dfecf8e74c10e6eaff23 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 17:52:16 -0800 Subject: [PATCH 16/33] All ThemeStates always have at least one state - the normal state --- AppKit/CPTheme.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 990ab0428..24c90d21c 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -342,8 +342,6 @@ function ThemeState(stateNames) stateNameKeys.sort(); this._stateNameString = stateNameKeys[0]; - if (this._stateNameString === undefined) - this._stateNameString = ""; var stateNameLength = stateNameKeys.length; for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++) From 727b519750f17bf95bf03c4ceb1e865a6a8a16fd Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 18:09:47 -0800 Subject: [PATCH 17/33] Remove unused method in CPTheme --- AppKit/CPTheme.j | 5 ----- 1 file changed, 5 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 24c90d21c..dc4174a73 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -549,11 +549,6 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [_values count] > 0; } -- (BOOL)isTrivial -{ - return ([_values count] === 1) && ([_values allKeys][0] === CPThemeStateNormal); -} - - (void)setValue:(id)aValue { _cache = {}; From cf99a7bf18a7596a70a8f6870db2a01aa3da20c3 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Thu, 20 Feb 2014 18:14:01 -0800 Subject: [PATCH 18/33] Fix bug that was turning dictionary keys into objects --- AppKit/CPTheme.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index dc4174a73..c3313f0f5 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -666,10 +666,10 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); if ([aCoder containsValueForKey:@"value"]) { - var state = CPThemeStateNormal; + var state = String(CPThemeStateNormal); if ([aCoder containsValueForKey:@"state"]) - state = CPThemeState([aCoder decodeObjectForKey:@"state"]); + state = [aCoder decodeObjectForKey:@"state"]; [_values setObject:[aCoder decodeObjectForKey:"value"] forKey:state]; } @@ -683,7 +683,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); { var key = keys[count]; - [_values setObject:[encodedValues objectForKey:key] forKey:CPThemeState(key)]; + [_values setObject:[encodedValues objectForKey:key] forKey:key]; } } } From 8b2f2fe24d52b40b0fe5935b7a107c40f4f014aa Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 21 Feb 2014 13:11:08 -0800 Subject: [PATCH 19/33] Add new unit tests for CPView --- Tests/AppKit/CPViewTest.j | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index a4e70d826..6679e89a3 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -42,10 +42,21 @@ [self assert:undefined same:[_CPDisplayServer run]]; } +- (void)testHasThemeState +{ + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"By default, CPView should be in CPThemeStateNormal"]; + + view._themeState = CPThemeState(CPThemeStateDisabled, CPThemeStateBordered); + [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"CPView should be in state CPThemeStateDisabled"]; + [self assertTrue:[view hasThemeState:CPThemeStateBordered] message:@"CPView should be in state CPThemeStateBordered"]; + [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] message:@"CPView should be in the combined state of CPThemeStateDisabled and CPThemeStateBordered"]; + [self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"]; +} + - (void)testThemeState { [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; - [self assertFalse:[view hasThemeState:CPThemeStateDisabled] message:@"view should be disabled"]; + [self assertFalse:[view hasThemeState:CPThemeStateDisabled] message:@"view should not be disabled"]; [view setThemeState:CPThemeStateDisabled]; [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; @@ -56,6 +67,27 @@ [view setThemeState:CPThemeState(CPThemeStateNormal, CPThemeStateHighlighted)]; [self assertFalse:[view hasThemeState:CPThemeStateNormal] message:@"CPThemeStateNormal cannot exist as part of a compound state"]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; + + [view setThemeState:CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)]; + [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; + [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; + [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; +} + +- (void)testUnsetThemeState +{ + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; + [view unsetThemeState:CPThemeStateNormal]; + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView always be in CPThemeStateNormal even if you try to unset it"]; + [view setThemeState:CPThemeStateDisabled]; + [view unsetThemeState:CPThemeStateDisabled]; + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be in CPThemeStateNormal when all other theme states have been unset from it"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [view unsetThemeState:CPThemeStateDisabled]; + [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:"@CPView should have the remaining state when one of its combined states is unset"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; + [view unsetThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDisabled)]; + [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be able to unset a combined theme state"]; } - (void)testThemeAttributes From df148e4946aa176c064bf7c432fe9b794dd943f4 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 21 Feb 2014 14:29:31 -0800 Subject: [PATCH 20/33] Fix a small typo in CPTheme.j themestate caching --- AppKit/CPTheme.j | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index c3313f0f5..362926ca1 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -399,9 +399,10 @@ function CPThemeState() if (arguments.length < 1) throw "CPThemeState() must be called with at least one string argument"; + var themeState; if (arguments.length === 1 && typeof arguments[0] === 'string') { - var themeState = CPThemeStates[arguments[0]]; + themeState = CPThemeStates[arguments[0]]; if (themeState !== undefined) return themeState; } @@ -429,7 +430,7 @@ function CPThemeState() } } - var themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); + themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); return themeState; } @@ -458,7 +459,7 @@ CPThemeState._cacheThemeState = function(aState) if (themeState === undefined) { themeState = aState; - CPThemeState[String(themeState)] = themeState; + CPThemeStates[String(themeState)] = themeState; } return themeState; } From 68952b273ba92e7f23b702c4c57fbeb767845496 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 21 Feb 2014 14:30:09 -0800 Subject: [PATCH 21/33] Add a bunch of unit tests for CPTheme.j --- Tests/AppKit/CPThemeTest.j | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Tests/AppKit/CPThemeTest.j diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j new file mode 100644 index 000000000..1803c6619 --- /dev/null +++ b/Tests/AppKit/CPThemeTest.j @@ -0,0 +1,65 @@ +@import + +@implementation CPThemeTest : OJTestCase +{ +} + +- (void)testCreatingThemeState +{ + var themeState = new ThemeState({'test': true, 'test1': true}); + [self assertTrue:themeState._stateNames['test'] message:"Creating a new ThemeState sets the statenames correctly."]; + [self assertTrue:themeState._stateNames['test1'] message:"Creating a new ThemeState sets the statenames correctly."]; + [self assertTrue:(themeState._stateNameCount === 2) message:"Creating a new ThemeState sets count of state names correctly."]; + [self assertTrue:(String(themeState) === "test+test1") message:"Creating a new ThemeState sets its string value to its sorted state names"]; + + themeState = new ThemeState(); + [self assertTrue:themeState._stateNames['normal'] message:"Creating a new ThemeState with no states sets the ThemeState to be a normal themestate"]; + [self assertTrue:(themeState._stateNameCount === 1) message:"Creating a new ThemeState with no states creates a new ThemeState with one state (normal)."]; + + themeState = new ThemeState({'boo': true, 'normal': true}); + [self assertTrue:themeState._stateNames['boo'] message:"Creating a new combined ThemeState with normal and something else only sets the other theme state."]; + [self assertFalse:themeState._stateNames['normal'] message:"Creating a new combined ThemeState with normal and something else only sets the other theme state."]; + [self assertTrue:(themeState._stateNameCount === 1) message:"Creating a new ThemeState with no states creates a new ThemeState with one state (normal)."]; +} + +- (void)testCreatingThemeStateWithCPThemeState +{ + var themeState1 = CPThemeState('normal'); + var themeState2 = CPThemeState('normal'); + [self assertTrue:(themeState1 === themeState2) message:"Creating two themestates with the same string returns the same object for both"]; + + + themeState1 = CPThemeState('smee+blee'); + themeState2 = CPThemeState('blee+smee'); + + [self assertTrue:(themeState1 === themeState2) message:"Creating two combined themestates with the same component themestates returns the same object for both"]; + + var themeState3 = CPThemeState('hello', themeState1, themeState2); + [self assertTrue:(String(themeState3) === "blee+hello+smee") message:"Can create a combined themestate with both string and object arguments"]; + + var themeState4 = CPThemeState(themeState3); + [self assertTrue:(themeState4 === themeState3) message:"Creating a new ThemeState off an old one returns the same object"]; + + var themeState5 = CPThemeState('a', 'theme', 'state'); + [self assertTrue:(String(themeState5) === 'a+state+theme') message:"Creating a new ThemeState using multiple strings works."]; +} + +- (void)testThemeAttributeValueForState +{ + var themeAttribute = [[_CPThemeAttribute alloc] initWithName:@"test" defaultValue:5]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 5) message:"Return the default value for the theme attribute if the theme attribute has no value defined for the given state"]; + + [themeAttribute setValue:7 forState:CPThemeState("aState")]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 7) message:"Return the correct value for the state if the state is defined"]; + + [themeAttribute setValue:8 forState:CPThemeState('normal')]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState1")] == 8) message:"Return the normal value for the state if the theme attribute has no value defined for the given state but has a value for the normal state defined"]; + + [themeAttribute setValue:10 forState:CPThemeState('aState3+aState4')]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState3")] == 8) message:"Return the normal value for the state if the state is only a partial match on the theme attributes defined states"]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState4+aState3")] == 10) message:"Correctly match combined states on the theme attribute"]; + + [themeAttribute setValue:9 forState:CPThemeState('aState3')]; + [self assertTrue:([themeAttribute valueForState:CPThemeState("aState8+aState3+aState4")] == 10) message:"Return the largest partial subset match for a combined state that isn't a perfect match"]; +} +@end From b0d90bb61290e07e24f7ac0418c39c4e839fc7a7 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sun, 23 Feb 2014 16:03:56 -0800 Subject: [PATCH 22/33] ThemeState is a string now instead of an int on a CPView --- AppKit/CPView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index aaf376585..63602207a 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -3353,7 +3353,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", _theme = [CPTheme defaultTheme]; _themeClass = [aCoder decodeObjectForKey:CPViewThemeClassKey]; - _themeState = CPThemeState([aCoder decodeIntForKey:CPViewThemeStateKey]); + _themeState = CPThemeState([aCoder decodeObjectForKey:CPViewThemeStateKey]); _themeAttributes = {}; var theClass = [self class], From 745ad7cc347a137c3d7b519f19590c6e5c841d56 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Wed, 26 Feb 2014 13:11:43 -0800 Subject: [PATCH 23/33] Clean up the interface a bit to consolidate ThemeState methods onto one object. Keep CPThemeState as just a helper function. --- AppKit/CPScroller.j | 2 +- AppKit/CPSegmentedControl.j | 4 +-- AppKit/CPTheme.j | 64 ++++++++++++++++++------------------- AppKit/CPView.j | 2 +- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index c927a90e2..f19ee083d 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -733,7 +733,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); var themeState = _themeState; if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) - themeState = CPThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); + themeState = ThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); return [self valueForThemeAttribute:anAttributeName inState:themeState]; } diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index eeda55448..53173dd77 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -431,7 +431,7 @@ CPSegmentSwitchTrackingMomentary = 2; [_segments[aSegment] setEnabled:shouldBeEnabled]; if (shouldBeEnabled) - _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); + _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); else _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateDisabled); @@ -479,7 +479,7 @@ CPSegmentSwitchTrackingMomentary = 2; if (shouldHighlight) _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateHighlighted); else - _themeStates[aSegment] = CPThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); + _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); [self setNeedsLayout]; [self setNeedsDisplay:YES]; diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 362926ca1..e4b570cfb 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -316,7 +316,7 @@ var CPThemeNameKey = @"CPThemeNameKey", /*! * ThemeStates are immutable objects representing a particular ThemeState. Applications should never be creating - * ThemeStates directly but should instead use the CPThemeState helper methods. + * ThemeStates directly but should instead use the CPThemeState function. */ function ThemeState(stateNames) { @@ -384,6 +384,36 @@ ThemeState.prototype.isSubsetOf = function(aState) return true; } +ThemeState.subtractThemeStates = function(aState1, aState2) +{ + if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) + return aState1; + + var newStates = {}; + for (var stateName in aState1._stateNames) + { + if (!aState1._stateNames.hasOwnProperty(stateName)) + continue; + + if (!aState2._stateNames[stateName]) + newStates[stateName] = true; + } + + return ThemeState._cacheThemeState(new ThemeState(newStates)); +} + +ThemeState._cacheThemeState = function(aState) +{ + // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. + var themeState = CPThemeStates[String(aState)]; + if (themeState === undefined) + { + themeState = aState; + CPThemeStates[String(themeState)] = themeState; + } + return themeState; +} + var CPThemeStates = {}; /*! @@ -430,37 +460,7 @@ function CPThemeState() } } - themeState = CPThemeState._cacheThemeState(new ThemeState(stateNames)); - return themeState; -} - -CPThemeState.subtractThemeStates = function(aState1, aState2) -{ - if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) - return aState1; - - var newStates = {}; - for (var stateName in aState1._stateNames) - { - if (!aState1._stateNames.hasOwnProperty(stateName)) - continue; - - if (!aState2._stateNames[stateName]) - newStates[stateName] = true; - } - - return CPThemeState._cacheThemeState(new ThemeState(newStates)); -} - -CPThemeState._cacheThemeState = function(aState) -{ - // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. - var themeState = CPThemeStates[String(aState)]; - if (themeState === undefined) - { - themeState = aState; - CPThemeStates[String(themeState)] = themeState; - } + themeState = ThemeState._cacheThemeState(new ThemeState(stateNames)); return themeState; } diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 63602207a..eb81fab1f 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2910,7 +2910,7 @@ setBoundsOrigin: if (!_themeState.hasThemeState(aState)) return NO; - _themeState = CPThemeState.subtractThemeStates(_themeState, aState); + _themeState = ThemeState.subtractThemeStates(_themeState, aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; From 7408710761d1298dc1ef7856df3269dbf4693676 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Fri, 28 Feb 2014 11:14:46 -0800 Subject: [PATCH 24/33] Move placement of CPThemeStates cache to above the cache method for clarity. --- AppKit/CPTheme.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index e4b570cfb..7e43f5d5b 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -402,6 +402,8 @@ ThemeState.subtractThemeStates = function(aState1, aState2) return ThemeState._cacheThemeState(new ThemeState(newStates)); } +var CPThemeStates = {}; + ThemeState._cacheThemeState = function(aState) { // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. @@ -414,8 +416,6 @@ ThemeState._cacheThemeState = function(aState) return themeState; } -var CPThemeStates = {}; - /*! * This method can be called in multiple ways: * CPThemeState('state1') - creates a new CPThemeState that corresponds to the string 'state1' From 2fd8940c02f6b4e963b04bb25c81abbec3936d80 Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sat, 1 Mar 2014 23:11:24 -0800 Subject: [PATCH 25/33] Allow array arguments to various methods that take ThemeStates --- AppKit/CPAlert.j | 2 +- AppKit/CPButton.j | 2 +- AppKit/CPButtonBar.j | 12 +- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 36 +- AppKit/CPStepper.j | 8 +- AppKit/CPTableView.j | 10 +- AppKit/CPTheme.j | 6 +- AppKit/CPTokenField.j | 10 +- AppKit/CPView.j | 25 +- AppKit/Themes/Aristo/ThemeDescriptors.j | 284 +++++++-------- AppKit/Themes/Aristo2/ThemeDescriptors.j | 328 +++++++++--------- AppKit/_CPAutocompleteMenu.j | 4 +- Tests/AppKit/CPViewTest.j | 8 + .../SmartFoldersDemo/ImageAndTextView.j | 4 +- 14 files changed, 387 insertions(+), 352 deletions(-) diff --git a/AppKit/CPAlert.j b/AppKit/CPAlert.j index 38aeef5d8..cbd40cfe6 100644 --- a/AppKit/CPAlert.j +++ b/AppKit/CPAlert.j @@ -255,7 +255,7 @@ var bottomHeight = 71; [_themeView setValue:aValue forThemeAttribute:aName]; } -- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(CPThemeState)aState +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState { [_themeView setValue:aValue forThemeAttribute:aName inState:aState]; } diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 99d3ca36b..d4deab55b 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -268,7 +268,7 @@ CPButtonImageOffset = 3.0; break; case CPOffState: - [self unsetThemeState:CPThemeState(CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted)]; + [self unsetThemeState:[CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted]]; } } diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 9de237609..f271aa34e 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -250,15 +250,15 @@ currentButtonOffset += width - 1; } - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered)]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered)]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered]]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, ]]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered]]; [button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered]; // FIXME shouldn't need this - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown)]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; [self addSubview:button]; } diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index 63dd02be9..f30aa1b57 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -1020,30 +1020,30 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted] forThemeAttribute:@"font" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"font" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-color" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] forThemeAttribute:@"text-shadow-offset" inState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; [self addSubview:_textField]; @@ -1059,7 +1059,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" /*! Set a theme */ -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { [_textField setThemeState:aState]; [super setThemeState:aState]; @@ -1067,7 +1067,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" /*! Unset a theme */ -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { [_textField unsetThemeState:aState]; [super unsetThemeState:aState]; diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j index f39e37fab..eed6f1cdc 100644 --- a/AppKit/CPStepper.j +++ b/AppKit/CPStepper.j @@ -182,11 +182,11 @@ [_buttonDown setFrame:downFrame]; [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]]; [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeStateBordered] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)] forThemeAttribute:@"bezel-color" inState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]]; } - (void)_sizeToFit diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 33f79aad5..1bc803070 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -6186,14 +6186,20 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", [self setThemeState:CPThemeStateTableDataView]; } -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + [super setThemeState:aState]; [self recursivelyPerformSelector:@selector(setThemeState:) withObject:aState startingFrom:self]; } -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + [super unsetThemeState:aState]; [self recursivelyPerformSelector:@selector(unsetThemeState:) withObject:aState startingFrom:self]; } diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 7e43f5d5b..0c1c0a81c 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -240,7 +240,7 @@ var CPThemesByName = { }, @param aClass The themed class in which to look for the attribute @return A value or nil */ -- (id)valueForAttributeWithName:(CPString)aName inState:(CPThemeState)aState forClass:(id)aClass +- (id)valueForAttributeWithName:(CPString)aName inState:(ThemeState)aState forClass:(id)aClass { var attribute = [self attributeWithName:aName forClass:aClass]; @@ -560,7 +560,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); _values = @{ String(CPThemeStateNormal): aValue }; } -- (void)setValue:(id)aValue forState:(CPThemeState)aState +- (void)setValue:(id)aValue forState:(ThemeState)aState { _cache = { }; @@ -575,7 +575,7 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); return [self valueForState:CPThemeStateNormal]; } -- (id)valueForState:(CPThemeState)aState +- (id)valueForState:(ThemeState)aState { var stateName = String(aState); var value = _cache[stateName]; diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index ebfb0cf7b..da59b43a8 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1389,8 +1389,11 @@ CPTokenFieldDeleteButtonType = 1; [self setNeedsLayout]; } -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + var r = [super setThemeState:aState]; // Share hover state with the disclosure and delete buttons. @@ -1403,8 +1406,11 @@ CPTokenFieldDeleteButtonType = 1; return r; } -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + var r = [super unsetThemeState:aState]; // Share hover state with the disclosure and delete button. diff --git a/AppKit/CPView.j b/AppKit/CPView.j index eb81fab1f..43ed0cfd4 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2887,13 +2887,19 @@ setBoundsOrigin: return _themeState; } -- (BOOL)hasThemeState:(CPThemeState)aState +- (BOOL)hasThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + return _themeState.hasThemeState.apply(_themeState, aState); + return _themeState.hasThemeState(aState); } -- (BOOL)setThemeState:(CPThemeState)aState +- (BOOL)setThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (_themeState.hasThemeState(aState)) return NO; @@ -2905,8 +2911,11 @@ setBoundsOrigin: return YES; } -- (BOOL)unsetThemeState:(CPThemeState)aState +- (BOOL)unsetThemeState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (!_themeState.hasThemeState(aState)) return NO; @@ -3069,8 +3078,11 @@ setBoundsOrigin: return dictionary; } -- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(CPThemeState)aState +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (!_themeAttributes || !_themeAttributes[aName]) [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; @@ -3101,8 +3113,11 @@ setBoundsOrigin: [self setNeedsLayout]; } -- (id)valueForThemeAttribute:(CPString)aName inState:(CPThemeState)aState +- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState { + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + if (!_themeAttributes || !_themeAttributes[aName]) [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index a5524d16a..df5341f4d 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -502,29 +502,29 @@ var themedButtonValues = nil, [@"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], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"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, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color", disabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color", defaultBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], - [@"bezel-color", defaultHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], - [@"bezel-color", defaultDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], + [@"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], - [@"bezel-color", roundedBezelColor, CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], - [@"bezel-color", roundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], - [@"bezel-color", roundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], - [@"bezel-color", defaultRoundedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], - [@"bezel-color", defaultRoundedHighlightedBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], - [@"bezel-color", defaultRoundedDisabledBezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], - [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [@"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, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-color", defaultDisabledTextColor, [CPThemeStateDefault, CPThemeStateDisabled]], [@"min-size", CGSizeMake(0.0, 24.0)], [@"max-size", CGSizeMake(-1.0, 24.0)], @@ -588,15 +588,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color, CPThemeStateBordered], - [@"bezel-color", disabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", disabledColor, [CPThemeStateBordered, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0, 21.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], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"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)] @@ -631,16 +631,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color, CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], - [@"bezel-color", disabledColor, CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled)], + [@"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], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:0.6], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"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)] @@ -761,35 +761,35 @@ var themedButtonValues = nil, [@"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, CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLight, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"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, CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorDark, CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobDark)], + [@"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, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] + [@"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]; @@ -884,8 +884,8 @@ var themedButtonValues = nil, [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor, CPThemeStateSelected], - [@"knob-slot-color", trackColorLight, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorDark, CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColorLight, [CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColorDark, [CPThemeStateSelected, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColor], [@"knob-color", knobColorLight, CPThemeStateScrollerKnobLight], [@"knob-color", knobColorDark, CPThemeStateScrollerKnobDark], @@ -898,12 +898,12 @@ var themedButtonValues = nil, [@"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, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"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, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"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], @@ -965,8 +965,8 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], @@ -978,30 +978,30 @@ var themedButtonValues = nil, [@"bezel-inset", CGInsetMakeZero(), CPThemeStateBezeled], [@"content-inset", CGInsetMake(8.0, 7.0, 7.0, 8.0), CPThemeStateBezeled], - [@"text-color", textDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-color", textDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], - [@"text-color", placeholderColor, CPThemeState(CPTextFieldStatePlaceholder, CPThemeStateDisabled)], + [@"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], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditing)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateBezeled)], - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 5.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(-1.0, -1.0, -1.0, -1.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"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], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] + [@"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]] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -1045,21 +1045,21 @@ var themedButtonValues = nil, // Global for reuse by subclasses themedRoundedTextFieldValues = [ - [@"bezel-color", bezelColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + [@"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), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"content-inset", CGInsetMake(8.0, 13.0, 7.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 1.0, 0.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(8.0, 13.0, 7.0, 14.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], - [@"text-color", textDisabledColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateDisabled)], - [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], + [@"text-color", textDisabledColor, [CPTextFieldStateRounded, CPThemeStateDisabled]], + [@"text-color", placeholderColor, [CPTextFieldStateRounded, CPTextFieldStatePlaceholder]], - [@"min-size", CGSizeMake(0.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"max-size", CGSizeMake(-1.0, 30.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] + [@"min-size", CGSizeMake(0.0, 30.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"max-size", CGSizeMake(-1.0, 30.0), [CPTextFieldStateRounded, CPThemeStateBezeled]] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -1135,7 +1135,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -1147,8 +1147,8 @@ var themedButtonValues = nil, [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], [CPThemeStateNormal, CPThemeStateDisabled]], + [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, [CPThemeStateSelected, CPThemeStateDisabled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -1209,12 +1209,12 @@ var themedButtonValues = nil, [ [@"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], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"border-color", [CPColor colorWithCalibratedRed:100.0 / 255.0 green:154.0 / 255.0 blue:184.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"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], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"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], @@ -1258,35 +1258,35 @@ var themedButtonValues = nil, [@"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], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"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], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, 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], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(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, 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], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"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], @@ -1347,7 +1347,7 @@ var themedButtonValues = nil, [@"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), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), [CPThemeStateBezeled, CPTextFieldStatePlaceholder]] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -1389,8 +1389,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], - [@"bezel-color", bezelColorDisabled, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelHighlightedColor, [CPThemeStateBezeled, CPThemeStateHighlighted]], + [@"bezel-color", bezelColorDisabled, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -1422,8 +1422,8 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], [@"bezel-color", nil, CPThemeStateBordered], - [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], + [@"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)], @@ -1445,15 +1445,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"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), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateBordered, CPThemeStateHighlighted]], [@"offset", CGPointMake(17, 6), CPThemeStateBordered] ]; @@ -1509,9 +1509,9 @@ var themedButtonValues = nil, [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", bezelHighlightedColor, [CPThemeStateBordered, CPThemeStateHighlighted]], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBordered, CPThemeStateDisabled]], ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -1573,24 +1573,24 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], - [@"bezel-color", bezelDisabledColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing]], + [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled]], [@"bezel-color", bezelNoBorderColor, CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelNoBorderDisabledColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelNoBorderFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelNoBorderDisabledColor, [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), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 1.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing]], // 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), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"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 @@ -1621,10 +1621,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPRadioImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1657,10 +1657,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1691,8 +1691,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], - [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], + [@"image", mixedHighlightedImage, [CPButtonStateMixed, CPThemeStateHighlighted]], + [@"image", mixedDisabledImage, [CPButtonStateMixed, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1755,29 +1755,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"right-segment-bezel-color", rightBezelColor, CPThemeStateNormal], [@"right-segment-bezel-color", inactiveRightBezelColor, CPThemeStateDisabled], - [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"content-inset", CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], @@ -1878,7 +1878,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateVertical, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(23.0, 24.0)], [@"knob-color", knobColor], @@ -1913,12 +1913,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], - [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] + [@"knob-color", knobHighlightedColor, [CPThemeStateCircular, CPThemeStateHighlighted]], + [@"knob-color", knobDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -2029,7 +2029,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] + [@"background-color", highlightedPressed, [CPThemeStateHighlighted, CPThemeStateSelected]] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -2260,10 +2260,10 @@ var themedButtonValues = nil, [ [@"bezel-color-up-button", bezelUp, CPThemeStateBordered], [@"bezel-color-down-button", bezelDown, CPThemeStateBordered], - [@"bezel-color-up-button", bezelUpDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-down-button", bezelDownDisabled, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-up-button", bezelUpHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color-down-button", bezelDownHighlighted, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"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]], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(19.0, 13.0)], [@"down-button-size", CGSizeMake(19.0, 12.0)] @@ -3091,7 +3091,7 @@ var themedButtonValues = nil, // var scroller = [AristoThemeDescriptor makeVerticalScroller], // overrides = // [ -// [@"knob-color", nil, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)] +// [@"knob-color", nil, [CPThemeStateVertical, CPThemeStateDisabled]] // ]; // // [self registerThemeValues:[self defaultThemeOverridesAddedTo:overrides] forView:scroller inherit:themedVerticalScrollerValues]; diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index be515268b..093a6da39 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -139,14 +139,14 @@ var themedButtonValues = nil, [@"text-shadow-color", regularTextShadowColor, CPThemeStateBordered], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], - [@"text-color", defaultTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [@"text-color", defaultTextColor, [CPThemeStateBordered, CPThemeStateDefault]], [@"text-color", defaultTextColor, CPThemeStateDefault], - [@"text-shadow-color", defaultTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [@"text-shadow-color", defaultTextShadowColor, [CPThemeStateBordered, CPThemeStateDefault]], - [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-color", defaultDisabledTextColor, [CPThemeStateDefault, CPThemeStateDisabled]], + [@"text-shadow-color", defaultDisabledTextShadowColor, [CPThemeStateDefault, CPThemeStateDisabled]], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateDefault, CPThemeStateDisabled)], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), [CPThemeStateDefault, CPThemeStateDisabled]], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateBordered], [@"line-break-mode", CPLineBreakByTruncatingTail], @@ -155,41 +155,41 @@ var themedButtonValues = nil, CPThemeStateBordered], [@"bezel-color", bezelColor["@"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [CPThemeStateBordered, CPThemeStateHighlighted]], [@"bezel-color", bezelColor["@"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [CPThemeStateBordered, CPThemeStateDisabled]], [@"bezel-color", bezelColor["default"]["@"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault)], + [CPThemeStateBordered, CPThemeStateDefault]], [@"bezel-color", bezelColor["default"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault)], + [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault]], [@"bezel-color", bezelColor["default"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled)], + [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0.0, 7.0, 0.0, 7.0), CPThemeStateBordered], [@"bezel-color", roundedBezelColor["@"]["@"], - CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["@"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateHighlighted, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["@"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["default"]["@"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateDefault, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["default"]["highlighted"], - CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDefault, CPButtonStateBezelStyleRounded]], [@"bezel-color", roundedBezelColor["default"]["disabled"], - CPThemeState(CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded)], + [CPThemeStateBordered, CPThemeStateDefault, CPThemeStateDisabled, CPButtonStateBezelStyleRounded]], - [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), CPThemeState(CPThemeStateBordered, CPButtonStateBezelStyleRounded)], + [@"content-inset", CGInsetMake(0.0, 10.0, 0.0, 10.0), [CPThemeStateBordered, CPButtonStateBezelStyleRounded]], [@"min-size", CGSizeMake(0.0, CPButtonDefaultHeight)], [@"max-size", CGSizeMake(-1.0, CPButtonDefaultHeight)], @@ -235,7 +235,7 @@ var themedButtonValues = nil, var button = [self button]; [button setTitle:@"OK"]; - [button setThemeState:CPThemeState(CPButtonStateBezelStyleRounded, CPThemeStateDefault)]; + [button setThemeState:[CPButtonStateBezelStyleRounded, CPThemeStateDefault]]; return button; } @@ -256,15 +256,15 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", color["@"], CPThemeStateBordered], - [@"bezel-color", color["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", color["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0, 21.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBordered, CPThemeStateDisabled]], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -293,16 +293,16 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", color["@"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered)], - [@"bezel-color", color["disabled"], CPThemeState(CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled)], + [@"bezel-color", color["@"], [CPPopUpButtonStatePullsDown, CPThemeStateBordered]], + [@"bezel-color", color["disabled"], [CPPopUpButtonStatePullsDown, CPThemeStateBordered, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(0, 27.0 + 5.0, 0, 5.0), CPThemeStateBordered], [@"font", [CPFont boldSystemFontOfSize:12.0]], [@"text-color", regularTextColor], [@"text-shadow-color", regularTextShadowColor], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBordered, CPThemeStateDisabled]], [@"min-size", CGSizeMake(32.0, 25.0)], [@"max-size", CGSizeMake(-1.0, 25.0)] @@ -403,35 +403,35 @@ var themedButtonValues = nil, [@"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["@"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected)], - [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColor["@"], [CPThemeStateVertical, CPThemeStateSelected]], + [@"knob-slot-color", trackColor["light"], [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColor["dark"], [CPThemeStateVertical, CPThemeStateSelected, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColor["@"], CPThemeStateVertical], - [@"knob-color", knobColor["light"], CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColor["dark"], CPThemeState(CPThemeStateVertical, CPThemeStateScrollerKnobDark)], + [@"knob-color", knobColor["light"], [CPThemeStateVertical, CPThemeStateScrollerKnobLight]], + [@"knob-color", knobColor["dark"], [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, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"track-border-overlay", 0.0, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateSelected, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], - [@"increment-line-color", incrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-color", decrementColorLegacy, CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"decrement-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)], - [@"increment-line-size", CGSizeMake(14.0, 11.0), CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy)] + [@"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]; @@ -484,8 +484,8 @@ var themedButtonValues = nil, [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor["@"], CPThemeStateSelected], - [@"knob-slot-color", trackColor["light"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColor["dark"], CPThemeState(CPThemeStateSelected, CPThemeStateScrollerKnobDark)], + [@"knob-slot-color", trackColor["light"], [CPThemeStateSelected, CPThemeStateScrollerKnobLight]], + [@"knob-slot-color", trackColor["dark"], [CPThemeStateSelected, CPThemeStateScrollerKnobDark]], [@"knob-color", knobColor["@"]], [@"knob-color", knobColor["light"], CPThemeStateScrollerKnobLight], [@"knob-color", knobColor["dark"], CPThemeStateScrollerKnobDark], @@ -498,12 +498,12 @@ var themedButtonValues = nil, [@"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, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateSelected)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-slot-color", trackColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"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, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobLight)], - [@"knob-color", knobColorLegacy, CPThemeState(CPThemeStateScrollViewLegacy, CPThemeStateScrollerKnobDark)], + [@"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], @@ -541,16 +541,16 @@ var themedButtonValues = nil, [ [@"vertical-alignment", CPTopVerticalTextAlignment, CPThemeStateBezeled], [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateBezeled], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBezeled, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(8.0, 7.0, 5.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"text-color", placeholderColor, CPTextFieldStatePlaceholder], @@ -559,20 +559,20 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 5.0), CPThemeStateTableDataView], [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], - [@"text-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"text-color", [CPColor blackColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable)], - [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditable)], - [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), CPThemeState(CPThemeStateTableDataView, CPThemeStateEditing)], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable]], + [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), [CPThemeStateTableDataView, CPThemeStateEditable]], + [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-color", [CPColor colorWithCalibratedWhite:1.0 alpha:1.0], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-offset", CGSizeMake(0, 1), CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)], - [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.6], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView)], - [@"font", [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize], CPThemeState(CPThemeStateTableDataView, CPThemeStateGroupRow)] + [@"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]] ]; [self registerThemeValues:themedTextFieldValues forView:textfield]; @@ -610,25 +610,25 @@ var themedButtonValues = nil, themedRoundedTextFieldValues = [ [@"bezel-color", - bezelColor["@"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], + bezelColor["@"], [CPTextFieldStateRounded, CPThemeStateBezeled]], [@"bezel-color", - bezelFocusedColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + bezelFocusedColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-color", - bezelColor["disabled"], CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + bezelColor["disabled"], [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont systemFontOfSize:12.0]], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(8.0, 14.0, 6.0, 14.0), [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateEditing]], - [@"text-color", placeholderColor, CPThemeState(CPTextFieldStateRounded, CPTextFieldStatePlaceholder)], - [@"text-color", regularDisabledTextColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled)], + [@"text-color", placeholderColor, [CPTextFieldStateRounded, CPTextFieldStatePlaceholder]], + [@"text-color", regularDisabledTextColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPTextFieldStateRounded, CPThemeStateBezeled, CPThemeStateDisabled]], - [@"min-size", CGSizeMake(0.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)], - [@"max-size", CGSizeMake(-1.0, 29.0), CPThemeState(CPTextFieldStateRounded, CPThemeStateBezeled)] + [@"min-size", CGSizeMake(0.0, 29.0), [CPTextFieldStateRounded, CPThemeStateBezeled]], + [@"max-size", CGSizeMake(-1.0, 29.0), [CPTextFieldStateRounded, CPThemeStateBezeled]] ]; [self registerThemeValues:themedRoundedTextFieldValues forView:textfield]; @@ -688,7 +688,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.8]], @@ -700,8 +700,8 @@ var themedButtonValues = nil, [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], [CPThemeStateNormal, CPThemeStateDisabled]], + [@"datepicker-textfield-bezel-color", [CPColor clearColor], [CPThemeStateSelected, CPThemeStateDisabled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], @@ -762,12 +762,12 @@ var themedButtonValues = nil, [ [@"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:68.0 / 255.0 green:109.0 / 255.0 blue:198.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], CPThemeState(CPThemeStateNormal, CPThemeStateDisabled)], - [@"border-color", [CPColor colorWithCalibratedRed:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"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:68.0 / 255.0 green:109.0 / 255.0 blue:198.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]], [@"bezel-color-calendar", [CPColor whiteColor]], [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:1.0], CPThemeStateSelected], - [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"bezel-color-calendar", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], [CPThemeStateSelected, CPThemeStateDisabled]], [@"bezel-color-clock", clockImageColor], [@"bezel-color-clock", clockImageColorDisabled, CPThemeStateDisabled], @@ -811,15 +811,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateHighlighted], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateHighlighted], - [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:87.0 / 255.0 green:128.0 / 255.0 blue:216.0 / 255.0 alpha:0.5], [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-text-shadow-color", [CPColor whiteColor], [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateDisabled]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateDisabled]], - [@"tile-text-color", [CPColor whiteColor], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"tile-text-color", [CPColor whiteColor], [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-text-shadow-offset", CGSizeMake(0,1), [CPThemeStateHighlighted, CPThemeStateSelected]], + [@"tile-font", [CPFont systemFontOfSize:10.0], [CPThemeStateHighlighted, CPThemeStateSelected]], [@"tile-text-color", [CPColor whiteColor], CPThemeStateSelected], [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeStateSelected], @@ -831,15 +831,15 @@ var themedButtonValues = nil, [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeStateDisabled], [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeStateDisabled], - [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected, CPThemeStateHighlighted]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], [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:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-text-shadow-offset", CGSizeMake(0,1), CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], - [@"tile-font", [CPFont systemFontOfSize:10.0], CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"tile-text-color", [CPColor colorWithCalibratedRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:0.5], [CPThemeStateDisabled, CPThemeStateSelected]], + [@"tile-text-shadow-color", [CPColor colorWithCalibratedRed:0.0 / 255.0 green:0.0 / 255.0 blue:0.0 / 255.0 alpha:0.2], [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], @@ -888,7 +888,7 @@ var themedButtonValues = nil, [ [@"bezel-inset", CGInsetMakeZero()], [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"editor-inset", CGInsetMake(3.0, 0.0, 0.0, 0.0)], @@ -902,7 +902,7 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(4.0, 8.0, 4.0, 8.0), CPThemeStateBezeled], // Bezeled token field with no tokens - [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), CPThemeState(CPThemeStateBezeled, CPTextFieldStatePlaceholder)] + [@"content-inset", CGInsetMake(8.0, 8.0, 7.0, 8.0), [CPThemeStateBezeled, CPTextFieldStatePlaceholder]] ]; [self registerThemeValues:overrides forView:tokenfield inherit:themedTextFieldValues]; @@ -930,8 +930,8 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBezeled, CPThemeStateHighlighted)], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelColor["highlighted"], [CPThemeStateBezeled, CPThemeStateHighlighted]], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"text-color", textColor], [@"text-color", textHighlightedColor, CPThemeStateHighlighted], @@ -964,8 +964,8 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], [@"bezel-color", nil, CPThemeStateBordered], - [@"bezel-color", arrowImage, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", arrowImageHiglighted, CPThemeState(CPThemeStateBordered, CPThemeStateHovered, CPThemeStateHighlighted)], + [@"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)], @@ -987,15 +987,15 @@ var themedButtonValues = nil, themeValues = [ - [@"bezel-color", bezelColor, CPThemeState(CPThemeStateBordered, CPThemeStateHovered)], - [@"bezel-color", [bezelColor colorWithAlphaComponent:0], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color", bezelHighlightedColor, CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"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), CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), [CPThemeStateBordered, CPThemeStateHighlighted]], [@"offset", CGPointMake(16, 6), CPThemeStateBordered] ]; @@ -1049,36 +1049,36 @@ var themedButtonValues = nil, overrides = [ - [@"bezel-color", bezelColor["@"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], - [@"bezel-color", bezelFocusedColor, CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing)], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled)], + [@"bezel-color", bezelColor["@"], [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateEditing]], + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPComboBoxStateButtonBordered, CPThemeStateDisabled]], [@"bezel-color", bezelNoBorderColor["@"], CPThemeStateBezeled], - [@"bezel-color", bezelNoBorderFocusedColor, CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-color", bezelNoBorderColor["disabled"], CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-color", bezelNoBorderFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-color", bezelNoBorderColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], [@"border-inset", CGInsetMake(3.0, 3.0, 3.0, 3.0), CPThemeStateBezeled], - [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered)], - [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled, CPComboBoxStateButtonBordered)], + [@"bezel-inset", CGInsetMake(0.0, 1.0, 0.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing, CPComboBoxStateButtonBordered]], + [@"bezel-inset", CGInsetMake(3.0, 4.0, 3.0, 4.0), [CPThemeStateBezeled, CPThemeStateDisabled, CPComboBoxStateButtonBordered]], - [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], - [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), CPThemeState(CPThemeStateBezeled, CPThemeStateDisabled)], + [@"bezel-inset", CGInsetMake(0.0, 4.0, 0.0, 1.0), [CPThemeStateBezeled, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), [CPThemeStateBezeled, CPThemeStateDisabled]], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), CPThemeState(CPThemeStateBezeled, CPThemeStateEditing)], + [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], - [@"popup-button-size", CGSizeMake(21.0, 23.0), CPThemeState(CPThemeStateBezeled, CPComboBoxStateButtonBordered)], + [@"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, 31.0)], [@"max-size", CGSizeMake(-1, 31.0)], - [@"text-color", regularDisabledTextColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], + [@"text-color", regularDisabledTextColor, [CPThemeStateBordered, CPThemeStateDisabled]], + [@"text-shadow-color", regularDisabledTextShadowColor, [CPThemeStateBordered, CPThemeStateDisabled]], ]; [self registerThemeValues:overrides forView:combo inherit:themedTextFieldValues]; @@ -1105,10 +1105,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPRadioImageOffset], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], @@ -1140,10 +1140,10 @@ var themedButtonValues = nil, [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], @@ -1174,8 +1174,8 @@ var themedButtonValues = nil, themeValues = [ [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], - [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)], + [@"image", mixedHighlightedImage, [CPButtonStateMixed, CPThemeStateHighlighted]], + [@"image", mixedDisabledImage, [CPButtonStateMixed, CPThemeStateDisabled]], [@"image-offset", CPCheckBoxImageOffset, CPButtonStateMixed], [@"max-size", CGSizeMake(-1.0, -1.0)] ]; @@ -1238,29 +1238,29 @@ var themedButtonValues = nil, [ [@"center-segment-bezel-color", centerBezelColor, CPThemeStateNormal], [@"center-segment-bezel-color", inactiveCenterBezelColor, CPThemeStateDisabled], - [@"center-segment-bezel-color", inactiveHighlightedCenterBezelColor, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"center-segment-bezel-color", pushedHighlightedCenterBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"divider-bezel-color", dividerBezelColor, CPThemeStateNormal], [@"divider-bezel-color", inactiveDividerBezelColor, CPThemeStateDisabled], - [@"divider-bezel-color", inactiveHighlightedDividerBezelColor, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"left-segment-bezel-color", pushedHighlightedLeftBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"right-segment-bezel-color", rightBezelColor, CPThemeStateNormal], [@"right-segment-bezel-color", inactiveRightBezelColor, CPThemeStateDisabled], - [@"right-segment-bezel-color", inactiveHighlightedRightBezelColor, CPThemeState(CPThemeStateSelected, 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, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)], + [@"right-segment-bezel-color", pushedHighlightedRightBezelColor, [CPThemeStateHighlighted, CPThemeStateSelected]], [@"content-inset", CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal], [@"bezel-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal], @@ -1272,14 +1272,14 @@ var themedButtonValues = nil, // The "default" button state is the same theme color as the "selected" segmented control state, so we can use // the same text theme values. [@"text-color", defaultTextColor, CPThemeStateSelected], - [@"text-color", defaultDisabledTextColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"text-color", defaultDisabledTextColor, [CPThemeStateDisabled, CPThemeStateSelected]], [@"text-shadow-color", regularTextShadowColor], [@"text-shadow-color", regularDisabledTextShadowColor, CPThemeStateDisabled], - [@"text-shadow-color", defaultDisabledTextShadowColor, CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)], + [@"text-shadow-color", defaultDisabledTextShadowColor, [CPThemeStateDisabled, CPThemeStateSelected]], [@"text-shadow-color", [CPColor colorWithCalibratedWhite:0.0 alpha:0.2], CPThemeStateSelected], [@"text-shadow-offset", CGSizeMake(0.0, 1.0)], [@"text-shadow-offset", CGSizeMake(0.0, 1.0), CPThemeStateSelected], - [@"text-shadow-offset", CGSizeMake(0.0, 0.0), CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"text-shadow-offset", CGSizeMake(0.0, 0.0), [CPThemeStateSelected, CPThemeStateDisabled]], [@"line-break-mode", CPLineBreakByTruncatingTail], [@"divider-thickness", 1.0], @@ -1365,7 +1365,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateVertical, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateVertical, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(21.0, 21.0)], [@"knob-color", knobColor], @@ -1400,12 +1400,12 @@ var themedButtonValues = nil, themedCircularSliderValues = [ [@"track-color", trackColor, CPThemeStateCircular], - [@"track-color", trackDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)], + [@"track-color", trackDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]], [@"knob-size", CGSizeMake(5.0, 5.0), CPThemeStateCircular], [@"knob-color", knobColor, CPThemeStateCircular], - [@"knob-color", knobHighlightedColor, CPThemeState(CPThemeStateCircular, CPThemeStateHighlighted)], - [@"knob-color", knobDisabledColor, CPThemeState(CPThemeStateCircular, CPThemeStateDisabled)] + [@"knob-color", knobHighlightedColor, [CPThemeStateCircular, CPThemeStateHighlighted]], + [@"knob-color", knobDisabledColor, [CPThemeStateCircular, CPThemeStateDisabled]] ]; [self registerThemeValues:themedCircularSliderValues forView:slider]; @@ -1500,7 +1500,7 @@ var themedButtonValues = nil, [@"background-color", pressed, CPThemeStateHighlighted], [@"background-color", highlighted, CPThemeStateSelected], - [@"background-color", highlightedPressed, CPThemeState(CPThemeStateHighlighted, CPThemeStateSelected)] + [@"background-color", highlightedPressed, [CPThemeStateHighlighted, CPThemeStateSelected]] ]; [self registerThemeValues:themedColumnHeaderValues forView:header]; @@ -1708,10 +1708,10 @@ var themedButtonValues = nil, [ [@"bezel-color-up-button", bezelUp["@"], CPThemeStateBordered], [@"bezel-color-down-button", bezelDown["@"], CPThemeStateBordered], - [@"bezel-color-up-button", bezelUp["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-down-button", bezelDown["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)], - [@"bezel-color-up-button", bezelUp["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], - [@"bezel-color-down-button", bezelDown["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color-up-button", bezelUp["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color-down-button", bezelDown["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]], + [@"bezel-color-up-button", bezelUp["highlighted"], [CPThemeStateBordered, CPThemeStateHighlighted]], + [@"bezel-color-down-button", bezelDown["highlighted"], [CPThemeStateBordered, CPThemeStateHighlighted]], [@"min-size", CGSizeMake(25.0, 25.0)], [@"up-button-size", CGSizeMake(25.0, 13.0)], [@"down-button-size", CGSizeMake(25.0, 12.0)] @@ -1800,9 +1800,9 @@ var themedButtonValues = nil, [@"content-border-inset", CGInsetMake(5.0, 5.0, 4.0, 5.0), CPThemeStateBordered], [@"content-border-color", contentBorderColor, CPThemeStateBordered], - [@"bezel-color", bezelColor["highlighted"], CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted)], + [@"bezel-color", bezelColor["highlighted"], [CPThemeStateBordered, CPThemeStateHighlighted]], - [@"bezel-color", bezelColor["disabled"], CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] + [@"bezel-color", bezelColor["disabled"], [CPThemeStateBordered, CPThemeStateDisabled]] ]; [self registerThemeValues:themedColorWellValues forView:colorWell]; @@ -2627,13 +2627,13 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)], + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]], [@"image", mixedImage, CPButtonStateMixed], - [@"image", mixedHighlightedImage, CPThemeState(CPButtonStateMixed, CPThemeStateHighlighted)], - [@"image", mixedDisabledImage, CPThemeState(CPButtonStateMixed, CPThemeStateDisabled)] + [@"image", mixedHighlightedImage, [CPButtonStateMixed, CPThemeStateHighlighted]], + [@"image", mixedDisabledImage, [CPButtonStateMixed, CPThemeStateDisabled]] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedCheckBoxValues]; @@ -2667,10 +2667,10 @@ var themedButtonValues = nil, [ [@"image", imageNormal, CPThemeStateNormal], [@"image", imageSelected, CPThemeStateSelected], - [@"image", imageSelectedHighlighted, CPThemeState(CPThemeStateSelected, CPThemeStateHighlighted)], + [@"image", imageSelectedHighlighted, [CPThemeStateSelected, CPThemeStateHighlighted]], [@"image", imageHighlighted, CPThemeStateHighlighted], [@"image", imageDisabled, CPThemeStateDisabled], - [@"image", imageSelectedDisabled, CPThemeState(CPThemeStateSelected, CPThemeStateDisabled)] + [@"image", imageSelectedDisabled, [CPThemeStateSelected, CPThemeStateDisabled]] ]; [self registerThemeValues:[self defaultThemeOverridesAddedTo:hudSpecific] forView:button inherit:themedRadioButtonValues]; diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index 753e75f45..cf25c025d 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -171,9 +171,9 @@ var _CPAutocompleteMenuMaximumHeight = 307; var dataView = [tableColumn dataView], fontNormal = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView], - fontSelected = [dataView valueForThemeAttribute:@"font" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)], + fontSelected = [dataView valueForThemeAttribute:@"font" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]], contentInsetNormal = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView], - contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeState(CPThemeStateTableDataView, CPThemeStateSelectedDataView)]; + contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]]; var mergedString = contentArray.join("\n"); diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 6679e89a3..234f91edb 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -50,6 +50,7 @@ [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"CPView should be in state CPThemeStateDisabled"]; [self assertTrue:[view hasThemeState:CPThemeStateBordered] message:@"CPView should be in state CPThemeStateBordered"]; [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] message:@"CPView should be in the combined state of CPThemeStateDisabled and CPThemeStateBordered"]; + [self assertTrue:[view hasThemeState:[CPThemeStateBordered, CPThemeStateDisabled]] message:@"hasThemeState works with an array argument"]; [self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"]; } @@ -72,6 +73,9 @@ [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; + + [view setThemeState:[CPThemeStateHighlighted, CPThemeStateDisabled]]; + [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"setThemeState works with array argument"]; } - (void)testUnsetThemeState @@ -88,6 +92,10 @@ [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; [view unsetThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDisabled)]; [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be able to unset a combined theme state"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; + [view unsetThemeState:[CPThemeStateBordered, CPThemeStateHighlighted]]; + [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"unsetThemeState works with array argument"]; } - (void)testThemeAttributes diff --git a/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j b/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j index 995c5926f..3746fcc09 100644 --- a/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j +++ b/Tests/Manual/SmartFoldersDemo/ImageAndTextView.j @@ -44,7 +44,7 @@ [self setText:value]; } -- (void)setThemeState:(CPThemeState)state +- (void)setThemeState:(ThemeState)state { if (state === CPThemeStateSelectedDataView) { @@ -55,7 +55,7 @@ [super setThemeState:state]; } -- (void)unsetThemeState:(CPThemeState)state +- (void)unsetThemeState:(ThemeState)state { if (state === CPThemeStateSelectedDataView) { From b6b4015a82a685242450452c131ed3f457e16a6c Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sat, 1 Mar 2014 23:26:20 -0800 Subject: [PATCH 26/33] Introduce .and and .without syntax for ThemeStates. --- AppKit/CPScroller.j | 2 +- AppKit/CPSegmentedControl.j | 20 ++++++++++---------- AppKit/CPTheme.j | 17 +++++++++++------ AppKit/CPView.j | 2 +- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index f19ee083d..cc6d89427 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -733,7 +733,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); var themeState = _themeState; if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) - themeState = ThemeState.subtractThemeStates(themeState, CPThemeStateHighlighted); + themeState = themeState.without(CPThemeStateHighlighted); return [self valueForThemeAttribute:anAttributeName inState:themeState]; } diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 53173dd77..0853312f8 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -431,9 +431,9 @@ CPSegmentSwitchTrackingMomentary = 2; [_segments[aSegment] setEnabled:shouldBeEnabled]; if (shouldBeEnabled) - _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateDisabled); + _themeStates[aSegment] = _themeStates[aSegment].without(CPThemeStateDisabled); else - _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateDisabled); + _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateDisabled); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -477,9 +477,9 @@ CPSegmentSwitchTrackingMomentary = 2; - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { if (shouldHighlight) - _themeStates[aSegment] = CPThemeState(_themeStates[aSegment], CPThemeStateHighlighted); + _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateHighlighted); else - _themeStates[aSegment] = ThemeState.subtractThemeStates(_themeStates[aSegment], CPThemeStateHighlighted); + _themeStates[aSegment] = _themeStates[aSegment].without(CPThemeStateHighlighted); [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -576,7 +576,7 @@ CPSegmentSwitchTrackingMomentary = 2; var themeState = _themeStates[0], isDisabled = [self hasThemeState:CPThemeStateDisabled]; - themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; + themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState; var leftCapColor = [self valueForThemeAttribute:@"left-segment-bezel-color" inState:themeState], @@ -589,7 +589,7 @@ CPSegmentSwitchTrackingMomentary = 2; var themeState = _themeStates[_themeStates.length - 1]; - themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; + themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState; var rightCapColor = [self valueForThemeAttribute:@"right-segment-bezel-color" inState:themeState], @@ -604,7 +604,7 @@ CPSegmentSwitchTrackingMomentary = 2; { var themeState = _themeStates[i]; - themeState = isDisabled ? CPThemeState(themeState, CPThemeStateDisabled) : themeState; + themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState; var bezelColor = [self valueForThemeAttribute:@"center-segment-bezel-color" inState:themeState], @@ -642,11 +642,11 @@ CPSegmentSwitchTrackingMomentary = 2; if (i == count - 1) continue; - var borderState = CPThemeState(_themeStates[i], _themeStates[i + 1]); + var borderState = _themeStates[i].and(_themeStates[i + 1]); borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal; - borderState = isDisabled ? CPThemeState(borderState, CPThemeStateDisabled) : borderState; + borderState = isDisabled ? borderState.and(CPThemeStateDisabled) : borderState; var borderColor = [self valueForThemeAttribute:@"divider-bezel-color" inState:borderState], @@ -676,7 +676,7 @@ CPSegmentSwitchTrackingMomentary = 2; var segment = _segments[aSegment], segmentWidth = [segment width], - themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? CPThemeState(_themeStates[aSegment], CPThemeStateDisabled) : _themeStates[aSegment]; + themeState = _themeState.hasThemeState(CPThemeStateDisabled) ? _themeStates[aSegment].and(CPThemeStateDisabled) : _themeStates[aSegment]; contentInset = [self valueForThemeAttribute:@"content-inset" inState:themeState], font = [self font]; diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 0c1c0a81c..933ee6a2d 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -384,24 +384,29 @@ ThemeState.prototype.isSubsetOf = function(aState) return true; } -ThemeState.subtractThemeStates = function(aState1, aState2) +ThemeState.prototype.without = function(aState) { - if (aState2 === undefined || aState2 === nil || aState2 === [CPNull null]) - return aState1; + if (aState === undefined || aState === nil || aState === [CPNull null]) + return aState; var newStates = {}; - for (var stateName in aState1._stateNames) + for (var stateName in this._stateNames) { - if (!aState1._stateNames.hasOwnProperty(stateName)) + if (!this._stateNames.hasOwnProperty(stateName)) continue; - if (!aState2._stateNames[stateName]) + if (!aState._stateNames[stateName]) newStates[stateName] = true; } return ThemeState._cacheThemeState(new ThemeState(newStates)); } +ThemeState.prototype.and = function(aState) +{ + return CPThemeState(this, aState); +} + var CPThemeStates = {}; ThemeState._cacheThemeState = function(aState) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 43ed0cfd4..d80a3c015 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2919,7 +2919,7 @@ setBoundsOrigin: if (!_themeState.hasThemeState(aState)) return NO; - _themeState = ThemeState.subtractThemeStates(_themeState, aState); + _themeState = _themeState.without(aState); [self setNeedsLayout]; [self setNeedsDisplay:YES]; From e6acc3c3362e70889f6f1bef82414f71df710230 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:02:51 +0000 Subject: [PATCH 27/33] Fixed: missing var, minor tweaks. Refs #2073. --- AppKit/CPTheme.j | 17 ++++++++++------- Tests/AppKit/CPThemeTest.j | 1 + Tools/nib2cib/_NSCornerView.j | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 933ee6a2d..18d9081c0 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -327,7 +327,7 @@ function ThemeState(stateNames) { if (!stateNames.hasOwnProperty(key)) continue; - if (key != 'normal') + if (key !== 'normal') { this._stateNames[key] = true; stateNameKeys.push(key); @@ -356,13 +356,15 @@ ThemeState.prototype.toString = function() ThemeState.prototype.hasThemeState = function(aState) { - if (aState === undefined || aState === nil || aState._stateNames === undefined) + if (!aState || !aState._stateNames) return false; + // We can do this in O(n) because both states have their stateNames already sorted. for (var stateName in aState._stateNames) { if (!aState._stateNames.hasOwnProperty(stateName)) continue; + if (!this._stateNames[stateName]) return false; } @@ -374,10 +376,11 @@ ThemeState.prototype.isSubsetOf = function(aState) if (aState._stateNameCount < this._stateNameCount) return false; - for (key in this._stateNames) + for (var key in this._stateNames) { if (!this._stateNames.hasOwnProperty(key)) continue; + if (!aState._stateNames[key]) return false; } @@ -386,7 +389,7 @@ ThemeState.prototype.isSubsetOf = function(aState) ThemeState.prototype.without = function(aState) { - if (aState === undefined || aState === nil || aState === [CPNull null]) + if (!aState || aState === [CPNull null]) return aState; var newStates = {}; @@ -445,7 +448,7 @@ function CPThemeState() var stateNames = {}; for (var argIndex = 0; argIndex < arguments.length; argIndex++) { - if (arguments[argIndex] === [CPNull null] || arguments[argIndex] === nil || arguments[argIndex] === undefined) + if (arguments[argIndex] === [CPNull null] || !arguments[argIndex]) continue; if (typeof arguments[argIndex] === 'object') @@ -582,8 +585,8 @@ CPThemeStateKeyWindow = CPThemeState("keyWindow"); - (id)valueForState:(ThemeState)aState { - var stateName = String(aState); - var value = _cache[stateName]; + var stateName = String(aState), + value = _cache[stateName]; // This can be nil. if (value !== undefined) diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j index 1803c6619..b033202b0 100644 --- a/Tests/AppKit/CPThemeTest.j +++ b/Tests/AppKit/CPThemeTest.j @@ -62,4 +62,5 @@ [themeAttribute setValue:9 forState:CPThemeState('aState3')]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState8+aState3+aState4")] == 10) message:"Return the largest partial subset match for a combined state that isn't a perfect match"]; } + @end diff --git a/Tools/nib2cib/_NSCornerView.j b/Tools/nib2cib/_NSCornerView.j index 541b3acb5..d488de69c 100644 --- a/Tools/nib2cib/_NSCornerView.j +++ b/Tools/nib2cib/_NSCornerView.j @@ -51,7 +51,7 @@ { var theme = [Nib2Cib defaultTheme], height = [theme valueForAttributeWithName:@"default-row-height" forClass:[CPTableView class]], - width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy) forClass:[CPScroller class]]; + width = [theme valueForAttributeWithName:@"scroller-width" inState:CPThemeState(CPThemeStateVertical, CPThemeStateScrollViewLegacy) forClass:[CPScroller class]]; _frame.size.height = height; _bounds.size.height = height; From 633445883e86a3992fb69ef1b6b8f209fef3cee2 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:09:18 +0000 Subject: [PATCH 28/33] Test: CFPropertyList.propertyListFromXML. These tests validate some basic edge cases with the parsing of XML plists. Refs #2051. --- Tests/Objective-J/CFPropertyListTest.j | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/Tests/Objective-J/CFPropertyListTest.j b/Tests/Objective-J/CFPropertyListTest.j index ad6e9c643..748732507 100644 --- a/Tests/Objective-J/CFPropertyListTest.j +++ b/Tests/Objective-J/CFPropertyListTest.j @@ -25,4 +25,48 @@ var FILE = require("file"), [self assert:[[CPDate alloc] initWithString:"2012-01-01 10:00:00 +0100"] equals:date]; } +- (void)testPropertyListFromXMLShouldHandleEmptyXMLGracefully { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:object equals:null]; +} + +- (void)testPropertyListFromXMLShouldHandleEmptierXMLGracefully { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:object equals:null]; +} + +- (void)testPropertyListFromXMLShouldHandleEmptiestXMLGracefully { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:object equals:null]; +} + +- (void)testPropertyListFromXMLShouldParseNiceAndCleanXML { + var XML = "Main cib file base nameMainMenu.cibCPBundleNameCopyAndPasteCPBundleVersion1.0CPHumanReadableCopyrightCopyright \u00a9 2013, SlevenBits, Ltd. All rights reserved.", + object = CFPropertyList.propertyListFromXML(XML); + + [self assert:[object valueForKey:"Main cib file base name"] equals:"MainMenu.cib"]; + [self assert:[object valueForKey:"CPBundleName"] equals:"CopyAndPaste"]; + [self assert:[object valueForKey:"CPBundleVersion"] equals:"1.0"]; + [self assert:[object valueForKey:"CPHumanReadableCopyright"] equals:"Copyright \u00a9 2013, SlevenBits, Ltd. All rights reserved."]; + [self assert:[object count] equals:4]; +} + +- (void)testPropertyListFromXMLShouldIgnoreWhiteSpace{ + var XML = "\n \n \n\n\tMain cib file base name\n\tMainMenu.cib\n\t CPBundleName\n\tCopyAndPaste\n CPBundleVersion\n 1.0\n CPHumanReadableCopyright\n Copyright \u00a9 2013, SlevenBits, Ltd. All rights reserved.\n\n\n", + // feed in preparsed XML to ensure we preserve whitespace for purposes of this test + object = CFPropertyList.propertyListFromXML(new window.DOMParser().parseFromString(XML, "text/xml")); + + [self assert:[object valueForKey:"Main cib file base name"] equals:"MainMenu.cib"]; + [self assert:[object valueForKey:"CPBundleName"] equals:"CopyAndPaste"]; + [self assert:[object valueForKey:"CPBundleVersion"] equals:"1.0"]; + [self assert:[object valueForKey:"CPHumanReadableCopyright"] equals:"Copyright \u00a9 2013, SlevenBits, Ltd. All rights reserved."]; + [self assert:[object count] equals:4]; +} + @end From 8c43f4f628a020c2b1dc899bfae8e3cc45cc0832 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:13:22 +0000 Subject: [PATCH 29/33] Fixed: theoretical error while skipping whitespace in XML plists. This fix ensures the PLIST_FIRST_CHILD() code gets to run both statements in the XML parsing while loop. There's no obvious way to trigger an error due to this bug, but better correct than wrong. Refs #2051. --- Objective-J/CFPropertyList.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Objective-J/CFPropertyList.js b/Objective-J/CFPropertyList.js index 00174387c..7dd16cc4c 100644 --- a/Objective-J/CFPropertyList.js +++ b/Objective-J/CFPropertyList.js @@ -320,8 +320,8 @@ var XML_XML = "xml", #define IS_WHITESPACE(anXMLNode) (NODE_TYPE(anXMLNode) === 8 || NODE_TYPE(anXMLNode) === 3) #define IS_DOCUMENTTYPE(anXMLNode) (NODE_TYPE(anXMLNode) === 10) -#define PLIST_NEXT_SIBLING(anXMLNode) while ((anXMLNode = NEXT_SIBLING(anXMLNode)) && IS_WHITESPACE(anXMLNode)) ; -#define PLIST_FIRST_CHILD(anXMLNode) anXMLNode = FIRST_CHILD(anXMLNode); if (anXMLNode !== NULL && IS_WHITESPACE(anXMLNode)) PLIST_NEXT_SIBLING(anXMLNode) +#define PLIST_NEXT_SIBLING(anXMLNode) while ((anXMLNode = NEXT_SIBLING(anXMLNode)) && IS_WHITESPACE(anXMLNode)); +#define PLIST_FIRST_CHILD(anXMLNode) { anXMLNode = FIRST_CHILD(anXMLNode); if (anXMLNode !== NULL && IS_WHITESPACE(anXMLNode)) PLIST_NEXT_SIBLING(anXMLNode) } var textContent = function(nodes) { From 1dbd41a746a380f878a11dec18a5cf5f7a67d2cd Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Thu, 6 Mar 2014 14:16:00 +0000 Subject: [PATCH 30/33] Fixed: error in Internet Explorer if Info.plist was served with wrong content type. Without this fix, in Internet Explorer the plist parser would only receive an empty XML document for the main Info.plist (and any other such loaded documents) if the server did not provide the content type "text/xml". This fix parses the XML correctly even if there is no such content type. Fixes #2051. --- Objective-J/CFHTTPRequest.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Objective-J/CFHTTPRequest.js b/Objective-J/CFHTTPRequest.js index 2b2d29c73..2084ca0a6 100644 --- a/Objective-J/CFHTTPRequest.js +++ b/Objective-J/CFHTTPRequest.js @@ -172,7 +172,10 @@ CFHTTPRequest.prototype.responseXML = function() { var responseXML = this._nativeRequest.responseXML; - if (responseXML && (NativeRequest === window.XMLHttpRequest)) + // Internet Explorer will return a non-null but empty request.responseXML if the response + // content type wasn't "text/html", so also check that responseXML.documentRoot is set. + // Otherwise fall back to regular parsing. + if (responseXML && (NativeRequest === window.XMLHttpRequest) && responseXML.documentRoot) return responseXML; return parseXML(this.responseText()); From 45df8c0f74328c168326ec3cd1b8d31a75c8160b Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Sun, 9 Mar 2014 15:15:11 -0700 Subject: [PATCH 31/33] Fix bug with unsetThemeState + more tests. --- AppKit/CPTheme.j | 8 +++--- AppKit/CPView.j | 11 ++++---- Tests/AppKit/CPButtonTest.j | 10 +++++++ Tests/AppKit/CPThemeTest.j | 4 +++ Tests/AppKit/CPViewTest.j | 52 ++++++++++++++++++++++++++----------- 5 files changed, 61 insertions(+), 24 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 18d9081c0..090c0e067 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -358,13 +358,13 @@ ThemeState.prototype.hasThemeState = function(aState) { if (!aState || !aState._stateNames) return false; - + // We can do this in O(n) because both states have their stateNames already sorted. for (var stateName in aState._stateNames) { if (!aState._stateNames.hasOwnProperty(stateName)) continue; - + if (!this._stateNames[stateName]) return false; } @@ -380,7 +380,7 @@ ThemeState.prototype.isSubsetOf = function(aState) { if (!this._stateNames.hasOwnProperty(key)) continue; - + if (!aState._stateNames[key]) return false; } @@ -390,7 +390,7 @@ ThemeState.prototype.isSubsetOf = function(aState) ThemeState.prototype.without = function(aState) { if (!aState || aState === [CPNull null]) - return aState; + return this; var newStates = {}; for (var stateName in this._stateNames) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index d80a3c015..323de0fa0 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -2897,7 +2897,7 @@ setBoundsOrigin: - (BOOL)setThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) + if (aState && aState.isa && [aState isKindOfClass:CPArray]) aState = CPThemeState.apply(null, aState); if (_themeState.hasThemeState(aState)) @@ -2913,14 +2913,15 @@ setBoundsOrigin: - (BOOL)unsetThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) + if (aState && aState.isa && [aState isKindOfClass:CPArray]) aState = CPThemeState.apply(null, aState); - if (!_themeState.hasThemeState(aState)) - return NO; - + var oldThemeState = _themeState _themeState = _themeState.without(aState); + if (oldThemeState === _themeState) + return NO; + [self setNeedsLayout]; [self setNeedsDisplay:YES]; diff --git a/Tests/AppKit/CPButtonTest.j b/Tests/AppKit/CPButtonTest.j index e4d46af2c..38f8a4286 100644 --- a/Tests/AppKit/CPButtonTest.j +++ b/Tests/AppKit/CPButtonTest.j @@ -132,6 +132,16 @@ [self assert:CPMixedState equals:[button state] message:@"Mixed state is allowed, state should be CPMixedState"]; } +- (void)testThemeStateWhenSettingObjectValue +{ + [button unsetThemeState:[button themeState]]; + [button setObjectValue:CPOnState]; + [self assert:String(CPThemeStateSelected) equals:String([button themeState]) message:@"object should be in the selected themestate"]; + + [button setObjectValue:CPOffState]; + [self assert:String(CPThemeStateNormal) equals:String([button themeState]) message:@"object should be in the normal themestate"]; +} + - (void)testThemeAttributes { var attributes = [CPButton themeAttributes]; diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j index b033202b0..0c85d6ee9 100644 --- a/Tests/AppKit/CPThemeTest.j +++ b/Tests/AppKit/CPThemeTest.j @@ -42,6 +42,10 @@ var themeState5 = CPThemeState('a', 'theme', 'state'); [self assertTrue:(String(themeState5) === 'a+state+theme') message:"Creating a new ThemeState using multiple strings works."]; + + var themeState6 = CPThemeState('a') + var themeState7 = CPThemeState('a', 'b') + [self assertTrue:(String(CPThemeState(themeState6, themeState7)) === 'a+b') message:"Creating a new ThemeState where the same state repeats itself does not result in the state being in the new themestate twice"]; } - (void)testThemeAttributeValueForState diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 234f91edb..8a51c25d5 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -54,48 +54,70 @@ [self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"]; } -- (void)testThemeState +- (void)testSetThemeState { - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; - [self assertFalse:[view hasThemeState:CPThemeStateDisabled] message:@"view should not be disabled"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should initialy have CPThemeStateNormal"]; [view setThemeState:CPThemeStateDisabled]; - [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; + [self assert:String(CPThemeStateDisabled) equals:String([view themeState]) message:@"The view should be CPThemeStateDisabled"]; [view setThemeState:CPThemeStateHighlighted]; - [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"Theme state should be CPThemeStateHighlighted"]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"Theme state should be CPThemeStateHighlighted and CPThemeStateDisabled"]; + [view unsetThemeState:[view themeState]]; [view setThemeState:CPThemeState(CPThemeStateNormal, CPThemeStateHighlighted)]; [self assertFalse:[view hasThemeState:CPThemeStateNormal] message:@"CPThemeStateNormal cannot exist as part of a compound state"]; - [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; + [self assert:String([view themeState]) equals:String(CPThemeStateHighlighted) message:@"The view should be CPThemeStateHighlighted"]; [view setThemeState:CPThemeState(CPThemeStateHighlighted, CPThemeStateDisabled)]; [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:@"The view should be CPThemeStateHighlighted"]; [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; - [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; - [view setThemeState:[CPThemeStateHighlighted, CPThemeStateDisabled]]; - [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)] message:@"setThemeState works with array argument"]; + [view setThemeState:[CPThemeStateSelected, CPThemeStateDisabled]]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)) equals:String([view themeState]) message:@"setThemeState works with array argument"]; } - (void)testUnsetThemeState { - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should initialy have CPThemeStateNormal"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should initialy have CPThemeStateNormal"]; [view unsetThemeState:CPThemeStateNormal]; - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView always be in CPThemeStateNormal even if you try to unset it"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView always be in CPThemeStateNormal even if you try to unset it"]; + [view setThemeState:CPThemeStateDisabled]; [view unsetThemeState:CPThemeStateDisabled]; - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be in CPThemeStateNormal when all other theme states have been unset from it"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be in CPThemeStateNormal when all other theme states have been unset from it"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)]; [view unsetThemeState:CPThemeStateDisabled]; - [self assertTrue:[view hasThemeState:CPThemeStateHighlighted] message:"@CPView should have the remaining state when one of its combined states is unset"]; + [self assert:String(CPThemeStateHighlighted) equals:String([view themeState]) message:"@CPView should have the remaining state when one of its combined states is unset"]; + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; [view unsetThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateHighlighted, CPThemeStateDisabled)]; - [self assertTrue:[view hasThemeState:CPThemeStateNormal] message:@"CPView should be able to unset a combined theme state"]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; [view unsetThemeState:[CPThemeStateBordered, CPThemeStateHighlighted]]; - [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"unsetThemeState works with array argument"]; + [self assert:String(CPThemeStateDisabled) equals:String([view themeState]) message:@"unsetThemeState works with array argument"]; + + [view setThemeState:CPThemeStateDisabled]; + [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has more theme states than the view currently has"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + var returnValue = [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [self assert:String(CPThemeStateBordered) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has not entirely overlapping themestates"]; + [self assertTrue:returnValue message:@"When unsetThemeState successfully unsets anything, it return YES"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + var returnValue = [view unsetThemeState:[CPThemeStateSelected, CPThemeStateHighlighted]]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)) equals:String([view themeState]) message:@"CPView not unset any theme states it does not have"]; + [self assertFalse:returnValue message:@"When unsetThemeState doesn't unset anything, it returns NO"]; + + [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; + var returnValue = [view unsetThemeState:null]; + [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)) equals:String([view themeState]) message:@"Trying to unset a null themestate does not change the current themestate of the view"]; + [self assertFalse:returnValue message:@"Trying to unset a null themestate returns false"]; } - (void)testThemeAttributes From 647686e68e00ac63f323561651e3c215a683433b Mon Sep 17 00:00:00 2001 From: Saikat Chakrabarti Date: Mon, 10 Mar 2014 12:17:23 -0700 Subject: [PATCH 32/33] Fix CPViewTest --- Tests/AppKit/CPViewTest.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 8a51c25d5..5c539859e 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -74,6 +74,7 @@ [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"The view should be CPThemeStateDisabled"]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; + [view unsetThemeState:[view themeState]]; [view setThemeState:[CPThemeStateSelected, CPThemeStateDisabled]]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)) equals:String([view themeState]) message:@"setThemeState works with array argument"]; } From d51f179c2d097f393cd40242dbfac66c49d36a7c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Mon, 10 Mar 2014 22:43:12 +0000 Subject: [PATCH 33/33] Fixed: error when running some XML tests with rhino. This problem causes error in Travis that are not errors with JSC. --- Tests/Objective-J/CFPropertyListTest.j | 27 +++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Tests/Objective-J/CFPropertyListTest.j b/Tests/Objective-J/CFPropertyListTest.j index 748732507..94efd4156 100644 --- a/Tests/Objective-J/CFPropertyListTest.j +++ b/Tests/Objective-J/CFPropertyListTest.j @@ -26,24 +26,33 @@ var FILE = require("file"), } - (void)testPropertyListFromXMLShouldHandleEmptyXMLGracefully { - var XML = "", - object = CFPropertyList.propertyListFromXML(XML); + // rhino can't parse empty XML documents + if (system.engine !== "rhino") { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); - [self assert:object equals:null]; + [self assert:object equals:null]; + } } - (void)testPropertyListFromXMLShouldHandleEmptierXMLGracefully { - var XML = "", - object = CFPropertyList.propertyListFromXML(XML); + // rhino can't parse empty XML documents + if (system.engine !== "rhino") { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); - [self assert:object equals:null]; + [self assert:object equals:null]; + } } - (void)testPropertyListFromXMLShouldHandleEmptiestXMLGracefully { - var XML = "", - object = CFPropertyList.propertyListFromXML(XML); + // rhino can't parse empty XML documents + if (system.engine !== "rhino") { + var XML = "", + object = CFPropertyList.propertyListFromXML(XML); - [self assert:object equals:null]; + [self assert:object equals:null]; + } } - (void)testPropertyListFromXMLShouldParseNiceAndCleanXML {