[ros-diffs] [greatlrd] 20470: Implement ShowCursor, it is a issue with quake when you moving the mouse, the mousepointer will show, when you stand still with the mouse it will not show the mousepointer.

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Fri Dec 30 23:03:20 CET 2005


Implement ShowCursor, it is a issue with quake when you moving the
mouse, the mousepointer will show, when you stand still with the mouse
it will not show the mousepointer.
Modified: trunk/reactos/include/win32k/ntuser.h
Modified: trunk/reactos/lib/user32/include/user32p.h
Modified: trunk/reactos/lib/user32/windows/cursor.c
Modified: trunk/reactos/subsys/win32k/ntuser/misc.c
  _____  

Modified: trunk/reactos/include/win32k/ntuser.h
--- trunk/reactos/include/win32k/ntuser.h	2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/include/win32k/ntuser.h	2005-12-30 22:02:59 UTC
(rev 20470)
@@ -379,6 +379,7 @@

 #define ONEPARAM_ROUTINE_MSQSETWAKEMASK       0x27
 #define ONEPARAM_ROUTINE_GETKEYBOARDTYPE      0x28
 #define ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT    0x29
+#define ONEPARAM_ROUTINE_SHOWCURSOR           0x30 
 DWORD
 NTAPI
 NtUserCallOneParam(
  _____  

Modified: trunk/reactos/lib/user32/include/user32p.h
--- trunk/reactos/lib/user32/include/user32p.h	2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/lib/user32/include/user32p.h	2005-12-30 22:02:59 UTC
(rev 20470)
@@ -112,6 +112,11 @@

 #define NtUserEnableProcessWindowGhosting(bEnable) \
   NtUserCallOneParam((DWORD)bEnable,
ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING)
 
+#define NtUserShowCursor(bShow) \
+  NtUserCallOneParam((DWORD)bShow, ONEPARAM_ROUTINE_SHOWCURSOR)
+  
+  
+
 /* Internal Thread Data */
 extern HINSTANCE User32Instance;
 
  _____  

Modified: trunk/reactos/lib/user32/windows/cursor.c
--- trunk/reactos/lib/user32/windows/cursor.c	2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/lib/user32/windows/cursor.c	2005-12-30 22:02:59 UTC
(rev 20470)
@@ -320,13 +320,12 @@

 
 
 /*
- * @unimplemented
+ * @implemented
  */
 int STDCALL
 ShowCursor(BOOL bShow)
 {
-  UNIMPLEMENTED;
-  return 0;
+  return NtUserShowCursor(bShow);
 }
 
 HCURSOR
  _____  

Modified: trunk/reactos/subsys/win32k/ntuser/misc.c
--- trunk/reactos/subsys/win32k/ntuser/misc.c	2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/subsys/win32k/ntuser/misc.c	2005-12-30 22:02:59 UTC
(rev 20470)
@@ -11,7 +11,8 @@

 
 #include <w32k.h>
 
-#define NDEBUG
+//#define NDEBUG
+#undef NDEBUG
 #include <debug.h>
 
 /* registered Logon process */
@@ -164,6 +165,7 @@
    END_CLEANUP;
 }
 
+
 /*
  * @implemented
  */
@@ -176,10 +178,90 @@
    DECLARE_RETURN(DWORD);
 
    DPRINT("Enter NtUserCallOneParam\n");
+
+
+   if (Routine == ONEPARAM_ROUTINE_SHOWCURSOR)
+   {
+      PWINSTATION_OBJECT WinSta =
PsGetWin32Thread()->Desktop->WindowStation;
+      PSYSTEM_CURSORINFO CurInfo;
+                 
+      HDC Screen;
+      HBITMAP dcbmp;
+      SURFOBJ *SurfObj;         
+      BITMAPOBJ *BitmapObj;
+      GDIDEVICE *ppdev;
+      GDIPOINTER *pgp;
+
+      if(!(Screen = IntGetScreenDC()))
+      {
+        return 1; /* No mouse */
+      }
+                       
+      PDC dc = DC_LockDc(Screen);
+
+      if (!dc)
+      {
+        return 1; /* No mouse */
+      }
+           
+      dcbmp = dc->w.hBitmap;
+      DC_UnlockDc(dc);
+
+      BitmapObj = BITMAPOBJ_LockBitmap(dcbmp);
+      if ( !BitmapObj )
+      {
+         BITMAPOBJ_UnlockBitmap(BitmapObj); 
+         return 1; /* No Mouse */
+      }
+              
+      SurfObj = &BitmapObj->SurfObj;
+      if (SurfObj == NULL)
+      {
+        BITMAPOBJ_UnlockBitmap(BitmapObj); 
+        return 1; /* No mouse */
+      }
+           
+      ppdev = GDIDEV(SurfObj);
+                                                                      
+      if(ppdev == NULL)
+      {
+        BITMAPOBJ_UnlockBitmap(BitmapObj); 
+        return 1; /* No mouse */
+      }
+                  
+      pgp = &ppdev->Pointer;
+      
+      CurInfo = IntGetSysCursorInfo(WinSta);
+           
+      if (Param == FALSE)
+      {
+          if (CurInfo->ShowingCursor != 0)
+          {
+             ppdev->SafetyRemoveCount = 1;
+             ppdev->SafetyRemoveLevel = 1;
+             EngMovePointer(SurfObj,-1,-1,NULL);               
+             CurInfo->ShowingCursor = 0;                
+           }
+           
+       }
+       else
+       {
+          /* Show Cursor */              
+          ppdev->SafetyRemoveCount = 0;
+          ppdev->SafetyRemoveLevel = 0;
+          EngMovePointer(SurfObj,-1,-1,NULL);
+          CurInfo->ShowingCursor = CURSOR_SHOWING;
+       }
+                                                    
+       BITMAPOBJ_UnlockBitmap(BitmapObj); 
+       return 0;                       
+       }
+         
+   
    UserEnterExclusive();
 
    switch(Routine)
-   {
+   {   	     
       case ONEPARAM_ROUTINE_GETMENU:
          {
             PWINDOW_OBJECT Window;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20051230/2107bca4/attachment.html


More information about the Ros-diffs mailing list