source: trunk/fl5/src/com/longtailvideo/jwplayer/view/components/DisplayComponent.as @ 517

Revision 517, 4.9 KB checked in by pablo, 4 years ago (diff)

Dock.addButton and Controlbar.addButton return a movieclip (for v4 plugin compatibility)
V4 Emulator now a true singleton (fixes plugin setup)

Line 
1package com.longtailvideo.jwplayer.view.components {
2        import com.longtailvideo.jwplayer.events.MediaEvent;
3        import com.longtailvideo.jwplayer.events.PlayerEvent;
4        import com.longtailvideo.jwplayer.events.PlayerStateEvent;
5        import com.longtailvideo.jwplayer.events.ViewEvent;
6        import com.longtailvideo.jwplayer.player.Player;
7        import com.longtailvideo.jwplayer.player.PlayerState;
8        import com.longtailvideo.jwplayer.view.interfaces.IDisplayComponent;
9       
10        import flash.display.DisplayObject;
11        import flash.display.MovieClip;
12        import flash.events.MouseEvent;
13        import flash.geom.ColorTransform;
14        import flash.text.GridFitType;
15        import flash.text.TextField;
16        import flash.text.TextFieldAutoSize;
17        import flash.text.TextFormatAlign;
18        import flash.text.TextFormat;   
19       
20        public class DisplayComponent extends CoreComponent implements IDisplayComponent {
21                protected var _icon:DisplayObject;
22                protected var _background:MovieClip;
23                protected var _text:TextField;
24               
25                public function DisplayComponent(player:Player) {
26                        super(player);
27                        addListeners();
28                        setupDisplayObjects();
29                }
30               
31                private function addListeners():void {
32                        player.addEventListener(MediaEvent.JWPLAYER_MEDIA_MUTE, stateHandler);
33                        player.addEventListener(PlayerStateEvent.JWPLAYER_PLAYER_STATE, stateHandler);
34                        player.addEventListener(PlayerEvent.JWPLAYER_ERROR, errorHandler);
35                        addEventListener(MouseEvent.CLICK, clickHandler);
36                }
37               
38                private function setupDisplayObjects():void {
39                        _background = new MovieClip();
40                        background.name = "background";
41                        addChildAt(background, 0);
42                        background.graphics.beginFill(0,0);
43                        background.graphics.drawRect(0,0,1,1);
44                        background.graphics.endFill();
45                        if (player.config.screencolor) {
46                                var colorTransform:ColorTransform = new ColorTransform();
47                                colorTransform.color = player.config.screencolor.color;
48                                background.transform.colorTransform = colorTransform;
49                        }
50                        _icon = new MovieClip();
51                        addChildAt(icon,1);
52                        _text = new TextField();
53                        if (player.config.frontcolor) {
54                                var textColorTransform:ColorTransform = new ColorTransform();
55                                textColorTransform.color = player.config.frontcolor.color;
56                                text.transform.colorTransform = textColorTransform;
57                        }
58                        text.gridFitType = GridFitType.NONE;
59                        addChildAt(text,2);
60                }
61               
62                public function resize(width:Number, height:Number):void {
63                        background.width = width;
64                        background.height = height;
65                        positionIcon();
66                        positionText();
67                        stateHandler();
68                }
69               
70                public function setIcon(displayIcon:DisplayObject):void {
71                        try {
72                                removeChild(icon);
73                        } catch (err:Error) {
74                               
75                        }
76                        if (displayIcon){
77                                _icon = displayIcon;
78                                addChild(icon);
79                                positionIcon();
80                        }
81                }
82
83                private function positionIcon():void {
84                        icon.x = background.scaleX / 2;
85                        icon.y = background.scaleY / 2 ;
86                }
87               
88                public function setText(displayText:String):void {
89                        text.text = displayText ? displayText : '';
90                        positionText();
91                }
92               
93                private function positionText():void {
94                        if (text.width > background.scaleX * .75){
95                                text.width = background.scaleX * .75;
96                                text.wordWrap = true;
97                        } else {
98                                text.autoSize = TextFormatAlign.CENTER;
99                        }
100                        text.x = (background.scaleX - text.textWidth) / 2;
101                        text.y = icon.y + (icon.height / 2) + 10;
102                }
103               
104                protected function setDisplay(displayIcon:DisplayObject, displayText:String = null):void {
105                        setIcon(displayIcon);
106                        setText(displayText);
107                }
108               
109                protected function clearDisplay():void {
110                        setDisplay(null,null);
111                }
112               
113                protected function stateHandler(event:PlayerEvent = null):void {
114                        //TODO: Handle mute button in error state
115                        switch (player.state) {
116                                case PlayerState.BUFFERING:
117                                        setDisplay(getSkinElement('display', 'bufferIcon'));
118                                        break;
119                                case PlayerState.PAUSED:
120                                        setDisplay(getSkinElement('display', 'playIcon'));
121                                        break;
122                                case PlayerState.IDLE:
123                                        setDisplay(getSkinElement('display', 'playIcon'));
124                                        break;
125                                default:
126                                        if (player.mute){
127                                                setDisplay(getSkinElement('display', 'muteIcon'));
128                                        } else {
129                                                clearDisplay();
130                                        }
131                        }
132                }
133
134                protected function errorHandler(event:PlayerEvent):void {
135                        setDisplay(getSkinElement('display', 'errorIcon'), event.message);
136                }
137               
138                protected function clickHandler(event:MouseEvent):void {
139                        var clickEvent:String = player.state == PlayerState.PLAYING ? ViewEvent.JWPLAYER_VIEW_PAUSE : ViewEvent.JWPLAYER_VIEW_PLAY;
140                        dispatchEvent(new ViewEvent(clickEvent));
141                        dispatchEvent(new ViewEvent(ViewEvent.JWPLAYER_VIEW_CLICK));
142                }
143               
144                protected function get icon():DisplayObject {
145                        return _icon;
146                }
147               
148                protected function get text():TextField {
149                        return _text;
150                }
151               
152                protected function get background():MovieClip {
153                        return _background;
154                }
155               
156                private function getSkinElement(component:String, element:String):DisplayObject {
157                        return player.skin.getSkinElement(component,element);
158                }
159        }
160}
Note: See TracBrowser for help on using the repository browser.