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 2020/09/26 17:48:20 UTC
[royale-asjs] 02/02: Adding SetAction
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 dd88c5c1831fa282dce80fd9ed0f1f252c2fe673
Author: Yishay Weiss <yi...@yell.com>
AuthorDate: Sat Sep 26 18:47:56 2020 +0100
Adding SetAction
---
.../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 +
.../effects/effectClasses/ActionEffectInstance.as | 157 +++++++++++++
.../src/main/royale/SparkRoyaleClasses.as | 2 +-
.../effects/supportClasses/SetActionInstance.as | 257 +++++++++++++++++++++
4 files changed, 416 insertions(+), 1 deletion(-)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index 57be249..daf563c 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -103,6 +103,7 @@ internal class MXRoyaleClasses
import mx.controls.advancedDataGridClasses.DataItemRendererFactoryForICollectionViewAdvancedDataGridData; DataItemRendererFactoryForICollectionViewAdvancedDataGridData;
import mx.charts.chartClasses.RenderData; RenderData;
import mx.effects.EffectInstance; EffectInstance;
+ import mx.effects.effectClasses.ActionEffectInstance; ActionEffectInstance;
import mx.effects.effectClasses.CompositeEffectInstance; CompositeEffectInstance;
import mx.charts.HitData; HitData;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/effects/effectClasses/ActionEffectInstance.as b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/effectClasses/ActionEffectInstance.as
new file mode 100644
index 0000000..3e5d535
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/effectClasses/ActionEffectInstance.as
@@ -0,0 +1,157 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.effects.effectClasses
+{
+
+import mx.core.mx_internal;
+import mx.effects.EffectInstance;
+
+use namespace mx_internal;
+
+/**
+ * The ActionEffectInstance class is the superclass for all
+ * action effect instance classes.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public class ActionEffectInstance extends EffectInstance
+{
+ //include "../../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @param target The Object to animate with this effect.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function ActionEffectInstance(target:Object)
+ {
+ super(target);
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Indicates whether the effect has been played (<code>true</code>),
+ * or not (<code>false</code>).
+ *
+ * <p>The <code>play()</code> method sets this property to
+ * <code>true</code> after the effect plays;
+ * you do not set it directly.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ protected var playedAction:Boolean = false;
+
+ /**
+ * @private
+ */
+ private var _startValue:*;
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Subclasses implement this method to save the starting state
+ * before the effect plays.
+ *
+ * @return Returns the starting state value.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ protected function saveStartValue():*
+ {
+ }
+
+ /**
+ * Returns the starting state value that was saved by the
+ * <code>saveStartValue()</code> method.
+ *
+ * @return Returns the starting state value.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ protected function getStartValue():*
+ {
+ return _startValue;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ override public function play():void
+ {
+ super.play();
+
+ // Don't save the value if we are playing in reverse.
+ if (!playReversed)
+ _startValue = saveStartValue();
+
+ playedAction = true;
+ }
+
+ /**
+ * @private
+ */
+ override public function end():void
+ {
+ if (!playedAction)
+ play();
+
+ super.end();
+ }
+}
+
+}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
index e643b18..11ad053 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
@@ -110,7 +110,7 @@ import spark.components.supportClasses.ButtonBarHorizontalLayout; ButtonBarHoriz
import spark.effects.AnimateColor; AnimateColor; // needed
import spark.effects.Fade; Fade;
import spark.effects.Resize; Resize; // needed
-//import spark.effects.SetAction; SetAction; // needed
+import spark.effects.SetAction; SetAction; // needed
import spark.effects.easing.IEaser; IEaser;
//import spark.effects.easing.Power; Power; // needed
//import spark.events.TitleWindowBoundsEvent; TitleWindowBoundsEvent; // needed
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/effects/supportClasses/SetActionInstance.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/effects/supportClasses/SetActionInstance.as
new file mode 100644
index 0000000..a3151ff
--- /dev/null
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/effects/supportClasses/SetActionInstance.as
@@ -0,0 +1,257 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package spark.effects.supportClasses
+{
+
+import mx.core.IFlexModule;
+import mx.core.IFlexModuleFactory;
+import mx.core.mx_internal;
+
+import mx.effects.effectClasses.ActionEffectInstance;
+import mx.styles.StyleManager;
+
+use namespace mx_internal;
+
+/**
+ * The SetActionInstance class implements the instance class
+ * for the SetAction effect.
+ * Flex creates an instance of this class when it plays a SetAction
+ * effect; you do not create one yourself.
+ *
+ * @see spark.effects.SetAction
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+public class SetActionInstance extends ActionEffectInstance
+{
+ //include "../../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @param target The Object to animate with this effect.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ public function SetActionInstance(target:Object)
+ {
+ super(target);
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // property
+ //----------------------------------
+
+ /**
+ * @copy spark.effects.SetAction#property
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ public var property:String;
+
+ //----------------------------------
+ // value
+ //----------------------------------
+
+ /**
+ * Storage for the value property.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ private var _value:*;
+
+ /**
+ * @copy spark.effects.SetAction#value
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ public function get value():*
+ {
+ var val:*;
+
+ if (playReversed)
+ {
+ val = getStartValue();
+ if (val !== undefined)
+ return val;
+ }
+
+ return _value;
+ }
+
+ /**
+ * @private
+ */
+ public function set value(val:*):void
+ {
+ _value = val;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ override public function play():void
+ {
+ // Dispatch an effectStart event from the target.
+ super.play();
+
+ if (value === undefined && propertyChanges)
+ {
+ if (property in propertyChanges.end &&
+ propertyChanges.start[property] != propertyChanges.end[property])
+ value = propertyChanges.end[property];
+ }
+
+ if (value !== undefined)
+ setValue(property, value);
+
+ //finishRepeat();
+ }
+
+ /**
+ * Sets <code>property</code> to the value specified by
+ * <code>value</code>. This is done by setting the property
+ * on the target if it is a property or the style on the target
+ * if it is a style. There are some special cases handled
+ * for specific property types such as percent-based width/height
+ * and string-based color values.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ private function setValue(property:String, value:Object):void
+ {
+ var isStyle:Boolean = false;
+ var propName:String = property;
+ var val:Object = value;
+
+ // Handle special case of width/height values being set in terms
+ // of percentages. These are handled through the percentWidth/Height
+ // properties instead
+ if (property == "width" || property == "height")
+ {
+ if (value is String && value.indexOf("%") >= 0)
+ {
+ propName = property == "width" ? "percentWidth" : "percentHeight";
+ val = val.slice(0, val.indexOf("%"));
+ }
+ }
+ else
+ {
+ var currentVal:Object = getValue(propName);
+ // Handle situation of turning strings into Boolean values
+ if (currentVal is Boolean)
+ {
+ if (val is String)
+ val = (value.toLowerCase() == "true");
+ }
+ // Handle turning standard string representations of colors
+ // into numberic values
+ else if (currentVal is Number &&
+ propName.toLowerCase().indexOf("color") != -1)
+ {
+ var moduleFactory:IFlexModuleFactory = null;
+ if (target is IFlexModule)
+ moduleFactory = target.moduleFactory;
+
+ //val = StyleManager.getStyleManager(moduleFactory).getColorName(value);
+ val = "dummy";
+ }
+ }
+
+ if (propName in target)
+ target[propName] = val;
+ else
+ target.setStyle(propName, val);
+ }
+
+ /**
+ * Gets the current value of propName, whether it is a
+ * property or a style on the target.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ private function getValue(propName:String):*
+ {
+ if (propName in target)
+ return target[propName];
+ else
+ return target.getStyle(propName);
+ }
+
+ /**
+ * @private
+ */
+ override protected function saveStartValue():*
+ {
+ if (property != null)
+ {
+ try
+ {
+ return getValue(property);
+ }
+ catch(e:Error)
+ {
+ // Do nothing. Let us return undefined.
+ }
+ }
+ return undefined;
+ }
+}
+
+}