This is an automated email from the ASF dual-hosted git repository.
piotrz 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 0a3955b SparkRoyale: Add implementation of attachSkin which helps
initialize properly components uses SkinnableComponent class to init skin
0a3955b is described below
commit 0a3955b4da689cf3ecbdcde5d5e131dd5ccd4806
Author: pzarzycki <[email protected]>
AuthorDate: Thu Dec 17 18:41:04 2020 +0000
SparkRoyale: Add implementation of attachSkin which helps initialize
properly components uses SkinnableComponent class to init skin
ViewPort shouldn't add skin if it's already created
---
.../spark/components/beads/SparkSkinViewport.as | 5 +-
.../supportClasses/SkinnableComponent.as | 67 +++++++++++++++++++++-
2 files changed, 70 insertions(+), 2 deletions(-)
diff --git
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as
index b5dc6df..b8af175 100644
---
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as
+++
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as
@@ -96,7 +96,10 @@ public class SparkSkinViewport extends EventDispatcher
implements IBead, IViewpo
var c:Class = ValuesManager.valuesImpl.getValue(value, "skinClass") as
Class;
if (c)
{
- host.setSkin(new c());
+ if (!host.skin)
+ {
+ host.setSkin(new c());
+ }
host.skin.addEventListener("initComplete", initCompleteHandler);
contentArea = host.skin; // temporary assigment so that
SkinnableXXContainer.addElement can add the skin
}
diff --git
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableComponent.as
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableComponent.as
index b7083f2..19f5caa 100644
---
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableComponent.as
+++
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableComponent.as
@@ -296,7 +296,72 @@ public class SkinnableComponent extends UIComponent
invalidateSkinState();
dispatchEvent(new Event("skinChanged"));
}
-
+
+ /**
+ * Create the skin for the component.
+ * You do not call this method directly.
+ * Flex calls it automatically when it calls
<code>createChildren()</code> or
+ * the <code>UIComponent.commitProperties()</code> method.
+ * Typically, a subclass of SkinnableComponent does not override this
method.
+ *
+ * <p>This method instantiates the skin for the component,
+ * adds the skin as a child of the component, and
+ * resolves all part associations for the skin</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ protected function attachSkin():void
+ {
+ // Class
+ if (!skin)
+ {
+ var skinClass:Class = getStyle("skinClass") as Class;
+
+ if (skinClass)
+ setSkin( new skinClass() );
+ }
+
+ if (skin)
+ {
+ // skin.owner = this;
+
+ // As a convenience if someone has declared hostComponent
+ // we assign a reference to ourselves. If the hostComponent
+ // property exists as a direct result of utilizing [HostComponent]
+ // metadata it will be strongly typed. We need to do more work
+ // here and only assign if the type exactly matches our component
+ // type.
+ if ("hostComponent" in skin)
+ {
+ try
+ {
+ Object(skin).hostComponent = this;
+ }
+ catch (err:Error) {}
+ }
+
+ // the skin's styles should be the same as the components
+ // skin.styleName = this;
+
+ // Note: The Spark PanelAccImpl adds a child Sprite at index 0.
+ // The skin should be in front of that.
+ super.addChild(skin);
+
+ //skin.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,
skin_propertyChangeHandler);
+ }
+ else
+ {
+ // throw(new Error(resourceManager.getString("components",
"skinNotFound", [this])));
+ }
+
+ findSkinParts();
+
+ invalidateSkinState();
+ }
+
/**
* @private
*