You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by pu...@apache.org on 2020/12/02 11:39:11 UTC
[royale-asjs] branch develop updated: Update Effect.as
This is an automated email from the ASF dual-hosted git repository.
pushminakazi 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 d97d35c Update Effect.as
d97d35c is described below
commit d97d35c2e2c400a0f7b5d2cac03a19976206247c
Author: pashminakazi <42...@users.noreply.github.com>
AuthorDate: Wed Dec 2 16:39:03 2020 +0500
Update Effect.as
---
.../MXRoyale/src/main/royale/mx/effects/Effect.as | 267 ++++++++++++++++++++-
1 file changed, 263 insertions(+), 4 deletions(-)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/effects/Effect.as b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/Effect.as
index 857cc4f..cda6919 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/effects/Effect.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/Effect.as
@@ -23,6 +23,11 @@ package mx.effects
import org.apache.royale.effects.Effect;
import mx.core.mx_internal;
use namespace mx_internal;
+import org.apache.royale.events.Event;
+import org.apache.royale.events.EventDispatcher;
+import mx.events.EffectEvent;
+import mx.effects.effectClasses.PropertyChanges;
+
/**
* Effect is the base class for effects in Royale.
*
@@ -37,7 +42,93 @@ public class Effect extends org.apache.royale.effects.Effect
{
public var instanceClass:Class = IEffectInstance;
- //--------------------------------------------------------------------------
+ public var propertyChangesArray:Array;
+ private var _instances:Array /* of EffectInstance */ = [];
+ private var effectStopped:Boolean;
+ public var filterObject:EffectTargetFilter;
+ public var startDelay:int = 0;
+
+ //--------------------------------------------------------------------------
+ //
+ // Event handlers
+ //
+ //--------------------------------------------------------------------------
+ /**
+ * This method is called when the effect instance starts playing.
+ * If you override this method, ensure that you call the super method.
+ *
+ * @param event An event object of type EffectEvent.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ protected function effectStartHandler(event:EffectEvent):void
+ {
+ dispatchEvent(event);
+ }
+ /**
+ * Called when an effect instance has stopped by a call
+ * to the <code>stop()</code> method.
+ * If you override this method, ensure that you call the super method.
+ *
+ * @param event An event object of type EffectEvent.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ protected function effectStopHandler(event:EffectEvent):void
+ {
+ dispatchEvent(event);
+ // We use this event to determine whether we should set final
+ // state values in the ensuing endHandler() call
+ effectStopped = true;
+ }
+
+ /**
+ * Called when an effect instance has finished playing.
+ * If you override this method, ensure that you call the super method.
+ *
+ * @param event An event object of type EffectEvent.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ protected function effectEndHandler(event:EffectEvent):void
+ {
+ /* if (playReversed && propertyChangesArray != null)
+ {
+ for (var j:int = 0; j < propertyChangesArray.length; ++j)
+ {
+ var tmpStart:Object = propertyChangesArray[j].start;
+ propertyChangesArray[j].start = propertyChangesArray[j].end;
+ propertyChangesArray[j].end = tmpStart;
+ }
+ }
+ var lastTime:Boolean = !_instances || _instances.length == 1;
+ // Transitions should set the end values when done
+ if (applyEndValuesWhenDone && !effectStopped && lastTime)
+ applyEndValues(propertyChangesArray, targets);
+ var instance:IEffectInstance = IEffectInstance(event.effectInstance);
+
+ deleteInstance(instance);
+
+ dispatchEvent(event);
+
+ if (lastTime)
+ {
+ propertyChangesArray = null;
+ applyEndValuesWhenDone = false;
+ } */
+ dispatchEvent(event);
+ }
+
+ //--------------------------------------------------------------------------
//
// Constructor
//
@@ -68,16 +159,89 @@ public class Effect extends org.apache.royale.effects.Effect
{
super();
- //this.target = target;
+ this.target = target;
}
public function end(effectInstance:IEffectInstance = null):void
{
}
- public function createInstance(effect:mx.effects.Effect):IEffectInstance
+ public function createInstances(targets:Array = null):Array /* of EffectInstance */
{
- return null;
+ if (!targets)
+ //targets = this.targets;
+
+ var newInstances:Array = [];
+
+ // Multiple target support
+ var n:int = targets.length;
+ var offsetDelay:Number = 0;
+
+ for (var i:int = 0; i < n; i++)
+ {
+ var newInstance:IEffectInstance = createInstance(targets[i]);
+
+ if (newInstance)
+ {
+ newInstance.startDelay += offsetDelay;
+ offsetDelay += perElementOffset;
+ newInstances.push(newInstance);
+ }
+ }
+
+ triggerEvent = null;
+
+ return newInstances;
+ }
+ //public function createInstance(effect:mx.effects.Effect):IEffectInstance
+ public function createInstance(target:Object = null):IEffectInstance
+ {
+ if (!target)
+ //target = this.target;
+
+ var newInstance:IEffectInstance = null;
+ var props:PropertyChanges = null;
+ var create:Boolean = true;
+ var setPropsArray:Boolean = false;
+
+ if (propertyChangesArray)
+ {
+ setPropsArray = true;
+ create = filterInstance(propertyChangesArray,
+ target);
+ }
+
+ if (create)
+ {
+ newInstance = IEffectInstance(new instanceClass(target));
+
+ initInstance(newInstance);
+
+ if (setPropsArray)
+ {
+ var n:int = propertyChangesArray.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ if (propertyChangesArray[i].target == target)
+ {
+ newInstance.propertyChanges =
+ propertyChangesArray[i];
+ }
+ }
+ }
+
+ EventDispatcher(newInstance).addEventListener(EffectEvent.EFFECT_START, effectStartHandler);
+ EventDispatcher(newInstance).addEventListener(EffectEvent.EFFECT_STOP, effectStopHandler);
+ EventDispatcher(newInstance).addEventListener(EffectEvent.EFFECT_END, effectEndHandler);
+
+ _instances.push(newInstance);
+
+ if (triggerEvent)
+ newInstance.initEffect(triggerEvent);
+ }
+
+ return newInstance;
+ //return null;
}
@@ -487,6 +651,101 @@ public class Effect extends org.apache.royale.effects.Effect
//}
//}
}
+
+ //----------------------------------
+ // triggerEvent
+ //----------------------------------
+ /**
+ * @private
+ * Storage for the triggerEvent property.
+ */
+ private var _triggerEvent:Event;
+
+ /**
+ * @copy mx.effects.IEffect#triggerEvent
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get triggerEvent():Event
+ {
+ return _triggerEvent;
+ }
+
+ /**
+ * @private
+ */
+ public function set triggerEvent(value:Event):void
+ {
+ _triggerEvent = value;
+ }
+ protected function filterInstance(propChanges:Array, target:Object):Boolean
+ {
+ if (filterObject)
+ return filterObject.filterInstance(propChanges, effectTargetHost, target);
+
+ return true;
+ }
+
+ //----------------------------------
+ // effectTargetHost
+ //----------------------------------
+ /**
+ * @private
+ * Storage for the effectTargetHost property.
+ */
+ private var _effectTargetHost:IEffectTargetHost;
+
+ /**
+ * @copy mx.effects.IEffect#effectTargetHost
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get effectTargetHost():IEffectTargetHost
+ {
+ return _effectTargetHost;
+ }
+ /**
+ * @private
+ */
+ public function set effectTargetHost(value:IEffectTargetHost):void
+ {
+ _effectTargetHost = value;
+ }
+
+ //----------------------------------
+ // perElementOffset
+ //----------------------------------
+ /**
+ * @private
+ * Storage for the perElementOffset property.
+ */
+ private var _perElementOffset:Number = 0;
+ [Inspectable(defaultValue="0", category="General", verbose="0", minValue="0.0")]
+ /**
+ * @copy mx.effects.IEffect#perElementOffset
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get perElementOffset():Number
+ {
+ return _perElementOffset;
+ }
+ /**
+ * @private
+ */
+ public function set perElementOffset(value:Number):void
+ {
+ _perElementOffset = value;
+ }
}
}