ViewportSettings.TransparentMouseTests.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #nullable enable
  2. namespace ViewBaseTests.Mouse;
  3. public class TransparentMouseTests
  4. {
  5. private class MouseTrackingView : View
  6. {
  7. public bool MouseEventReceived { get; private set; }
  8. protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
  9. {
  10. MouseEventReceived = true;
  11. return true;
  12. }
  13. }
  14. [Fact]
  15. public void TransparentMouse_Passes_Mouse_Events_To_Underlying_View ()
  16. {
  17. // Arrange
  18. IApplication? app = Application.Create ();
  19. var top = new Runnable ()
  20. {
  21. Id = "top",
  22. };
  23. app.Begin (top);
  24. var underlying = new MouseTrackingView { Id = "underlying", X = 0, Y = 0, Width = 10, Height = 10 };
  25. var overlay = new MouseTrackingView { Id = "overlay", X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.TransparentMouse };
  26. top.Add (underlying);
  27. top.Add (overlay);
  28. top.Layout ();
  29. var mouseEvent = new MouseEventArgs
  30. {
  31. ScreenPosition = new (5, 5),
  32. Flags = MouseFlags.Button1Clicked
  33. };
  34. // Act
  35. app.Mouse.RaiseMouseEvent (mouseEvent);
  36. // Assert
  37. Assert.True (underlying.MouseEventReceived);
  38. }
  39. [Fact]
  40. public void NonTransparentMouse_Consumes_Mouse_Events ()
  41. {
  42. // Arrange
  43. IApplication? app = Application.Create ();
  44. var top = new Runnable ();
  45. app.Begin (top);
  46. var underlying = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10 };
  47. var overlay = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.None };
  48. top.Add (underlying);
  49. top.Add (overlay);
  50. top.Layout ();
  51. var mouseEvent = new MouseEventArgs
  52. {
  53. ScreenPosition = new Point (5, 5),
  54. Flags = MouseFlags.Button1Clicked
  55. };
  56. // Act
  57. app.Mouse.RaiseMouseEvent (mouseEvent);
  58. // Assert
  59. Assert.True (overlay.MouseEventReceived);
  60. Assert.False (underlying.MouseEventReceived);
  61. }
  62. [Fact]
  63. public void TransparentMouse_Stacked_TransparentMouse_Views ()
  64. {
  65. // Arrange
  66. IApplication? app = Application.Create ();
  67. var top = new Runnable ()
  68. {
  69. Id = "top",
  70. };
  71. app.Begin (top);
  72. var underlying = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.TransparentMouse };
  73. var overlay = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.TransparentMouse };
  74. top.Add (underlying);
  75. top.Add (overlay);
  76. top.Layout ();
  77. var mouseEvent = new MouseEventArgs
  78. {
  79. ScreenPosition = new Point (5, 5),
  80. Flags = MouseFlags.Button1Clicked
  81. };
  82. bool topHandled = false;
  83. top.MouseEvent += (sender, args) =>
  84. {
  85. topHandled = true;
  86. args.Handled = true;
  87. };
  88. // Act
  89. app.Mouse.RaiseMouseEvent (mouseEvent);
  90. // Assert
  91. Assert.False (overlay.MouseEventReceived);
  92. Assert.False (underlying.MouseEventReceived);
  93. Assert.True (topHandled);
  94. }
  95. }