This is an automated email from the ASF dual-hosted git repository.

alinakazi pushed a commit to branch feature/MXRoyale
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/feature/MXRoyale by this push:
     new d7b964a  LinearGradientStroke.as Added
d7b964a is described below

commit d7b964ac6a4b9957f6755c63b3ed9df48ed00de8
Author: alinakazi <alinakazi1...@gmail.com>
AuthorDate: Thu May 3 16:04:02 2018 +0500

    LinearGradientStroke.as Added
---
 .../royale/mx/graphics/LinearGradientStroke.as     | 393 +++++++++++++++++++++
 1 file changed, 393 insertions(+)

diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/graphics/LinearGradientStroke.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/graphics/LinearGradientStroke.as
new file mode 100644
index 0000000..eddea72
--- /dev/null
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/graphics/LinearGradientStroke.as
@@ -0,0 +1,393 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.graphics
+{
+ 
+/* import flash.display.GradientType;
+import flash.display.Graphics;
+import flash.display.GraphicsGradientFill;
+import flash.display.GraphicsStroke;
+import flash.geom.Matrix;
+import flash.geom.Point;
+import flash.geom.Rectangle;
+ */
+import org.apache.royale.graphics.GradientBase;
+import mx.core.mx_internal;
+
+use namespace mx_internal; 
+
+/**
+ *  The LinearGradientStroke class lets you specify a gradient filled stroke.
+ *  You use the LinearGradientStroke class, along with the GradientEntry class,
+ *  to define a gradient stroke.
+ *  
+ *  @see mx.graphics.Stroke
+ *  @see mx.graphics.GradientEntry
+ *  @see mx.graphics.RadialGradient 
+ *  @see flash.display.Graphics
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class LinearGradientStroke extends GradientBase
+{      /* extends GradientStroke */
+    //include "../core/Version.as";
+
+    
//--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    
//--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @param weight Specifies the line weight, in pixels.
+     *  This parameter is optional,
+     *  with a default value of <code>1</code>. 
+     *
+     *  @param pixelHinting A Boolean value that specifies
+     *  whether to hint strokes to full pixels.
+     *  This affects both the position of anchors of a curve
+     *  and the line stroke size itself.
+     *  With <code>pixelHinting</code> set to <code>true</code>,
+     *  Flash Player and AIR hint line widths to full pixel widths.
+     *  With <code>pixelHinting</code> set to <code>false</code>,
+     *  disjoints can  appear for curves and straight lines. 
+     *  This parameter is optional,
+     *  with a default value of <code>false</code>. 
+     *
+     *  @param scaleMode A value from the LineScaleMode class
+     *  that specifies which scale mode to use.
+     *  Valid values are <code>LineScaleMode.HORIZONTAL</code>,
+     *  <code>LineScaleMode.NONE</code>, <code>LineScaleMode.NORMAL</code>,
+     *  and <code>LineScaleMode.VERTICAL</code>.
+     *  This parameter is optional,
+     *  with a default value of <code>LineScaleMode.NONE</code>. 
+     *
+     *  @param caps A value from the CapsStyle class
+     *  that specifies the type of caps at the end of lines.
+     *  Valid values are <code>CapsStyle.NONE</code>,
+     *  <code>CapsStyle.ROUND</code>, and <code>CapsStyle.SQUARE</code>.
+     *  A <code>null</code> value is equivalent to
+     *  <code>CapsStyle.ROUND</code>.
+     *  This parameter is optional,
+     *  with a default value of <code>CapsStyle.ROUND</code>. 
+     *
+     *  @param joints A value from the JointStyle class
+     *  that specifies the type of joint appearance used at angles.
+     *  Valid values are <code>JointStyle.BEVEL</code>,
+     *  <code>JointStyle.MITER</code>, and <code>JointStyle.ROUND</code>.
+     *  A <code>null</code> value is equivalent to
+     *  <code>JointStyle.ROUND</code>.
+     *  This parameter is optional,
+     *  with a default value of <code>JointStyle.ROUND</code>. 
+     *
+     *  @param miterLimit A number that indicates the limit
+     *  at which a miter is cut off. 
+     *  Valid values range from 1 to 255
+     *  (and values outside of that range are rounded to 1 or 255). 
+     *  This value is only used if the <code>jointStyle</code> property 
+     *  is set to <code>miter</code>.
+     *  The <code>miterLimit</code> value represents the length that a miter
+     *  can extend beyond the point at which the lines meet to form a joint.
+     *  The value expresses a factor of the line <code>thickness</code>.
+     *  For example, with a <code>miterLimit</code> factor of 2.5 and a 
+     *  <code>thickness</code> of 10 pixels, the miter is cut off at 25 
pixels. 
+     *  This parameter is optional,
+     *  with a default value of <code>3</code>.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function LinearGradientStroke(weight:Number = 1,
+                                         pixelHinting:Boolean = false,
+                                         scaleMode:String = "normal",
+                                         caps:String = "round",
+                                         joints:String = "round",
+                                         miterLimit:Number = 3)
+    {
+       // super(weight, pixelHinting, scaleMode, caps, joints, miterLimit);
+    }
+
+       
+       //----------------------------------
+    //  weight copied from GradientStroke
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the weight property.
+     */
+    private var _weight:Number;
+
+    [Bindable("propertyChange")]
+    [Inspectable(category="General", minValue="0.0")]
+
+    /**
+     *  The stroke weight, in pixels.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get weight():Number
+    {
+        return _weight;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set weight(value:Number):void
+    {
+        var oldValue:Number = _weight;
+        if (value != oldValue)
+        {
+            _weight = value;
+            
+          //  dispatchGradientChangedEvent("weight", oldValue, value);
+        }
+    }
+       
+    /**
+     *  @private
+     */
+   // private static var commonMatrix:Matrix = new Matrix();
+    
+    
//--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    
//--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  matrix
+    //----------------------------------
+    
+    /**
+     *  @private
+     */
+   /*  override public function set matrix(value:Matrix):void
+    {
+        scaleX = NaN;
+        super.matrix = value;
+    } */
+
+    //----------------------------------
+    //  scaleX
+    //----------------------------------
+    
+  /*   private var _scaleX:Number;
+    
+    [Bindable("propertyChange")]
+    [Inspectable(category="General")]
+     */
+    /**
+     *  The horizontal scale of the gradient transform, which defines the 
width of the (unrotated) gradient
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+   /*  public function get scaleX():Number
+    {
+        return compoundTransform ? compoundTransform.scaleX : _scaleX;
+    } */
+    
+    /**
+     *  @private
+     */
+   /*  public function set scaleX(value:Number):void
+    {
+        if (value != scaleX)
+        {
+            var oldValue:Number = scaleX;
+            
+            if (compoundTransform)
+            {
+                // If we have a compoundTransform, only non-NaN values are 
allowed
+                if (!isNaN(value))
+                    compoundTransform.scaleX = value;
+            }
+            else
+            {
+                _scaleX = value;
+            }
+            dispatchGradientChangedEvent("scaleX", oldValue, value);
+        }
+    }    */  
+    
+    
//--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    
//--------------------------------------------------------------------------
+
+    /**
+     *  @inheritDoc
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+   /*  override public function apply(graphics:Graphics, 
targetBounds:Rectangle, targetOrigin:Point):void
+    {
+        commonMatrix.identity();
+        
+        graphics.lineStyle(weight, 0, 1, pixelHinting, scaleMode,
+                    caps, joints, miterLimit);
+        
+        if (targetBounds)
+            calculateTransformationMatrix(targetBounds, commonMatrix, 
targetOrigin); 
+        
+        graphics.lineGradientStyle(GradientType.LINEAR, colors,
+                            alphas, ratios,
+                            commonMatrix, spreadMethod,
+                            interpolationMethod);                        
+    } */
+    
+    /**
+     *  @private
+     */
+   /*  override public function createGraphicsStroke(targetBounds:Rectangle, 
targetOrigin:Point):GraphicsStroke
+    {
+        // The parent class sets the gradient stroke properties common to 
+        // LinearGradientStroke and RadialGradientStroke 
+        var graphicsStroke:GraphicsStroke = 
super.createGraphicsStroke(targetBounds, targetOrigin); 
+        
+        if (graphicsStroke)
+        {
+            // Set other properties specific to this LinearGradientStroke  
+            GraphicsGradientFill(graphicsStroke.fill).type = 
GradientType.LINEAR; 
+            calculateTransformationMatrix(targetBounds, commonMatrix, 
targetOrigin);
+            GraphicsGradientFill(graphicsStroke.fill).matrix = commonMatrix; 
+        }
+        
+        return graphicsStroke; 
+    } */
+    
+    /**
+     *  @private
+     *  Calculates this LinearGradientStroke's transformation matrix.  
+     */
+    /* private function calculateTransformationMatrix(targetBounds:Rectangle, 
matrix:Matrix, targetOrigin:Point):void
+    {        
+        matrix.identity();
+        
+        if (!compoundTransform)
+        {
+            var tx:Number = x;
+            var ty:Number = y;
+            var length:Number = scaleX;
+            
+            if (isNaN(length))
+            {
+                // Figure out the two sides
+                if (rotation % 90 != 0)
+                {           
+                    // Normalize angles with absolute value > 360 
+                    var normalizedAngle:Number = rotation % 360;
+                    // Normalize negative angles
+                    if (normalizedAngle < 0)
+                        normalizedAngle += 360;
+                    
+                    // Angles wrap at 180
+                    normalizedAngle %= 180;
+                    
+                    // Angles > 90 get mirrored
+                    if (normalizedAngle > 90)
+                        normalizedAngle = 180 - normalizedAngle;
+                    
+                    var side:Number = targetBounds.width;
+                    // Get the hypotenuse of the largest triangle that can fit 
in the bounds
+                    var hypotenuse:Number = Math.sqrt(targetBounds.width * 
targetBounds.width + targetBounds.height * targetBounds.height);
+                    // Get the angle of that largest triangle
+                    var hypotenuseAngle:Number =  Math.acos(targetBounds.width 
/ hypotenuse) * 180 / Math.PI;
+                    
+                    // If the angle is larger than the hypotenuse angle, then 
use the height 
+                    // as the adjacent side of the triangle
+                    if (normalizedAngle > hypotenuseAngle)
+                    {
+                        normalizedAngle = 90 - normalizedAngle;
+                        side = targetBounds.height;
+                    }
+                    
+                    // Solve for the hypotenuse given an adjacent side and an 
angle. 
+                    length = side / Math.cos(normalizedAngle / 180 * Math.PI);
+                }
+                else 
+                {
+                    // Use either width or height based on the rotation
+                    length = (rotation % 180) == 0 ? targetBounds.width : 
targetBounds.height;
+                }
+            }
+            
+            // If only x or y is defined, force the other to be set to 0
+            if (!isNaN(tx) && isNaN(ty))
+                ty = 0;
+            else if (isNaN(tx) && !isNaN(ty))
+                tx = 0;
+            
+            // If x and y are specified, then move the gradient so that the
+            // top left corner is at 0,0
+            if (!isNaN(tx) && !isNaN(ty))
+                matrix.translate(GRADIENT_DIMENSION / 2, GRADIENT_DIMENSION / 
2); // 1638.4 / 2
+            
+            // Force the length to a absolute minimum of 2. Values of 0, 1, or 
-1 have undesired behavior   
+            if (length >= 0 && length < 2)
+                length = 2;
+            else if (length < 0 && length > -2)
+                length = -2;
+            
+            // Scale the gradient in the x direction. The natural size is 
1638.4px. No need
+            // to scale the y direction because it is infinite
+            matrix.scale (length / GRADIENT_DIMENSION, 1 / GRADIENT_DIMENSION);
+            
+            matrix.rotate (!isNaN(_angle) ? _angle : rotationInRadians);
+            if (isNaN(tx))
+                tx = targetBounds.left + targetBounds.width / 2;
+            else
+                tx += targetOrigin.x;
+            if (isNaN(ty))
+                ty = targetBounds.top + targetBounds.height / 2;
+            else
+                ty += targetOrigin.y;
+            matrix.translate(tx, ty);   
+        }
+        else
+        {
+            matrix.translate(GRADIENT_DIMENSION / 2, GRADIENT_DIMENSION / 2);
+            matrix.scale(1 / GRADIENT_DIMENSION, 1 / GRADIENT_DIMENSION);
+            matrix.concat(compoundTransform.matrix);
+            matrix.translate(targetOrigin.x, targetOrigin.y);
+        }               
+    } */
+    
+}
+
+}

-- 
To stop receiving notification emails like this one, please contact
alinak...@apache.org.

Reply via email to