summaryrefslogtreecommitdiffstats
path: root/EmulatorPkg/Win/Host/WinGopScreen.c
diff options
context:
space:
mode:
Diffstat (limited to 'EmulatorPkg/Win/Host/WinGopScreen.c')
-rw-r--r--EmulatorPkg/Win/Host/WinGopScreen.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/EmulatorPkg/Win/Host/WinGopScreen.c b/EmulatorPkg/Win/Host/WinGopScreen.c
index 8f42606823..fa34596497 100644
--- a/EmulatorPkg/Win/Host/WinGopScreen.c
+++ b/EmulatorPkg/Win/Host/WinGopScreen.c
@@ -399,6 +399,8 @@ WinNtGopThreadWindowProc (
LPARAM Index;
EFI_INPUT_KEY Key;
BOOLEAN AltIsPress;
+ INT32 PosX;
+ INT32 PosY;
//
// Use mTlsIndex global to get a Thread Local Storage version of Private.
@@ -527,6 +529,45 @@ WinNtGopThreadWindowProc (
WinNtGopConvertParamToEfiKeyShiftState (Private, &wParam, &lParam, FALSE);
return 0;
+ case WM_MOUSEMOVE:
+ PosX = GET_X_LPARAM (lParam);
+ PosY = GET_Y_LPARAM (lParam);
+
+ if (Private->PointerPreviousX != PosX) {
+ Private->PointerState.RelativeMovementX += (PosX - Private->PointerPreviousX);
+ Private->PointerPreviousX = PosX;
+ Private->PointerStateChanged = TRUE;
+ }
+
+ if (Private->PointerPreviousY != PosY) {
+ Private->PointerState.RelativeMovementY += (PosY - Private->PointerPreviousY);
+ Private->PointerPreviousY = PosY;
+ Private->PointerStateChanged = TRUE;
+ }
+
+ Private->PointerState.RelativeMovementZ = 0;
+ return 0;
+
+ case WM_LBUTTONDOWN:
+ Private->PointerState.LeftButton = TRUE;
+ Private->PointerStateChanged = TRUE;
+ return 0;
+
+ case WM_LBUTTONUP:
+ Private->PointerState.LeftButton = FALSE;
+ Private->PointerStateChanged = TRUE;
+ return 0;
+
+ case WM_RBUTTONDOWN:
+ Private->PointerState.RightButton = TRUE;
+ Private->PointerStateChanged = TRUE;
+ return 0;
+
+ case WM_RBUTTONUP:
+ Private->PointerState.RightButton = FALSE;
+ Private->PointerStateChanged = TRUE;
+ return 0;
+
case WM_CLOSE:
//
// This close message is issued by user, core is not aware of this,