<?xml version="1.0"?>
<!--

  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.

-->
<s:Module
	xmlns:fx="http://ns.adobe.com/mxml/2009"
	xmlns:mx="library://ns.adobe.com/flex/mx"
	xmlns:s="library://ns.adobe.com/flex/spark">

	<fx:Declarations>
		<s:Scale3D id="scaleEffect" target="{targetImg}" 
				   scaleXFrom="1.0" scaleXTo="{Number(xVal.text)}" 
				   scaleYFrom="1.0" scaleYTo="{Number(yVal.text)}" 
				   scaleZFrom="1.0" scaleZTo="{Number(zVal.text)}"
				   duration="{duration.value}"
				   repeatCount="{repeatCnt.value}" repeatBehavior="{chkReverse.selected?'reverse':'loop'}"
				   effectStart="this.targetImg.alpha=.7" effectEnd="this.targetImg.alpha=1.0"/>
	</fx:Declarations>
	
	<s:Panel title="Scale3D Effect Sample" width="100%" height="100%">
		
		<s:layout>
			<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10" />
		</s:layout>

		<s:VGroup>
			<s:HGroup verticalAlign="middle">
				<s:Label text="Scale X To" verticalAlign="bottom"/>
				<s:TextInput id="xVal" text="0.5" widthInChars="3"/>
			</s:HGroup>
			<s:HGroup verticalAlign="middle">
				<s:Label text="Scale Y To" verticalAlign="bottom"/>
				<s:TextInput id="yVal" text="0.5" widthInChars="3"/>
			</s:HGroup>
			<s:HGroup verticalAlign="middle">
				<s:Label text="Scale Z To" verticalAlign="bottom"/>
				<s:TextInput id="zVal" text="1.0" widthInChars="3"/>
			</s:HGroup>
			<s:HGroup verticalAlign="middle">
				<s:Label text="Repeat Num" verticalAlign="bottom"/>
				<s:NumericStepper id="repeatCnt" width="35" 
								  value="2" minimum="1"/>
			</s:HGroup>
			<s:HGroup verticalAlign="middle">
				<s:Label text="Duration" verticalAlign="bottom"/>
				<s:NumericStepper id="duration" width="58" 
								  minimum="100" maximum="9999"  
								  value="1000"  
								  snapInterval="100" />
			</s:HGroup>
			<s:CheckBox id="chkReverse" label="Repeat in Reverse?" selected="true"/>
			<s:Button id="playButton"
					  label="Scale Image" click="scaleEffect.play()"/>
		</s:VGroup>
		
		<s:BitmapImage id="targetImg" width="50%" height="50%" source="@Embed(source='assets/ApacheFlexLogo.png')"/>
		
		<s:Label width="200" verticalAlign="justify"
				 text="The Scale3D class scales a target object in three dimensions around the transform center. A scale of 
2.0 means the object has been magnified by a factor of 2, and a scale of 0.5 means the object has been 
reduced by a factor of 2. A scale value of 0.0 is invalid."/>	
		
	</s:Panel>
</s:Module>
