Browse Source

Fix rectangle drawing

Equbuxu 3 years ago
parent
commit
a8542cebc4
1 changed files with 6 additions and 3 deletions
  1. 6 3
      src/ChunkyImageLib/Operations/RectangleOperation.cs

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

@@ -20,13 +20,16 @@ internal record class RectangleOperation : IDrawOperation
         // use a clipping rectangle with 2x stroke width to make sure stroke doesn't stick outside rect bounds
         // use a clipping rectangle with 2x stroke width to make sure stroke doesn't stick outside rect bounds
         skiaSurf.Canvas.Save();
         skiaSurf.Canvas.Save();
 
 
-        var convertedPos = OperationHelper.ConvertForResolution(Data.Center - Data.Size / 2, chunk.Resolution);
+        var convertedPos = OperationHelper.ConvertForResolution(-Data.Size / 2, chunk.Resolution);
+        var convertedCenter = OperationHelper.ConvertForResolution(Data.Center, chunk.Resolution) - chunkPos.Multiply(chunk.PixelSize);
+
         var convertedSize = OperationHelper.ConvertForResolution(Data.Size, chunk.Resolution);
         var convertedSize = OperationHelper.ConvertForResolution(Data.Size, chunk.Resolution);
         int convertedStroke = (int)Math.Round(chunk.Resolution.Multiplier() * Data.StrokeWidth);
         int convertedStroke = (int)Math.Round(chunk.Resolution.Multiplier() * Data.StrokeWidth);
 
 
-        var rect = SKRect.Create((SKPoint)(convertedPos - chunkPos.Multiply(chunk.PixelSize)), (SKSize)convertedSize);
+        var rect = SKRect.Create((SKPoint)convertedPos, (SKSize)convertedSize);
 
 
-        skiaSurf.Canvas.RotateRadians((float)Data.Angle, (float)Data.Center.X, (float)Data.Center.Y);
+        skiaSurf.Canvas.Translate((SKPoint)convertedCenter);
+        skiaSurf.Canvas.RotateRadians((float)Data.Angle);
         skiaSurf.Canvas.ClipRect(rect);
         skiaSurf.Canvas.ClipRect(rect);
 
 
         // draw fill
         // draw fill