You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2018/01/02 09:05:40 UTC
[royale-asjs] 02/04: First version where mask bead takes over an
existing element and turns it into a mssk
This is an automated email from the ASF dual-hosted git repository.
yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 8016941c9708e8a110a928657d4652fa60e622a2
Author: DESKTOP-RH4S838\Yishay <yi...@hotmail.com>
AuthorDate: Mon Jan 1 14:02:27 2018 +0200
First version where mask bead takes over an existing element and turns it into a mssk
---
.../main/royale/org/apache/royale/core/IUIBase.as | 13 ++
.../main/royale/org/apache/royale/svg/MaskBead.as | 136 +++++----------------
...nvert New Flex Project to Royale Project.launch | 10 +-
3 files changed, 49 insertions(+), 110 deletions(-)
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as
index 565d118..eb1f607 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as
@@ -122,5 +122,18 @@ package org.apache.royale.core
* @productversion Royale 0.0
*/
function get topMostEventDispatcher():IEventDispatcher;
+ /**
+ * Set positioner of IUIBase. This can be useful for beads such as MaskBead
+ * that change the parent element after it's been drawn.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9
+ * all input events.
+ *
+ */
+ COMPILE::JS
+ function set positioner(value:WrappedHTMLElement):void;
}
}
diff --git a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/svg/MaskBead.as b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/svg/MaskBead.as
index e9b0367..8c8bc96 100644
--- a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/svg/MaskBead.as
+++ b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/svg/MaskBead.as
@@ -22,25 +22,23 @@ package org.apache.royale.svg
import org.apache.royale.core.IBead;
import org.apache.royale.core.IRenderedObject;
import org.apache.royale.core.IStrand;
- import org.apache.royale.graphics.PathBuilder;
COMPILE::SWF {
- import flash.display.Graphics;
- import flash.display.Sprite;
- import flash.display.DisplayObject;
+ import flash.display.Graphics;
+ import flash.display.Sprite;
+ import flash.display.DisplayObject;
}
- COMPILE::JS
- {
- import org.apache.royale.utils.UIDUtil;
- }
+ COMPILE::JS
+ {
+ import org.apache.royale.utils.UIDUtil;
+ import org.apache.royale.core.IUIBase;
+ import org.apache.royale.core.WrappedHTMLElement;
+ import org.apache.royale.core.IRenderedObject;
+ }
/**
- * The MaskBead bead allows you to mask
- * a graphic Shape using a an mask graphic path.
- * The clipping path is defined in the path property
- * using a PathBuilder object. This Bead will not
- * work on the JS side side on components which are not implemented
- * using SVG.
+ * The MaskBead transforms an IUIBase element into a mask definition
+ * and contains methods to attach an existing element to this mask definition.
*
* @langversion 3.0
* @playerversion Flash 10.2
@@ -50,7 +48,6 @@ package org.apache.royale.svg
public class MaskBead implements IBead
{
private var _strand:IStrand;
- private var _path:PathBuilder;
private var document:Object;
private var maskElementId:String;
@@ -58,20 +55,11 @@ package org.apache.royale.svg
{
}
- public function get path():PathBuilder
- {
- return _path;
- }
-
- public function set path(value:PathBuilder):void
- {
- _path = value;
- mask();
- }
-
/**
* @copy org.apache.royale.core.IBead#strand
- *
+ * @royaleignorecoercion Element
+ * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
+ *
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
@@ -79,89 +67,27 @@ package org.apache.royale.svg
*/
public function set strand(value:IStrand):void
{
- _strand = value;
- if (path)
- {
- mask();
- }
- }
-
- COMPILE::SWF
- private function mask():void
- {
- if (!path)
- {
- return;
- }
- var element:DisplayObject = host.$displayObject as DisplayObject;
- var mask:Sprite = new Sprite();
- var g:Graphics = mask.graphics;
- g.beginFill(0);
- path.draw(g);
- g.endFill();
- // remove existing mask from display list
- if (element.mask && element.mask.parent)
- {
- element.mask.parent.removeChild(element.mask);
- }
- // add new mask to display list
- if (element.parent)
- {
- element.parent.addChild(mask);
- }
- // set mask
- mask.x = element.x;
- mask.y = element.y;
-// element.mask = mask;
- }
- /**
- * @royaleignorecoercion Element
- * @royaleignorecoercion Object
- */
- COMPILE::JS
- private function mask():void
- {
- if (!path || !host)
+ COMPILE::JS
{
- return;
- }
- var svgElement:Node = host.element as Element;
- var defs:Element = getChildNode(svgElement, "defs") as Element;
- var maskElement:Element = getChildNode(defs, "mask") as Element;
- maskElementId = maskElement.id = "myMask" + UIDUtil.createUID();
- // clean up existing mask paths
- if (maskElement.hasChildNodes())
- {
- var childNodes:Object = maskElement.childNodes;
+ _strand = value;
+ var currentPositioner:Element = (value as IRenderedObject).element as Element;
+ var myPositioner:Element = createChildNode(currentPositioner, "defs") as Element;
+ myPositioner = createChildNode(myPositioner, "mask") as Element;
+ maskElementId = myPositioner.id = "myMask" + UIDUtil.createUID();
+ (value as IUIBase).positioner = myPositioner as WrappedHTMLElement;
+ // this helps retains width and height
+ myPositioner.setAttribute('style', currentPositioner.getAttribute('style'));
+ // move children to new positioner
+ var childNodes:Object = currentPositioner.childNodes;
for (var i:int = 0; i < childNodes.length; i++)
{
- maskElement.removeChild(childNodes[i]);
- }
- }
- // create pathNode
- var pathNode:Element = createChildNode(maskElement, "path") as Element;
- pathNode.setAttribute("d", path.getPathString());
- // set style
-// host.element.style["mask"] = "url(#" + maskElement.id + ")";
- }
-
- COMPILE::JS
- private function getChildNode(node:Node, tagName:String):Node
- {
- if (!node.hasChildNodes())
- {
- return createChildNode(node, tagName);
- }
- var childNodes:Object = node.childNodes;
- for (var i:int = 0; i < childNodes.length; i++)
- {
- if (childNodes[i].tagName == tagName)
- {
- return childNodes[i];
+ var childNode:Element = childNodes[i] as Element;
+ if (childNode.tagName != "defs")
+ {
+ myPositioner.appendChild(childNode);
+ }
}
-
}
- return createChildNode(node, tagName);
}
COMPILE::JS
diff --git a/ide/flashbuilder/Convert New Flex Project to Royale Project.launch b/ide/flashbuilder/Convert New Flex Project to Royale Project.launch
index bc98d70..20218c9 100644
--- a/ide/flashbuilder/Convert New Flex Project to Royale Project.launch
+++ b/ide/flashbuilder/Convert New Flex Project to Royale Project.launch
@@ -21,17 +21,17 @@
<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="true"/>
<listAttribute key='org.eclipse.debug.ui.favoriteGroups'>
<listEntry value='org.eclipse.ui.externaltools.launchGroup'/>
-</listAttribute><listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"/>
+</listAttribute><listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_UNIX_UNIX_UNIX_PATHS"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"/>
<mapAttribute key="org.eclipse.debug.core.environmentVariables">
-<mapEntry key="PATH" value="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"/>
+<mapEntry key="UNIX_UNIX_UNIX_PATH" value="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"/>
</mapAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSUNIX_UNIX_UNIX_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.ant.internal.launching.remote.InternalAntRunner"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value=""/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_UNIX_UNIX_UNIX_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_HIDE_INTERNAL_TARGETS" value="true"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="$ROYALE_HOME/ide/flashbuilder/antscripts.xml"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="C:/dev/flexjs/royale-asjs/ide/flashbuilder/antscripts.xml"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-DprojectDir="${project_loc}""/>
<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/>
</launchConfiguration>
--
To stop receiving notification emails like this one, please contact
"commits@royale.apache.org" <co...@royale.apache.org>.