Benedikt Stebner
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with
39 additions and
2 deletions
-
src/Skia/Avalonia.Skia/DrawingContextImpl.cs
-
src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
-
tests/Avalonia.RenderTests/Media/ImageBrushTests.cs
-
BIN
tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Should_Render_With_TransformOrigin.expected.png
-
BIN
tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_Should_Render_With_TransformOrigin.expected.png
|
|
@ -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); |
|
|
|
|
|
@ -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, |
|
|
|
|
|
@ -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(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
Width:
|
Height:
|
Size: 917 B
|
Width:
|
Height:
|
Size: 1.4 KiB
|