public async Task WindowTest3() { string targetWidget = "targetA"; var systemWindow = new PopupsTestWindow(800, 600) { Details = new Dictionary <string, string>() { ["Task"] = "Top-Left Anchor : Bottom-Left Popup", ["Expected"] = "Popup should appear above left of anchor click" } }; systemWindow.Padding = systemWindow.Padding.Clone(bottom: 180); await systemWindow.RunTest(testRunner => { var row = new FlowLayoutWidget() { //Mate = Mate.Center | Mate.Fit, VAnchor = VAnchor.Top | VAnchor.Fit, HAnchor = HAnchor.Left | HAnchor.Fit, Margin = new BorderDouble(left: 120) }; systemWindow.AddChild(row); var button = new TextButton("Popup", systemWindow.Theme) { Name = "targetA", VAnchor = VAnchor.Bottom, }; row.AddChild(button); var spacer = new GuiWidget() { Width = 100, }; row.AddChild(spacer); var button2 = new GuiWidget(140, 140) { BackgroundColor = Color.Blue, Name = "targetB" }; var hitBounds = new RectangleDouble(65, 45, 65 + 32, 45 + 32); button2.AfterDraw += (s, e) => { e.Graphics2D.Rectangle(hitBounds, Color.White); }; row.AddChild(button2); var anchor = new MatePoint() { Mate = new MateOptions() { HorizontalEdge = MateEdge.Right, VerticalEdge = MateEdge.Bottom, }, Widget = button, }; var popup = new MatePoint() { Mate = new MateOptions() { HorizontalEdge = MateEdge.Left, VerticalEdge = MateEdge.Top, } }; button.Click += (s, e) => { popup.Widget = new GuiWidget(180d, 100d) { BackgroundColor = Color.LightBlue, Border = 2, BorderColor = Color.LightBlue.Blend(Color.Black, 0.4) }; systemWindow.ShowPopup(anchor, popup); }; button2.Click += (s, e) => { popup.Widget = new GuiWidget(180d, 100d) { BackgroundColor = Color.LightBlue, Border = 2, BorderColor = Color.LightBlue.Blend(Color.Black, 0.4) }; systemWindow.ShowPopup(anchor, popup, hitBounds); }; bool firstPass = true; //testRunner.Delay(90); for (var i = 0; i < 16; i++) { switch (i) { // Bottom-Top positions case 0: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Top; break; case 1: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Top; break; case 2: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Top; break; case 3: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Top; break; // Top-Top positions case 4: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 5: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 6: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 7: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Top; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Bottom; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; // Bottom-Bottom positions case 8: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 9: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 10: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 11: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Bottom; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; // Bottom-Top positions case 12: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 13: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 14: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Right; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; case 15: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Left; anchor.Mate.VerticalEdge = MateEdge.Bottom; popup.Mate.VerticalEdge = MateEdge.Top; anchor.AltMate.VerticalEdge = MateEdge.Top; popup.AltMate.VerticalEdge = MateEdge.Bottom; break; } testRunner.ClickByName(targetWidget); testRunner.Delay(1); if (i == 15 && firstPass) { firstPass = false; i = -1; targetWidget = "targetB"; anchor.Widget = button2; } popup.Widget.Unfocus(); } testRunner.Delay(); return(Task.CompletedTask); }, 120); }
private static async Task AnchorTests(PopupsTestWindow systemWindow, MatePoint anchor, MatePoint popup, TextButton button, Action <GuiWidget, GuiWidget> validator, Action <GuiWidget> rowAdjuster = null) { await systemWindow.RunTest(testRunner => { var row = new FlowLayoutWidget() { VAnchor = VAnchor.Center | VAnchor.Fit, HAnchor = HAnchor.Left | HAnchor.Fit, Margin = new BorderDouble(left: 120) }; systemWindow.AddChild(row); row.AddChild(button); rowAdjuster?.Invoke(row); button.Click += (s, e) => { popup.Widget = new GuiWidget(180d, 100d) { BackgroundColor = Color.LightBlue, Border = 2, BorderColor = Color.LightBlue.Blend(Color.Black, 0.4) }; systemWindow.ShowPopup(anchor, popup); }; anchor.Widget = button; for (var i = 0; i < 4; i++) { switch (i) { case 0: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Right; break; case 1: anchor.Mate.HorizontalEdge = MateEdge.Left; popup.Mate.HorizontalEdge = MateEdge.Left; break; case 2: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Right; break; case 3: anchor.Mate.HorizontalEdge = MateEdge.Right; popup.Mate.HorizontalEdge = MateEdge.Left; break; } testRunner.ClickByName("buttonA"); validator.Invoke(button, popup.Widget); popup.Widget.Unfocus(); } testRunner.Delay(); return(Task.CompletedTask); }, 120); }