Ignore:
Timestamp:
Oct 27, 1999, 12:35:05 PM (26 years ago)
Author:
sandervl
Message:

Color cursor changes

File:
1 edited

Legend:

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

    r1042 r1474  
    1 /* $Id: oslibres.cpp,v 1.4 1999-09-25 14:16:05 sandervl Exp $ */
     1/* $Id: oslibres.cpp,v 1.5 1999-10-27 10:35:05 sandervl Exp $ */
    22/*
    33 * Window API wrappers for OS/2
     
    138138{
    139139 POINTERINFO pointerInfo = {0};
    140  HBITMAP     hbmColor;
     140 HBITMAP     hbmColor = 0, hbmMask = 0;
    141141 BITMAPARRAYFILEHEADER2 *bafh = (BITMAPARRAYFILEHEADER2 *)cursorbitmap;
    142  BITMAPFILEHEADER2 *bfh = (BITMAPFILEHEADER2 *)cursorbitmap;
     142 BITMAPFILEHEADER2 *bfh = (BITMAPFILEHEADER2 *)cursorbitmap, *bfhColor = 0;
    143143 HPS         hps;
    144144 HANDLE      hPointer;
     
    150150    if(bafh->usType == BFT_BITMAPARRAY && bafh->cbSize == sizeof(BITMAPARRAYFILEHEADER2)) {
    151151        bfh  = &bafh->bfh2;
    152     }
    153     else {//single icon
     152        bfhColor = (BITMAPFILEHEADER2 *)((char *)bfh + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2));
     153    }
     154    else {//single cursor
    154155        bfh  = (BITMAPFILEHEADER2 *)cursorbitmap;
    155     bafh = (BITMAPARRAYFILEHEADER2 *)bfh; //for calculation bitmap offset
     156        bfhColor = (BITMAPFILEHEADER2 *)((char *)bfh + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2));
     157        bafh = (BITMAPARRAYFILEHEADER2 *)bfh; //for calculation bitmap offset
    156158    }
    157159    //skip xor/and mask
    158160    hps = WinGetScreenPS(HWND_DESKTOP);
    159     hbmColor = GpiCreateBitmap(hps, &bfh->bmp2, CBM_INIT,
    160                                (char *)bafh + bfh->offBits,
    161                                (BITMAPINFO2 *)&bfh->bmp2);
    162     if(hbmColor == GPI_ERROR) {
     161    hbmMask = GpiCreateBitmap(hps, &bfh->bmp2, CBM_INIT,
     162                              (char *)bafh + bfh->offBits,
     163                              (BITMAPINFO2 *)&bfh->bmp2);
     164    if(hbmMask == GPI_ERROR) {
    163165        dprintf(("OSLibWinCreatePointer: GpiCreateBitmap failed!"));
    164166        WinReleasePS(hps);
    165167        return 0;
     168    }
     169
     170    if((ULONG)((char *)bafh+bfh->offBits) != (ULONG)bfhColor)
     171    {//color bitmap present
     172        hbmColor = GpiCreateBitmap(hps, &bfhColor->bmp2, CBM_INIT,
     173                               (char *)bafh + bfhColor->offBits,
     174                               (BITMAPINFO2 *)&bfhColor->bmp2);
     175        if(hbmColor == GPI_ERROR) {
     176                dprintf(("OSLibWinCreateIcon: GpiCreateBitmap failed!"));
     177                GpiDeleteBitmap(hbmMask);
     178                WinReleasePS(hps);
     179                return 0;
     180        }
    166181    }
    167182
     
    169184    pointerInfo.xHotspot   = bfh->xHotspot;
    170185    pointerInfo.yHotspot   = bfh->yHotspot;
    171     pointerInfo.hbmColor   = 0;
    172     pointerInfo.hbmPointer = hbmColor;
     186    pointerInfo.hbmColor   = hbmColor;
     187    pointerInfo.hbmPointer = hbmMask;
    173188    hPointer = WinCreatePointerIndirect(HWND_DESKTOP, &pointerInfo);
    174189
     
    176191        dprintf(("OSLibWinCreatePointer: WinCreatePointerIndirect failed!"));
    177192    }
    178     GpiDeleteBitmap(hbmColor);
     193    GpiDeleteBitmap(hbmMask);
     194    if(hbmColor) GpiDeleteBitmap(hbmColor);
    179195    WinReleasePS(hps);
    180196    return hPointer;
Note: See TracChangeset for help on using the changeset viewer.