//////////////////////////////////////////////////////////////////////////////// // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (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.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// package mx.core { /** * MovieClipAsset is a subclass of the flash.display.MovieClip class * which represents movieclip symbols that you embed in a Flex application * from a SWF file produced by Flash. * It implements the IFlexDisplayObject interface, which makes it * possible for the MovieClip to be displayed in an Image control, * or to be used as a container background or a component skin. * *

The MovieClip that you're embedding must be a movieclip symbol * that is in a SWF file. * A common reason for using an embedded movieclip is that you have created * a frame-based animation in Flash and want to use it in a Flex application. * The MXML compiler autogenerates a class that extends MovieClipAsset * to represent the embedded animation.

* *

You don't generally have to use the MovieClipAsset class directly * when you write a Flex application. * For example, you can use a movieclip animation as an application's * background image by writing the following:

* *
 *  <mx:Application backgroundImage="@Embed(source='Assets.swf', symbol='BackgroundAnimation')"/>
* *

or

* *
 *  <fx:Style>
 *      @namespace mx "library://ns.adobe.com/flex/mx"
 *      mx|Application {
 *          backgroundImage: Embed(source="Assets.swf", symbol="BackgroundAnimation")
 *      }
 *  <fx:Style/>
* *

without having to understand that the MXML compiler has created * a subclass of MovieClipAsset for you.

* *

However, it may be useful to understand what is happening * at the ActionScript level. * To embed a movieclip in ActionScript, you declare a variable * of type Class, and put [Embed] metadata on it. * For example:

* *
 *  [Bindable]
 *  [Embed(source="Assets.swf", symbol="BackgroundAnimation")]
 *  private var backgroundAnimationClass:Class;
* *

The MXML compiler notices that the BackgroundAnimation symbol * in Assets.swf is a movie clip, autogenerates a subclass of the * MovieClipAsset class to represent it, and sets your variable * to be a reference to this autogenerated class. * You can then use this class reference to create instances of the * MovieClipAsset using the new operator, and you can use * APIs of the MovieClip class on them:

* *
 *  var backgroundAnimation:MovieClipAsset =
 *      MovieClipAsset(new backgroundAnimationClass());
 *  var n:int = backgroundAnimation.totalFrames;
* *

However, you rarely need to create MovieClipAsset instances yourself * because image-related properties and styles can be set to an * image-producing class, and components will create instances as necessary. * For example, to set the application background to this animation, * you can simply write the following:

* *
 *  <mx:Application backgroundImage="{backgroundAnimationClass}"/>
* * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class MovieClipAsset extends FlexMovieClip implements IFlexAsset, IFlexDisplayObject, IBorder { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function MovieClipAsset() { super(); // Remember initial size as our measured size. _measuredWidth = width; _measuredHeight = height; } //-------------------------------------------------------------------------- // // Properties // //-------------------------------------------------------------------------- //---------------------------------- // measuredHeight //---------------------------------- /** * @private * Storage for the measuredHeight property. */ private var _measuredHeight:Number; /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get measuredHeight():Number { return _measuredHeight; } //---------------------------------- // measuredWidth //---------------------------------- /** * @private * Storage for the measuredWidth property. */ private var _measuredWidth:Number; /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get measuredWidth():Number { return _measuredWidth; } //---------------------------------- // borderMetrics //---------------------------------- /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get borderMetrics():EdgeMetrics { if (scale9Grid == null) { return EdgeMetrics.EMPTY; } else { return new EdgeMetrics(scale9Grid.left, scale9Grid.top, Math.ceil(measuredWidth - scale9Grid.right), Math.ceil(measuredHeight - scale9Grid.bottom)); } } //-------------------------------------------------------------------------- // // Methods // //-------------------------------------------------------------------------- /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function move(x:Number, y:Number):void { this.x = x; this.y = y; } /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function setActualSize(newWidth:Number, newHeight:Number):void { width = newWidth; height = newHeight; } } }