diff --git a/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs b/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs index 97af33c3e2..52a8fb5ab7 100644 --- a/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs +++ b/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs @@ -9,7 +9,6 @@ namespace Avalonia.Rendering.Utilities { private readonly Size _imageSize; private readonly Rect _drawRect; - private readonly Vector _dpi; public bool IsValid { get; } @@ -19,7 +18,7 @@ namespace Avalonia.Rendering.Utilities /// The brush to be rendered. /// The size of the content of the tile brush. /// The size of the control to which the brush is being rendered. - public TileBrushCalculator(ITileBrush brush, Size contentSize, Size targetSize, Vector dpi) + public TileBrushCalculator(ITileBrush brush, Size contentSize, Size targetSize) : this( brush.TileMode, brush.Stretch, @@ -28,8 +27,7 @@ namespace Avalonia.Rendering.Utilities brush.SourceRect, brush.DestinationRect, contentSize, - targetSize, - dpi) + targetSize) { } @@ -52,14 +50,12 @@ namespace Avalonia.Rendering.Utilities RelativeRect sourceRect, RelativeRect destinationRect, Size contentSize, - Size targetSize, - Vector dpi) + Size targetSize) { _imageSize = contentSize; - _dpi = dpi; - SourceRect = sourceRect.ToPixels(_imageSize) * (_dpi / 96); - DestinationRect = destinationRect.ToPixels(targetSize) * (dpi / 96); + SourceRect = sourceRect.ToPixels(_imageSize); + DestinationRect = destinationRect.ToPixels(targetSize); var scale = stretch.CalculateScaling(DestinationRect.Size, SourceRect.Size); var translate = CalculateTranslate(alignmentX, alignmentY, SourceRect, DestinationRect, scale); diff --git a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs index 6c2a88af17..2ca2a77fb8 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs @@ -20,8 +20,9 @@ namespace Avalonia.Direct2D1.Media BitmapImpl bitmap, Size targetSize) { - var calc = new TileBrushCalculator(brush, bitmap.PixelSize.ToSize(96), targetSize, new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height)); - + var dpi = new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height); + var calc = new TileBrushCalculator(brush, bitmap.PixelSize.ToSize(dpi), targetSize); + if (!calc.NeedsIntermediate) { _bitmap = bitmap.GetDirect2DBitmap(target); diff --git a/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png new file mode 100644 index 0000000000..7e674b849a Binary files /dev/null and b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png differ diff --git a/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png new file mode 100644 index 0000000000..f80ac7f90d Binary files /dev/null and b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png differ diff --git a/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png new file mode 100644 index 0000000000..7e674b849a Binary files /dev/null and b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png differ diff --git a/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png new file mode 100644 index 0000000000..f80ac7f90d Binary files /dev/null and b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png differ