From 3d2cf3f6b421ef9f4484f3c0150aeed932be95ec Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Thu, 7 May 2009 15:58:53 -0700 Subject: [PATCH] Add segmented controls to Aristo --- AppKit/CPSegmentedControl.j | 140 +++++++++++++++++- .../segmented-control-bezel-center.png | Bin 0 -> 179 bytes .../segmented-control-bezel-divider.png | Bin 0 -> 133 bytes ...ented-control-bezel-highlighted-center.png | Bin 0 -> 152 bytes ...nted-control-bezel-highlighted-divider.png | Bin 0 -> 139 bytes ...gmented-control-bezel-highlighted-left.png | Bin 0 -> 259 bytes ...mented-control-bezel-highlighted-right.png | Bin 0 -> 260 bytes ...egmented-control-bezel-inactive-center.png | Bin 0 -> 143 bytes ...gmented-control-bezel-inactive-divider.png | Bin 0 -> 135 bytes .../segmented-control-bezel-inactive-left.png | Bin 0 -> 232 bytes ...segmented-control-bezel-inactive-right.png | Bin 0 -> 232 bytes .../segmented-control-bezel-left.png | Bin 0 -> 219 bytes .../segmented-control-bezel-pushed-center.png | Bin 0 -> 140 bytes ...ontrol-bezel-pushed-highlighted-center.png | Bin 0 -> 150 bytes ...-control-bezel-pushed-highlighted-left.png | Bin 0 -> 250 bytes ...control-bezel-pushed-highlighted-right.png | Bin 0 -> 261 bytes .../segmented-control-bezel-pushed-left.png | Bin 0 -> 216 bytes .../segmented-control-bezel-pushed-right.png | Bin 0 -> 226 bytes .../segmented-control-bezel-right.png | Bin 0 -> 213 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 76 ++++++++++ 20 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-center.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-divider.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-center.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-divider.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-left.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-right.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-center.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-divider.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-left.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-right.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-left.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-center.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-center.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-left.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-right.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-left.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-right.png create mode 100644 AppKit/Themes/Aristo/Resources/segmented-control-bezel-right.png diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 07a57cb9b..bfe81764f 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -24,6 +24,8 @@ @import "CPControl.j" +#include "CoreGraphics/CGGeometry.h" + /* @global @group CPSegmentSwitchTracking @@ -47,6 +49,8 @@ CPSegmentSwitchTrackingMomentary = 2; @implementation CPSegmentedControl : CPControl { CPArray _segments; + CPArray _controlStates; + int _selectedSegment; int _segmentStyle; CPSegmentSwitchTracking _trackingMode; @@ -55,9 +59,16 @@ CPSegmentSwitchTrackingMomentary = 2; BOOL _trackingHighlighted; } ++ (id)themedAttributes +{ + return [CPDictionary dictionaryWithObjects:[_CGInsetMakeZero(), _CGInsetMakeZero(), nil, nil, nil, nil, 1.0, 24.0] + forKeys:[@"bezel-inset", @"content-inset", @"left-segment-bezel-color", @"right-segment-bezel-color", @"center-segment-bezel-color", @"divider-bezel-color", @"divider-thickness", @"default-height"]]; +} + - (id)initWithFrame:(CGRect)aRect { _segments = []; + _controlStates = []; self = [super initWithFrame:aRect]; @@ -99,6 +110,8 @@ CPSegmentSwitchTrackingMomentary = 2; { _segments[index] = [[_CPSegmentItem alloc] init]; _segments[index].frame.size.height = height; + + _controlStates[index] = CPControlStateNormal; } } else if (aCount < _segments.length) @@ -371,6 +384,8 @@ CPSegmentSwitchTrackingMomentary = 2; segment.selected = isSelected; + _controlStates[aSegment] = isSelected ? CPControlStateSelected : CPControlStateNormal; + // We need to do some cleanup if we only allow one selection. if (isSelected) { @@ -381,6 +396,7 @@ CPSegmentSwitchTrackingMomentary = 2; if (_trackingMode == CPSegmentSwitchTrackingSelectOne && oldSelectedSegment != aSegment && oldSelectedSegment != -1) { _segments[oldSelectedSegment].selected = NO; + _controlStates[oldSelectedSegment] = CPControlStateNormal; [self drawSegmentBezel:oldSelectedSegment highlight:NO]; } @@ -388,6 +404,8 @@ CPSegmentSwitchTrackingMomentary = 2; if (_trackingMode != CPSegmentSwitchTrackingMomentary) [self drawSegmentBezel:aSegment highlight:NO]; + + [self setNeedsLayout]; } /*! @@ -448,8 +466,124 @@ CPSegmentSwitchTrackingMomentary = 2; */ - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { + if (shouldHighlight) + _controlStates[aSegment] |= CPControlStateHighlighted; + else + _controlStates[aSegment] &= ~CPControlStateHighlighted; + + [self setNeedsLayout]; } +- (float)_leftOffsetForSegment:(unsigned)segment +{ + var bezelInset = [self currentValueForThemedAttributeName:@"bezel-inset"]; + + if (segment == 0) + return bezelInset.left; + + var thickness = [self currentValueForThemedAttributeName:@"divider-thickness"]; + + return [self _leftOffsetForSegment:segment - 1] + [self widthForSegment:segment - 1] + thickness; +} + +- (CGRect)rectForEphemeralSubviewNamed:(CPString)aName +{ + var height = [self currentValueForThemedAttributeName:@"default-height"], + contentInset = [self currentValueForThemedAttributeName:@"content-inset"], + bezelInset = [self currentValueForThemedAttributeName:@"bezel-inset"], + bounds = [self bounds]; + + if (aName === "left-segment-bezel") + { + return CGRectMake(bezelInset.left, bezelInset.top, contentInset.left, height); + } + else if (aName === "right-segment-bezel") + { + return CGRectMake(CGRectGetMaxX(bounds) - contentInset.right, bezelInset.top, contentInset.right, height); + } + else if (aName.substring(0, "segment-bezel".length) == "segment-bezel") + { + var segment = parseInt(aName.substring("segment-bezel-".length), 10), + width = [self widthForSegment:segment], + left = [self _leftOffsetForSegment:segment]; + + if (_segments.length == 1) + return CGRectMake(left + contentInset.left, bezelInset.top, width - contentInset.left - contentInset.right, height); + else if (segment == 0) + return CGRectMake(left + contentInset.left, bezelInset.top, width - contentInset.left, height); + else if (segment == _segments.length - 1) + return CGRectMake(left, bezelInset.top, width - contentInset.right, height); + else + return CGRectMake(left, bezelInset.top, width, height); + } + else if (aName.substring(0, "divider-bezel".length) == "divider-bezel") + { + var segment = parseInt(aName.substring("divider-bezel-".length), 10), + width = [self widthForSegment:segment], + left = [self _leftOffsetForSegment:segment], + thickness = [self currentValueForThemedAttributeName:@"divider-thickness"]; + + return CGRectMake(left + width, bezelInset.top, thickness, height); + } + + return [super rectForEphemeralSubviewNamed:aName]; +} + +- (CPView)createEphemeralSubviewNamed:(CPString)aName +{ + return [[CPView alloc] initWithFrame:_CGRectMakeZero()]; +} + +- (void)layoutSubviews +{ + var leftCapColor = [self valueForThemedAttributeName:@"left-segment-bezel-color" + inControlState:_controlStates[0]]; + + var leftBezelView = [self layoutEphemeralSubviewNamed:@"left-segment-bezel" + positioned:CPWindowBelow + relativeToEphemeralSubviewNamed:nil]; + + [leftBezelView setBackgroundColor:leftCapColor]; + + var rightCapColor = [self valueForThemedAttributeName:@"right-segment-bezel-color" + inControlState:_controlStates[_controlStates.length - 1]]; + + var rightBezelView = [self layoutEphemeralSubviewNamed:@"right-segment-bezel" + positioned:CPWindowBelow + relativeToEphemeralSubviewNamed:nil]; + + [rightBezelView setBackgroundColor:rightCapColor]; + + for (var i=0, count = _controlStates.length; i8U}fi7AzZCsS>Jib6eI978H@g`6?uI-nrHa8UJU|Ns1&gTe~DWM4fgDgM? literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-divider.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-divider.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3b7cd29d2e17ffa9c25ff6e3ff2948ab7228c1 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!2~3?tYhc}Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jiqt(_978H@CEeIvu7COe|Njqv+}~fH&~wJ^SpENhN45Ia fv1iFSG%zw~9d&zmrH_{%sD;7P)z4*}Q$iB}{cA1J literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-center.png new file mode 100644 index 0000000000000000000000000000000000000000..f35f90f93ae5b988d49f4740fec52a92d715352f GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!2~3?tYhc}Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JimW_c978H@CB3^<(DU%)b9U?K?$s|DStJ;qr8&?1x7YCo&=dwwS3j3^P68U}fi7AzZCsS>JigZ0)978H@CB3>;(DU;C{(7JP|NpaJUhzZ!^8NiUzQk{k m>1gXb_~XT|#xy1t2?jwww^>&-H)jAfGI+ZBxvX|6H_V+Po~-c6)p92aSW-rmGtITK~HaE<3hd;;f9D=Pw(%q@0BVN5}m~r z#1r!-hezlC|Ns7C(;`q3|CQE9Z(I-Fa-ArtPnHjQY1|C-YSv6H$TekCr@-#Cf7WRP$X8P+M@|_5J;I zh6h5LSj6_!e4Fy{y8na+^#uyo_tbu!BiXUI!AgaJiHE_(dG2SI1^U832QzrO`njxg HN@xNAj%;Dm literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-highlighted-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e66842b4b80d8e917fde97315c104a2abedbbb GIT binary patch literal 260 zcmV+f0sH=mP)8U}fi7AzZCsS>JiVQtn978H@B}HsVU_3lo-G4^ho{EEC{{OFER{#Is!Uy~7 p|2G--^!oA~b2~m=FP4eJfZ?KnYwTfR{RcqJ44$rjF6*2UngE(#FwFn} literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-divider.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-divider.png new file mode 100644 index 0000000000000000000000000000000000000000..8902f973b9591fc877aed589eebc8b5663fee8a3 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!2~3?tYhc}Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiZnf4978H@B}HsVV7$D){{M`B|NrwZyZG_`{`!rd98EUK hboA!2P2d+uU|tN;9R+6ka022WQ%mvv4FO#m7XEwcas literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b355a4959708820398c111cbdb187503a03967c9 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6?J*KIEGZ*N{ZQ#z$nek>?|vw&alzs^#1z)Qcs^g)oz&4 z*xcOQ`1Jq(|0k1@l6dCZ*QfpX@Q|6=qxD605PMwO6k5~_{kKccQNx?WPZhzfbo+E({ evO)}uYz$#h^NvTZzmW`d6@#a%pUXO@geCxdqg53E literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-inactive-right.png new file mode 100644 index 0000000000000000000000000000000000000000..425d865033450223b2d98b2fdafd4101fdc73084 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6?J*KIEGZ*nlr(W>#zZjYkk-HfcOp9Urbqf{K6FGpKNUG zJaT(0Hmvn%oYtl?<=BTK&p)ds^12*hNNa2<|6H_V+Po~-c71esWIEGZ*O1iVVTwj`**;!UVonfQN;d!>zxAO1p`T75N zzx;p42F{MjsVONE|Nj0y{^9Lyb2c#rXOSa~jA9G8*aX_R8&U#8CTM>6{yyF+V_~P{ z38n=KHGf}U*Jq1xFl0=9ZdduK<>B-5^An~nP*_v{?~kRlfIDNU2Lp=)L-5BHm!i|t R%76}G@O1TaS?83{1ORYfQGx&f literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-center.png new file mode 100644 index 0000000000000000000000000000000000000000..04e98594633b9043e379dee55310551f6fbd8a9b GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!2~3?tYhc}Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jiu62P978H@CC#y^Ga4BbCf0oO}7K;WbkzLb6Mw<&;$Tabt{kn literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-center.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-center.png new file mode 100644 index 0000000000000000000000000000000000000000..e01316801b1fa2ed08dd0387bbd4189cb725e788 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{G!2~3?tYhc}Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiYz=`978H@C2_2td16U!&bcE;P8?xToiSskLc>hSBWZ1y y6zry)J<}uL9@M;K`ooXU@1J?J>>UFm8^i0hY|<4AIUfPdVDNPHb6Mw<&;$Spdo|6H_V+Po~-c70vN48HuPF z6Im~WG+3OOk!G-X=E0tLR^wH=3C@9c8?Q#y@F~BjRha+M)LvSdS(@9JImGnxo$LDX y1}8on7`^D&)Xco|-?PWla~xz?uP8DKBrrJk2*z}BAFBttlfl!~&t;ucLK6TD7F;I) literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-right.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-highlighted-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c063a210142f8ce69c92575fc99d273210fdcc3a GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6)pF4aSW-rmBh1p=8yS}jSn>i^cfzhiRC62x7qKn_uOCm zbJ4H6ucx2!@#*p5$;px7Nt$HD)6>&)QpZ7%O&}pDIW-|ENr;up!0-S=$Js+YdJQX^ zBoz;wIm2`5P){_gu(0u}g$kZx6YN5aXBg%r9!uvo-etWZ`m~P&YvH|g#x^PS%k~ov zWUI*rma$dJxwT!_k8fZR+n{r|R%ppDRsnrxwjy4K21bT*eyOyt6(Z?CCo_1u`njxg HN@xNAHZEDv literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-left.png b/AppKit/Themes/Aristo/Resources/segmented-control-bezel-pushed-left.png new file mode 100644 index 0000000000000000000000000000000000000000..5c387ba27c6aa4c90417ef4909210065ba7cccd7 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&5!3HGnK8=|Nq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6;*k?|vw&alyhTUj}IaZ8I!>yjlZ z%+k`*%pMAnQBkuRr%s*9$PzJQ#tfI6H*ZQNFf3_eY|6H_V+Po~-c6}5P}IEGZ*Ix^9a&q-0hCHa295;KbL&FN4$)-lKU%zX3b zG8%2q{H3MyFV;(m{GE89`hUOdev99t9|Aj871_mlaVoNWxp(u%(rc&kXB@k`V-Jf2 ZgZ)PN2eKzuhyvZi;OXk;vd$@?2>?^6Rp|6H_V+Po~-c6_tCsIEGZ*O1iVV{CzzeTibGnJq#VQCH^xXJU`!FQqHdC z#D^arAM-8CzrWA$&+qU3j&5#kj2hF=Fg-fJFhTbelSnIf!;KeOCxm|d{;n^(<-!pj z9>xfUzyJP9i#V)5sO2yx{rtSfkTa>4g^yS~4st8Ru^su!z{tk%i(z5c^2HlCfKFiW MboFyt=akR{0MW)#f&c&j literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 5003ee5cb..7a2c4eec0 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -278,6 +278,82 @@ return button; } ++ (CPPopUpButton)themedSegmentedControl +{ + var segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 24.0)]; + + [segmentedControl setTrackingMode:CPSegmentSwitchTrackingSelectAny]; + [segmentedControl setSegmentCount:3]; + + [segmentedControl setWidth:40.0 forSegment:0]; + [segmentedControl setLabel:@"foo" forSegment:0]; + [segmentedControl setTag:1 forSegment:0]; + + [segmentedControl setWidth:60.0 forSegment:1]; + [segmentedControl setLabel:@"bar" forSegment:1]; + [segmentedControl setTag:2 forSegment:1]; + + [segmentedControl setWidth:25.0 forSegment:2]; + [segmentedControl setLabel:@"1" forSegment:2]; + [segmentedControl setTag:3 forSegment:2]; + + //various colors + var centerBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-center.png" size:CGSizeMake(1.0, 24.0)]], + dividerBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-divider.png" size:CGSizeMake(1.0, 24.0)]], + centerHighlightedBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]], + dividerHighlightedBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-divider.png" size:CGSizeMake(1.0, 24.0)]], + leftHighlightedBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]], + rightHighlightedBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]], + inactiveCenterBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-inactive-center.png" size:CGSizeMake(1.0, 24.0)]], + inactiveDividerBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-inactive-divider.png" size:CGSizeMake(1.0, 24.0)]], + inactiveLeftBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-inactive-left.png" size:CGSizeMake(4.0, 24.0)]], + inactiveRightBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-inactive-right.png" size:CGSizeMake(4.0, 24.0)]], + leftBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-left.png" size:CGSizeMake(4.0, 24.0)]], + rightBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-right.png" size:CGSizeMake(4.0, 24.0)]], + pushedCenterBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-center.png" size:CGSizeMake(1.0, 24.0)]], + pushedLeftBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-left.png" size:CGSizeMake(4.0, 24.0)]], + pushedRightBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-right.png" size:CGSizeMake(4.0, 24.0)]]; + pushedHighlightedCenterBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-highlighted-center.png" size:CGSizeMake(1.0, 24.0)]], + pushedHighlightedLeftBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-highlighted-left.png" size:CGSizeMake(4.0, 24.0)]], + pushedHighlightedRightBezelColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:@"segmented-control-bezel-pushed-highlighted-right.png" size:CGSizeMake(4.0, 24.0)]]; + + [segmentedControl setValue:centerBezelColor forThemedAttributeName:@"center-segment-bezel-color" inControlState:CPControlStateNormal]; + [segmentedControl setValue:inactiveCenterBezelColor forThemedAttributeName:@"center-segment-bezel-color" inControlState:CPControlStateDisabled]; + [segmentedControl setValue:centerHighlightedBezelColor forThemedAttributeName:@"center-segment-bezel-color" inControlState:CPControlStateSelected]; + [segmentedControl setValue:pushedCenterBezelColor forThemedAttributeName:@"center-segment-bezel-color" inControlState:CPControlStateHighlighted]; + [segmentedControl setValue:pushedHighlightedCenterBezelColor forThemedAttributeName:@"center-segment-bezel-color" inControlState:CPControlStateHighlighted|CPControlStateSelected]; + + [segmentedControl setValue:dividerBezelColor forThemedAttributeName:@"divider-bezel-color" inControlState:CPControlStateNormal]; + [segmentedControl setValue:inactiveDividerBezelColor forThemedAttributeName:@"divider-bezel-color" inControlState:CPControlStateDisabled]; + [segmentedControl setValue:dividerHighlightedBezelColor forThemedAttributeName:@"divider-bezel-color" inControlState:CPControlStateSelected]; + [segmentedControl setValue:dividerBezelColor forThemedAttributeName:@"divider-bezel-color" inControlState:CPControlStateHighlighted]; + + [segmentedControl setValue:rightBezelColor forThemedAttributeName:@"right-segment-bezel-color" inControlState:CPControlStateNormal]; + [segmentedControl setValue:inactiveRightBezelColor forThemedAttributeName:@"right-segment-bezel-color" inControlState:CPControlStateDisabled]; + [segmentedControl setValue:rightHighlightedBezelColor forThemedAttributeName:@"right-segment-bezel-color" inControlState:CPControlStateSelected]; + [segmentedControl setValue:pushedRightBezelColor forThemedAttributeName:@"right-segment-bezel-color" inControlState:CPControlStateHighlighted]; + [segmentedControl setValue:pushedHighlightedRightBezelColor forThemedAttributeName:@"right-segment-bezel-color" inControlState:CPControlStateHighlighted|CPControlStateSelected]; + + [segmentedControl setValue:leftBezelColor forThemedAttributeName:@"left-segment-bezel-color" inControlState:CPControlStateNormal]; + [segmentedControl setValue:inactiveLeftBezelColor forThemedAttributeName:@"left-segment-bezel-color" inControlState:CPControlStateDisabled]; + [segmentedControl setValue:leftHighlightedBezelColor forThemedAttributeName:@"left-segment-bezel-color" inControlState:CPControlStateSelected]; + [segmentedControl setValue:pushedLeftBezelColor forThemedAttributeName:@"left-segment-bezel-color" inControlState:CPControlStateHighlighted]; + [segmentedControl setValue:pushedHighlightedLeftBezelColor forThemedAttributeName:@"left-segment-bezel-color" inControlState:CPControlStateHighlighted|CPControlStateSelected]; + + [segmentedControl setValue:CGInsetMake(0.0, 4.0, 0.0, 4.0) forThemedAttributeName:@"content-inset" inControlState:CPControlStateNormal]; + + [segmentedControl setValue:CGInsetMake(0.0, 0.0, 0.0, 0.0) forThemedAttributeName:@"bezel-inset" inControlState:CPControlStateNormal]; + + [segmentedControl setValue:[CPFont boldSystemFontOfSize:12.0] forThemedAttributeName:@"font"]; + [segmentedControl setValue:[CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0] forThemedAttributeName:@"text-color"]; + [segmentedControl setValue:[CPColor colorWithCalibratedWhite:240.0 / 255.0 alpha:1.0] forThemedAttributeName:@"text-shadow-color"]; + + [segmentedControl setValue:1.0 forThemedAttributeName:@"divider-thickness"]; + [segmentedControl setValue:24.0 forThemedAttributeName:@"default-height"]; + + return segmentedControl; +} + + (CPPopUpButton)themedPullDownMenu { var button = [[CPPopUpButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 24.0) pullsDown:YES],