]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmulatorPkg/Win/Host/WinGopInput.c
WinHost: Add SimplePointer support
[mirror_edk2.git] / EmulatorPkg / Win / Host / WinGopInput.c
index 6c218ab98a1dbf0d34430eb1417becf3bb5ec8d3..312a549847c5f303f03d0ec3ac73a88cbdaadf1f 100644 (file)
@@ -1,13 +1,7 @@
 /** @file\r
 \r
 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 Module Name:\r
 \r
@@ -363,6 +357,23 @@ WinNtWndKeySetState (
   GRAPHICS_PRIVATE_DATA           *Private;\r
 \r
   Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo);\r
+  Private->ScrollLock = FALSE;\r
+  Private->NumLock = FALSE;\r
+  Private->CapsLock = FALSE;\r
+  Private->IsPartialKeySupport = FALSE;\r
+\r
+  if ((*KeyToggleState & EFI_SCROLL_LOCK_ACTIVE) == EFI_SCROLL_LOCK_ACTIVE) {\r
+    Private->ScrollLock = TRUE;\r
+  }\r
+  if ((*KeyToggleState & EFI_NUM_LOCK_ACTIVE) == EFI_NUM_LOCK_ACTIVE) {\r
+    Private->NumLock = TRUE;\r
+  }\r
+  if ((*KeyToggleState & EFI_CAPS_LOCK_ACTIVE) == EFI_CAPS_LOCK_ACTIVE) {\r
+    Private->CapsLock = TRUE;\r
+  }\r
+  if ((*KeyToggleState & EFI_KEY_STATE_EXPOSED) == EFI_KEY_STATE_EXPOSED) {\r
+    Private->IsPartialKeySupport = TRUE;\r
+  }\r
   Private->KeyState.KeyToggleState = *KeyToggleState;\r
   return EFI_SUCCESS;\r
 }\r
@@ -398,9 +409,12 @@ WinNtWndCheckPointer (
 \r
   Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo);\r
 \r
-  return EFI_NOT_READY;\r
-}\r
+  if (!Private->PointerStateChanged) {\r
+    return EFI_NOT_READY;\r
+  }\r
 \r
+  return EFI_SUCCESS;\r
+}\r
 \r
 EFI_STATUS\r
 EFIAPI\r
@@ -413,5 +427,21 @@ WinNtWndGetPointerState (
 \r
   Private = GRAPHICS_PRIVATE_DATA_FROM_THIS (GraphicsIo);\r
 \r
-  return EFI_NOT_READY;\r
+  if (!Private->PointerStateChanged) {\r
+    return EFI_NOT_READY;\r
+  }\r
+\r
+  State->RelativeMovementX = Private->PointerState.RelativeMovementX;\r
+  State->RelativeMovementY = Private->PointerState.RelativeMovementY;\r
+  State->RelativeMovementZ = Private->PointerState.RelativeMovementZ;\r
+  State->LeftButton        = Private->PointerState.LeftButton;\r
+  State->RightButton       = Private->PointerState.RightButton;\r
+\r
+  Private->PointerState.RelativeMovementX = 0;\r
+  Private->PointerState.RelativeMovementY = 0;\r
+  Private->PointerState.RelativeMovementZ = 0;\r
+\r
+  Private->PointerStateChanged = FALSE;\r
+\r
+  return EFI_SUCCESS;\r
 }\r