<?xml version="1.0" encoding="utf-8"?>
<!--

  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.

-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="top"
	horizontalAlign="center" backgroundGradientColors="[0x000000,0x323232]" paddingTop="0" viewSourceURL="srcview/index.html">
	
	<mx:Script>
        <![CDATA[		
            import flash.events.MouseEvent;
		
            public function doZoom(event:MouseEvent):void {
                if (zoomAll.isPlaying) {
                    zoomAll.reverse();
                }
                else {
                    // If this is a ROLL_OUT event, play the effect backwards. 
                    // If this is a ROLL_OVER event, play the effect forwards.
                    zoomAll.play([event.target], event.type == MouseEvent.ROLL_OUT ? true : false);
                }
            }
            private function smoothImage(ev:Event):void{
            	//set image smoothing so image looks better when transformed.
				var bmp:Bitmap = ev.target.content as Bitmap;
				bmp.smoothing = true;
			}
        ]]>	
    </mx:Script>

    <mx:Zoom id="zoomAll" zoomWidthTo="1" zoomHeightTo="1" zoomWidthFrom=".5" zoomHeightFrom=".5"  />
       
	<mx:Panel title="Zoom Effect" layout="vertical" color="0xffffff" borderAlpha="0.15" width="500" height="230"
		 paddingTop="5" paddingRight="10" paddingBottom="5" paddingLeft="10" horizontalAlign="center">
         
         <mx:Text width="100%" color="0x323232" textAlign="center" paddingBottom="0"
            text="Move the mouse over the image to enlarge it. Move the mouse off of the image to shrink it."/>

        <mx:Image id="flex" source="@Embed('images/goggles.jpg')" scaleX=".5" scaleY=".5" rollOver="doZoom(event)" rollOut="doZoom(event)" creationComplete="smoothImage(event);" />

	</mx:Panel>
	
</mx:Application>
