<?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 a Spark Panel container.  

@langversion 3.0
@playerversion Flash 10
@playerversion AIR 1.5
@productversion Flex 4
-->
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" alpha.disabled="0.5" blendMode="normal">
	
	<fx:Metadata>
		<![CDATA[ 
		/** 
		* @copy spark.skins.spark.ApplicationSkin#hostComponent
		*/
		[HostComponent("spark.components.Panel")]
		]]>
	</fx:Metadata> 
	
	<fx:Script>
		/* Define the skin elements that should not be colorized. 
		For panel, border and title backround are skinned, but the content area and title text are not. */
		static private const exclusions:Array = ["background", "titleDisplay", "contentGroup", "bgfill"];
		
		/** 
		 * @copy spark.skins.SparkSkin#colorizeExclusions
		 */     
		override public function get colorizeExclusions():Array {return exclusions;}
		
		/* Define the content fill items that should be colored by the "contentBackgroundColor" style. */
		static private const contentFill:Array = [];
		
		/**
		 * @inheritDoc
		 */
		override public function get contentItems():Array {return contentFill};
	</fx:Script>
	
	<s:states>
		<s:State name="normal" />
		<s:State name="disabled" />
	</s:states>
	
	<!-- background fill -->
	<s:Rect left="0" right="0" bottom="0" top="0" >
		<s:fill>
			<s:LinearGradient rotation="90" >
				<s:GradientEntry color="0xFFFFFF" />
				<s:GradientEntry color="0x000000" />
			</s:LinearGradient>
		</s:fill>
	</s:Rect>
	
	<!-- title bar fill -->
	<s:Rect left="0" right="0" top="0" height="30">
		<s:fill>
			<s:LinearGradient rotation="90">
				<s:GradientEntry color="0x000000" />
				<s:GradientEntry color="0xC0C0C0" />
			</s:LinearGradient>
		</s:fill>
	</s:Rect>
	
	
	<!-- text layer -->
	<!--- Defines the appearance of the PanelSkin class's title bar. -->
	<s:SimpleText id="titleDisplay" lineBreak="explicit"
				  right="4" top="2" height="30"
				  verticalAlign="middle" fontWeight="bold" 
				  color="0xE2E2E2">
	</s:SimpleText>
	
	<!--
	Note: setting the minimum size to 0 here so that changes to the host component's
	size will not be thwarted by this skin part's minimum size.   This is a compromise,
	more about it here: http://bugs.adobe.com/jira/browse/SDK-21143
	-->
	<s:Group id="contentGroup" left="1" right="1" top="32" bottom="1" minWidth="0" minHeight="0">
	</s:Group>
	
</s:SparkSkin>
