Browse Source

Fix DPI in ImageBrushImpl.

And add expected output for tests. D2D now passes, skia still renders incorrectly.
pull/2115/head
Steven Kirk 7 years ago
parent
commit
eecd3555f9
  1. 14
      src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs
  2. 5
      src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
  3. BIN
      tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png
  4. BIN
      tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png
  5. BIN
      tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png
  6. BIN
      tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png

14
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
/// <param name="brush">The brush to be rendered.</param>
/// <param name="contentSize">The size of the content of the tile brush.</param>
/// <param name="targetSize">The size of the control to which the brush is being rendered.</param>
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);

5
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);

BIN
tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

BIN
tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 B

BIN
tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

BIN
tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 B

Loading…
Cancel
Save