This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 69b1e8b  initial support for TitleWindowSkin.  Alpha gradient entries 
are not working right now.  Should help fix #706
69b1e8b is described below

commit 69b1e8b8527b94250ffbb63ecb61e64ac17560af
Author: Alex Harui <[email protected]>
AuthorDate: Thu Feb 13 23:06:40 2020 -0800

    initial support for TitleWindowSkin.  Alpha gradient entries are not 
working right now.  Should help fix #706
---
 .../SparkRoyale/src/main/resources/defaults.css    |   2 +-
 .../src/main/royale/SparkRoyaleClasses.as          |   1 +
 .../main/royale/spark/components/TitleWindow.as    |  28 +-
 .../components/beads/SparkSkinScrollingViewport.as |  36 ++-
 .../royale/spark/skins/spark/TitleWindowSkin.mxml  | 319 +++++++++++++++++++++
 5 files changed, 371 insertions(+), 15 deletions(-)

diff --git a/frameworks/projects/SparkRoyale/src/main/resources/defaults.css 
b/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
index 933483f..27e4a61 100644
--- a/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
@@ -230,7 +230,7 @@ TextInput
 
 TitleWindow
 {
-       IBeadView: ClassReference("spark.components.beads.TitleWindowView");
+       skinClass: ClassReference("spark.skins.spark.TitleWindowSkin");
 }
 
 .TitleBarCloseButton
diff --git 
a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as 
b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
index 5cb3cc86..925b862 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
@@ -39,6 +39,7 @@ internal class SparkRoyaleClasses
     import spark.skins.spark.FormSkin; FormSkin; 
     import spark.skins.spark.FormItemSkin; FormItemSkin; 
     import spark.skins.spark.PanelSkin; PanelSkin; 
+    import spark.skins.spark.TitleWindowSkin; TitleWindowSkin; 
        
        import spark.layouts.supportClasses.SparkLayoutBead; SparkLayoutBead;
     import spark.layouts.FormLayout; FormLayout;
diff --git 
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TitleWindow.as
 
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TitleWindow.as
index ee5d164..fb435d3 100644
--- 
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TitleWindow.as
+++ 
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TitleWindow.as
@@ -29,7 +29,6 @@ import flash.geom.Point;
 import flash.geom.Rectangle;
 
 import mx.core.mx_internal;
-import mx.events.CloseEvent;
 import mx.events.FlexEvent;
 import mx.events.SandboxMouseEvent;
 import mx.utils.BitFlagUtil;
@@ -37,6 +36,8 @@ import mx.utils.BitFlagUtil;
 import spark.events.TitleWindowBoundsEvent;
 
 use namespace mx_internal; */
+    import mx.events.CloseEvent;
+    import mx.events.MouseEvent;
 
 //--------------------------------------
 //  Events
@@ -284,7 +285,7 @@ public class TitleWindow extends Panel
     //  closeButton
     //---------------------------------- 
     
-    //[SkinPart(required="false")]
+    [SkinPart(required="false")]
     
     /**
      *  The skin part that defines the appearance of the 
@@ -297,13 +298,13 @@ public class TitleWindow extends Panel
      *
      *  <p>Focus is disabled for this skin part.</p>
      */
-   // public var closeButton:Button;
+    public var closeButton:Button;
     
     //----------------------------------
     //  moveArea
     //---------------------------------- 
     
-   // [SkinPart(required="false")]
+    //[SkinPart(required="false")]
     
     /**
      *  The area where the user must click and drag to move the window.
@@ -313,7 +314,7 @@ public class TitleWindow extends Panel
      *  the title bar area of the window, then move the mouse. 
      *  Create a custom skin class to change the move area.</p>
      */
-   // public var moveArea:InteractiveObject;
+    //public var moveArea:InteractiveObject;
     
     
//--------------------------------------------------------------------------
     //
@@ -369,20 +370,21 @@ public class TitleWindow extends Panel
     /**
      *  @private
      */
-    /* override protected function partAdded(partName:String, instance:Object) 
: void
+    override protected function partAdded(partName:String, instance:Object) : 
void
     {
         super.partAdded(partName, instance);
         
+        /*
         if (instance == moveArea)
         {
             moveArea.addEventListener(MouseEvent.MOUSE_DOWN, 
moveArea_mouseDownHandler);
         }
-        else if (instance == closeButton)
+        else*/ if (instance == closeButton)
         {
             closeButton.focusEnabled = false;
             closeButton.addEventListener(MouseEvent.CLICK, 
closeButton_clickHandler);   
         }
-    } */
+    }
     
     /**
      *  @private
@@ -435,7 +437,7 @@ public class TitleWindow extends Panel
     /**
      *  @private
      */
-    /* override public function move(x:Number, y:Number) : void
+    /*override public function move(x:Number, y:Number) : void
     {
         var beforeBounds:Rectangle = new Rectangle(this.x, this.y, width, 
height);
         
@@ -448,7 +450,7 @@ public class TitleWindow extends Panel
                                        false, false, beforeBounds, 
afterBounds);
         
         dispatchEvent(e2);
-    } */
+    }*/
     
     
//--------------------------------------------------------------------------
     // 
@@ -470,8 +472,9 @@ public class TitleWindow extends Panel
      *  @playerversion AIR 1.5
      *  @productversion Royale 0.9.4
      */
-    /* protected function closeButton_clickHandler(event:MouseEvent):void
+    protected function closeButton_clickHandler(event:MouseEvent):void
     {
+        /*
         var child:DisplayObject = getFocus() as DisplayObject;
         if (child && contains(child))
         {
@@ -480,8 +483,9 @@ public class TitleWindow extends Panel
             if (stage)
                 stage.focus = null;
         }
+        */
         dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
-    } */
+    }
     
     //----------------------------------
     //  moveArea Handlers
diff --git 
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as
 
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as
index 6dd32bc..d12b86b 100644
--- 
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as
+++ 
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as
@@ -36,6 +36,7 @@ import org.apache.royale.core.ValuesManager;
 import org.apache.royale.events.Event;
 import org.apache.royale.events.EventDispatcher;
 import org.apache.royale.geom.Size;
+import spark.components.SkinnableContainer;
 
 COMPILE::SWF
 {
@@ -113,6 +114,13 @@ public class SparkSkinScrollingViewport extends 
EventDispatcher implements IBead
     private function initCompleteHandler(event:Event):void
     {
         contentArea = host.skin["contentGroup"];
+        if (host is SkinnableContainer)
+        {
+            var sc:SkinnableContainer = host as SkinnableContainer;
+            if (sc.layout)
+                (contentArea as GroupBase).layout = sc.layout;       
+        }
+            
         COMPILE::JS
         {
             setScrollStyle();
@@ -140,8 +148,32 @@ public class SparkSkinScrollingViewport extends 
EventDispatcher implements IBead
     {
         if(host != contentArea)
         {
-            contentArea.percentHeight = 100;
-            contentArea.percentWidth = 100;
+            if (host is SkinnableContainer)
+            {
+                var sc:SkinnableContainer = host as SkinnableContainer;
+                if (sc.layout)
+                {
+                    if (!sc.layout.isWidthSizedToContent())
+                        contentArea.percentWidth = 100;
+                    if (!sc.layout.isHeightSizedToContent())
+                        contentArea.percentHeight = 100;
+                }
+                else
+                {
+                    if (host.isWidthSizedToContent())
+                        contentArea.percentWidth = 100;
+                    if (host.isHeightSizedToContent())
+                        contentArea.percentHeight = 100;                    
+                }
+            }
+            else
+            {
+                if (host.isWidthSizedToContent())
+                    contentArea.percentWidth = 100;
+                if (host.isHeightSizedToContent())
+                    contentArea.percentHeight = 100;
+                
+            }
             contentArea.element.style.position = "absolute";
         }
     }
diff --git 
a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/TitleWindowSkin.mxml
 
b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/TitleWindowSkin.mxml
new file mode 100644
index 0000000..e70bce7
--- /dev/null
+++ 
b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/TitleWindowSkin.mxml
@@ -0,0 +1,319 @@
+<?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 TitleWindow container.  
+
+     @see spark.skins.spark.TitleWindowCloseButtonSkin
+     @see spark.components.TitleWindow
+
+     @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.apache.org/royale/spark" 
+    blendMode="normal" mouseEnabled="false"
+    minWidth="76" minHeight="76" alpha.disabled="0.5" 
alpha.disabledWithControlBar="0.5">
+    
+    <fx:Metadata>
+        <![CDATA[ 
+        /** 
+         * @copy spark.skins.spark.ApplicationSkin#hostComponent
+         */
+        [HostComponent("spark.components.TitleWindow")]
+        ]]>
+    </fx:Metadata> 
+    
+    <!--
+    <fx:Script fb:purpose="styling">
+        <![CDATA[
+               import mx.core.FlexVersion;
+               
+               /* Define the skin elements that should not be colorized. 
+        For panel, border and title background are skinned, but the content 
area, background, border, and title text are not. */
+        static private const exclusions:Array = ["background", "titleDisplay", 
"contentGroup", "border"];
+               
+               /* exclusions before Flex 4.5 for backwards-compatibility 
purposes */
+               static private const exclusions_4_0:Array = ["background", 
"titleDisplay", "contentGroup"];
+               
+               /**
+                * @private
+                */
+               override public function get colorizeExclusions():Array 
+               {
+                       // Since border is styleable via borderColor, no need 
to allow chromeColor to affect
+                       // the border.  This is wrapped in a compatibility flag 
since this change was added  
+                       // in Flex 4.5
+                       if (FlexVersion.compatibilityVersion < 
FlexVersion.VERSION_4_5)
+                       {
+                               return exclusions_4_0;
+                       }
+                       
+                       return exclusions;
+               }
+        
+        /**
+         * @private
+         */
+        override protected function initializationComplete():void
+        {
+            useChromeColor = true;
+            super.initializationComplete();
+        }
+        
+        /**
+         * @private
+         */
+        override protected function updateDisplayList(unscaledWidth:Number, 
unscaledHeight:Number):void
+        {
+            if (getStyle("borderVisible") == true)
+            {
+                border.visible = true;
+                background.left = background.top = background.right = 
background.bottom = 1;
+                contents.left = contents.top = contents.right = 
contents.bottom = 1;
+            }
+            else
+            {
+                border.visible = false;
+                background.left = background.top = background.right = 
background.bottom = 0;
+                contents.left = contents.top = contents.right = 
contents.bottom = 0;
+            }
+            
+            dropShadow.visible = getStyle("dropShadowVisible");
+            
+            var cr:Number = getStyle("cornerRadius");
+            var withControls:Boolean = 
+                (currentState == "disabledWithControlBar" || 
+                 currentState == "normalWithControlBar" ||
+                 currentState == "inactiveWithControlBar");
+            
+            if (cornerRadius != cr)
+            {
+                cornerRadius = cr;
+                
+                dropShadow.tlRadius = cornerRadius;
+                dropShadow.trRadius = cornerRadius;
+                dropShadow.blRadius = withControls ? cornerRadius : 0;
+                dropShadow.brRadius = withControls ? cornerRadius : 0;
+                
+                setPartCornerRadii(topMaskRect, withControls); 
+                setPartCornerRadii(border, withControls); 
+                setPartCornerRadii(background, withControls);
+            }
+            
+            if (bottomMaskRect) setPartCornerRadii(bottomMaskRect, 
withControls); 
+            
+            borderStroke.color = getStyle("borderColor");
+            borderStroke.alpha = getStyle("borderAlpha");
+            backgroundFill.color = getStyle("backgroundColor");
+            backgroundFill.alpha = getStyle("backgroundAlpha");
+            
+            super.updateDisplayList(unscaledWidth, unscaledHeight);
+        }
+        
+        /**
+         * @private
+         */  
+        private function setPartCornerRadii(target:Rect, 
includeBottom:Boolean):void
+        {            
+            target.topLeftRadiusX = cornerRadius;
+            target.topRightRadiusX = cornerRadius;
+            target.bottomLeftRadiusX = includeBottom ? cornerRadius : 0;
+            target.bottomRightRadiusX = includeBottom ? cornerRadius : 0;
+        }
+        
+        private var cornerRadius:Number;
+               ]]>
+    </fx:Script>
+    -->
+    
+    <s:states>
+        <s:State name="normal" />
+        <s:State name="inactive" stateGroups="inactiveGroup" />
+        <s:State name="disabled" />
+        <s:State name="normalWithControlBar" stateGroups="withControls" />
+        <s:State name="inactiveWithControlBar" stateGroups="withControls, 
inactiveGroup" />
+        <s:State name="disabledWithControlBar" stateGroups="withControls" />
+    </s:states>
+    
+    <!--- drop shadow can't be hittable so it stays sibling of other graphics 
@private-->
+    <s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" 
alpha="0.32" 
+                             alpha.inactiveGroup="0.22" distance="11"  
distance.inactiveGroup="7"
+                             angle="90" color="0x000000" left="0" top="0" 
right="0" bottom="0"/>
+    
+    <!--- drop shadow can't be hittable so all other graphics go in this group 
-->
+    <s:Group left="0" right="0" top="0" bottom="0">
+        
+        <!--- top group mask @private-->
+        <s:Group left="1" top="1" right="1" bottom="1" id="topGroupMask">
+            <!--- @private-->
+            <s:Rect id="topMaskRect" left="0" top="0" right="0" bottom="0">
+                <s:fill>
+                    <s:SolidColor alpha="0"/>
+                </s:fill>
+            </s:Rect>
+        </s:Group>
+        
+        <!--- bottom group mask @private-->
+        <s:Group left="1" top="1" right="1" bottom="1" id="bottomGroupMask" 
+                 includeIn="withControls">
+            <!--- @private-->
+            <s:Rect id="bottomMaskRect" left="0" top="0" right="0" bottom="0">
+                <s:fill>
+                    <s:SolidColor alpha="0"/>
+                </s:fill>
+            </s:Rect>
+        </s:Group>
+        
+        <!--- layer 1: border @private -->
+        <s:Rect id="border" left="0" right="0" top="0" bottom="0" >
+            <s:stroke>
+                <!--- Defines the TitleWindowSkin class's border stroke. The 
default value is 1. -->
+                <s:SolidColorStroke id="borderStroke" weight="1" />
+            </s:stroke>
+        </s:Rect>
+        
+        <!-- layer 2: background fill -->
+        <!--- Defines the appearance of the TitleWindowSkin class's 
background. -->
+        <s:Rect id="background" left="1" top="1" right="1" bottom="1">
+            <s:fill>
+                <!--- Defines the TitleWindowSkin class's background fill. The 
default color is 0xFFFFFF. -->
+                <s:SolidColor id="backgroundFill" color="#FFFFFF"/>
+            </s:fill>
+        </s:Rect>
+        
+        <!-- layer 3: contents -->
+        <!--- Contains the vertical stack of title bar content and control 
bar. -->
+        <s:Group left="1" right="1" top="1" bottom="1" id="contents">
+            <s:layout>
+                <s:VerticalLayout gap="0" horizontalAlign="justify" />
+            </s:layout>
+            <!--- @private -->
+            <s:Group id="topGroup" mask="{topGroupMask}">
+                
+                <!--- layer 0: title bar fill @private -->
+                <s:Rect id="tbFill" left="0" right="0" top="0" bottom="1">
+                    <s:fill>
+                        <s:LinearGradient rotation="90">
+                            <s:GradientEntry color="0xD2D2D2"
+                                             color.inactiveGroup="0xEAEAEA"/>
+                            <s:GradientEntry color="0x9A9A9A"
+                                             color.inactiveGroup="0xCECECE"/>
+                        </s:LinearGradient>
+                    </s:fill>
+                </s:Rect>
+                
+                <!--- layer 1: title bar highlight @private -->
+                <s:Rect id="tbHilite" left="0" right="0" top="0" bottom="0">
+                    <s:stroke>
+                        <s:LinearGradientStroke rotation="90" weight="1">
+                            <s:GradientEntry color="0xE6E6E6" />
+                            <s:GradientEntry color="0xFFFFFF" alpha="0.22"/>
+                        </s:LinearGradientStroke>
+                    </s:stroke>
+                    <!--
+                    <s:fill>
+                        <s:LinearGradient rotation="90">
+                            <s:GradientEntry color="0xFFFFFF" alpha="0.15" />
+                            <s:GradientEntry color="0xFFFFFF" alpha="0.15" 
ratio="0.44"/>
+                            <s:GradientEntry color="0xFFFFFF" alpha="0" 
ratio="0.4401"/>
+                        </s:LinearGradient>
+                    </s:fill>
+                    -->
+                </s:Rect>
+                
+                <!--- layer 2: title bar divider @private -->
+                <s:Rect id="tbDiv" left="0" right="0" height="1" bottom="0">
+                    <s:fill>
+                        <s:SolidColor color="0x000000" alpha="0.75" />
+                    </s:fill>
+                </s:Rect>
+                
+                <!-- layer 3: text -->
+                <!--- @copy spark.components.Panel#titleDisplay -->
+                <s:Label id="titleDisplay" maxDisplayedLines="1"
+                         left="9" right="36" top="1" bottom="0" minHeight="30"
+                         verticalAlign="middle" fontWeight="bold" />
+                
+                <!-- layer 4: moveArea -->
+                <!--- @copy spark.components.TitleWindow#moveArea -->
+                <s:Group id="moveArea" left="0" right="0" top="0" bottom="0" />
+                
+                <!--- @copy spark.components.TitleWindow#closeButton
+                <s:Button id="closeButton" 
skinClass="spark.skins.spark.TitleWindowCloseButtonSkin"
+                          width="15" height="15" right="7" top="7" /> -->
+                <s:Button id="closeButton" label="X"
+                          width="15" height="15" right="7" top="7" />
+            </s:Group>
+            
+            <!--
+                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" width="100%" height="100%" minWidth="0" 
minHeight="0">
+            </s:Group>
+            
+            <!--- @private -->
+            <s:Group id="bottomGroup" minWidth="0" minHeight="0" 
+                     includeIn="withControls">  
+                
+                <s:Group left="0" right="0" top="0" bottom="0" 
mask="{bottomGroupMask}">
+
+                    <!-- layer 0: control bar divider line -->
+                    <s:Rect left="0" right="0" top="0" height="1" alpha="0.22">
+                        <s:fill>
+                            <s:SolidColor color="0x000000" />
+                        </s:fill>
+                    </s:Rect>
+                    
+                    <!-- layer 1: control bar highlight -->
+                    <s:Rect left="0" right="0" top="1" bottom="0">
+                        <s:stroke>
+                            <s:LinearGradientStroke rotation="90" weight="1">
+                                <s:GradientEntry color="0xFFFFFF" />
+                                <s:GradientEntry color="0xD8D8D8" />
+                            </s:LinearGradientStroke>
+                        </s:stroke>
+                    </s:Rect>
+                    
+                    <!-- layer 2: control bar fill -->
+                    <s:Rect left="1" right="1" top="2" bottom="1">
+                        <s:fill>
+                            <s:LinearGradient rotation="90">
+                                <s:GradientEntry color="0xEDEDED"/>
+                                <s:GradientEntry color="0xCDCDCD"/>
+                            </s:LinearGradient>
+                        </s:fill>
+                    </s:Rect>
+                </s:Group>
+                
+                <!--- @copy spark.components.Panel#controlBarGroup -->
+                <s:Group id="controlBarGroup" left="0" right="0" top="1" 
bottom="1" minWidth="0" minHeight="0">
+                    <s:layout>
+                        <s:HorizontalLayout paddingLeft="10" paddingRight="10" 
paddingTop="7" paddingBottom="7" gap="10" />
+                    </s:layout>
+                </s:Group>
+            </s:Group>
+        </s:Group>
+    </s:Group>
+</s:SparkSkin>
\ No newline at end of file

Reply via email to