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