From 1c966f67b87d2e003421c62768ba4c51f065d076 Mon Sep 17 00:00:00 2001 From: BDisp Date: Fri, 12 Jun 2020 23:16:27 +0100 Subject: [PATCH 1/5] Intended to improve a more faster mouse. --- .../CursesDriver/CursesDriver.cs | 2 +- Terminal.Gui/ConsoleDrivers/WindowsDriver.cs | 19 ++++++++++++++----- Terminal.Gui/Views/Menu.cs | 10 +++++----- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs b/Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs index 6a133064b..98faa32ac 100644 --- a/Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs +++ b/Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs @@ -223,7 +223,7 @@ namespace Terminal.Gui { if (cev.ButtonState == Curses.Event.ReportMousePosition) { mouseFlag = (MouseFlags)LastMouseButtonPressed | MouseFlags.ReportMousePosition; point = new Point (); - cancelButtonClicked = true; + //cancelButtonClicked = true; } else { point = new Point () { X = cev.X, diff --git a/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs b/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs index 4c6be0307..530835c27 100644 --- a/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs +++ b/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs @@ -819,7 +819,7 @@ namespace Terminal.Gui { X = mouseEvent.MousePosition.X, Y = mouseEvent.MousePosition.Y }; - if (p == point) { + //if (p == point) { switch (LastMouseButtonPressed) { case WindowsConsole.ButtonState.Button1Pressed: mouseFlag = MouseFlags.Button1Clicked; @@ -833,9 +833,13 @@ namespace Terminal.Gui { mouseFlag = MouseFlags.Button3Clicked; break; } - } else { - mouseFlag = 0; - } + point = new Point () { + X = mouseEvent.MousePosition.X, + Y = mouseEvent.MousePosition.Y + }; + //} else { + // mouseFlag = 0; + //} LastMouseButtonPressed = null; IsButtonReleased = false; } else if (mouseEvent.EventFlags.HasFlag (WindowsConsole.EventFlags.DoubleClick)) { @@ -880,7 +884,12 @@ namespace Terminal.Gui { } } else if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved) { - mouseFlag = MouseFlags.ReportMousePosition; + if (mouseEvent.MousePosition.X != point.X || mouseEvent.MousePosition.Y != point.Y) { + mouseFlag = MouseFlags.ReportMousePosition; + point = new Point (); + } else { + mouseFlag = 0; + } } else if (mouseEvent.ButtonState == 0 && mouseEvent.EventFlags == 0) { mouseFlag = 0; } diff --git a/Terminal.Gui/Views/Menu.cs b/Terminal.Gui/Views/Menu.cs index f48a390c9..b0da9070c 100644 --- a/Terminal.Gui/Views/Menu.cs +++ b/Terminal.Gui/Views/Menu.cs @@ -524,7 +524,7 @@ namespace Terminal.Gui { Run (barItems.Children [meY].Action); return true; } else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || - me.Flags == MouseFlags.ReportMousePosition || + me.Flags == MouseFlags.Button1TripleClicked || me.Flags == MouseFlags.ReportMousePosition || me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition)) { disabled = false; if (me.Y < 1) @@ -1161,7 +1161,7 @@ namespace Terminal.Gui { } handled = false; - if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1Clicked || + if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked || me.Flags == MouseFlags.Button1Clicked || (me.Flags == MouseFlags.ReportMousePosition && selected > -1) || (me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition) && selected > -1)) { int pos = 1; @@ -1173,7 +1173,7 @@ namespace Terminal.Gui { var menu = new Menu (this, i, 0, Menus [i]); menu.Run (Menus [i].Action); } - } else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) { + } else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked) { if (IsMenuOpen) { CloseAllMenus (); } else { @@ -1209,7 +1209,7 @@ namespace Terminal.Gui { me.View.MouseEvent (me); } } else if (!(me.View is MenuBar || me.View is Menu) && (me.Flags.HasFlag (MouseFlags.Button1Clicked) || - me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked)) { + me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked)) { Application.UngrabMouse (); CloseAllMenus (); handled = false; @@ -1218,7 +1218,7 @@ namespace Terminal.Gui { handled = false; return false; } - } else if (!IsMenuOpen && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition))) { + } else if (!IsMenuOpen && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked || me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition))) { Application.GrabMouse (current); } else if (IsMenuOpen && (me.View is MenuBar || me.View is Menu)) { Application.GrabMouse (me.View); From 37187c8d4fb2f9ca627ff8d18c4d1be75e985f29 Mon Sep 17 00:00:00 2001 From: BDisp Date: Sat, 13 Jun 2020 15:42:10 +0100 Subject: [PATCH 2/5] Fixes https://github.com/migueldeicaza/gui.cs/pull/681#issuecomment-643625748 ScrollDown. --- Terminal.Gui/Views/ScrollView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Terminal.Gui/Views/ScrollView.cs b/Terminal.Gui/Views/ScrollView.cs index 7bfdbd5fb..af77283d0 100644 --- a/Terminal.Gui/Views/ScrollView.cs +++ b/Terminal.Gui/Views/ScrollView.cs @@ -556,7 +556,7 @@ namespace Terminal.Gui { public bool ScrollDown (int lines) { var ny = Math.Max (-contentSize.Height, contentOffset.Y - lines); - if (Math.Abs (ny) == contentSize.Height) + if (Math.Abs (ny) == contentSize.Height - 1) return false; ContentOffset = new Point (contentOffset.X, ny); return true; From 5bfc648fb5dbe96b13a3623d98ccf6d121895bff Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Sat, 13 Jun 2020 09:56:32 -0700 Subject: [PATCH 3/5] workaround for lifecycle bug introduced in 685 --- Terminal.Gui/Views/StatusBar.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Terminal.Gui/Views/StatusBar.cs b/Terminal.Gui/Views/StatusBar.cs index 9e5e1c3fa..214e42ed2 100644 --- a/Terminal.Gui/Views/StatusBar.cs +++ b/Terminal.Gui/Views/StatusBar.cs @@ -96,7 +96,7 @@ namespace Terminal.Gui { if (SuperView == null || SuperView == Application.Top) { Y = Driver.Rows - 1; } else { - Y = Pos.Bottom (SuperView); + //Y = Pos.Bottom (SuperView); } }; } From 36031db60527baae7358a8a5f4af8bfb8cbea65a Mon Sep 17 00:00:00 2001 From: BDisp Date: Sat, 13 Jun 2020 22:57:41 +0100 Subject: [PATCH 4/5] Ensures that the ScrollView only scrolling outside the his tees. --- Terminal.Gui/Views/ScrollView.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Terminal.Gui/Views/ScrollView.cs b/Terminal.Gui/Views/ScrollView.cs index 7bfdbd5fb..1f2d511a7 100644 --- a/Terminal.Gui/Views/ScrollView.cs +++ b/Terminal.Gui/Views/ScrollView.cs @@ -122,6 +122,11 @@ namespace Terminal.Gui { WantContinuousButtonPressed = true; } + int posTopTee; + int posLeftTee; + int posBottomTee; + int posRightTee; + /// public override void Redraw (Rect region) { @@ -170,9 +175,11 @@ namespace Terminal.Gui { } else { if (y == by1 && !hasTopTee) { hasTopTee = true; + posTopTee = y; special = Driver.TopTee; } else if ((y >= by2 || by2 == 0) && !hasBottomTee) { hasBottomTee = true; + posBottomTee = y; special = Driver.BottomTee; } else { special = Driver.VLine; @@ -222,9 +229,11 @@ namespace Terminal.Gui { } else { if (x == bx1 && !hasLeftTee) { hasLeftTee = true; + posLeftTee = x; special = Driver.LeftTee; } else if ((x >= bx2 || bx2 == 0) && !hasRightTee) { hasRightTee = true; + posRightTee = x; special = Driver.RightTee; } else { special = Driver.HLine; @@ -252,6 +261,8 @@ namespace Terminal.Gui { int location = vertical ? me.Y : me.X; int barsize = vertical ? Bounds.Height : Bounds.Width; + int posTopLeftTee = vertical ? posTopTee : posLeftTee; + int posBottomRightTee = vertical ? posBottomTee : posRightTee; barsize -= 2; var pos = Position; @@ -265,12 +276,11 @@ namespace Terminal.Gui { var b1 = pos * barsize / Size; var b2 = (pos + barsize) * barsize / Size; - if (b2 == 0 && location == 1 && pos == 0 || - (b2 == barsize && location == barsize) || - (location > b1 && location < b2)) { + if (b1 == 0 && location == 1 && pos == 0 || (location >= posTopLeftTee + 1 && location <= posBottomRightTee + 1 && (pos != 0 || pos != Size - 1) && location != 1 && location != barsize) || + (b2 == barsize + (b2 - b1 - 1) && location == barsize && pos == Size - 1)) { return true; } else if (location <= barsize) { - if (location > 1 && location >= b2) + if (location > 1 && location > posTopLeftTee && location > posBottomRightTee) SetPosition (Math.Min (pos + (Size / location), Size - 1)); else if (location <= b2 && pos > 0 || pos > 0) SetPosition (Math.Max (pos - (Size / barsize), 0)); From 9ca531cdbc1419895a36a162f0aa1207def483fc Mon Sep 17 00:00:00 2001 From: BDisp Date: Sun, 14 Jun 2020 01:53:42 +0100 Subject: [PATCH 5/5] This is also working too. --- Terminal.Gui/Views/ScrollView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Terminal.Gui/Views/ScrollView.cs b/Terminal.Gui/Views/ScrollView.cs index af77283d0..9e7bc1665 100644 --- a/Terminal.Gui/Views/ScrollView.cs +++ b/Terminal.Gui/Views/ScrollView.cs @@ -556,7 +556,7 @@ namespace Terminal.Gui { public bool ScrollDown (int lines) { var ny = Math.Max (-contentSize.Height, contentOffset.Y - lines); - if (Math.Abs (ny) == contentSize.Height - 1) + if (ny == contentOffset.Y) return false; ContentOffset = new Point (contentOffset.X, ny); return true;