Changeset 9437 for trunk/src


Ignore:
Timestamp:
Nov 27, 2002, 2:56:27 PM (23 years ago)
Author:
sandervl
Message:

CopyBitmap fix + use PM bitmaps for standard user32 frame buttons in OS/2 GUI mode

Location:
trunk/src/user32
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/loadres.cpp

    r8112 r9437  
    1 /* $Id: loadres.cpp,v 1.39 2002-03-22 12:51:17 sandervl Exp $ */
     1/* $Id: loadres.cpp,v 1.40 2002-11-27 13:56:26 sandervl Exp $ */
    22
    33/*
     
    166166    int size;
    167167
     168    //if in OS/2 mode, then we must replace the standard button bitmaps
     169    //(min, max, restore, close)
     170#ifdef NEW_WGSS
     171    if(fOS2Look && (hinst == hInstanceUser32 || !hinst)) {
     172        switch((ULONG)lpszName) {
     173        case OBM_CLOSE:
     174            return CopyImage(hBmpCloseButton, IMAGE_BITMAP, 0, 0, 0);
     175        case OBM_CLOSED:
     176            return CopyImage(hBmpCloseButtonDown, IMAGE_BITMAP, 0, 0, 0);
     177        case OBM_RESTORE:
     178            return CopyImage(hBmpRestoreButton, IMAGE_BITMAP, 0, 0, 0);
     179        case OBM_RESTORED:
     180            return CopyImage(hBmpRestoreButtonDown, IMAGE_BITMAP, 0, 0, 0);
     181        case OBM_REDUCE:
     182            return CopyImage(hBmpMinButton, IMAGE_BITMAP, 0, 0, 0);
     183        case OBM_REDUCED:
     184            return CopyImage(hBmpMinButtonDown, IMAGE_BITMAP, 0, 0, 0);
     185        case OBM_ZOOM:
     186            return CopyImage(hBmpMaxButton, IMAGE_BITMAP, 0, 0, 0);
     187        case OBM_ZOOMD:
     188            return CopyImage(hBmpMaxButtonDown, IMAGE_BITMAP, 0, 0, 0);
     189        }
     190    }
     191#endif
    168192    if (!(fuLoad & LR_LOADFROMFILE))
    169193    {
     
    304328    }
    305329
     330#ifdef __WIN32OS2__
     331    BITMAPINFO* pInfo;
     332    HBITMAP oldbmp;
     333    HDC     hdc;
     334    int     colortablesize, bmpsize, headersize;
     335    char   *pBitmapData;
     336
     337    colortablesize = 0;
     338
     339    if(bm.bmBitsPixel <= 8) {
     340        colortablesize = sizeof(RGBQUAD)*(1<<bm.bmBitsPixel);
     341    }
     342    bmpsize = DIB_GetDIBImageBytes(bm.bmWidth, bm.bmHeight, bm.bmBitsPixel);
     343    headersize = sizeof(BITMAPINFO)+colortablesize+3*sizeof(DWORD); //+ extra space for > 8bpp images
     344
     345    pInfo = (BITMAPINFO *)malloc(headersize+bmpsize);
     346    if(pInfo == NULL) {
     347        DebugInt3();
     348        return 0;
     349    }
     350    pBitmapData = (char*)((char *)pInfo + headersize);
     351    memset(pInfo, 0, headersize+bmpsize);
     352
     353    hdc = CreateCompatibleDC(0);
     354
     355    pInfo->bmiHeader.biSize     = sizeof(BITMAPINFOHEADER);
     356    pInfo->bmiHeader.biPlanes   = bm.bmPlanes;
     357    pInfo->bmiHeader.biBitCount = bm.bmBitsPixel;
     358    pInfo->bmiHeader.biWidth    = bm.bmWidth;
     359    pInfo->bmiHeader.biHeight   = bm.bmHeight;
     360
     361    GetDIBits(hdc, hBitmap, 0, bm.bmHeight, pBitmapData, pInfo, DIB_RGB_COLORS);
     362
     363    res = CreateDIBitmap(hdc, &pInfo->bmiHeader, CBM_INIT, pBitmapData,
     364                         pInfo, DIB_RGB_COLORS );
     365
     366    DeleteDC(hdc);
     367    free(pInfo);
     368#else
    306369    bm.bmBits = NULL;
    307370    res = CreateBitmapIndirect(&bm);
     
    315378        HeapFree( GetProcessHeap(), 0, buf );
    316379    }
     380#endif
    317381    return res;
    318382}
  • trunk/src/user32/mdi.c

    r7342 r9437  
    8989
    9090#ifdef __WIN32OS2__
     91#include "pmwindow.h"
    9192#include <heapstring.h>
    9293#define WIN_GetFullHandle(a)    a
     
    10511052        return 0;
    10521053
     1054#ifdef __WIN32OS2__
     1055    if(fOS2Look)
     1056    {//different order for OS2 GUI mode   
     1057        AppendMenuA(menu,MF_HELP | MF_BITMAP,
     1058                    SC_CLOSE, (LPSTR)(DWORD)HBMMENU_MBAR_CLOSE );
     1059        AppendMenuA(menu,MF_HELP | MF_BITMAP,
     1060                    SC_MINIMIZE, (LPSTR)(DWORD)HBMMENU_MBAR_MINIMIZE ) ;
     1061        AppendMenuA(menu,MF_HELP | MF_BITMAP,
     1062                    SC_RESTORE, (LPSTR)(DWORD)HBMMENU_MBAR_RESTORE );
     1063    }
     1064    else {
     1065#endif
    10531066    AppendMenuA(menu,MF_HELP | MF_BITMAP,
    10541067                   SC_MINIMIZE, (LPSTR)(DWORD)HBMMENU_MBAR_MINIMIZE ) ;
    10551068    AppendMenuA(menu,MF_HELP | MF_BITMAP,
    10561069                   SC_RESTORE, (LPSTR)(DWORD)HBMMENU_MBAR_RESTORE );
    1057 
     1070#ifdef __WIN32OS2__
     1071    }
     1072#endif
    10581073  /* In Win 95 look, the system menu is replaced by the child icon */
    10591074
     
    11051120
    11061121    /* The close button is only present in Win 95 look */
    1107 #ifndef __WIN32OS2__
     1122#ifdef __WIN32OS2__
     1123    if(!fOS2Look)
     1124#else
    11081125    if(TWEAK_WineLook > WIN31_LOOK)
    1109     {
    1110 #endif
     1126#endif
     1127    {
    11111128        AppendMenuA(menu,MF_HELP | MF_BITMAP,
    11121129                       SC_CLOSE, (LPSTR)(DWORD)HBMMENU_MBAR_CLOSE );
    1113 #ifndef __WIN32OS2__
    1114     }
    1115 #endif
     1130    }
    11161131
    11171132    EnableMenuItem(hSysPopup, SC_SIZE, MF_BYCOMMAND | MF_GRAYED);
  • trunk/src/user32/pmwindow.cpp

    r9297 r9437  
    1 /* $Id: pmwindow.cpp,v 1.189 2002-09-26 16:04:34 sandervl Exp $ */
     1/* $Id: pmwindow.cpp,v 1.190 2002-11-27 13:56:26 sandervl Exp $ */
    22/*
    33 * Win32 Window Managment Code for OS/2
     
    2828#include <winuser32.h>
    2929#include <wprocess.h>
    30 #include <misc.h>
     30#include <dbglog.h>
    3131#include <win32wbase.h>
    3232#include <win32dlg.h>
     
    6969BOOL    fDragDropActive = FALSE;
    7070BOOL    fDragDropDisabled = FALSE;
    71 HBITMAP hbmFrameMenu[3] = {0};
     71
     72
     73#define PMMENU_MINBUTTON           0
     74#define PMMENU_MAXBUTTON           1
     75#define PMMENU_RESTOREBUTTON       2
     76#define PMMENU_CLOSEBUTTON         3
     77#define PMMENU_MINBUTTONDOWN       4
     78#define PMMENU_MAXBUTTONDOWN       5
     79#define PMMENU_RESTOREBUTTONDOWN   6
     80#define PMMENU_CLOSEBUTTONDOWN     7
     81
     82HBITMAP hbmFrameMenu[8] = {0};
     83
     84//Win32 bitmap handles of the OS/2 min, max and restore buttons
     85HBITMAP hBmpMinButton     = 0;
     86HBITMAP hBmpMaxButton     = 0;
     87HBITMAP hBmpRestoreButton = 0;
     88HBITMAP hBmpCloseButton   = 0;
     89HBITMAP hBmpMinButtonDown     = 0;
     90HBITMAP hBmpMaxButtonDown     = 0;
     91HBITMAP hBmpRestoreButtonDown = 0;
     92HBITMAP hBmpCloseButtonDown   = 0;
    7293
    7394static PFNWP pfnFrameWndProc = NULL;
     
    88109static char *PMDragExtractFiles(PDRAGINFO pDragInfo, ULONG *pcItems, ULONG *pulBytes);
    89110static BOOL  PMDragValidate(PDRAGINFO pDragInfo);
     111static void  QueryPMMenuBitmaps();
    90112
    91113MRESULT EXPENTRY Win32WindowProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
     
    217239    if(fOS2Look)
    218240    {
    219         CHAR szDisplay[30];
    220         HMODULE hModDisplay;
    221 
    222241        SYSCOLOR_Init(FALSE); //use OS/2 colors
    223 
    224         // query the name of the display driver resource DLL to load
    225         // some standard bitmaps from it
    226         DspInitSystemDriverName(szDisplay, sizeof(szDisplay));
    227         DosQueryModuleHandle(szDisplay, &hModDisplay);
    228 
    229         hbmFrameMenu[0] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTON, 0, 0);
    230         hbmFrameMenu[1] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTON, 0, 0);
    231         hbmFrameMenu[2] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTON, 0, 0);
     242        QueryPMMenuBitmaps();
    232243    }
    233244
     
    244255} /* End of main */
    245256//******************************************************************************
     257HBITMAP OPEN32API _O32_CreateBitmapFromPMHandle(HBITMAP hPMBitmap);
     258
     259inline HBITMAP O32_CreateBitmapFromPMHandle(HBITMAP hPMBitmap)
     260{
     261 HBITMAP yyrc;
     262 USHORT sel = RestoreOS2FS();
     263
     264    yyrc = _O32_CreateBitmapFromPMHandle(hPMBitmap);
     265    SetFS(sel);
     266
     267    return yyrc;
     268}
     269//******************************************************************************
     270static void QueryPMMenuBitmaps()
     271{
     272    CHAR szDisplay[30];
     273    HMODULE hModDisplay;
     274
     275    if(hbmFrameMenu[0] == 0)
     276    {
     277        CHAR szDisplay[30];
     278        HMODULE hModDisplay;
     279        HDC   hdc;              /* Device-context handle                */
     280        DEVOPENSTRUC dop = {NULL, "DISPLAY", NULL, NULL, NULL, NULL,
     281                            NULL, NULL, NULL};
     282
     283        /* create memory device context */
     284        hdc = DevOpenDC(hab, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&dop, NULLHANDLE);
     285
     286        DspInitSystemDriverName(szDisplay, sizeof(szDisplay));
     287        DosQueryModuleHandle(szDisplay, &hModDisplay);
     288
     289        hbmFrameMenu[PMMENU_MINBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTON, 0, 0);
     290        hbmFrameMenu[PMMENU_MINBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTONDEP, 0, 0);
     291        hbmFrameMenu[PMMENU_MAXBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTON, 0, 0);
     292        hbmFrameMenu[PMMENU_MAXBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTONDEP, 0, 0);
     293        hbmFrameMenu[PMMENU_RESTOREBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTON, 0, 0);
     294        hbmFrameMenu[PMMENU_RESTOREBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTONDEP, 0, 0);
     295        hbmFrameMenu[PMMENU_CLOSEBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_CLOSE, 0, 0);
     296        hbmFrameMenu[PMMENU_CLOSEBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_CLOSEDEP, 0, 0);
     297
     298#ifdef NEW_WGSS
     299        //Create win32 bitmap handles of the OS/2 min, max and restore buttons
     300        hBmpMinButton     = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MINBUTTON]);
     301        hBmpMinButtonDown = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MINBUTTONDOWN]);
     302        hBmpMaxButton     = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MAXBUTTON]);
     303        hBmpMaxButtonDown = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MAXBUTTONDOWN]);
     304        hBmpRestoreButton = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_RESTOREBUTTON]);
     305        hBmpRestoreButtonDown = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_RESTOREBUTTONDOWN]);
     306        hBmpCloseButton   = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_CLOSEBUTTON]);
     307        hBmpCloseButtonDown   = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_CLOSEBUTTONDOWN]);
     308#endif
     309        DevCloseDC(hdc);
     310    }
     311}
     312//******************************************************************************
    246313//menu.cpp
    247314BOOL MENU_Init();
    248315//******************************************************************************
    249 // AH TODO 2002-07-18
    250 // Note: this looks a lot like unnecessary code duplication. We should call this
    251 // function from InitPM...
    252316//******************************************************************************
    253317void WIN32API SetWindowAppearance(int fLooks)
     
    255319    if(fLooks == OS2_APPEARANCE || fLooks == OS2_APPEARANCE_SYSMENU)
    256320    {
    257         CHAR szDisplay[30];
    258         HMODULE hModDisplay;
    259 
    260321        SYSCOLOR_Init(FALSE); //use OS/2 colors
    261 
    262         if(hbmFrameMenu[0] == 0)
    263         {
    264             CHAR szDisplay[30];
    265             HMODULE hModDisplay;
    266             HDC   hdc;              /* Device-context handle                */
    267             DEVOPENSTRUC dop = {NULL, "DISPLAY", NULL, NULL, NULL, NULL,
    268                                 NULL, NULL, NULL};
    269 
    270             /* create memory device context */
    271             hdc = DevOpenDC(hab, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&dop, NULLHANDLE);
    272 
    273             DspInitSystemDriverName(szDisplay, sizeof(szDisplay));
    274             DosQueryModuleHandle(szDisplay, &hModDisplay);
    275 
    276             hbmFrameMenu[0] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTON, 0, 0);
    277             hbmFrameMenu[1] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTON, 0, 0);
    278             hbmFrameMenu[2] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTON, 0, 0);
    279             DevCloseDC(hdc);
    280         }
     322        QueryPMMenuBitmaps();
    281323    }
    282324    fOS2Look = fLooks;
     
    12591301                     //SC_RESTORE -> SC_MINIMIZE
    12601302                     dprintf(("%x -> SC_RESTORE -> SC_MINIMIZE", win32wnd->getWindowHandle()));
    1261                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_RESTORE, SC_MINIMIZE, hbmFrameMenu[0]);
     1303                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_RESTORE, SC_MINIMIZE, hbmFrameMenu[PMMENU_MINBUTTON]);
    12621304                     if(dwStyle & WS_MAXIMIZE_W) {
    12631305                         //SC_MAXIMIZE -> SC_RESTORE
    12641306                         dprintf(("%x -> SC_MAXIMIZE -> SC_RESTORE", win32wnd->getWindowHandle()));
    1265                          FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[2]);
     1307                         FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[PMMENU_RESTOREBUTTON]);
    12661308                     }
    12671309                 }
     
    12701312                     //SC_RESTORE -> SC_MAXIMIZE
    12711313                     dprintf(("%x -> SC_RESTORE -> SC_MAXIMIZE", win32wnd->getWindowHandle()));
    1272                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_RESTORE, SC_MAXIMIZE, hbmFrameMenu[1]);
     1314                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_RESTORE, SC_MAXIMIZE, hbmFrameMenu[PMMENU_MAXBUTTON]);
    12731315                 }
    12741316                 else
     
    12761318                     //SC_MINIMIZE -> SC_RESTORE
    12771319                     dprintf(("%x -> SC_MINIMIZE -> SC_RESTORE", win32wnd->getWindowHandle()));
    1278                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_MINIMIZE, SC_RESTORE, hbmFrameMenu[2]);
     1320                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_MINIMIZE, SC_RESTORE, hbmFrameMenu[PMMENU_RESTOREBUTTON]);
    12791321                 }
    12801322                 else
     
    12821324                     //SC_MAXIMIZE -> SC_RESTORE
    12831325                     dprintf(("%x -> SC_MAXIMIZE -> SC_RESTORE", win32wnd->getWindowHandle()));
    1284                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[2]);
     1326                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[PMMENU_RESTOREBUTTON]);
    12851327                 }
    12861328             }
  • trunk/src/user32/pmwindow.h

    r8735 r9437  
    1 /* $Id: pmwindow.h,v 1.17 2002-06-20 14:18:15 sandervl Exp $ */
     1/* $Id: pmwindow.h,v 1.18 2002-11-27 13:56:27 sandervl Exp $ */
    22/*
    33 * Win32 Window Managment Code for OS/2
     
    3131extern BOOL  fDragDropActive;
    3232
     33//Win32 bitmap handles of the OS/2 min, max and restore buttons
     34extern HBITMAP hBmpMinButton, hBmpMinButtonDown;
     35extern HBITMAP hBmpMaxButton, hBmpMaxButtonDown;
     36extern HBITMAP hBmpRestoreButton, hBmpRestoreButtonDown;
     37extern HBITMAP hBmpCloseButton, hBmpCloseButtonDown;
     38
    3339#define TFOS_LEFT                    0x0001
    3440#define TFOS_TOP                     0x0002
     
    3844#define TFOS_MOVE                    0x000F
    3945
     46#ifdef __cplusplus
    4047VOID FrameTrackFrame(Win32BaseWindow *win32wnd,DWORD flags);
    4148void Frame_SysCommandSizeMove(Win32BaseWindow *win32wnd, WPARAM wParam);
     49#endif
    4250
    4351#endif
Note: See TracChangeset for help on using the changeset viewer.