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