This is an automated email from the ASF dual-hosted git repository.
alinakazi 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 2b4b3fe Rotate Instance added in mxRoyale
2b4b3fe is described below
commit 2b4b3fef37d6b70b4b8ce794bd1c9bb7bca08532
Author: alinakazi <[email protected]>
AuthorDate: Fri Mar 5 18:30:54 2021 +0500
Rotate Instance added in mxRoyale
---
.../MXRoyale/src/main/royale/MXRoyaleClasses.as | 3 +-
.../mx/effects/effectClasses/RotateInstance.as | 325 +++++++++++++++++++++
2 files changed, 327 insertions(+), 1 deletion(-)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index 9d66ddb..84b3df2 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -111,7 +111,8 @@ internal class MXRoyaleClasses
import mx.effects.effectClasses.ActionEffectInstance;
ActionEffectInstance;
import mx.effects.effectClasses.CompositeEffectInstance;
CompositeEffectInstance;
import mx.charts.HitData; HitData;
-
+ import mx.effects.effectClasses.RotateInstance; RotateInstance;
+
import mx.events.FlexEvent; FlexEvent;
import mx.managers.PopUpManager; PopUpManager;
import mx.core.IVisualElementContainer; IVisualElementContainer;
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/effects/effectClasses/RotateInstance.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/effectClasses/RotateInstance.as
new file mode 100644
index 0000000..d282ce9
--- /dev/null
+++
b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/effectClasses/RotateInstance.as
@@ -0,0 +1,325 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.EffectManager;
+
+// Let (phi) be angle between r=(Ox,Oy - Cx,Cy) and -X Axis.
+// (theta) be clockwise further angle of rotation.
+//
+// Xtheta = Cx - rCos(theta + phi);
+// Ytheta = Cy - rSin(theta + phi);
+//
+// Xtheta = Cx - rCos(theta)Cos(phi) + rSin(theta)Sin(phi);
+// Ytheta = Cy - rSin(theta)Cos(phi) - rCos(theta)Sin(phi);
+//
+// Now Cos(phi) = w/2r; Sin(phi) = h/2r;
+//
+// Xtheta = Cx - rCos(theta)Cos(phi) + rSin(theta)Sin(phi);
+// Ytheta = Cy - rSin(theta)Cos(phi) - rCos(theta)Sin(phi);
+//
+// Xtheta = Cx - rCos(theta)w/2r + rSin(theta)h/2r;
+// Ytheta = Cy - rSin(theta)w/2r - rCos(theta)h/2r;
+//
+// Xtheta = Cx - wCos(theta)/2 + hSin(theta)/2;
+// Ytheta = Cy - wSin(theta)/2 - hCos(theta)/2;
+//
+
+/**
+ * The RotateInstance class implements the instance class
+ * for the Rotate effect.
+ * Flex creates an instance of this class when it plays a Rotate effect;
+ * you do not create one yourself.
+ *
+ * <p>Every effect class that is a subclass of the TweenEffect class
+ * supports the following events:</p>
+ *
+ * <ul>
+ * <li><code>tweenEnd</code>: Dispatched when the tween effect ends. </li>
+ *
+ * <li><code>tweenUpdate</code>: Dispatched every time a TweenEffect
+ * class calculates a new value.</li>
+ * </ul>
+ *
+ * <p>The event object passed to the event listener for these events is of
type TweenEvent.
+ * The TweenEvent class defines the property <code>value</code>, which
contains
+ * the tween value calculated by the effect.
+ * For the Rotate effect,
+ * the <code>TweenEvent.value</code> property contains a Number between the
values of
+ * the <code>Rotate.angleFrom</code> and
+ * <code>Rotate.angleTo</code> properties.</p>
+ *
+ * @see mx.effects.Rotate
+ * @see mx.events.TweenEvent
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public class RotateInstance extends TweenEffectInstance
+{
+ //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 RotateInstance(target:Object)
+ {
+ super(target);
+ }
+
+
//--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+
//--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * The x coordinate of the absolute point of rotation.
+ */
+ private var centerX:Number;
+
+ /**
+ * @private
+ * The y coordinate of absolute point of rotation.
+ */
+ private var centerY:Number;
+
+ /**
+ * @private
+ */
+ private var newX:Number;
+
+ /**
+ * @private
+ */
+ private var newY:Number;
+
+ /**
+ * @private
+ */
+ private var originalOffsetX:Number;
+
+ /**
+ * @private
+ */
+ private var originalOffsetY:Number;
+
+
//--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+
//--------------------------------------------------------------------------
+
+ //----------------------------------
+ // angleFrom
+ //----------------------------------
+
+ [Inspectable(category="General", defaultValue="0")]
+
+ /**
+ * The starting angle of rotation of the target object,
+ * expressed in degrees.
+ * Valid values range from 0 to 360.
+ *
+ * @default 0
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var angleFrom:Number = 0;
+
+ //----------------------------------
+ // angleTo
+ //----------------------------------
+
+ [Inspectable(category="General", defaultValue="360")]
+
+ /**
+ * The ending angle of rotation of the target object,
+ * expressed in degrees.
+ * Values can be either positive or negative.
+ *
+ * <p>If the value of <code>angleTo</code> is less
+ * than the value of <code>angleFrom</code>,
+ * then the target rotates in a counterclockwise direction.
+ * Otherwise, it rotates in clockwise direction.
+ * If you want the target to rotate multiple times,
+ * set this value to a large positive or small negative number.</p>
+ *
+ * @default 360
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var angleTo:Number = 360;
+
+ //----------------------------------
+ // originY
+ //----------------------------------
+
+ /**
+ * The x-position of the center point of rotation.
+ * The target rotates around this point.
+ * The valid values are between 0 and the width of the target.
+ *
+ * @default 0
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var originX:Number;
+
+ //----------------------------------
+ // originY
+ //----------------------------------
+
+ /**
+ * The y-position of the center point of rotation.
+ * The target rotates around this point.
+ * The valid values are between 0 and the height of the target.
+ *
+ * @default 0
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var originY:Number;
+
+
//--------------------------------------------------------------------------
+ //
+ // Overridden methods
+ //
+
//--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ override public function play():void
+ {
+ super.play();
+
+ var radVal:Number = Math.PI * target.rotation / 180;
+
+ // Default to the center
+ if (isNaN(originX))
+ originX = target.width / 2;
+
+ if (isNaN(originY))
+ originY = target.height / 2;
+
+ // Find the about point
+ centerX = target.x +
+ originX * Math.cos(radVal) -
+ originY * Math.sin(radVal);
+ centerY = target.y +
+ originX * Math.sin(radVal) +
+ originY * Math.cos(radVal);
+
+ if (isNaN(angleFrom))
+ angleFrom = target.rotation;
+
+ if (isNaN(angleTo))
+ {
+ angleTo = (target.rotation == 0) ?
+ ((angleFrom > 180) ? 360 : 0) :
+ target.rotation;
+ }
+
+ tween = createTween(this, angleFrom, angleTo, duration);
+
+ target.rotation = angleFrom;
+
+ radVal = Math.PI * angleFrom/180;
+
+ //EffectManager.suspendEventHandling();
+
+ originalOffsetX = originX * Math.cos(radVal) - originY *
Math.sin(radVal);
+ originalOffsetY = originX * Math.sin(radVal) + originY *
Math.cos(radVal);
+
+ newX = Number((centerX - originalOffsetX).toFixed(1)); // use a
precision of 1
+ newY = Number((centerY - originalOffsetY).toFixed(1)); // use a
precision of 1
+
+ target.move(newX, newY);
+
+ //EffectManager.resumeEventHandling();
+ }
+
+ /**
+ * @private
+ */
+ override public function onTweenUpdate(value:Object):void
+ {
+ // If somebody else has changed our position
+ if (Math.abs(newX - target.x) > 0.1)
+ {
+ centerX = target.x + originalOffsetX;
+ }
+
+ if (Math.abs(newY - target.y) > 0.1)
+ {
+ centerY = target.y + originalOffsetY;
+ }
+
+ var rotateValue:Number = Number(value);
+ var radVal:Number = Math.PI * rotateValue / 180;
+
+ //EffectManager.suspendEventHandling();
+
+ target.rotation = rotateValue;
+
+ newX = centerX - originX * Math.cos(radVal) + originY *
Math.sin(radVal);
+ newY = centerY - originX * Math.sin(radVal) - originY *
Math.cos(radVal);
+
+ newX = Number(newX.toFixed(1)); // use a precision of 1
+ newY = Number(newY.toFixed(1)); // use a precision of 1
+
+ target.move(newX, newY);
+
+ //EffectManager.resumeEventHandling();
+ }
+}
+
+}