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;
+    }
 }
 
 }