mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-29 09:18:01 +01:00
Some mouse improvements on CursesDriver.
This commit is contained in:
@@ -186,9 +186,11 @@ namespace Terminal.Gui {
|
||||
}
|
||||
}
|
||||
|
||||
Curses.Event? LastMouseButtonPressed = null;
|
||||
bool IsButtonPressed = false;
|
||||
bool cancelButtonClicked = false;
|
||||
Curses.Event? LastMouseButtonPressed;
|
||||
bool IsButtonPressed;
|
||||
bool cancelButtonClicked;
|
||||
bool canWheeledDown;
|
||||
bool isReportMousePosition;
|
||||
Point point;
|
||||
|
||||
MouseEvent ToDriverMouse (Curses.MouseEvent cev)
|
||||
@@ -206,7 +208,7 @@ namespace Terminal.Gui {
|
||||
LastMouseButtonPressed == null) {
|
||||
|
||||
IsButtonPressed = false;
|
||||
mouseFlag = ProcessButtonClickedEvent (cev, mouseFlag);
|
||||
mouseFlag = ProcessButtonClickedEvent (cev);
|
||||
|
||||
} else if (((cev.ButtonState == Curses.Event.Button1Pressed || cev.ButtonState == Curses.Event.Button2Pressed ||
|
||||
cev.ButtonState == Curses.Event.Button3Pressed) && LastMouseButtonPressed == null) ||
|
||||
@@ -216,6 +218,7 @@ namespace Terminal.Gui {
|
||||
if (cev.ButtonState != Curses.Event.ReportMousePosition)
|
||||
LastMouseButtonPressed = cev.ButtonState;
|
||||
IsButtonPressed = true;
|
||||
isReportMousePosition = false;
|
||||
|
||||
if (cev.ButtonState == Curses.Event.ReportMousePosition) {
|
||||
mouseFlag = (MouseFlags)LastMouseButtonPressed | MouseFlags.ReportMousePosition;
|
||||
@@ -231,7 +234,7 @@ namespace Terminal.Gui {
|
||||
if ((mouseFlag & MouseFlags.ReportMousePosition) == 0) {
|
||||
Task.Run (async () => {
|
||||
while (IsButtonPressed && LastMouseButtonPressed != null) {
|
||||
await Task.Delay (200);
|
||||
await Task.Delay (100);
|
||||
var me = new MouseEvent () {
|
||||
X = cev.X,
|
||||
Y = cev.Y,
|
||||
@@ -253,23 +256,32 @@ namespace Terminal.Gui {
|
||||
} else if ((cev.ButtonState == Curses.Event.Button1Released || cev.ButtonState == Curses.Event.Button2Released ||
|
||||
cev.ButtonState == Curses.Event.Button3Released)) {
|
||||
|
||||
mouseFlag = ProcessButtonReleasedEvent (cev, mouseFlag);
|
||||
mouseFlag = ProcessButtonReleasedEvent (cev);
|
||||
IsButtonPressed = false;
|
||||
canWheeledDown = false;
|
||||
|
||||
} else if (cev.ButtonState == Curses.Event.Button4Pressed) {
|
||||
|
||||
mouseFlag = MouseFlags.WheeledUp;
|
||||
|
||||
} else if (cev.ButtonState == Curses.Event.ReportMousePosition && cev.X == point.X && cev.Y == point.Y) {
|
||||
} else if (cev.ButtonState == Curses.Event.ReportMousePosition && cev.X == point.X && cev.Y == point.Y &&
|
||||
canWheeledDown) {
|
||||
|
||||
mouseFlag = MouseFlags.WheeledDown;
|
||||
canWheeledDown = true;
|
||||
|
||||
}
|
||||
else if (cev.ButtonState == Curses.Event.ReportMousePosition) {
|
||||
else if (cev.ButtonState == Curses.Event.ReportMousePosition && !canWheeledDown) {
|
||||
|
||||
mouseFlag = MouseFlags.ReportMousePosition;
|
||||
canWheeledDown = true;
|
||||
isReportMousePosition = true;
|
||||
|
||||
} else {
|
||||
mouseFlag = (MouseFlags)cev.ButtonState;
|
||||
canWheeledDown = false;
|
||||
if (cev.ButtonState == Curses.Event.ReportMousePosition)
|
||||
isReportMousePosition = true;
|
||||
}
|
||||
|
||||
point = new Point () {
|
||||
@@ -277,11 +289,6 @@ namespace Terminal.Gui {
|
||||
Y = cev.Y
|
||||
};
|
||||
|
||||
|
||||
|
||||
if (cev.ID != 0)
|
||||
mouseFlag = MouseFlags.WheeledDown;
|
||||
|
||||
return new MouseEvent () {
|
||||
X = cev.X,
|
||||
Y = cev.Y,
|
||||
@@ -290,10 +297,10 @@ namespace Terminal.Gui {
|
||||
};
|
||||
}
|
||||
|
||||
private MouseFlags ProcessButtonClickedEvent (Curses.MouseEvent cev, MouseFlags mf)
|
||||
private MouseFlags ProcessButtonClickedEvent (Curses.MouseEvent cev)
|
||||
{
|
||||
LastMouseButtonPressed = cev.ButtonState;
|
||||
mf = GetButtonState (cev, true);
|
||||
var mf = GetButtonState (cev, true);
|
||||
mouseHandler (ProcessButtonState (cev, mf));
|
||||
if (LastMouseButtonPressed != null && LastMouseButtonPressed == cev.ButtonState) {
|
||||
mf = GetButtonState (cev, false);
|
||||
@@ -303,17 +310,21 @@ namespace Terminal.Gui {
|
||||
}
|
||||
}
|
||||
LastMouseButtonPressed = null;
|
||||
canWheeledDown = false;
|
||||
return mf;
|
||||
}
|
||||
|
||||
private MouseFlags ProcessButtonReleasedEvent (Curses.MouseEvent cev, MouseFlags mf)
|
||||
{
|
||||
mf = (MouseFlags)cev.ButtonState;
|
||||
mouseHandler (ProcessButtonState (cev, mf));
|
||||
if (!cancelButtonClicked && LastMouseButtonPressed == null)
|
||||
private MouseFlags ProcessButtonReleasedEvent (Curses.MouseEvent cev)
|
||||
{
|
||||
var mf = (MouseFlags)cev.ButtonState;
|
||||
if (!cancelButtonClicked && LastMouseButtonPressed == null && !isReportMousePosition) {
|
||||
mouseHandler (ProcessButtonState (cev, mf));
|
||||
mf = GetButtonState (cev);
|
||||
else
|
||||
cancelButtonClicked = false;
|
||||
} else if (isReportMousePosition) {
|
||||
mf = MouseFlags.ReportMousePosition;
|
||||
}
|
||||
cancelButtonClicked = false;
|
||||
canWheeledDown = false;
|
||||
return mf;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user