Alexandre Julliard : user: Added fast 16->32 mapping for WM_COMPARE/DELETE/ MEASURE/DRAWITEM.

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


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May 26 13:24:47 2006 +0200

user: Added fast 16->32 mapping for WM_COMPARE/DELETE/MEASURE/DRAWITEM.

---

 dlls/user/winproc.c |  140 ++++++++++++++++++++++-----------------------------
 1 files changed, 61 insertions(+), 79 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 63985d7..59a6785 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -745,22 +745,6 @@ static INT WINPROC_MapMsg16To32A( HWND h
         *pwparam32 = (WPARAM)HDC_32(wParam16);
         *plparam   = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
         return 0;
-    case WM_COMPAREITEM:
-        {
-            COMPAREITEMSTRUCT16* cis16 = MapSL(*plparam);
-            COMPAREITEMSTRUCT *cis = HeapAlloc(GetProcessHeap(), 0, sizeof(*cis));
-            if (!cis) return -1;
-            cis->CtlType    = cis16->CtlType;
-            cis->CtlID      = cis16->CtlID;
-            cis->hwndItem   = WIN_Handle32( cis16->hwndItem );
-            cis->itemID1    = cis16->itemID1;
-            cis->itemData1  = cis16->itemData1;
-            cis->itemID2    = cis16->itemID2;
-            cis->itemData2  = cis16->itemData2;
-            cis->dwLocaleId = 0;  /* FIXME */
-            *plparam = (LPARAM)cis;
-        }
-        return 1;
     case WM_COPYDATA:
         {
             PCOPYDATASTRUCT16 pcds16 =  MapSL(*plparam);
@@ -771,55 +755,6 @@ static INT WINPROC_MapMsg16To32A( HWND h
             *plparam = (LPARAM)pcds;
         }
         return 1;
-    case WM_DELETEITEM:
-        {
-            DELETEITEMSTRUCT16* dis16 = MapSL(*plparam);
-            DELETEITEMSTRUCT *dis = HeapAlloc(GetProcessHeap(), 0, sizeof(*dis));
-            if (!dis) return -1;
-            dis->CtlType  = dis16->CtlType;
-            dis->CtlID    = dis16->CtlID;
-            dis->hwndItem = WIN_Handle32( dis16->hwndItem );
-            dis->itemData = dis16->itemData;
-            *plparam = (LPARAM)dis;
-        }
-        return 1;
-    case WM_MEASUREITEM:
-        {
-            MEASUREITEMSTRUCT16* mis16 = MapSL(*plparam);
-            MEASUREITEMSTRUCT *mis = HeapAlloc(GetProcessHeap(), 0,
-                                                sizeof(*mis) + sizeof(LPARAM));
-            if (!mis) return -1;
-            mis->CtlType    = mis16->CtlType;
-            mis->CtlID      = mis16->CtlID;
-            mis->itemID     = mis16->itemID;
-            mis->itemWidth  = mis16->itemWidth;
-            mis->itemHeight = mis16->itemHeight;
-            mis->itemData   = mis16->itemData;
-            *(LPARAM *)(mis + 1) = *plparam;  /* Store the previous lParam */
-            *plparam = (LPARAM)mis;
-        }
-        return 1;
-    case WM_DRAWITEM:
-        {
-            DRAWITEMSTRUCT16* dis16 = MapSL(*plparam);
-            DRAWITEMSTRUCT *dis = HeapAlloc(GetProcessHeap(), 0, sizeof(*dis));
-            if (!dis) return -1;
-            dis->CtlType       = dis16->CtlType;
-            dis->CtlID         = dis16->CtlID;
-            dis->itemID        = dis16->itemID;
-            dis->itemAction    = dis16->itemAction;
-            dis->itemState     = dis16->itemState;
-            dis->hwndItem      = (dis->CtlType == ODT_MENU) ? (HWND)HMENU_32(dis16->hwndItem)
-                                                            : WIN_Handle32( dis16->hwndItem );
-            dis->hDC           = HDC_32(dis16->hDC);
-            dis->itemData      = dis16->itemData;
-            dis->rcItem.left   = dis16->rcItem.left;
-            dis->rcItem.top    = dis16->rcItem.top;
-            dis->rcItem.right  = dis16->rcItem.right;
-            dis->rcItem.bottom = dis16->rcItem.bottom;
-            *plparam = (LPARAM)dis;
-        }
-        return 1;
     case WM_GETMINMAXINFO:
         {
             MINMAXINFO *mmi = HeapAlloc( GetProcessHeap(), 0, sizeof(*mmi) + sizeof(LPARAM));
@@ -1031,23 +966,9 @@ static LRESULT WINPROC_UnmapMsg16To32A( 
 {
     switch(msg)
     {
-    case WM_COMPAREITEM:
-    case WM_DELETEITEM:
-    case WM_DRAWITEM:
     case WM_COPYDATA:
         HeapFree( GetProcessHeap(), 0, (LPVOID)lParam );
         break;
-    case WM_MEASUREITEM:
-        {
-            MEASUREITEMSTRUCT16 *mis16;
-            MEASUREITEMSTRUCT *mis = (MEASUREITEMSTRUCT *)lParam;
-            lParam = *(LPARAM *)(mis + 1);
-            mis16 = MapSL(lParam);
-            mis16->itemWidth  = (UINT16)mis->itemWidth;
-            mis16->itemHeight = (UINT16)mis->itemHeight;
-            HeapFree( GetProcessHeap(), 0, mis );
-        }
-        break;
     case WM_GETMINMAXINFO:
         {
             MINMAXINFO *mmi = (MINMAXINFO *)lParam;
@@ -2454,6 +2375,67 @@ LRESULT WINPROC_CallProc16To32A( winproc
             MDICREATESTRUCT32Ato16( &cs, cs16 );
         }
         break;
+    case WM_COMPAREITEM:
+        {
+            COMPAREITEMSTRUCT16* cis16 = MapSL(lParam);
+            COMPAREITEMSTRUCT cis;
+            cis.CtlType    = cis16->CtlType;
+            cis.CtlID      = cis16->CtlID;
+            cis.hwndItem   = WIN_Handle32( cis16->hwndItem );
+            cis.itemID1    = cis16->itemID1;
+            cis.itemData1  = cis16->itemData1;
+            cis.itemID2    = cis16->itemID2;
+            cis.itemData2  = cis16->itemData2;
+            cis.dwLocaleId = 0;  /* FIXME */
+            ret = callback( hwnd32, msg, wParam, (LPARAM)&cis, result, arg );
+        }
+        break;
+    case WM_DELETEITEM:
+        {
+            DELETEITEMSTRUCT16* dis16 = MapSL(lParam);
+            DELETEITEMSTRUCT dis;
+            dis.CtlType  = dis16->CtlType;
+            dis.CtlID    = dis16->CtlID;
+            dis.hwndItem = WIN_Handle32( dis16->hwndItem );
+            dis.itemData = dis16->itemData;
+            ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg );
+        }
+        break;
+    case WM_MEASUREITEM:
+        {
+            MEASUREITEMSTRUCT16* mis16 = MapSL(lParam);
+            MEASUREITEMSTRUCT mis;
+            mis.CtlType    = mis16->CtlType;
+            mis.CtlID      = mis16->CtlID;
+            mis.itemID     = mis16->itemID;
+            mis.itemWidth  = mis16->itemWidth;
+            mis.itemHeight = mis16->itemHeight;
+            mis.itemData   = mis16->itemData;
+            ret = callback( hwnd32, msg, wParam, (LPARAM)&mis, result, arg );
+            mis16->itemWidth  = (UINT16)mis.itemWidth;
+            mis16->itemHeight = (UINT16)mis.itemHeight;
+        }
+        break;
+    case WM_DRAWITEM:
+        {
+            DRAWITEMSTRUCT16* dis16 = MapSL(lParam);
+            DRAWITEMSTRUCT dis;
+            dis.CtlType       = dis16->CtlType;
+            dis.CtlID         = dis16->CtlID;
+            dis.itemID        = dis16->itemID;
+            dis.itemAction    = dis16->itemAction;
+            dis.itemState     = dis16->itemState;
+            dis.hwndItem      = (dis.CtlType == ODT_MENU) ? (HWND)HMENU_32(dis16->hwndItem)
+                                                          : WIN_Handle32( dis16->hwndItem );
+            dis.hDC           = HDC_32(dis16->hDC);
+            dis.itemData      = dis16->itemData;
+            dis.rcItem.left   = dis16->rcItem.left;
+            dis.rcItem.top    = dis16->rcItem.top;
+            dis.rcItem.right  = dis16->rcItem.right;
+            dis.rcItem.bottom = dis16->rcItem.bottom;
+            ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg );
+        }
+        break;
     default:
         {
             UINT msg32;




More information about the wine-cvs mailing list