/AdobeAIRSDK/frameworks/projects/osmf/src/org/osmf/media/MediaPlayerSprite.as
https://github.com/kibiz0r/FlashRuby · ActionScript · 272 lines · 115 code · 19 blank · 138 comment · 12 complexity · 88712475047714cc15f961ddcb31da71 MD5 · raw file
- /*****************************************************
- *
- * Copyright 2009 Adobe Systems Incorporated. All Rights Reserved.
- *
- *****************************************************
- * The contents of this file are subject to the Mozilla Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
- * License for the specific language governing rights and limitations
- * under the License.
- *
- *
- * The Initial Developer of the Original Code is Adobe Systems Incorporated.
- * Portions created by Adobe Systems Incorporated are Copyright (C) 2009 Adobe Systems
- * Incorporated. All Rights Reserved.
- *
- *****************************************************/
- package org.osmf.media
- {
- import flash.display.Sprite;
- import flash.events.Event;
-
- import org.osmf.containers.MediaContainer;
- import org.osmf.events.MediaElementChangeEvent;
- import org.osmf.layout.HorizontalAlign;
- import org.osmf.layout.LayoutMetadata;
- import org.osmf.layout.ScaleMode;
- import org.osmf.layout.VerticalAlign;
-
- /**
- * MediaPlayerSprite provides MediaPlayer, MediaContainer, and MediaFactory
- * capabilities all in one Sprite-based class. It also provides convenience
- * methods to generate MediaElements from a resource and set the ScaleMode.
- *
- * @includeExample MediaPlayerSpriteExample.as -noswf
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- **/
- public class MediaPlayerSprite extends Sprite
- {
- /**
- * Constructor.
- *
- * @param mediaPlayer A custom MediaPlayer can be provided. If null, defaults to new MediaPlayer.
- * @param mediaContainer A custom MediaContainer can be provided. If null defaults to a new MediaContainer.
- * @param mediaFactory A custom MediaFactory can be provided. If null defaults to a new DefaultMediaFactory.
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- **/
- public function MediaPlayerSprite(mediaPlayer:MediaPlayer = null, mediaContainer:MediaContainer = null, mediaFactory:MediaFactory = null)
- {
- _mediaPlayer = mediaPlayer ? mediaPlayer : new MediaPlayer();
- _mediaFactory = mediaFactory;
- _mediaContainer = mediaContainer ? mediaContainer : new MediaContainer();
- _mediaPlayer.addEventListener(MediaElementChangeEvent.MEDIA_ELEMENT_CHANGE, onMediaElementChange);
- addChild(_mediaContainer);
-
- if (_mediaPlayer.media != null)
- {
- media = _mediaPlayer.media;
- }
- }
-
- /**
- * Source MediaElement presented by this MediaPlayerSprite.
- *
- * <p>Setting the element will set it as the media on the mediaPlayer,
- * and add it to the media container. Setting this property to null will remove it
- * both from the player and container. Existing in properties, such as layout will be
- * preserved on media.</p>
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- */
- public function get media():MediaElement
- {
- return _media;
- }
- public function set media(value:MediaElement):void
- {
- if (_media != value)
- {
- if (_media && _mediaContainer.containsMediaElement(_media))
- {
- _mediaContainer.removeMediaElement(_media);
- }
- _media = value;
- if (_media && _media.getMetadata(LayoutMetadata.LAYOUT_NAMESPACE) == null)
- {
- var layout:LayoutMetadata = new LayoutMetadata();
- layout.scaleMode = _scaleMode;
- layout.verticalAlign = VerticalAlign.MIDDLE;
- layout.horizontalAlign = HorizontalAlign.CENTER;
- layout.percentWidth = 100;
- layout.percentHeight = 100;
- _media.addMetadata(LayoutMetadata.LAYOUT_NAMESPACE, layout);
- }
- _mediaPlayer.media = value;
- if (value && !_mediaContainer.containsMediaElement(value) )
- {
- _mediaContainer.addMediaElement(value);
- }
- }
- }
-
- /**
- * The resource corresponding to the media element that is currently
- * being presented by this MediaPlayerSprite.
- *
- * <p>When set, this property uses the MediaFactory to generate a new
- * MediaElement, and sets it as the MediaElement on this MediaPlayerSprite.
- * If null, it will remove the existing MediaElement and resource from
- * the player and container. If the MediaFactory can't create a
- * MediaElement from the given resource, it will set the media and
- * to null.</p>
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- */
- public function get resource():MediaResourceBase
- {
- return _media ? _media.resource : null;
- }
- public function set resource(value:MediaResourceBase):void
- {
- media = value ? mediaFactory.createMediaElement(value) : null;
- }
-
- /**
- * The MediaPlayer that controls this media element.
- *
- * <p>Defaults to an instance of MediaPlayer. When an element is set
- * directly on the MediaPlayer, the media element is propagated to
- * the MediaPlayerSprite, and the MediaContainer.</p>
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- */
- public function get mediaPlayer():MediaPlayer
- {
- return _mediaPlayer;
- }
-
- /**
- * The MediaContainer that is used with this class.
- *
- * <p>Defaults to an instance of MediaContainer. Any media elements
- * added or removed through addMediaElement() or removeMediaElement()
- * are not set on the MediaPlayer. In order to set the MediaElement,
- * use the setter on the MediaPlayerSprite.</p>
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- */
- public function get mediaContainer():MediaContainer
- {
- return _mediaContainer;
- }
-
- /**
- * The MediaFactory that is used with this class.
- *
- * <p>Defaults to an instance of DefaultMediaFactory. Plugins should
- * be loaded through this media factory. Media elements created
- * directly through this factory aren't added to the MediaPlayer or
- * MediaContainer. To associate a new media element with the
- * MediaPlayerSprite, set the media property on this class.</p>
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- */
- public function get mediaFactory():MediaFactory
- {
- _mediaFactory = _mediaFactory ? _mediaFactory : new DefaultMediaFactory();
- return _mediaFactory;
- }
-
- /**
- * Defines how content within the MediaPlayerSprite will be laid out.
- *
- * <p>The default value is <code>letterbox</code>.</p>
- *
- * <p>Note that by default the MediaContainer sets the layout to be 100%
- * width, 100% height, and centered.</p>
- *
- * @langversion 3.0
- * @playerversion Flash 10
- * @playerversion AIR 1.5
- * @productversion OSMF 1.0
- */
- public function get scaleMode():String
- {
- return _scaleMode;
- }
-
- public function set scaleMode(value:String):void
- {
- _scaleMode = value;
- if (_media)
- {
- var layout:LayoutMetadata = _media.getMetadata(LayoutMetadata.LAYOUT_NAMESPACE) as LayoutMetadata;
- layout.scaleMode = value;
- }
- }
-
- /**
- * @private
- */
- override public function set width(value:Number):void
- {
- _mediaContainer.width = value;
- }
-
- /**
- * @private
- */
- override public function set height(value:Number):void
- {
- _mediaContainer.height = value;
-
- }
-
- /**
- * @private
- */
- override public function get width():Number
- {
- return _mediaContainer.width;
- }
-
- /**
- * @private
- */
- override public function get height():Number
- {
- return _mediaContainer.height;
- }
-
- private function onMediaElementChange(event:MediaElementChangeEvent):void
- {
- media = _mediaPlayer.media;
- }
-
- private var _scaleMode:String = ScaleMode.LETTERBOX;
- private var _media:MediaElement;
- private var _mediaPlayer:MediaPlayer;
- private var _mediaFactory:MediaFactory;
- private var _mediaContainer:MediaContainer;
- }
- }