<!--
  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.
-->
<!-- saved from url=(0014)about:internet -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>SampleRotateScreen.mxml</title>
<link rel="stylesheet" type="text/css" href="../SourceStyles.css"/>
</head>

<body>
<pre><span class="MXMLProcessing_Instruction">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="MXMLComponent_Tag">&lt;s:View</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">"
        xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">" viewActivate="</span><span class="MXMLString">view1_activateHandler(event)</span><span class="MXMLDefault_Text">"
        title="</span><span class="MXMLString">SampleRotateScreen</span><span class="MXMLDefault_Text">"</span><span class="MXMLDefault_Text"></span><span class="MXMLComponent_Tag">&gt;</span>
    <span class="MXMLSpecial_Tag">&lt;fx:Script&gt;</span>
        &lt;![CDATA[
            <span class="ActionScriptReserved">protected</span> <span class="ActionScriptfunction">function</span> view1_activateHandler(event:Event):<span class="ActionScriptReserved">void</span>
            {
                stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, <span class="ActionScriptfunction">function</span>(event:StageOrientationEvent):<span class="ActionScriptReserved">void</span> 
                {
                    lbl.text = <span class="ActionScriptString">"Orientation changed from "</span> + event.beforeOrientation + <span class="ActionScriptReserved">" to "</span> + event.afterOrientation;
                    <span class="ActionScriptReserved">switch</span> (event.afterOrientation)
                    {
                        <span class="ActionScriptReserved">case</span> StageOrientation.DEFAULT:
                            <span class="ActionScripttrace">trace</span>(<span class="ActionScriptString">"Default orientation"</span>);
                            <span class="ActionScriptReserved">break</span>;
                        <span class="ActionScriptReserved">case</span> StageOrientation.ROTATED_RIGHT:
                            <span class="ActionScripttrace">trace</span>(<span class="ActionScriptString">"Rotated right"</span>);
                            <span class="ActionScriptReserved">break</span>;
                        <span class="ActionScriptReserved">case</span> StageOrientation.ROTATED_LEFT:
                            <span class="ActionScripttrace">trace</span>(<span class="ActionScriptString">"Rotated left"</span>);
                            <span class="ActionScriptReserved">break</span>;
                        <span class="ActionScriptReserved">case</span> StageOrientation.UPSIDE_DOWN:
                            <span class="ActionScripttrace">trace</span>(<span class="ActionScriptString">"Upside down"</span>);
                            <span class="ActionScriptReserved">break</span>;
                        <span class="ActionScriptReserved">case</span> StageOrientation.UNKNOWN:
                            <span class="ActionScripttrace">trace</span>(<span class="ActionScriptString">"Unknown"</span>);
                            <span class="ActionScriptReserved">break</span>;
                    }
                });
            } 
        <span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptOperator">&gt;</span>
        
    <span class="MXMLSpecial_Tag">&lt;/fx:Script&gt;</span>
    
    <span class="MXMLComponent_Tag">&lt;s:states&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">landscape</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">portrait</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:states&gt;</span>
    
    <span class="MXMLComponent_Tag">&lt;s:Label</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">lbl</span><span class="MXMLDefault_Text">" horizontalCenter="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">40</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">95%</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    
    <span class="MXMLComponent_Tag">&lt;s:HGroup</span><span class="MXMLDefault_Text"> horizontalCenter="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" verticalCenter="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:Button</span> label="<span class="MXMLString">Landscape Mode</span>" click="stage.setAspectRatio(StageAspectRatio.LANDSCAPE);"<span class="MXMLComponent_Tag">/&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:Button</span> label="<span class="MXMLString">Portrait Mode</span>" click="stage.setAspectRatio(StageAspectRatio.PORTRAIT);"<span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:HGroup&gt;</span>    
<span class="MXMLComponent_Tag">&lt;/s:View&gt;</span></pre></body>
</html>
