Browse Source

Fix TransformOrigin for brushes (#15037)

release/11.1.0-beta2
Benedikt Stebner 2 years ago
committed by Max Katz
parent
commit
a135b8f0a3
  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

@ -1152,7 +1152,10 @@ namespace Avalonia.Skia
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);

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

@ -624,7 +624,10 @@ namespace Avalonia.Direct2D1.Media
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,

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

@ -490,5 +490,36 @@ namespace Avalonia.Direct2D1.RenderTests.Media
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