< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_Component.cpp

Print this page

        

@@ -580,10 +580,15 @@
     LinkObjects(env, peer);
 
     /* Subclass the window now so that we can snoop on its messages */
     SubclassHWND();
 
+    AwtToolkit& tk = AwtToolkit::GetInstance();
+    if (tk.IsWin8OrLater()) {
+        tk.TIEnableMouseInPointer(true);
+    }
+
     /*
       * Fix for 4046446.
       */
     SetWindowPos(GetHWnd(), 0, x, y, w, h, SWP_NOZORDER | SWP_NOCOPYBITS | SWP_NOACTIVATE);
 

@@ -1711,10 +1716,80 @@
                                 GET_WHEEL_DELTA_WPARAM(wParam),
                                 switchMessage == WM_MOUSEHWHEEL);
               break;
           }
           break;
+
+      /* WM_POINTER is enabled for the TOUCH type 'pointer' input
+         This touch typed 'pointer' would map to the mouse functionality */
+      case WM_POINTERENTER:
+          {
+              AwtToolkit& tk = AwtToolkit::GetInstance();
+              UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
+              POINTER_INFO pinfo;
+
+              if(tk.TIGetPointerInfo(pointerId, &pinfo)) {
+                  if (pinfo.pointerType == PT_TOUCH) {
+                      POINT pdDnPoint = pinfo.ptPixelLocation;
+                      if(::ScreenToClient(GetHWnd(), &pdDnPoint)) {
+                        mr = WmMouseEnter(static_cast<UINT>(wParam), pdDnPoint.x, pdDnPoint.y);
+                      }
+                  }
+              }
+          }
+        break;
+      case WM_POINTERLEAVE:
+          {
+              AwtToolkit& tk = AwtToolkit::GetInstance();
+              UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
+              POINTER_INFO pinfo;
+
+              if(tk.TIGetPointerInfo(pointerId, &pinfo)) {
+                  if (pinfo.pointerType == PT_TOUCH) {
+                      POINT pdDnPoint = pinfo.ptPixelLocation;
+                      if(::ScreenToClient(GetHWnd(), &pdDnPoint)) {
+                        mr = WmMouseExit(static_cast<UINT>(wParam), pdDnPoint.x, pdDnPoint.y);
+                      }
+                  }
+              }
+          }
+        break;
+      case WM_POINTERDOWN:
+          {
+              AwtToolkit& tk = AwtToolkit::GetInstance();
+              UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
+              POINTER_INFO pinfo;
+
+              if(tk.TIGetPointerInfo(pointerId, &pinfo)) {
+                  if (pinfo.pointerType == PT_TOUCH) {
+                      POINT pdDnPoint = pinfo.ptPixelLocation;
+                      if(::ScreenToClient(GetHWnd(), &pdDnPoint)) {
+                        mr = WmMouseDown(static_cast<UINT>(wParam), pdDnPoint.x, pdDnPoint.y,
+                                       LEFT_BUTTON);
+                      }
+                  }
+              }
+          }
+          break;
+      case WM_POINTERUP:
+          {
+              AwtToolkit& tk = AwtToolkit::GetInstance();
+              UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
+              POINTER_INFO pinfo;
+
+              if(tk.TIGetPointerInfo(pointerId, &pinfo)) {
+                  if (pinfo.pointerType == PT_TOUCH) {
+                      POINT pdUpPoint = pinfo.ptPixelLocation;
+                      if(::ScreenToClient(GetHWnd(), &pdUpPoint)) {
+                        mr = WmMouseUp(static_cast<UINT>(wParam), pdUpPoint.x, pdUpPoint.y,
+                                     LEFT_BUTTON);
+                      }
+                  }
+              }
+          }
+          break;
+
       case WM_SETCURSOR:
           mr = mrDoDefault;
           if (LOWORD(lParam) == HTCLIENT) {
               if (AwtComponent* comp =
                                     AwtComponent::GetComponent((HWND)wParam)) {
< prev index next >