Browse Source

Fix tile mode used in SkShader for a TileBrush with None TileMode (#16021)

* add cross test for tile brush with None tile mode

* use Decal skshader tile mode for tile brush tilemode None
pull/16028/head
Emmanuel Hansen 2 years ago
committed by GitHub
parent
commit
e8c3bf593f
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  2. 32
      tests/Avalonia.RenderTests/CrossTests/Brushes/CrossTileBrushTests.cs
  3. BIN
      tests/TestFiles/CrossTests/Media/TileBrushes/Should_Render_TileBrush_With_TileMode_None.wpf.png

8
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -1072,14 +1072,14 @@ namespace Avalonia.Skia
SKShaderTileMode tileX =
tileBrush.TileMode == TileMode.None
? SKShaderTileMode.Clamp
? SKShaderTileMode.Decal
: tileBrush.TileMode == TileMode.FlipX || tileBrush.TileMode == TileMode.FlipXY
? SKShaderTileMode.Mirror
: SKShaderTileMode.Repeat;
SKShaderTileMode tileY =
tileBrush.TileMode == TileMode.None
? SKShaderTileMode.Clamp
? SKShaderTileMode.Decal
: tileBrush.TileMode == TileMode.FlipY || tileBrush.TileMode == TileMode.FlipXY
? SKShaderTileMode.Mirror
: SKShaderTileMode.Repeat;
@ -1225,14 +1225,14 @@ namespace Avalonia.Skia
SKShaderTileMode tileX =
tileBrush.TileMode == TileMode.None
? SKShaderTileMode.Clamp
? SKShaderTileMode.Decal
: tileBrush.TileMode == TileMode.FlipX || tileBrush.TileMode == TileMode.FlipXY
? SKShaderTileMode.Mirror
: SKShaderTileMode.Repeat;
SKShaderTileMode tileY =
tileBrush.TileMode == TileMode.None
? SKShaderTileMode.Clamp
? SKShaderTileMode.Decal
: tileBrush.TileMode == TileMode.FlipY || tileBrush.TileMode == TileMode.FlipXY
? SKShaderTileMode.Mirror
: SKShaderTileMode.Repeat;

32
tests/Avalonia.RenderTests/CrossTests/Brushes/CrossTileBrushTests.cs

@ -108,6 +108,38 @@ public class CrossTileBrushTests : CrossTestBase
}
[CrossFact]
public void Should_Render_TileBrush_With_TileMode_None()
{
var brush = new CrossDrawingBrush
{
TileMode = TileMode.None,
Stretch = Stretch.Fill,
Viewbox = new Rect(0, 0, 50, 50),
ViewboxUnits = BrushMappingMode.Absolute,
Viewport = new Rect(0, 0, 50, 50),
ViewportUnits = BrushMappingMode.Absolute,
Drawing = new CrossDrawingGroup()
{
Children = new List<CrossDrawing>()
{
new CrossGeometryDrawing(new CrossRectangleGeometry(new(0, 0, 50, 50)))
{
Brush = new CrossSolidColorBrush(Colors.Crimson)
},
}
}
};
RenderAndCompare(new CrossControl()
{
Width = 200,
Height = 200,
Background = brush
});
}
[CrossFact]
public void Should_Render_With_Transform()
{

BIN
tests/TestFiles/CrossTests/Media/TileBrushes/Should_Render_TileBrush_With_TileMode_None.wpf.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Loading…
Cancel
Save