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 2021/01/03 17:02:47 UTC

[royale-asjs] 02/02: An initial implementation of spark Line

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

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

commit 2597ac62dd8d33c824f62d53191304ef796544f0
Author: Yishay Weiss <yi...@hotmail.com>
AuthorDate: Sun Jan 3 19:02:27 2021 +0200

    An initial implementation of spark Line
---
 .../royale/core/StatesWithTransitionsImpl.as       |  2 +
 .../src/main/royale/spark/primitives/Line.as       | 96 ++++++++++++++++------
 2 files changed, 71 insertions(+), 27 deletions(-)

diff --git a/frameworks/projects/Effects/src/main/royale/org/apache/royale/core/StatesWithTransitionsImpl.as b/frameworks/projects/Effects/src/main/royale/org/apache/royale/core/StatesWithTransitionsImpl.as
index 686ebac..587435a 100644
--- a/frameworks/projects/Effects/src/main/royale/org/apache/royale/core/StatesWithTransitionsImpl.as
+++ b/frameworks/projects/Effects/src/main/royale/org/apache/royale/core/StatesWithTransitionsImpl.as
@@ -74,6 +74,8 @@ package org.apache.royale.core
 	     */
 	    private static const PSEUDONYMS:Object =
 	    {
+	        width: "explicitWidth",
+	        height: "explicitHeight",
 	        currentState: "currentStateDeferred"
 	    };
         
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Line.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Line.as
index 9431814..0b6249d 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Line.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Line.as
@@ -28,9 +28,9 @@ import flash.geom.Rectangle;
 
 import spark.primitives.supportClasses.StrokedElement; */
 import org.apache.royale.events.EventDispatcher;
-import org.apache.royale.geom.Rectangle;
 import mx.core.mx_internal;
 import mx.graphics.IStroke;
+import mx.graphics.SolidColorStroke;
 import mx.graphics.IFill;
 import mx.core.UIComponent;
 import mx.display.Graphics;
@@ -87,7 +87,7 @@ public class Line extends UIComponent
     //  xFrom
     //----------------------------------
 
-    private var _xFrom:Number = 0;
+    private var _xFrom:Number;
     
     [Inspectable(category="General")]
 
@@ -124,7 +124,7 @@ public class Line extends UIComponent
     //  xTo
     //----------------------------------
 
-    private var _xTo:Number = 0;
+    private var _xTo:Number;
     
     [Inspectable(category="General")]
 
@@ -161,7 +161,7 @@ public class Line extends UIComponent
     //  yFrom
     //----------------------------------
 
-    private var _yFrom:Number = 0;
+    private var _yFrom:Number;
     
     [Inspectable(category="General")]
 
@@ -198,7 +198,7 @@ public class Line extends UIComponent
     //  yTo
     //----------------------------------
 
-    private var _yTo:Number = 0;
+    private var _yTo:Number;
     
     [Inspectable(category="General")]
 
@@ -260,13 +260,21 @@ public class Line extends UIComponent
      *  @playerversion AIR 1.5
      *  @productversion Royale 0.9.4
      */
-    /* override protected function measure():void
+    private var realXFrom:Number;
+    private var realXTo:Number;
+    private var realYFrom:Number;
+    private var realYTo:Number;
+    private var measuredWidth:Number;
+    private var measuredHeight:Number;
+    private var measuredX:Number;
+    private var measuredY:Number;
+    override protected function measure():void
     {
-        measuredWidth = Math.abs(xFrom - xTo);
-        measuredHeight = Math.abs(yFrom - yTo);
-        measuredX = Math.min(xFrom, xTo);
-        measuredY = Math.min(yFrom, yTo);
-    } */
+        measuredWidth = Math.abs(realXFrom - realXTo);
+        measuredHeight = Math.abs(realYFrom - realYTo);
+        measuredX = Math.min(realXFrom, realXTo);
+        measuredY = Math.min(realYFrom, realYTo);
+    }
 
     /**
      * @private 
@@ -297,16 +305,17 @@ public class Line extends UIComponent
      *  @playerversion AIR 1.5
      *  @productversion Royale 0.9.4
      */
-   /*  override protected function draw(g:Graphics):void
+    //  override protected function draw(g:Graphics):void
+    protected function draw(g:Graphics):void
     {
         // Our bounding box is (x1, y1, x2, y2)
-        var x1:Number = measuredX + drawX;
-        var y1:Number = measuredY + drawY;
-        var x2:Number = measuredX + drawX + width;
-        var y2:Number = measuredY + drawY + height;    
+        var x1:Number = measuredX;
+        var y1:Number = measuredY;
+        var x2:Number = measuredX + width;
+        var y2:Number = measuredY + height;    
         
         // Which way should we draw the line?
-        if ((xFrom <= xTo) == (yFrom <= yTo))
+        if ((realXFrom <= realXTo) == (realYFrom <= realYTo))
         { 
             // top-left to bottom-right
             g.moveTo(x1, y1);
@@ -318,7 +327,7 @@ public class Line extends UIComponent
             g.moveTo(x1, y2);
             g.lineTo(x2, y1);
         }
-    } */
+    }
 	
 	
 	
@@ -393,18 +402,51 @@ public class Line extends UIComponent
     override protected function updateDisplayList(unscaledWidth:Number,
                                                   unscaledHeight:Number):void
     {
-	    // TODO use lineTo instead of drawRect()
         super.updateDisplayList(unscaledWidth,unscaledHeight);
         var g:Graphics = graphics;
-        g.clear();
-        
-        if (stroke)
-            stroke.apply(g, new Rectangle(0, 0, unscaledWidth, 1), null);
-        
-        g.drawRect(0, 0, unscaledWidth, unscaledHeight);
+        if (stroke is SolidColorStroke)
+	{
+		var solidColorStroke:SolidColorStroke = stroke as SolidColorStroke;
+		g.lineStyle(solidColorStroke.weight, solidColorStroke.color, solidColorStroke.alpha);
+		g.clear();
+		if (!isNaN(_xFrom) && !isNaN(_yFrom) && !isNaN(_xTo) && !isNaN(_yTo) )
+		{
+			realXFrom = _xFrom;
+			realYFrom = _yFrom;
+			realXTo = _xTo;
+			realYTo = _yTo;
+		} else
+		{
+			var hasWidth:Boolean =  !isNaN(unscaledWidth) && unscaledWidth > 0;
+			var hasHeight:Boolean =  !isNaN(unscaledHeight) && unscaledHeight > 0;
+			if (hasWidth || hasHeight)
+			{
+				var isDiagonal:Boolean = hasWidth && hasHeight;
+				if (isDiagonal)
+				{
+					realXFrom = isNaN(right) ? 0 : unscaledWidth;
+					realXTo = isNaN(right) ? unscaledWidth : 0;
+					realYFrom = 0;
+					realYTo = unscaledHeight;
+				} else
+				{
+					realXFrom = 0;
+					realYFrom = 0;
+					realXTo = hasWidth ? unscaledWidth : 0;
+					realYTo = hasHeight ? unscaledHeight : 0;
+				}
+			} else
+			{
+				return;
+			}
+		}
+		measure();
+		draw(g);
+		width = Math.max(width, solidColorStroke.weight);
+		height = Math.max(height, solidColorStroke.weight);
+		g.endStroke();
+	}
     }
 
-	
 }
-
 }