1//////////////////////////////////////////////////////////////////////////////// 2// 3// ADOBE SYSTEMS INCORPORATED 4// Copyright 2005-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 mx.skins.halo 13{ 14 15import flash.display.Graphics; 16import flash.filters.DropShadowFilter; 17import mx.core.EdgeMetrics; 18import mx.graphics.RectangularDropShadow; 19import mx.skins.RectangularBorder; 20 21/** 22 * The skin for a ToolTip. 23 */ 24public class ToolTipBorder extends RectangularBorder 25{ 26 include "../../core/Version.as"; 27 28 //-------------------------------------------------------------------------- 29 // 30 // Constructor 31 // 32 //-------------------------------------------------------------------------- 33 34 /** 35 * Constructor. 36 */ 37 public function ToolTipBorder() 38 { 39 super(); 40 } 41 42 //-------------------------------------------------------------------------- 43 // 44 // Variables 45 // 46 //-------------------------------------------------------------------------- 47 48 /** 49 * @private 50 */ 51 private var dropShadow:RectangularDropShadow; 52 53 //-------------------------------------------------------------------------- 54 // 55 // Overridden properties 56 // 57 //-------------------------------------------------------------------------- 58 59 //---------------------------------- 60 // borderMetrics 61 //---------------------------------- 62 63 /** 64 * @private 65 * Storage for the borderMetrics property. 66 */ 67 private var _borderMetrics:EdgeMetrics; 68 69 /** 70 * @private 71 */ 72 override public function get borderMetrics():EdgeMetrics 73 { 74 if (_borderMetrics) 75 return _borderMetrics; 76 77 var borderStyle:String = getStyle("borderStyle"); 78 switch (borderStyle) 79 { 80 case "errorTipRight": 81 { 82 _borderMetrics = new EdgeMetrics(15, 1, 3, 3); 83 break; 84 } 85 86 case "errorTipAbove": 87 { 88 _borderMetrics = new EdgeMetrics(3, 1, 3, 15); 89 break; 90 } 91 92 case "errorTipBelow": 93 { 94 _borderMetrics = new EdgeMetrics(3, 13, 3, 3); 95 break; 96 } 97 98 default: // "toolTip" 99 { 100 _borderMetrics = new EdgeMetrics(3, 1, 3, 3); 101 break; 102 } 103 } 104 105 return _borderMetrics; 106 } 107 108 //-------------------------------------------------------------------------- 109 // 110 // Overridden methods 111 // 112 //-------------------------------------------------------------------------- 113 114 /** 115 * @private 116 * If borderStyle may have changed, clear the cached border metrics. 117 */ 118 override public function styleChanged(styleProp:String):void 119 { 120 if (styleProp == "borderStyle" || 121 styleProp == "styleName" || 122 styleProp == null) 123 { 124 _borderMetrics = null; 125 } 126 127 invalidateDisplayList(); 128 } 129 130 /** 131 * @private 132 * Draw the background and border. 133 */ 134 override protected function updateDisplayList(w:Number, h:Number):void 135 { 136 super.updateDisplayList(w, h); 137 138 var borderStyle:String = getStyle("borderStyle"); 139 var backgroundColor:uint = getStyle("backgroundColor"); 140 var backgroundAlpha:Number= getStyle("backgroundAlpha"); 141 var borderColor:uint = getStyle("borderColor"); 142 var cornerRadius:Number = getStyle("cornerRadius"); 143 var shadowColor:uint = getStyle("shadowColor"); 144 var shadowAlpha:Number = 0.1; 145 146 var g:Graphics = graphics; 147 g.clear(); 148 149 filters = []; 150 151 switch (borderStyle) 152 { 153 case "none": 154 { 155 // Don't draw anything 156 break; 157 } 158 case "errorTipRight": 159 { 160 // border 161 drawRoundRect( 162 11, 0, w - 11, h - 2, 3, 163 borderColor, backgroundAlpha); 164 165 // left pointer 166 g.beginFill(borderColor, backgroundAlpha); 167 g.moveTo(11, 7); 168 g.lineTo(0, 13); 169 g.lineTo(11, 19); 170 g.moveTo(11, 7); 171 g.endFill(); 172 173 filters = [ new DropShadowFilter(2, 90, 0, 0.4) ]; 174 break; 175 } 176 177 case "errorTipAbove": 178 { 179 // border 180 drawRoundRect( 181 0, 0, w, h - 13, 3, 182 borderColor, backgroundAlpha); 183 184 // bottom pointer 185 g.beginFill(borderColor, backgroundAlpha); 186 g.moveTo(9, h - 13); 187 g.lineTo(15, h - 2); 188 g.lineTo(21, h - 13); 189 g.moveTo(9, h - 13); 190 g.endFill(); 191 192 filters = [ new DropShadowFilter(2, 90, 0, 0.4) ]; 193 break; 194 } 195 196 case "errorTipBelow": 197 { 198 // border 199 drawRoundRect( 200 0, 11, w, h - 13, 3, 201 borderColor, backgroundAlpha); 202 203 // top pointer 204 g.beginFill(borderColor, backgroundAlpha); 205 g.moveTo(9, 11); 206 g.lineTo(15, 0); 207 g.lineTo(21, 11); 208 g.moveTo(10, 11); 209 g.endFill(); 210 211 filters = [ new DropShadowFilter(2, 90, 0, 0.4) ]; 212 break; 213 } 214 215 default: //Tooltip 216 { 217 // face 218 drawRoundRect( 219 3, 1, w - 6, h - 4, cornerRadius, 220 backgroundColor, backgroundAlpha) 221 222 if (!dropShadow) 223 dropShadow = new RectangularDropShadow(); 224 225 dropShadow.distance = 3; 226 dropShadow.angle = 90; 227 dropShadow.color = 0; 228 dropShadow.alpha = 0.4; 229 230 dropShadow.tlRadius = cornerRadius + 2; 231 dropShadow.trRadius = cornerRadius + 2; 232 dropShadow.blRadius = cornerRadius + 2; 233 dropShadow.brRadius = cornerRadius + 2; 234 235 dropShadow.drawShadow(graphics, 3, 0, w - 6, h - 4); 236 237 break; 238 } 239 } 240 } 241} 242 243} 244