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

gregdove 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 0758c3b479 Fix for out of range radius values when drawing rounded 
rectangles
0758c3b479 is described below

commit 0758c3b4792615faf6860e841a396ba9e89b5e77
Author: greg-dove <[email protected]>
AuthorDate: Mon Jan 15 09:46:13 2024 +1300

    Fix for out of range radius values when drawing rounded rectangles
---
 .../org/apache/royale/graphics/PathBuilder.as      | 63 ++++++++++++----------
 1 file changed, 36 insertions(+), 27 deletions(-)

diff --git 
a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/graphics/PathBuilder.as
 
b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/graphics/PathBuilder.as
index 7569526292..7a3f44d602 100644
--- 
a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/graphics/PathBuilder.as
+++ 
b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/graphics/PathBuilder.as
@@ -200,17 +200,16 @@ package org.apache.royale.graphics
                                                     topLeftRadius:Number, 
topRightRadius:Number, 
                                                     bottomLeftRadius:Number, 
bottomRightRadius:Number):void
         {
-            var b:Array = [];
             var xw:Number = x + width;
             var yh:Number = y + height;
             
-            // Make sure none of the radius values are greater than w/h.
+            // Make sure none of the radius values are exceeding the minimum 
of w/2 and h/2
             // These are all inlined to avoid function calling overhead
-            var minSize:Number = width < height ? width * 2 : height * 2;
-            topLeftRadius = topLeftRadius < minSize ? topLeftRadius : minSize;
-            topRightRadius = topRightRadius < minSize ? topRightRadius : 
minSize;
-            bottomLeftRadius = bottomLeftRadius < minSize ? bottomLeftRadius : 
minSize;
-            bottomRightRadius = bottomRightRadius < minSize ? 
bottomRightRadius : minSize;
+            var maxSize:Number = width < height ? width * 0.5 : height * 0.5;
+            topLeftRadius = topLeftRadius <= maxSize ? topLeftRadius : maxSize;
+            topRightRadius = topRightRadius <= maxSize ? topRightRadius : 
maxSize;
+            bottomLeftRadius = bottomLeftRadius <= maxSize ? bottomLeftRadius 
: maxSize;
+            bottomRightRadius = bottomRightRadius <= maxSize ? 
bottomRightRadius : maxSize;
             
             // Math.sin and Math,tan values for optimal performance.
             // Math.rad = Math.PI / 180 = 0.0174532925199433
@@ -221,33 +220,43 @@ package org.apache.royale.graphics
             // 1.0 - 0.707106781186547 = 0.292893218813453 and
             // 1.0 - 0.414213562373095 = 0.585786437626905
             
-            // bottom-right corner
-            var a:Number = bottomRightRadius * 0.292893218813453;       // 
radius - anchor pt;
-            var s:Number = bottomRightRadius * 0.585786437626905;   // radius 
- control pt;
+            var a:Number;   // radius - anchor pt;
+            var s:Number;   // radius - control pt;
             commands.push(new MoveTo(xw, yh - bottomRightRadius));
-            commands.push(new QuadraticCurve(xw, yh - s, xw - a, yh - a));
-            commands.push(new QuadraticCurve(xw - s, yh, xw - 
bottomRightRadius, yh));
+            if (bottomRightRadius) {
+                // bottom-right corner
+                a = bottomRightRadius * 0.292893218813453;
+                s = bottomRightRadius * 0.585786437626905;
+                commands.push(new QuadraticCurve(xw, yh - s, xw - a, yh - a));
+                commands.push(new QuadraticCurve(xw - s, yh, xw - 
bottomRightRadius, yh));
+            }
             
-            // bottom-left corner
-            a = bottomLeftRadius * 0.292893218813453;
-            s = bottomLeftRadius * 0.585786437626905;
             commands.push(new LineTo(x + bottomLeftRadius, yh));
-            commands.push(new QuadraticCurve(x + s, yh, x + a, yh - a));
-            commands.push(new QuadraticCurve(x, yh - s, x, yh - 
bottomLeftRadius));
+            if (bottomLeftRadius) {
+                // bottom-left corner
+                a = bottomLeftRadius * 0.292893218813453;
+                s = bottomLeftRadius * 0.585786437626905;
+                commands.push(new QuadraticCurve(x + s, yh, x + a, yh - a));
+                commands.push(new QuadraticCurve(x, yh - s, x, yh - 
bottomLeftRadius));
+            }
             
-            // top-left corner
-            a = topLeftRadius * 0.292893218813453;
-            s = topLeftRadius * 0.585786437626905;
             commands.push(new LineTo(x, y + topLeftRadius));
-            commands.push(new QuadraticCurve(x, y + s, x + a, y + a));
-            commands.push(new QuadraticCurve(x + s, y, x + topLeftRadius, y));
+            if (topLeftRadius) {
+                // top-left corner
+                a = topLeftRadius * 0.292893218813453;
+                s = topLeftRadius * 0.585786437626905;
+                commands.push(new QuadraticCurve(x, y + s, x + a, y + a));
+                commands.push(new QuadraticCurve(x + s, y, x + topLeftRadius, 
y));
+            }
             
-            // top-right corner
-            a = topRightRadius * 0.292893218813453;
-            s = topRightRadius * 0.585786437626905;
             commands.push(new LineTo(xw - topRightRadius, y));
-            commands.push(new QuadraticCurve(xw - s, y, xw - a, y + a));
-            commands.push(new QuadraticCurve(xw, y + s, xw, y + 
topRightRadius));
+            if (topRightRadius) {
+                // top-right corner
+                a = topRightRadius * 0.292893218813453;
+                s = topRightRadius * 0.585786437626905;
+                commands.push(new QuadraticCurve(xw - s, y, xw - a, y + a));
+                commands.push(new QuadraticCurve(xw, y + s, xw, y + 
topRightRadius));
+            }
             commands.push(new LineTo(xw, yh - bottomRightRadius));
         }
         /**

Reply via email to