/src/com/cf/view/component/list/content/VolumeSlider.as

https://github.com/isaacueca/copacino.com
ActionScript | 148 lines | 89 code | 36 blank | 23 comment | 1 complexity | 783db22a45b1b1432d82cbd64a0feb8a MD5 | raw file
  1. package com.cf.view.component.list.content
  2. {
  3. import flash.display.Sprite;
  4. import flash.events.Event;
  5. import flash.events.MouseEvent;
  6. import flash.geom.Point;
  7. import net.hires.controllers.VideoController;
  8. public class VolumeSlider extends Sprite
  9. {
  10. // SLIDER SETTINGS
  11. private var barWidth:Number = 3;
  12. private var barMargin:Number = 2;
  13. // PRIVATE MEMBERS
  14. private var _bgColor:uint;
  15. private var _fgColor:uint;
  16. private var _gutterColor:uint;
  17. private var _videoController:VideoController;
  18. private var _desiredWidth:Number;
  19. private var _desiredHeight:Number;
  20. private var _gutter:Sprite = new Sprite();
  21. private var _fg:Sprite = new Sprite();
  22. private var _bg:Sprite = new Sprite();
  23. private var _hitArea:Sprite = new Sprite();
  24. private var _fgMask:Sprite = new Sprite();
  25. public function VolumeSlider( desiredWidth:Number, desiredHeight:Number, bgColor:uint, gutterColor:uint, fgColor:uint, videoController:VideoController )
  26. {
  27. super();
  28. _bgColor = bgColor;
  29. _fgColor = fgColor;
  30. _videoController = videoController;
  31. _desiredWidth = desiredWidth;
  32. _desiredHeight = desiredHeight;
  33. var _controlHeight:Number = _desiredHeight * .6;
  34. var _controlWidth:Number = _desiredWidth * .7;
  35. var barTick:Number = barWidth + barMargin;
  36. var maxIndex:Number = ( _controlWidth / (barWidth + barMargin) );
  37. // BG
  38. _bg.graphics.beginFill( _bgColor );
  39. _bg.graphics.drawRect( 0, 0, desiredWidth, desiredHeight );
  40. _bg.graphics.endFill();
  41. addChild( _bg );
  42. // GUTTER + FOREGROUND loop
  43. for (var i:int = 0; i < maxIndex; i++)
  44. {
  45. var percentAcross:Number = .1 + ( i / maxIndex );
  46. // GUTTER
  47. _gutter.graphics.beginFill( _gutterColor );
  48. _gutter.graphics.drawRect( i * barTick, _controlHeight, barWidth, -(_controlHeight * percentAcross) );
  49. _gutter.graphics.endFill();
  50. // FG
  51. _fg.graphics.beginFill( _fgColor );
  52. _fg.graphics.drawRect( i * barTick, _controlHeight, barWidth, -(_controlHeight * percentAcross) );
  53. _fg.graphics.endFill();
  54. }
  55. // FG MASK
  56. _fgMask.graphics.beginFill( 0x000000 );
  57. _fgMask.graphics.drawRect( 0, 0, _desiredWidth, _controlHeight );
  58. _fgMask.graphics.endFill();
  59. // POSITION
  60. _gutter.y = _fg.y = _fgMask.y = ( _desiredHeight - _controlHeight ) >> 1;
  61. _gutter.x = _fg.x = _fgMask.x = ( _desiredWidth - _controlWidth ) >> 1;
  62. // ADD
  63. addChild( _gutter );
  64. addChild( _fg );
  65. addChild( _fgMask );
  66. // HIT AREA
  67. _hitArea.graphics.beginFill( _bgColor, 0 );
  68. _hitArea.graphics.drawRect( -10,-5, _controlWidth + 20, _controlHeight + 10 );
  69. _hitArea.graphics.endFill();
  70. addChild( _hitArea );
  71. this.hitArea = _hitArea;
  72. _fg.mask = _fgMask;
  73. this.addEventListener( MouseEvent.MOUSE_DOWN, mouse_down );
  74. }
  75. //
  76. // OVERRIDES
  77. //
  78. override public function get width():Number { return _desiredWidth; }
  79. override public function get height():Number { return _desiredHeight; }
  80. //
  81. // PRIVATE
  82. //
  83. private function setVolume(volPercent:Number):void
  84. {
  85. _videoController.setVolume( volPercent );
  86. }
  87. //
  88. // EVENT HANLDERS
  89. //
  90. private function mouse_down(e:MouseEvent):void
  91. {
  92. stage.addEventListener( MouseEvent.MOUSE_UP, mouse_up );
  93. this.addEventListener( Event.ENTER_FRAME, enter_frame );
  94. }
  95. private function mouse_up(e:MouseEvent):void
  96. {
  97. this.removeEventListener( Event.ENTER_FRAME, enter_frame );
  98. }
  99. private function enter_frame(e:Event):void
  100. {
  101. var stagePoint:Point = new Point( stage.mouseX, stage.mouseY );
  102. var localPoint:Point = globalToLocal( stagePoint );
  103. // ADJUST VOLUME
  104. _fgMask.width = Math.max( 0, Math.min( _desiredWidth, localPoint.x ) );
  105. setVolume( _fgMask.width / _desiredWidth );
  106. }
  107. //
  108. // PUBLIC API
  109. //
  110. public function get desiredWidth():Number { return _desiredWidth; }
  111. }
  112. }