<?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.

-->


<!--- The default skin class for the Spark Button component.  

@see spark.components.Button

@langversion 3.0
@playerversion Flash 10
@playerversion AIR 1.5
@productversion Flex 4
-->
<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
				   xmlns:s="library://ns.adobe.com/flex/spark" 
				   xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
				   minWidth="21" minHeight="21" 
				   alpha.disabled="0.5">
	
	<fx:Metadata>
		<![CDATA[ 
		/** 
		* @copy spark.skins.spark.ApplicationSkin#hostComponent
		*/
		[HostComponent("spark.components.Button")]
		]]>
	</fx:Metadata>
	
	<fx:Script fb:purpose="styling">
		<![CDATA[         
			import spark.components.Group;
			/* Define the skin elements that should not be colorized. 
			For button, the graphics are colorized but the label is not. */
			static private const exclusions:Array = ["labelDisplay"];
			
			/** 
			 * @private
			 */     
			override public function get colorizeExclusions():Array {return exclusions;}
			
			/**
			 * @private
			 */
			override protected function initializationComplete():void
			{
				useChromeColor = true;
				super.initializationComplete();
			}  
			
			/**
			 *  @private
			 */
			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
			{
				var cr:Number = getStyle("cornerRadius");
				
				if (cornerRadius != cr)
				{
					cornerRadius = cr;
					//shadow.radiusX = cornerRadius;
					fill.radiusX = 0;
					//lowlight.radiusX = 0;
					//highlight.radiusX = 0;
					border.radiusX = 0;
				}
				
				if (highlightStroke) highlightStroke.radiusX = cornerRadius;
				if (hldownstroke1) hldownstroke1.radiusX = cornerRadius;
				if (hldownstroke2) hldownstroke2.radiusX = cornerRadius;
				
				super.updateDisplayList(unscaledWidth, unscaledHeight);
			}
			
			private var cornerRadius:Number = 0;
			
		]]>        
	</fx:Script>
	
	<!-- states -->
	<s:states>
		<s:State name="up" />
		<s:State name="over" />
		<s:State name="down" />
		<s:State name="disabled" />
	</s:states>
	
	<!-- layer 1: shadow -->
	
	
	<!-- layer 2: fill -->
	<!--- @private -->
	<s:Rect id="fill" left="0" right="0" top="0" bottom="0" radiusX="0">
		<s:fill>
			<s:LinearGradient rotation="90">
				<s:GradientEntry color="0xFFFFFF" 
								 color.over="0xBBBDBD" 
								 color.down="0xAAAAAA" 
								 alpha="0.85" />
				<s:GradientEntry color="0xD8D8D8" 
								 color.over="0x9FA0A1" 
								 color.down="0x929496" 
								 alpha="0.85" />
			</s:LinearGradient>
		</s:fill>
	</s:Rect>
	
	
	
	
	
	<!-- layer 5: highlight stroke (all states except down) -->
	<!--- @private -->
	<s:Rect id="highlightStroke" left="0" right="0" top="0" bottom="0" radiusX="0" excludeFrom="down">
		<s:stroke>
			<s:LinearGradientStroke rotation="90" weight="1">
				<s:GradientEntry color="0xFFFFFF" alpha.over="0.22" />
				<s:GradientEntry color="0xD8D8D8" alpha.over="0.22" />
			</s:LinearGradientStroke>
		</s:stroke>
	</s:Rect>
	
	<!-- layer 6: highlight stroke (down state only) -->
	<!--- @private -->
	<s:Rect id="hldownstroke1" left="0" right="0" top="0" bottom="0" radiusX="0" includeIn="down">
		<s:stroke>
			<s:LinearGradientStroke rotation="90" weight="1">
				<s:GradientEntry color="0x000000" alpha="0.25" ratio="0.0" />
				<s:GradientEntry color="0x000000" alpha="0.25" ratio="0.001" />
				<s:GradientEntry color="0x000000" alpha="0.07" ratio="0.0011" />
				<s:GradientEntry color="0x000000" alpha="0.07" ratio="0.965" />
				<s:GradientEntry color="0x000000" alpha="0.00" ratio="0.9651" />
			</s:LinearGradientStroke>
		</s:stroke>
	</s:Rect>
	<!--- @private -->
	<s:Rect id="hldownstroke2" left="0" right="0" top="0" bottom="0" radiusX="0" includeIn="down">
		<s:stroke>
			<s:LinearGradientStroke rotation="90" weight="1">
				<s:GradientEntry color="0x000000" alpha="0.09" ratio="0.0" />
				<s:GradientEntry color="0x000000" alpha="0.00" ratio="0.0001" />
			</s:LinearGradientStroke>
		</s:stroke>
	</s:Rect>
	
	<!-- layer 7: border - put on top of the fill so it doesn't disappear when scale is less than 1 -->
	<!--- @private -->
	<s:Rect id="border" left="0" right="0" top="0" bottom="0" width="69" height="20" radiusX="0">
		<s:stroke>
			<s:LinearGradientStroke rotation="90" weight="1">
				<s:GradientEntry color="0x000000" 
								 alpha="0.5625"
								 alpha.down="0.6375" />
				<s:GradientEntry color="0x000000" 
								 alpha="0.75" 
								 alpha.down="0.85" />
			</s:LinearGradientStroke>
		</s:stroke>
	</s:Rect>
	
	<!-- layer 8: text -->
	<!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay  -->
	<s:Label id="labelDisplay"
			 textAlign="left"
			 maxDisplayedLines="1"
			 horizontalCenter="0" verticalCenter="1" verticalAlign="middle"
			 left="10" right="10" top="2" bottom="2">
	</s:Label>
	
</s:SparkButtonSkin>
