Browse Source

Fixed rectangle chunk graident glitch

Krzysztof Krysiński 1 month ago
parent
commit
bcde59c530

+ 3 - 2
src/ChunkyImageLib/Operations/EllipseOperation.cs

@@ -107,6 +107,7 @@ internal class EllipseOperation : IMirroredDrawOperation
         paint.IsAntiAliased = false;
         paint.IsAntiAliased = false;
         if (strokeWidth - 1 < 0.01)
         if (strokeWidth - 1 < 0.01)
         {
         {
+            // TODO: Fix for strokewidth = 1 and gradient fill
             if (Math.Abs(rotation) < 0.001 && strokeWidth > 0)
             if (Math.Abs(rotation) < 0.001 && strokeWidth > 0)
             {
             {
                 if (fillPaintable.AnythingVisible || paint.BlendMode != BlendMode.SrcOver)
                 if (fillPaintable.AnythingVisible || paint.BlendMode != BlendMode.SrcOver)
@@ -151,14 +152,14 @@ internal class EllipseOperation : IMirroredDrawOperation
                 surf.Canvas.Save();
                 surf.Canvas.Save();
                 surf.Canvas.RotateRadians((float)rotation, (float)location.Center.X, (float)location.Center.Y);
                 surf.Canvas.RotateRadians((float)rotation, (float)location.Center.X, (float)location.Center.Y);
                 surf.Canvas.ClipPath(innerPath!);
                 surf.Canvas.ClipPath(innerPath!);
-                surf.Canvas.DrawPaintable(fillPaintable, paint.BlendMode);
+                surf.Canvas.DrawPaintable(fillPaintable, paint.BlendMode, location);
                 surf.Canvas.Restore();
                 surf.Canvas.Restore();
             }
             }
             surf.Canvas.Save();
             surf.Canvas.Save();
             surf.Canvas.RotateRadians((float)rotation, (float)location.Center.X, (float)location.Center.Y);
             surf.Canvas.RotateRadians((float)rotation, (float)location.Center.X, (float)location.Center.Y);
             surf.Canvas.ClipPath(outerPath!);
             surf.Canvas.ClipPath(outerPath!);
             surf.Canvas.ClipPath(innerPath!, ClipOperation.Difference);
             surf.Canvas.ClipPath(innerPath!, ClipOperation.Difference);
-            surf.Canvas.DrawPaintable(strokePaintable, paint.BlendMode);
+            surf.Canvas.DrawPaintable(strokePaintable, paint.BlendMode, location);
             surf.Canvas.Restore();
             surf.Canvas.Restore();
         }
         }
     }
     }

+ 5 - 3
src/ChunkyImageLib/Operations/RectangleOperation.cs

@@ -1,7 +1,9 @@
 using ChunkyImageLib.DataHolders;
 using ChunkyImageLib.DataHolders;
+using Drawie.Backend.Core.ColorsImpl.Paintables;
 using Drawie.Backend.Core.Numerics;
 using Drawie.Backend.Core.Numerics;
 using Drawie.Backend.Core.Surfaces;
 using Drawie.Backend.Core.Surfaces;
 using Drawie.Backend.Core.Surfaces.PaintImpl;
 using Drawie.Backend.Core.Surfaces.PaintImpl;
+using Drawie.Backend.Core.Utils;
 using Drawie.Numerics;
 using Drawie.Numerics;
 
 
 namespace ChunkyImageLib.Operations;
 namespace ChunkyImageLib.Operations;
@@ -70,7 +72,7 @@ internal class RectangleOperation : IMirroredDrawOperation
                 surf.Canvas.ClipRoundRect(innerRect, vecInnerRadius, ClipOperation.Intersect);
                 surf.Canvas.ClipRoundRect(innerRect, vecInnerRadius, ClipOperation.Intersect);
             }
             }
 
 
-            surf.Canvas.DrawPaintable(Data.FillPaintable, Data.BlendMode);
+            surf.Canvas.DrawPaintable(Data.FillPaintable, Data.BlendMode, rect);
             surf.Canvas.RestoreToCount(saved);
             surf.Canvas.RestoreToCount(saved);
         }
         }
 
 
@@ -88,7 +90,7 @@ internal class RectangleOperation : IMirroredDrawOperation
             surf.Canvas.ClipRoundRect(innerRect, vecInnerRadius, ClipOperation.Difference);
             surf.Canvas.ClipRoundRect(innerRect, vecInnerRadius, ClipOperation.Difference);
         }
         }
 
 
-        surf.Canvas.DrawPaintable(Data.Stroke, Data.BlendMode);
+        surf.Canvas.DrawPaintable(Data.Stroke, Data.BlendMode, rect);
     }
     }
 
 
     private void DrawAntiAliased(DrawingSurface surf, RectD rect, double radius)
     private void DrawAntiAliased(DrawingSurface surf, RectD rect, double radius)
@@ -121,7 +123,7 @@ internal class RectangleOperation : IMirroredDrawOperation
             {
             {
                 if (hasStroke)
                 if (hasStroke)
                 {
                 {
-                    surf.Canvas.DrawPaintable(Data.FillPaintable, Data.BlendMode);
+                    surf.Canvas.DrawPaintable(Data.FillPaintable, Data.BlendMode, fillRect);
                 }
                 }
                 else
                 else
                 {
                 {

+ 1 - 1
src/Drawie

@@ -1 +1 @@
-Subproject commit adfaa90105229e3183e3049276af982f3e5b1b5d
+Subproject commit 84ebee1bbe671cd8141456e3886e225ef36446d6