TileBrushCalculatorTests.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using Avalonia.Controls;
  2. using Avalonia.Media;
  3. using Avalonia.Rendering.Utilities;
  4. using Xunit;
  5. namespace Avalonia.Base.UnitTests.Rendering.Utilities
  6. {
  7. public class TileBrushCalculatorTests
  8. {
  9. [Fact]
  10. public void NoTile_Fill_1x()
  11. {
  12. var result = new TileBrushCalculator(
  13. TileMode.None,
  14. Stretch.Fill,
  15. AlignmentX.Center,
  16. AlignmentY.Center,
  17. RelativeRect.Fill,
  18. RelativeRect.Fill,
  19. new Size(100, 100),
  20. new Size(100, 100));
  21. Assert.False(result.NeedsIntermediate);
  22. Assert.Equal(new Rect(0, 0, 100, 100), result.SourceRect);
  23. Assert.Equal(new Rect(0, 0, 100, 100), result.DestinationRect);
  24. }
  25. [Fact]
  26. public void NoTile_Fill_2x()
  27. {
  28. var result = new TileBrushCalculator(
  29. TileMode.None,
  30. Stretch.Fill,
  31. AlignmentX.Center,
  32. AlignmentY.Center,
  33. RelativeRect.Fill,
  34. RelativeRect.Fill,
  35. new Size(100, 100),
  36. new Size(200, 200));
  37. // TODO: This doesn't need an intermediate render target.
  38. Assert.True(result.NeedsIntermediate);
  39. Assert.Equal(new Rect(0, 0, 100, 100), result.SourceRect);
  40. Assert.Equal(new Rect(0, 0, 200, 200), result.DestinationRect);
  41. }
  42. [Fact]
  43. public void NoTile_Uniform_CenterHoriz()
  44. {
  45. var result = new TileBrushCalculator(
  46. TileMode.None,
  47. Stretch.Uniform,
  48. AlignmentX.Center,
  49. AlignmentY.Center,
  50. RelativeRect.Fill,
  51. RelativeRect.Fill,
  52. new Size(100, 100),
  53. new Size(200, 100));
  54. Assert.True(result.NeedsIntermediate);
  55. Assert.Equal(new Rect(0, 0, 100, 100), result.SourceRect);
  56. Assert.Equal(new Rect(0, 0, 200, 100), result.DestinationRect);
  57. Assert.Equal(new Size(200, 100), result.IntermediateSize);
  58. Assert.Equal(Matrix.CreateTranslation(50, 0), result.IntermediateTransform);
  59. }
  60. [Fact]
  61. public void NoTile_Uniform_CenterVert()
  62. {
  63. var result = new TileBrushCalculator(
  64. TileMode.None,
  65. Stretch.Uniform,
  66. AlignmentX.Center,
  67. AlignmentY.Center,
  68. RelativeRect.Fill,
  69. RelativeRect.Fill,
  70. new Size(100, 100),
  71. new Size(100, 200));
  72. Assert.True(result.NeedsIntermediate);
  73. Assert.Equal(new Rect(0, 0, 100, 100), result.SourceRect);
  74. Assert.Equal(new Rect(0, 0, 100, 200), result.DestinationRect);
  75. Assert.Equal(new Size(100, 200), result.IntermediateSize);
  76. Assert.Equal(Matrix.CreateTranslation(0, 50), result.IntermediateTransform);
  77. }
  78. [Fact]
  79. public void NoTile_NoStretch_BottomRightQuarterDest()
  80. {
  81. var result = new TileBrushCalculator(
  82. TileMode.None,
  83. Stretch.None,
  84. AlignmentX.Center,
  85. AlignmentY.Center,
  86. RelativeRect.Fill,
  87. new RelativeRect(0.5, 0.5, 0.5, 0.5, RelativeUnit.Relative),
  88. new Size(800, 800),
  89. new Size(400, 400));
  90. Assert.True(result.NeedsIntermediate);
  91. Assert.Equal(new Rect(0, 0, 800, 800), result.SourceRect);
  92. Assert.Equal(new Rect(200, 200, 200, 200), result.DestinationRect);
  93. Assert.Equal(new Size(400, 400), result.IntermediateSize);
  94. Assert.Equal(new Rect(200, 200, 200, 200), result.IntermediateClip);
  95. Assert.Equal(Matrix.CreateTranslation(-100, -100), result.IntermediateTransform);
  96. }
  97. [Fact]
  98. public void Tile_NoStretch_BottomRightQuarterSource_CenterQuarterDest()
  99. {
  100. var result = new TileBrushCalculator(
  101. TileMode.Tile,
  102. Stretch.None,
  103. AlignmentX.Center,
  104. AlignmentY.Center,
  105. new RelativeRect(0.5, 0.5, 0.5, 0.5, RelativeUnit.Relative),
  106. new RelativeRect(0.25, 0.25, 0.5, 0.5, RelativeUnit.Relative),
  107. new Size(800, 800),
  108. new Size(400, 400));
  109. var b = new VisualBrush
  110. {
  111. TileMode = TileMode.Tile,
  112. Stretch = Stretch.None,
  113. SourceRect = new RelativeRect(0.5, 0.5, 0.5, 0.5, RelativeUnit.Relative),
  114. DestinationRect = new RelativeRect(0.25, 0.25, 0.5, 0.5, RelativeUnit.Relative),
  115. Visual = new Border { Width = 400, Height = 400 },
  116. };
  117. Assert.True(result.NeedsIntermediate);
  118. Assert.Equal(new Rect(400, 400, 400, 400), result.SourceRect);
  119. Assert.Equal(new Rect(100, 100, 200, 200), result.DestinationRect);
  120. Assert.Equal(new Size(200, 200), result.IntermediateSize);
  121. Assert.Equal(new Rect(0, 0, 200, 200), result.IntermediateClip);
  122. Assert.Equal(Matrix.CreateTranslation(-500, -500), result.IntermediateTransform);
  123. }
  124. }
  125. }