Alexandre Julliard : user: Added fast 32->16 mapping for WM_GETMINMAXINFO, WM_NCCALCSIZE and WM_WINDOWPOSCHANGING/CHANGED.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 26 13:54:59 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: b00df53d71e3b934b8567ac396ce5999c7248375
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=b00df53d71e3b934b8567ac396ce5999c7248375

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May 26 14:00:36 2006 +0200

user: Added fast 32->16 mapping for WM_GETMINMAXINFO, WM_NCCALCSIZE and WM_WINDOWPOSCHANGING/CHANGED.

---

 dlls/user/winproc.c |  152 +++++++++++++++++----------------------------------
 1 files changed, 52 insertions(+), 100 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 33ecab6..adcd041 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -974,15 +974,6 @@ static INT WINPROC_MapMsg32ATo16( HWND h
         *plparam = MAKELPARAM( (HWND16)*plparam,
                                (WORD)msg32 - WM_CTLCOLORMSGBOX );
         return 0;
-    case WM_GETMINMAXINFO:
-        {
-            MINMAXINFO16 *mmi = HeapAlloc( GetProcessHeap(), 0, sizeof(*mmi) + sizeof(LPARAM) );
-            if (!mmi) return -1;
-            MINMAXINFO32to16( (MINMAXINFO *)*plparam, mmi );
-            *(LPARAM *)(mmi + 1) = *plparam;  /* Store the previous lParam */
-            *plparam = MapLS( mmi );
-        }
-        return 1;
     case WM_GETTEXT:
     case WM_ASKCBFORMATNAME:
         {
@@ -1027,39 +1018,6 @@ static INT WINPROC_MapMsg32ATo16( HWND h
             *plparam = 0;
         }
         return 0;
-    case WM_NCCALCSIZE:
-        {
-            NCCALCSIZE_PARAMS *nc32 = (NCCALCSIZE_PARAMS *)*plparam;
-            NCCALCSIZE_PARAMS16 *nc = HeapAlloc( GetProcessHeap(), 0, sizeof(*nc) + sizeof(LPARAM));
-            if (!nc) return -1;
-
-            nc->rgrc[0].left   = nc32->rgrc[0].left;
-            nc->rgrc[0].top    = nc32->rgrc[0].top;
-            nc->rgrc[0].right  = nc32->rgrc[0].right;
-            nc->rgrc[0].bottom = nc32->rgrc[0].bottom;
-            if (wParam32)
-            {
-                WINDOWPOS16 *wp;
-                nc->rgrc[1].left   = nc32->rgrc[1].left;
-                nc->rgrc[1].top    = nc32->rgrc[1].top;
-                nc->rgrc[1].right  = nc32->rgrc[1].right;
-                nc->rgrc[1].bottom = nc32->rgrc[1].bottom;
-                nc->rgrc[2].left   = nc32->rgrc[2].left;
-                nc->rgrc[2].top    = nc32->rgrc[2].top;
-                nc->rgrc[2].right  = nc32->rgrc[2].right;
-                nc->rgrc[2].bottom = nc32->rgrc[2].bottom;
-                if (!(wp = HeapAlloc( GetProcessHeap(), 0, sizeof(WINDOWPOS16) )))
-                {
-                    HeapFree( GetProcessHeap(), 0, nc );
-                    return -1;
-                }
-                WINDOWPOS32to16( nc32->lppos, wp );
-                nc->lppos = MapLS( wp );
-            }
-            *(LPARAM *)(nc + 1) = *plparam;  /* Store the previous lParam */
-            *plparam = MapLS( nc );
-        }
-        return 1;
     case WM_PARENTNOTIFY:
         if ((LOWORD(wParam32)==WM_CREATE) || (LOWORD(wParam32)==WM_DESTROY))
             *plparam = MAKELPARAM( (HWND16)*plparam, HIWORD(wParam32));
@@ -1073,16 +1031,6 @@ static INT WINPROC_MapMsg32ATo16( HWND h
     case WM_DEVMODECHANGE:
         *plparam = MapLS( (LPSTR)*plparam );
         return 1;
-    case WM_WINDOWPOSCHANGING:
-    case WM_WINDOWPOSCHANGED:
-        {
-            WINDOWPOS16 *wp = HeapAlloc( GetProcessHeap(), 0, sizeof(*wp) + sizeof(LPARAM) );
-            if (!wp) return -1;
-            WINDOWPOS32to16( (WINDOWPOS *)*plparam, wp );
-            *(LPARAM *)(wp + 1) = *plparam;  /* Store the previous lParam */
-            *plparam = MapLS( wp );
-        }
-        return 1;
     case WM_GETDLGCODE:
          if (*plparam) {
             LPMSG msg32 = (LPMSG) *plparam;
@@ -1277,15 +1225,6 @@ static void WINPROC_UnmapMsg32ATo16( HWN
             *((PUINT)(lParam)) = HIWORD(*result);  /* FIXME: substract 1? */
         break;
 
-    case WM_GETMINMAXINFO:
-        {
-            MINMAXINFO16 *mmi = MapSL(lParam16);
-            UnMapLS( lParam16 );
-            lParam16 = *(LPARAM *)(mmi + 1);
-            MINMAXINFO16to32( mmi, (MINMAXINFO *)lParam16 );
-            HeapFree( GetProcessHeap(), 0, mmi );
-        }
-        break;
     case WM_GETTEXT:
     case WM_ASKCBFORMATNAME:
         {
@@ -1300,45 +1239,6 @@ static void WINPROC_UnmapMsg32ATo16( HWN
         if (lParam) *(BOOL *)lParam = (BOOL16)HIWORD(*result);
         *result = (LRESULT)WIN_Handle32( LOWORD(*result) );
         break;
-    case WM_NCCALCSIZE:
-        {
-            NCCALCSIZE_PARAMS *nc32;
-            NCCALCSIZE_PARAMS16 *nc = MapSL(lParam16);
-            UnMapLS( lParam16 );
-            lParam16 = *(LPARAM *)(nc + 1);
-            nc32 = (NCCALCSIZE_PARAMS *)lParam16;
-            nc32->rgrc[0].left   = nc->rgrc[0].left;
-            nc32->rgrc[0].top    = nc->rgrc[0].top;
-            nc32->rgrc[0].right  = nc->rgrc[0].right;
-            nc32->rgrc[0].bottom = nc->rgrc[0].bottom;
-            if (wParam16)
-            {
-                WINDOWPOS16 *pos = MapSL(nc->lppos);
-                UnMapLS( nc->lppos );
-                nc32->rgrc[1].left   = nc->rgrc[1].left;
-                nc32->rgrc[1].top    = nc->rgrc[1].top;
-                nc32->rgrc[1].right  = nc->rgrc[1].right;
-                nc32->rgrc[1].bottom = nc->rgrc[1].bottom;
-                nc32->rgrc[2].left   = nc->rgrc[2].left;
-                nc32->rgrc[2].top    = nc->rgrc[2].top;
-                nc32->rgrc[2].right  = nc->rgrc[2].right;
-                nc32->rgrc[2].bottom = nc->rgrc[2].bottom;
-                WINDOWPOS16to32( pos, nc32->lppos );
-                HeapFree( GetProcessHeap(), 0, pos );
-            }
-            HeapFree( GetProcessHeap(), 0, nc );
-        }
-        break;
-    case WM_WINDOWPOSCHANGING:
-    case WM_WINDOWPOSCHANGED:
-        {
-            WINDOWPOS16 *wp = MapSL(lParam16);
-            UnMapLS( lParam16 );
-            lParam16 = *(LPARAM *)(wp + 1);
-            WINDOWPOS16to32( wp, (WINDOWPOS *)lParam16 );
-            HeapFree( GetProcessHeap(), 0, wp );
-        }
-        break;
     case WM_NOTIFY:
         UnMapLS(lParam16);
         break;
@@ -2280,6 +2180,58 @@ LRESULT WINPROC_CallProc32ATo16( winproc
             UnMapLS( cs.szClass );
         }
         break;
+    case WM_GETMINMAXINFO:
+        {
+            MINMAXINFO *mmi32 = (MINMAXINFO *)lParam;
+            MINMAXINFO16 mmi;
+
+            MINMAXINFO32to16( mmi32, &mmi );
+            lParam = MapLS( &mmi );
+            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );
+            UnMapLS( lParam );
+            MINMAXINFO16to32( &mmi, mmi32 );
+        }
+        break;
+    case WM_NCCALCSIZE:
+        {
+            NCCALCSIZE_PARAMS *nc32 = (NCCALCSIZE_PARAMS *)lParam;
+            NCCALCSIZE_PARAMS16 nc;
+            WINDOWPOS16 winpos;
+
+            RECT32to16( &nc32->rgrc[0], &nc.rgrc[0] );
+            if (wParam)
+            {
+                RECT32to16( &nc32->rgrc[1], &nc.rgrc[1] );
+                RECT32to16( &nc32->rgrc[2], &nc.rgrc[2] );
+                WINDOWPOS32to16( nc32->lppos, &winpos );
+                nc.lppos = MapLS( &winpos );
+            }
+            lParam = MapLS( &nc );
+            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );
+            UnMapLS( lParam );
+            RECT16to32( &nc.rgrc[0], &nc32->rgrc[0] );
+            if (wParam)
+            {
+                RECT16to32( &nc.rgrc[1], &nc32->rgrc[1] );
+                RECT16to32( &nc.rgrc[2], &nc32->rgrc[2] );
+                WINDOWPOS16to32( &winpos, nc32->lppos );
+                UnMapLS( nc.lppos );
+            }
+        }
+        break;
+    case WM_WINDOWPOSCHANGING:
+    case WM_WINDOWPOSCHANGED:
+        {
+            WINDOWPOS *winpos32 = (WINDOWPOS *)lParam;
+            WINDOWPOS16 winpos;
+
+            WINDOWPOS32to16( winpos32, &winpos );
+            lParam = MapLS( &winpos );
+            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );
+            UnMapLS( lParam );
+            WINDOWPOS16to32( &winpos, winpos32 );
+        }
+        break;
     case WM_COMPAREITEM:
         {
             COMPAREITEMSTRUCT *cis32 = (COMPAREITEMSTRUCT *)lParam;




More information about the wine-cvs mailing list