1//////////////////////////////////////////////////////////////////////////////// 2// 3// ADOBE SYSTEMS INCORPORATED 4// Copyright 2004-2006 Adobe Systems Incorporated 5// All Rights Reserved. 6// 7// NOTICE: Adobe permits you to use, modify, and distribute this file 8// in accordance with the terms of the license agreement accompanying it. 9// 10//////////////////////////////////////////////////////////////////////////////// 11 12package haloclassic 13{ 14 15import flash.display.Graphics; 16import flash.display.GradientType; 17import mx.skins.Border; 18import mx.styles.StyleManager; 19import mx.utils.ColorUtil; 20 21/** 22 * The skin for all the states of a thumb in a vertical Slider. 23 */ 24public class SliderVThumbSkin extends Border 25{ 26 include "../mx/core/Version.as"; 27 28 //-------------------------------------------------------------------------- 29 // 30 // Class variables 31 // 32 //-------------------------------------------------------------------------- 33 34 /** 35 * @private 36 */ 37 private static var cache:Object = {}; 38 39 //-------------------------------------------------------------------------- 40 // 41 // Class methods 42 // 43 //-------------------------------------------------------------------------- 44 45 /** 46 * @private 47 * Several colors used for drawing are calculated from the base colors 48 * of the component (themeColor, borderColor and fillColors). 49 * Since these calculations can be a bit expensive, 50 * we calculate once per color set and cache the results. 51 */ 52 private static function calcDerivedStyles(themeColor:uint, 53 borderColor:uint, 54 fillColor0:uint, 55 fillColor1:uint):Object 56 { 57 var key:String = HaloColors.getCacheKey(themeColor, borderColor, 58 fillColor0, fillColor1); 59 60 if (!cache[key]) 61 { 62 var o:Object = cache[key] = {}; 63 64 // Cross-component styles. 65 HaloColors.addHaloColors(o, themeColor, fillColor0, fillColor1); 66 67 // SliderThumb-specific styles. 68 o.borderColorDrk1 = ColorUtil.adjustBrightness2(borderColor, -60); 69 } 70 71 return cache[key]; 72 } 73 74 //-------------------------------------------------------------------------- 75 // 76 // Constructor 77 // 78 //-------------------------------------------------------------------------- 79 80 /** 81 * Constructor. 82 */ 83 public function SliderVThumbSkin() 84 { 85 super(); 86 } 87 88 //-------------------------------------------------------------------------- 89 // 90 // Overridden properties 91 // 92 //-------------------------------------------------------------------------- 93 94 //---------------------------------- 95 // measuredWidth 96 //---------------------------------- 97 98 /** 99 * @private 100 */ 101 override public function get measuredWidth():Number 102 { 103 return 12; 104 } 105 106 //---------------------------------- 107 // measuredHeight 108 //---------------------------------- 109 110 /** 111 * @private 112 */ 113 override public function get measuredHeight():Number 114 { 115 return 12; 116 } 117 118 //-------------------------------------------------------------------------- 119 // 120 // Overridden methods 121 // 122 //-------------------------------------------------------------------------- 123 124 /** 125 * @private 126 */ 127 override protected function updateDisplayList(w:Number, h:Number):void 128 { 129 super.updateDisplayList(w, h); 130 131 // User-defined styles. 132 var borderColor:uint = getStyle("borderColor"); 133 var fillColors:Array = getStyle("fillColors"); 134 StyleManager.getColorNames(fillColors); 135 var themeColor:uint = getStyle("themeColor"); 136 137 // Derivative styles. 138 var derStyles:Object = calcDerivedStyles(themeColor, borderColor, 139 fillColors[0], fillColors[1]); 140 141 var g:Graphics = graphics; 142 143 g.clear(); 144 145 switch (name) 146 { 147 case "thumbUpSkin": 148 { 149 // border 150 g.beginGradientFill( 151 GradientType.LINEAR, 152 [ borderColor, derStyles.borderColorDrk1 ], 153 [ 1.0, 1.0 ], [ 0, 0xFF ], 154 verticalGradientMatrix(0, 0, w, h)); 155 g.moveTo(w / 2, 0); 156 g.curveTo(w / 2, 0, w / 2 - 2, 2); 157 g.lineTo(0, h - 2); 158 g.curveTo(0, h - 2, 2, h); 159 g.lineTo(w - 2, h); 160 g.curveTo(w - 2, h, w, h - 2); 161 g.lineTo(w / 2 + 2, 2); 162 g.curveTo(w / 2 + 2, 2, w / 2, 0); 163 g.endFill(); 164 165 // fill 166 g.beginGradientFill( 167 GradientType.LINEAR, 168 [ fillColors[0], fillColors[1] ], 169 [ 1.0, 1.0 ], [ 0, 0xFF ], 170 verticalGradientMatrix(0, 0, w, h)); 171 g.moveTo(w / 2, 1); 172 g.curveTo(w / 2, 0, w / 2 - 1, 2); 173 g.lineTo(1, h - 1); 174 g.curveTo(1, h - 1, 1, h - 1); 175 g.lineTo(w - 1, h - 1); 176 g.curveTo(w - 1, h - 1, w - 1, h - 2); 177 g.lineTo(w / 2 + 1, 2); 178 g.curveTo(w / 2 + 1, 2, w / 2, 1); 179 g.endFill(); 180 181 break; 182 } 183 184 case "thumbOverSkin": 185 { 186 // border 187 g.beginGradientFill( 188 GradientType.LINEAR, 189 [ derStyles.themeColDrk2, derStyles.themeColDrk1 ], 190 [ 1.0, 1.0 ], [ 0, 0xFF ], 191 verticalGradientMatrix(0, 0, w, h)); 192 g.moveTo(w / 2, 0); 193 g.curveTo(w / 2, 0, w / 2 - 2, 2); 194 g.lineTo(0, h - 2); 195 g.curveTo(0, h - 2, 2, h); 196 g.lineTo(w - 2, h); 197 g.curveTo(w - 2, h, w, h - 2); 198 g.lineTo(w / 2 + 2, 2); 199 g.curveTo(w / 2 + 2, 2, w / 2, 0); 200 g.endFill(); 201 202 // fill 203 g.beginGradientFill( 204 GradientType.LINEAR, 205 [ derStyles.fillColorBright1, derStyles.fillColorBright2 ], 206 [ 1.0, 1.0 ], [ 0, 0xFF ], 207 verticalGradientMatrix(0, 0, w, h)); 208 g.moveTo(w / 2, 1); 209 g.curveTo(w / 2, 0, w / 2 - 1, 2); 210 g.lineTo(1, h - 1); 211 g.curveTo(1, h - 1, 1, h - 1); 212 g.lineTo(w - 1, h - 1); 213 g.curveTo(w - 1, h - 1, w - 1, h - 2); 214 g.lineTo(w / 2 + 1, 2); 215 g.curveTo(w / 2 + 1, 2, w / 2, 1); 216 g.endFill(); 217 218 break; 219 } 220 221 case "thumbDownSkin": 222 { 223 // border 224 g.beginGradientFill( 225 GradientType.LINEAR, 226 [ derStyles.themeColDrk2, derStyles.themeColDrk1 ], 227 [ 1.0, 1.0 ], [ 0, 0xFF ], 228 verticalGradientMatrix(0, 0, w, h)); 229 g.moveTo(w / 2, 0); 230 g.curveTo(w / 2, 0, w / 2 - 2, 2); 231 g.lineTo(0, h - 2); 232 g.curveTo(0, h - 2, 2, h); 233 g.lineTo(w - 2, h); 234 g.curveTo(w - 2, h, w, h - 2); 235 g.lineTo(w / 2 + 2, 2); 236 g.curveTo(w / 2 + 2, 2, w / 2, 0); 237 g.endFill(); 238 239 // fill 240 g.beginGradientFill( 241 GradientType.LINEAR, 242 [ derStyles.fillColorPress1, derStyles.fillColorPress2 ], 243 [ 1.0, 1.0 ], [ 0, 0xFF ], 244 verticalGradientMatrix(0, 0, w, h)); 245 g.moveTo(w / 2, 1); 246 g.curveTo(w / 2, 0, w / 2 - 1, 2); 247 g.lineTo(1, h - 1); 248 g.curveTo(1, h - 1, 1, h - 1); 249 g.lineTo(w - 1, h - 1); 250 g.curveTo(w - 1, h - 1, w - 1, h - 2); 251 g.lineTo(w / 2 + 1, 2); 252 g.curveTo(w / 2 + 1, 2, w / 2, 1); 253 g.endFill(); 254 255 break; 256 } 257 258 case "thumbDisabledSkin": 259 { 260 // border 261 g.beginFill(0x999999, 0.5); 262 g.moveTo(w / 2, 0); 263 g.curveTo(w / 2, 0, w / 2 - 2, 2); 264 g.lineTo(0, h - 2); 265 g.curveTo(0, h - 2, 2, h); 266 g.lineTo(w - 2, h); 267 g.curveTo(w - 2, h, w, h - 2); 268 g.lineTo(w / 2 + 2, 2); 269 g.curveTo(w / 2 + 2, 2, w / 2, 0); 270 g.endFill(); 271 272 // fill 273 g.beginFill(0xFFFFFF, 0.5); 274 g.moveTo(w / 2, 1); 275 g.curveTo(w / 2, 0, w / 2 - 1, 2); 276 g.lineTo(1, h - 1); 277 g.curveTo(1, h - 1, 1, h - 1); 278 g.lineTo(w - 1, h - 1); 279 g.curveTo(w - 1, h - 1, w - 1, h - 2); 280 g.lineTo(w / 2 + 1, 2); 281 g.curveTo(w / 2 + 1, 2, w / 2, 1); 282 g.endFill(); 283 284 break; 285 } 286 } 287 } 288} 289 290} 291