source: code/Website/open-flash-chart/charts/series/bars/PlasticFlat.as

Last change on this file was 7849, checked in by dennisw, 15 years ago
File size: 15.3 KB
Line 
1 package charts.series.bars {
2 import flash.filters.DropShadowFilter;
3 import flash.geom.Matrix;
4
5 public class PlasticFlat extends Base
6 {
7
8 public function PlasticFlat( index:Number, props:Properties, group:Number ) {
9
10 super(index, props, group);
11 //super(index, {'top':props.get('top')}, props.get_colour('colour'), props.get('tip'), props.get('alpha'), group);
12
13 var dropShadow:DropShadowFilter = new flash.filters.DropShadowFilter();
14 dropShadow.blurX = 5;
15 dropShadow.blurY = 5;
16 dropShadow.distance = 3;
17 dropShadow.angle = 45;
18 dropShadow.quality = 2;
19 dropShadow.alpha = 0.4;
20 // apply shadow filter
21 this.filters = [dropShadow];
22 }
23
24 public override function resize( sc:ScreenCoordsBase ):void {
25
26 this.graphics.clear();
27 var h:Object = this.resize_helper( sc as ScreenCoords );
28
29 this.bg( h.width, h.height, h.upside_down );
30 this.glass( h.width, h.height, h.upside_down );
31 }
32
33 private function bg( w:Number, h:Number, upside_down:Boolean ):void {
34
35 var rad:Number = w/3;
36 if ( rad > ( w / 2 ) )
37 rad = w / 2;
38
39 this.graphics.lineStyle(0, 0, 0);// this.outline_colour, 100);
40
41 var allcolors:Array = GetColours(this.colour);
42 var lowlight:Number = allcolors[2];
43 var highlight:Number = allcolors[0];
44 var bgcolors:Array = [allcolors[1], allcolors[2], allcolors[2]];
45 var bgalphas:Array = [1, 1, 1];
46 var bgratios:Array = [0, 115, 255];
47 //var bgcolors:Array = [allcolors[1], allcolors[2]];
48 //var bgalphas:Array = [1, 1];
49 //var bgratios:Array = [0, 255];
50 var bgmatrix:Matrix = new Matrix();
51 var xRadius:Number;
52 var yRadius:Number;
53 var x:Number;
54 var y:Number;
55 var bevel:Number = 0.02 * w;
56 var div:Number = 3;
57
58 bgmatrix.createGradientBox(w, h, (180 / 180) * Math.PI );
59 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, bgcolors, bgalphas, bgratios, bgmatrix, 'pad'/*SpreadMethod.PAD*/ );
60
61 if ( h > 0 || h < 0)
62 { /* height is not zero */
63
64 /* draw outline darker rounded rectangle */
65 this.graphics.beginFill(0x000000, 1);
66 this.graphics.drawRoundRect(0, 0, w, h, w/div, w/div);
67
68 /* draw inner highlight rounded rectangle */
69 this.graphics.beginFill(highlight, 1);
70 this.graphics.drawRoundRect(0 + bevel, 0 + bevel, w - 2 * bevel, h - 2 * bevel, w/div - 2*bevel, w/div - 2 * bevel);
71
72 /* draw inner gradient rounded rectangle */
73 bevel = bevel * 3;
74 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, bgcolors, bgalphas, bgratios, bgmatrix, 'pad'/*SpreadMethod.PAD*/ );
75 this.graphics.drawRoundRect(0 + bevel, 0 + bevel, w - 2 * bevel, h - 2 * bevel, w/div - 2*bevel, w/div - 2 * bevel);
76
77 }
78 else
79 {
80
81 /* draw outline darker rounded rectangle */
82 this.graphics.beginFill(0x000000, 1);
83 this.graphics.drawRoundRect(0, 0 - 2*bevel, w, h + 4*bevel, w/div, w/div);
84
85 /* draw inner highlight rounded rectangle */
86 this.graphics.beginFill(highlight, 1);
87 this.graphics.drawRoundRect(0 + bevel, 0 - 2*bevel + bevel, w - 2 * bevel, h + 4*bevel - 2 * bevel, w/div - 2*bevel, w/div - 2 * bevel);
88
89 /* draw inner gradient rounded rectangle */
90 bevel = bevel * 3;
91 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, bgcolors, bgalphas, bgratios, bgmatrix, 'pad'/*SpreadMethod.PAD*/ );
92 this.graphics.drawRoundRect(0 + bevel, 0 - 2*bevel + bevel, w - 2 * bevel, h + 4*bevel - 2 * bevel, w/div - 2*bevel, w/div - 2 * bevel);
93
94 }
95
96
97 this.graphics.endFill();
98 }
99
100 private function glass( w:Number, h:Number, upside_down:Boolean ): void {
101
102 /* if this section is commented out, the white shine overlay will not be drawn */
103
104 this.graphics.lineStyle(0, 0, 0);
105 var allcolors:Array = GetColours(this.colour);
106 var lowlight:Number = allcolors[2];
107 var highlight:Number = allcolors[0];
108 var bgcolors:Array = [allcolors[1], allcolors[2], allcolors[2]];
109 var bgalphas:Array = [1, 1, 1];
110 var bgratios:Array = [0, 115, 255];
111 var bgmatrix:Matrix = new Matrix();
112 /*var colors:Array = [0xFFFFFF, 0xFFFFFF];
113 var alphas:Array = [0, 0.75];
114 var ratios:Array = [127,255]; */
115 var colors:Array = [0xFFFFFF, 0xFFFFFF, 0xFFFFFF];
116 var alphas:Array = [0, 0.05, 0.75];
117 var ratios:Array = [0, 123, 255];
118 var xRadius:Number;
119 var yRadius:Number;
120 var x:Number;
121 var y:Number;
122 var matrix:Matrix = new Matrix();
123 var bevel:Number = 0.02 * w;
124 var div:Number = 3;
125
126 bgmatrix.createGradientBox(w, h, (180 / 180) * Math.PI );
127 matrix.createGradientBox(width, height, (180 / 180) * Math.PI );
128 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, colors, alphas, ratios, matrix, 'pad'/*SpreadMethod.PAD*/ );
129 var rad:Number = w / 3;
130
131 if ( h > 0 && !upside_down )
132 { /* draw bar upwards */
133
134 /* draw shine rounded rectangle */
135 this.graphics.drawRoundRect(0 + bevel, 0 + bevel, w - 2 * bevel, h - 2 * bevel, w/div - 2*bevel, w/div - 2 * bevel);
136
137 /* draw outline darker rectangle */
138 this.graphics.beginFill(0x000000, 1);
139 this.graphics.drawRect(0, h - h / 2, w, h/2);
140
141 /* draw inner highlight rectangle */
142 this.graphics.beginFill(highlight, 1);
143 this.graphics.drawRect(0 + bevel, h - h / 2, w - 2 * bevel, h /2 - bevel);
144
145 /* draw inner gradient rectangle */
146 bevel = bevel * 3;
147 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, bgcolors, bgalphas, bgratios, bgmatrix, 'pad'/*SpreadMethod.PAD*/ );
148 this.graphics.drawRect(0 + bevel, h - h / 2, w - 2 * bevel, h / 2 - bevel);
149
150 /* draw shine rounded rectangle */
151 bevel = bevel / 3;
152 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, colors, alphas, ratios, matrix, 'pad'/*SpreadMethod.PAD*/ );
153 this.graphics.drawRect(0 + bevel, h - h / 2, w - 2 * bevel, h / 2 - bevel);
154
155 }
156 else if ( h > 0 )
157 {/* draw bar downwards */
158
159 /* draw shine rounded rectangle */
160 this.graphics.drawRoundRect(0 + bevel, 0 + bevel, w - 2 * bevel, h - 2 * bevel, w/div - 2*bevel, w/div - 2 * bevel);
161
162 /* draw outline darker rectangle */
163 this.graphics.beginFill(0x000000, 1);
164 this.graphics.drawRect(0, 0, w, h/2);
165
166 /* draw inner highlight rectangle */
167 this.graphics.beginFill(highlight, 1);
168 this.graphics.drawRect(0 + bevel, 0 + bevel, w - 2 * bevel, h /2 - bevel);
169
170 /* draw inner gradient rectangle */
171 bevel = bevel * 3;
172 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, bgcolors, bgalphas, bgratios, bgmatrix, 'pad'/*SpreadMethod.PAD*/ );
173 this.graphics.drawRect(0 + bevel, 0 + bevel, w - 2 * bevel, h / 2 - bevel);
174
175 /* draw shine rounded rectangle */
176 bevel = bevel / 3;
177 this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, colors, alphas, ratios, matrix, 'pad'/*SpreadMethod.PAD*/ );
178 this.graphics.drawRect(0 + bevel, 0 + bevel, w - 2 * bevel, h / 2 - bevel);
179
180 }
181 else
182 {
183
184 /* draw shine rounded rectangle */
185 this.graphics.drawRoundRect(0 + bevel, 0 - 2*bevel + bevel, w - 2 * bevel, h + 4*bevel - 2 * bevel, w/div - 2*bevel, w/div - 2 * bevel);
186
187 }
188 this.graphics.endFill();
189
190 }
191
192 /* function to process colors */
193 /* returns a base color, a lowlight color, and a highlight color for the gradients based on the color passed in */
194 public static function GetColours( col:Number):Array {
195 var rgb:Number = col; /* decimal value for color */
196 var red:Number = (rgb & 16711680) >> 16; /* extacts the red channel */
197 var green:Number = (rgb & 65280) >> 8; /* extacts the green channel */
198 var blue:Number = rgb & 255; /* extacts the blue channel */
199 var shift:Number = 0.15; /* shift factor */
200 var loshift:Number = 1.75; /* lowlight shift factor */
201 var basecolor:Number = col; /* base color to be returned */
202 var lowlight:Number = col; /* lowlight color to be returned */
203 var highlight:Number = col; /* highlight color to be returned */
204 var bgred:Number = (rgb & 16711680) >> 16; /* red channel for highlight */
205 var bggreen:Number = (rgb & 65280) >> 8; /* green channel for highlight */
206 var bgblue:Number = rgb & 255; /* blue channel for highlight */
207 var lored:Number = (rgb & 16711680) >> 16; /* red channel for lowlight */
208 var logreen:Number = (rgb & 65280) >> 8; /* green channel for lowlight */
209 var loblue:Number = rgb & 255; /* blue channel for lowlight */
210 var hired:Number = (rgb & 16711680) >> 16; /* red channel for highlight */
211 var higreen:Number = (rgb & 65280) >> 8; /* green channel for highlight */
212 var hiblue:Number = rgb & 255; /* blue channel for highlight */
213
214 /* set base color components based on ability to shift lighter and darker */
215 if (red + red * shift < 255 && red - loshift * red * shift > 0)
216 { /* red can be shifted both lighter and darker */
217 bgred = red;
218 }
219 else
220 { /* red can be shifter either lighter or darker */
221 if (red + red * shift < 255)
222 { /* red can be shifter lighter */
223 bgred = red + red / shift;
224 }
225 else
226 { /* red can be shifted darker */
227 bgred = red - loshift * red * shift;
228 }
229 }
230
231 if (blue + blue * shift < 255 && blue - loshift * blue * shift > 0)
232 { /* blue can be shifted both lighter and darker */
233 bgblue = blue;
234 }
235 else
236 { /* blue can be shifter either lighter or darker */
237 if (blue + blue * shift < 255)
238 { /* blue can be shifter lighter */
239 bgblue = blue + blue * shift;
240 }
241 else
242 { /* blue can be shifted darker */
243 bgblue = blue - loshift * blue * shift;
244 }
245 }
246
247 if (green + green * shift < 255 && green - loshift * green * shift > 0)
248 { /* green can be shifted both lighter and darker */
249 bggreen = green;
250 }
251 else
252 { /* green can be shifted either lighter or darker */
253 if (green + green * shift < 255)
254 { /* green can be shifter lighter */
255 bggreen = green + green * shift;
256 }
257 else
258 { /* green can be shifted darker */
259 bggreen = green - loshift * green * shift;
260 }
261 }
262
263 /* set highlight and lowlight components based on base colors */
264 hired = bgred + red * shift;
265 lored = bgred - loshift * (red * shift);
266 hiblue = bgblue + blue * shift;
267 loblue = bgblue - loshift * (blue * shift);
268 higreen = bggreen + green * shift;
269 logreen = bggreen - loshift * (green * shift);
270
271 /* reconstruct base and highlight */
272 basecolor = bgred << 16 | bggreen << 8 | bgblue;
273 highlight = hired << 16 | higreen << 8 | hiblue;
274 lowlight = lored << 16 | logreen << 8 | loblue;
275
276 /* return base, lowlight, and highlight */
277 return [highlight, basecolor, lowlight];
278 }
279
280 /* ellipse cos helper function */
281 public static function magicTrigFunctionX (pointRatio:Number):Number{
282 return Math.cos(pointRatio*2*Math.PI);
283 }
284
285 /* ellipse sin helper function */
286 public static function magicTrigFunctionY (pointRatio:Number):Number{
287 return Math.sin(pointRatio*2*Math.PI);
288 }
289
290 /* ellipse function */
291 /* draws an ellipse from passed center coordinates, x and y radii, and number of sides */
292 public function Ellipse(centerX:Number, centerY:Number, xRadius:Number, yRadius:Number, sides:Number):Number{
293
294 /* move to first point on ellipse */
295 this.graphics.moveTo(centerX + xRadius, centerY);
296
297 /* loop through sides and draw curves */
298 for(var i:Number=0; i<=sides; i++){
299 var pointRatio:Number = i/sides;
300 var xSteps:Number = magicTrigFunctionX(pointRatio);
301 var ySteps:Number = magicTrigFunctionY(pointRatio);
302 var pointX:Number = centerX + xSteps * xRadius;
303 var pointY:Number = centerY + ySteps * yRadius;
304 this.graphics.lineTo(pointX, pointY);
305 }
306
307 /* return 1 */
308 return 1;
309 }
310
311 }
312 }
Note: See TracBrowser for help on using the repository browser.