Ignore:
Timestamp:
Nov 9, 2000, 9:20:33 PM (25 years ago)
Author:
sandervl
Message:

icon bugfixes

File:
1 edited

Legend:

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

    r4573 r4579  
    1 /* $Id: winicon.cpp,v 1.11 2000-11-09 18:15:23 sandervl Exp $ */
     1/* $Id: winicon.cpp,v 1.12 2000-11-09 20:20:33 sandervl Exp $ */
    22/*
    33 * Win32 Icon Code for OS/2
     
    470470    HDC hdc = 0;
    471471    BOOL DoStretch;
    472     INT size, colortablesize;
     472    INT size, colortablesize, bwsize, colorsize;
    473473
    474474    hotspot.x = ICON_HOTSPOT;
     
    497497    DoStretch = (bmi->bmiHeader.biHeight/2 != height) || (bmi->bmiHeader.biWidth != width);
    498498
     499    colorsize = DIB_GetDIBImageBytes(bmi->bmiHeader.biWidth, bmi->bmiHeader.biHeight/2, bmi->bmiHeader.biBitCount);
     500    bwsize    = (bmi->bmiHeader.biWidth * bmi->bmiHeader.biHeight/2)/8;
     501
    499502    /* Check bitmap header */
    500     if ( (bmi->bmiHeader.biSize != sizeof(BITMAPCOREHEADER)) &&
    501      (bmi->bmiHeader.biSize != sizeof(BITMAPINFOHEADER)  ||
    502       bmi->bmiHeader.biCompression != BI_RGB) )
     503    if((bmi->bmiHeader.biSize != sizeof(BITMAPCOREHEADER)) &&
     504       (bmi->bmiHeader.biSize != sizeof(BITMAPINFOHEADER)  ||
     505        bmi->bmiHeader.biCompression != BI_RGB) )
    503506    {
    504507        return 0;
     
    590593                if (DoStretch)
    591594                {
     595                    //TODO: rearrange mask if and & xor mask present!!!!!
     596                    if(cbSize - size - colorsize - bwsize == bwsize)
     597                    {
     598                        dprintf(("TODO: rearrange mask because and & xor mask present!!!!!"));
     599                    }
    592600                    if ((hAndBits = CreateBitmap(width, height, 1, 1, NULL)))
    593601                    {
     
    619627                    newpix += ((height-1)*linewidth);
    620628
    621                     for(int i=0;i<height;i++) {
    622                         memcpy(newpix, xbits, linewidth);
    623                         newpix -= linewidth;
    624                         xbits  += linewidth;
     629                    if(cbSize - size - colorsize - bwsize == bwsize)
     630                    {//this means an AND and XOR mask is present (interleaved; and/xor)
     631                        for(int i=0;i<height;i++) {
     632                            memcpy(newpix, xbits, linewidth);
     633                            newpix -= linewidth;
     634                            xbits  += linewidth*2;
     635                        }
     636                    }
     637                    else {
     638                        for(int i=0;i<height;i++) {
     639                            memcpy(newpix, xbits, linewidth);
     640                            newpix -= linewidth;
     641                            xbits  += linewidth;
     642                        }
    625643                    }
    626644                    newpix += linewidth;
Note: See TracChangeset for help on using the changeset viewer.