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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with
36 additions and
4 deletions
-
src/Skia/Avalonia.Skia/DrawingContextImpl.cs
-
tests/Avalonia.RenderTests/CrossTests/Brushes/CrossTileBrushTests.cs
-
BIN
tests/TestFiles/CrossTests/Media/TileBrushes/Should_Render_TileBrush_With_TileMode_None.wpf.png
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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() |
|
|
|
{ |
|
|
|
|
Width:
|
Height:
|
Size: 398 B
|