/** * @author Jefferson González * @copyright 2010 Jefferson González * * @license * This file is part of Jaris FLV Player. * * Jaris FLV Player is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License or GNU LESSER GENERAL * PUBLIC LICENSE as published by the Free Software Foundation, either version * 3 of the License, or (at your option) any later version. * * Jaris FLV Player is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License and * GNU LESSER GENERAL PUBLIC LICENSE along with Jaris FLV Player. If not, * see . */ package jaris.player.newcontrols; import flash.display.MovieClip; import flash.display.Sprite; import flash.display.Stage; import flash.events.Event; import flash.Lib; import flash.geom.Matrix; import jaris.utils.Utils; import flash.display.GradientType; /** * Draws a loading bar */ class Loader extends Sprite { private var _stage:Stage; private var _movieClip:MovieClip; private var _background:Sprite; private var _loaderTrack:Sprite; private var _loaderThumb:Sprite; private var _visible:Bool; private var _darkColor:UInt; private var _controlColor:UInt; private var _seekColor:UInt; private var _forward:Bool; public function new() { super(); _stage = Lib.current.stage; _movieClip = Lib.current; _background = new Sprite(); addChild(_background); _loaderTrack = new Sprite(); addChild(_loaderTrack); _loaderThumb = new Sprite(); addChild(_loaderThumb); _darkColor = 0x000000; _controlColor = 0xFFFFFF; _seekColor = 0x747474; _forward = true; _visible = true; addEventListener(Event.ENTER_FRAME, onEnterFrame); _stage.addEventListener(Event.RESIZE, onResize); drawLoader(); } /** * Animation of a thumb moving on the track * @param event */ private function onEnterFrame(event:Event):Void { if (_visible) { if (_forward) { if ((_loaderThumb.x + _loaderThumb.width) >= (_loaderTrack.x + _loaderTrack.width)) { _forward = false; } else { _loaderThumb.x += 10; } } else { if (_loaderThumb.x <= _loaderTrack.x) { _forward = true; } else { _loaderThumb.x -= 10; } } } } /** * Redraws the loader to match new stage size * @param event */ private function onResize(event:Event):Void { drawLoader(); } /** * Draw loader graphics */ private function drawLoader():Void { //Clear graphics _background.graphics.clear(); _loaderTrack.graphics.clear(); _loaderThumb.graphics.clear(); //Draw background var backgroundWidth:Float = (30 / 100) * _stage.stageWidth; var backgroundHeight:Float = 30; _background.x = (_stage.stageWidth / 2) - (backgroundWidth / 2); _background.y = (_stage.stageHeight / 2) - (backgroundHeight / 2); _background.graphics.lineStyle(); _background.graphics.beginFill(_darkColor, 0.75); _background.graphics.drawRoundRect(0, 0, backgroundWidth, backgroundHeight, 6, 6); _background.graphics.endFill(); //Draw track var trackWidth:Float = (20 / 100) * _stage.stageWidth; var trackHeight:Float = 11; _loaderTrack.x = (_stage.stageWidth / 2) - (trackWidth / 2); _loaderTrack.y = (_stage.stageHeight / 2) - (trackHeight / 2); _loaderTrack.graphics.lineStyle(); _loaderTrack.graphics.beginFill(_seekColor, 0.3); _loaderTrack.graphics.drawRoundRect(0, trackHeight/2/2, trackWidth, trackHeight/2, 5, 5); //Draw thumb var matrix:Matrix = new Matrix( ); matrix.createGradientBox(trackHeight*3, trackHeight, Utils.degreesToRadians(-90), trackHeight*3, 0); var colors:Array = [_controlColor, _controlColor]; var alphas:Array = [0.75, 1]; var ratios:Array = [0, 255]; _loaderThumb.x = _loaderTrack.x; _loaderThumb.y = _loaderTrack.y; _loaderThumb.graphics.lineStyle(); _loaderThumb.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix); //_loaderThumb.graphics.beginFill(_controlColor, 1); _loaderThumb.graphics.drawRoundRect(0, 0, trackHeight*3, trackHeight, 10, 10); } /** * Stops drawing the loader */ public function hide():Void { this.visible = false; _visible = false; } /** * Starts drawing the loader */ public function show():Void { this.visible = true; _visible = true; } /** * Set loader colors * @param colors */ public function setColors(colors:Array):Void { _darkColor = colors[0].length > 0? Std.parseInt("0x" + colors[0]) : 0x000000; _controlColor = colors[1].length > 0? Std.parseInt("0x" + colors[1]) : 0xFFFFFF; _seekColor = colors[2].length > 0? Std.parseInt("0x" + colors[2]) : 0x747474; drawLoader(); } }