Browse Source

Fix TransformOrigin for brushes (#15037)

pull/15049/head
Benedikt Stebner 2 years ago
committed by GitHub
parent
commit
4f8f46cb5d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  2. 5
      src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
  3. 31
      tests/Avalonia.RenderTests/Media/ImageBrushTests.cs
  4. BIN
      tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Should_Render_With_TransformOrigin.expected.png
  5. BIN
      tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_Should_Render_With_TransformOrigin.expected.png

5
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -1158,7 +1158,10 @@ namespace Avalonia.Skia
if (content.Transform is not null) if (content.Transform is not null)
{ {
transform = content.Transform.Value * transform; var transformOrigin = content.TransformOrigin.ToPixels(targetRect);
var offset = Matrix.CreateTranslation(transformOrigin);
transform *= -offset * content.Transform.Value * offset;
} }
var calc = new TileBrushCalculator(tileBrush, contentSize, targetRect.Size); var calc = new TileBrushCalculator(tileBrush, contentSize, targetRect.Size);

5
src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs

@ -625,7 +625,10 @@ namespace Avalonia.Direct2D1.Media
if (sceneBrush?.Transform is not null) if (sceneBrush?.Transform is not null)
{ {
ctx.Transform *= sceneBrush.Transform.Value; var transformOrigin = sceneBrushContent.TransformOrigin.ToPixels(rect);
var offset = Matrix.CreateTranslation(transformOrigin);
ctx.Transform = -offset * sceneBrush.Transform.Value * offset;
} }
sceneBrushContent.Render(ctx, sceneBrushContent.Render(ctx,

31
tests/Avalonia.RenderTests/Media/ImageBrushTests.cs

@ -490,5 +490,36 @@ namespace Avalonia.Direct2D1.RenderTests.Media
CompareImages(); CompareImages();
} }
[Fact]
public async Task ImageBrush_Should_Render_With_TransformOrigin()
{
var image = new Image
{
Width = 200,
Height = 200,
Source = new DrawingImage
{
Drawing = new GeometryDrawing
{
Brush = new DrawingBrush
{
Transform = new RotateTransform(45),
TransformOrigin = new RelativePoint(.5,.5, RelativeUnit.Relative),
Drawing = new GeometryDrawing
{
Brush = Brushes.MediumBlue,
Geometry = new RectangleGeometry { Rect = new Rect(0, 0, 48, 48) }
}
},
Geometry = new RectangleGeometry { Rect = new Rect(0, 0, 48, 48) }
}
}
};
await RenderToFile(image);
CompareImages();
}
} }
} }

BIN
tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Should_Render_With_TransformOrigin.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 917 B

BIN
tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_Should_Render_With_TransformOrigin.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Loading…
Cancel
Save