RenderTests_Culling.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using Moq;
  4. using Avalonia.Controls;
  5. using Avalonia.Media;
  6. using Avalonia.Rendering;
  7. using Xunit;
  8. namespace Avalonia.Visuals.UnitTests
  9. {
  10. public class RenderTests_Culling
  11. {
  12. [Fact]
  13. public void In_Bounds_Control_Should_Be_Rendered()
  14. {
  15. TestControl target;
  16. var container = new Canvas
  17. {
  18. Width = 100,
  19. Height = 100,
  20. ClipToBounds = true,
  21. Children = new Controls.Controls
  22. {
  23. (target = new TestControl
  24. {
  25. Width = 10,
  26. Height = 10,
  27. [Canvas.LeftProperty] = 98,
  28. [Canvas.TopProperty] = 98,
  29. })
  30. }
  31. };
  32. Render(container);
  33. Assert.True(target.Rendered);
  34. }
  35. [Fact]
  36. public void Out_Of_Bounds_Control_Should_Not_Be_Rendered()
  37. {
  38. TestControl target;
  39. var container = new Canvas
  40. {
  41. Width = 100,
  42. Height = 100,
  43. ClipToBounds = true,
  44. Children = new Controls.Controls
  45. {
  46. (target = new TestControl
  47. {
  48. Width = 10,
  49. Height = 10,
  50. ClipToBounds = true,
  51. [Canvas.LeftProperty] = 110,
  52. [Canvas.TopProperty] = 110,
  53. })
  54. }
  55. };
  56. Render(container);
  57. Assert.False(target.Rendered);
  58. }
  59. [Fact]
  60. public void Out_Of_Bounds_Child_Control_Should_Not_Be_Rendered()
  61. {
  62. TestControl target;
  63. var container = new Canvas
  64. {
  65. Width = 100,
  66. Height = 100,
  67. ClipToBounds = true,
  68. Children = new Controls.Controls
  69. {
  70. new Canvas
  71. {
  72. Width = 100,
  73. Height = 100,
  74. [Canvas.LeftProperty] = 50,
  75. [Canvas.TopProperty] = 50,
  76. Children = new Controls.Controls
  77. {
  78. (target = new TestControl
  79. {
  80. Width = 10,
  81. Height = 10,
  82. ClipToBounds = true,
  83. [Canvas.LeftProperty] = 50,
  84. [Canvas.TopProperty] = 50,
  85. })
  86. }
  87. }
  88. }
  89. };
  90. Render(container);
  91. Assert.False(target.Rendered);
  92. }
  93. [Fact]
  94. public void RenderTransform_Should_Be_Respected()
  95. {
  96. TestControl target;
  97. var container = new Canvas
  98. {
  99. Width = 100,
  100. Height = 100,
  101. ClipToBounds = true,
  102. Children = new Controls.Controls
  103. {
  104. (target = new TestControl
  105. {
  106. Width = 10,
  107. Height = 10,
  108. [Canvas.LeftProperty] = 110,
  109. [Canvas.TopProperty] = 110,
  110. RenderTransform = new TranslateTransform(-100, -100),
  111. })
  112. }
  113. };
  114. Render(container);
  115. Assert.True(target.Rendered);
  116. }
  117. [Fact]
  118. public void Negative_Margin_Should_Be_Respected()
  119. {
  120. TestControl target;
  121. var container = new Canvas
  122. {
  123. Width = 100,
  124. Height = 100,
  125. ClipToBounds = true,
  126. Children = new Controls.Controls
  127. {
  128. new Border
  129. {
  130. Margin = new Thickness(100, 100, 0, 0),
  131. Child = target = new TestControl
  132. {
  133. Width = 10,
  134. Height = 10,
  135. Margin = new Thickness(-100, -100, 0, 0),
  136. }
  137. }
  138. }
  139. };
  140. Render(container);
  141. Assert.True(target.Rendered);
  142. }
  143. private void Render(IControl control)
  144. {
  145. var ctx = CreateDrawingContext();
  146. control.Measure(Size.Infinity);
  147. control.Arrange(new Rect(control.DesiredSize));
  148. ////ctx.Render(control);
  149. }
  150. private DrawingContext CreateDrawingContext()
  151. {
  152. return new DrawingContext(Mock.Of<IDrawingContextImpl>());
  153. }
  154. private class TestControl : Control
  155. {
  156. public bool Rendered { get; private set; }
  157. public override void Render(DrawingContext context)
  158. {
  159. Rendered = true;
  160. }
  161. }
  162. }
  163. }