blob: 67fd754ff531f1fbe07601b8e21c30c34b8b34af [file] [log] [blame]
<?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 ViewMenu in a mobile application.
@see spark.components.ViewMenu
@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"
xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled="0.5">
<fx:Metadata>
<![CDATA[
/**
* @copy spark.skins.spark.ApplicationSkin#hostComponent
*/
[HostComponent("spark.components.ViewMenu")]
]]>
</fx:Metadata>
<fx:Script fb:purpose="styling">
<![CDATA[
import mx.core.DPIClassification;
import mx.core.FlexGlobals;
import spark.effects.easing.Power;
/**
* @private
*/
override protected function initializationComplete():void
{
useChromeColor = false;
super.initializationComplete();
}
/**
* @copy spark.skins.mobile.supportClasses.MobileSkin#applicationDPI
*/
public function get applicationDPI():int
{
return FlexGlobals.topLevelApplication.applicationDPI;
}
/**
* @private
*/
override protected function measure():void
{
super.measure();
// not actually used in normal situations, but
// is here to prevent bug 28950 if ViewMenu is misused
measuredHeight = 200;
}
/**
* @private
*/
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var strokeWeight:Number = (applicationDPI == DPIClassification.DPI_640 || applicationDPI == DPIClassification.DPI_480 || applicationDPI == DPIClassification.DPI_320) ? 2 : 1;
var separatorWeight:Number = 1;
if (applicationDPI == DPIClassification.DPI_640)
separatorWeight = 6;
else if (applicationDPI == DPIClassification.DPI_480)
separatorWeight = 4;
else if (applicationDPI == DPIClassification.DPI_320)
separatorWeight = 3;
else if (applicationDPI == DPIClassification.DPI_240)
separatorWeight = 2;
else if (applicationDPI == DPIClassification.DPI_120)
separatorWeight = 1;
contentGroup.top = strokeWeight + separatorWeight;
contentGroup.bottom = separatorWeight;
contentGroupLayout.gap = separatorWeight;
}
]]>
</fx:Script>
<s:states>
<s:State name="normal" stateGroups="openedGroup"/>
<s:State name="closed" stateGroups="closedGroup"/>
<s:State name="disabled" stateGroups="openedGroup"/>
<s:State name="normalAndLandscape" stateGroups="openedGroup, landscapeGroup"/>
<s:State name="closedAndLandscape" stateGroups="closedGroup, landscapeGroup"/>
<s:State name="disabledAndLandscape" stateGroups="openedGroup, landscapeGroup" />
</s:states>
<s:transitions>
<s:Transition fromState="closed" toState="normal" autoReverse="true">
<s:Parallel>
<s:Fade target="{chromeGroup}" duration="150" easer="{new Power(0.5, 3)}" />
<s:Move target="{chromeGroup}" duration="150" disableLayout="true" easer="{new Power(0, 5)}"/>
</s:Parallel>
</s:Transition>
<s:Transition fromState="closedAndLandscape" toState="normalAndLandscape" autoReverse="true">
<s:Parallel>
<s:Fade target="{chromeGroup}" duration="150" easer="{new Power(0.5, 3)}" />
<s:Move target="{chromeGroup}" duration="150" disableLayout="true" easer="{new Power(0, 5)}"/>
</s:Parallel>
</s:Transition>
<s:Transition fromState="normal" toState="closed" autoReverse="true">
<s:Parallel>
<s:Fade target="{chromeGroup}" duration="100"/>
<s:Move target="{chromeGroup}" duration="100" disableLayout="true"/>
</s:Parallel>
</s:Transition>
<s:Transition fromState="normalAndLandscape" toState="closedAndLandscape" autoReverse="true">
<s:Parallel>
<s:Fade target="{chromeGroup}" duration="100"/>
<s:Move target="{chromeGroup}" duration="100" disableLayout="true"/>
</s:Parallel>
</s:Transition>
</s:transitions>
<!-- The ViewMenu and its skin are sized to the application.
The menu chrome is a separate group that is anchored to the bottom of the skin. -->
<s:Group id="chromeGroup"
left="0"
right="0"
top.closedGroup="{hostComponent.height - chromeGroup.height / 2}"
bottom.openedGroup="0"
visible.closedGroup="false">
<s:Rect id="backgroundRect" left="18" right="18" top="1" bottom="0">
<s:fill>
<s:SolidColor color="#FFFFFF" />
</s:fill>
<s:stroke>
<s:SolidColorStroke weight="0.5" alpha="0.2" />
</s:stroke>
<s:filters>
<s:DropShadowFilter alpha="0.5" />
</s:filters>
</s:Rect>
<!--
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
-->
<!--- @copy spark.components.SkinnableContainer#contentGroup -->
<s:Group id="contentGroup" left="20" right="20" top="3" bottom="2" minWidth="0" minHeight="0">
<s:layout>
<s:VerticalLayout gap="-1" id="contentGroupLayout" horizontalAlign="contentJustify" >
</s:VerticalLayout>
</s:layout>
</s:Group>
</s:Group>
</s:SparkSkin>