From 1c966f67b87d2e003421c62768ba4c51f065d076 Mon Sep 17 00:00:00 2001 From: BDisp Date: Fri, 12 Jun 2020 23:16:27 +0100 Subject: [PATCH] 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);