Changeset 816 for trunk/src/kernel32


Ignore:
Timestamp:
Sep 4, 1999, 2:42:10 PM (26 years ago)
Author:
sandervl
Message:

icongroup & cursorgroup fixes

Location:
trunk/src/kernel32
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/cvtbitmap.cpp

    r581 r816  
    1 /* $Id: cvtbitmap.cpp,v 1.1 1999-08-19 14:19:14 sandervl Exp $ */
     1/* $Id: cvtbitmap.cpp,v 1.2 1999-09-04 12:41:45 sandervl Exp $ */
    22
    33/*
     
    505505//******************************************************************************
    506506//******************************************************************************
    507 ULONG QuerySizeBitmap(WINBITMAPINFOHEADER *pBHdr, ULONG ulSize)
     507ULONG QueryConvertedBitmapSize(WINBITMAPINFOHEADER *pBHdr, ULONG ulSize)
    508508{
    509509        ULONG retSize;
     
    589589        /**************************************/
    590590        default: //fail
    591                 dprintf(("QuerySizeBitmap - default - fail!"));
     591                dprintf(("QueryConvertedBitmapSize - default - fail!"));
    592592                return 0;
    593593        }
  • trunk/src/kernel32/cvtcursor.cpp

    r634 r816  
    1 /* $Id: cvtcursor.cpp,v 1.2 1999-08-22 22:11:21 sandervl Exp $ */
     1/* $Id: cvtcursor.cpp,v 1.3 1999-09-04 12:41:45 sandervl Exp $ */
    22
    33/*
     
    2828
    2929//******************************************************************************
     30//******************************************************************************
     31ULONG QueryConvertedCursorSize(CursorComponent *curHdr, int size)
     32{
     33 WINBITMAPINFOHEADER *bhdr = (WINBITMAPINFOHEADER *)(curHdr+1);
     34 int                  bmpsize, cursorsize;
     35
     36  bmpsize = size - sizeof(CursorComponent) - (1<<bhdr->biBitCount)*sizeof(RGBQUAD);
     37  cursorsize = sizeof(BITMAPFILEHEADER2) + bmpsize + (1<<bhdr->biBitCount)*sizeof(RGB2);
     38
     39  return cursorsize;
     40}
     41//******************************************************************************
    3042//NOTE: offsetBits is the value added to the offBits bitmap structure members
    3143//      (handy for converting cursor groups)
    3244//******************************************************************************
    33 void *ConvertCursor(CursorComponent *curHdr, int size, int offsetBits)
     45void *ConvertCursor(CursorComponent *curHdr, int size, int *os2size, int offsetBits)
    3446{
    3547 RGBQUAD   *rgb;
     
    106118  memcpy((char *)os2rgb, (char *)rgb, bwsize);
    107119
     120  *os2size = cursorsize;
    108121  return cursorhdr;
    109122}
  • trunk/src/kernel32/cvtcursorgrp.cpp

    r589 r816  
    1 /* $Id: cvtcursorgrp.cpp,v 1.1 1999-08-19 19:51:00 sandervl Exp $ */
     1/* $Id: cvtcursorgrp.cpp,v 1.2 1999-09-04 12:41:45 sandervl Exp $ */
    22
    33/*
     
    3535{
    3636 CursorResDir *rdir = (CursorResDir *)(chdr + 1);
    37  int i, groupsize = 0;
     37 int i, groupsize = 0, os2cursorsize;
    3838 BITMAPARRAYFILEHEADER *bafh, *orgbafh;
    3939 CursorComponent       *cursorhdr;
     
    5050        dprintf(("Bits    : %d", rdir->wBitCount));
    5151        dprintf(("ResBytes: %d", rdir->lBytesInRes));
    52         groupsize += module->getResourceSizeA((LPSTR)rdir->wNameOrdinal, (LPSTR)NTRT_CURSOR);
     52        winres     = (Win32Resource *)FindResourceA(module->getInstanceHandle(),
     53                                                    (LPCSTR)rdir->wNameOrdinal,
     54                                                    (LPSTR)NTRT_CURSOR);
     55        groupsize += winres->getOS2Size();
    5356        rdir++;
    5457  }
     
    7780
    7881        cursorhdr = (CursorComponent *)winres->lockResource();
    79         os2cursor = ConvertCursor(cursorhdr, winres->getSize(), (int)bafh - (int)orgbafh + sizeof(BITMAPARRAYFILEHEADER)-sizeof(BITMAPFILEHEADER));
     82        os2cursor = ConvertCursor(cursorhdr, winres->getSize(), &os2cursorsize, (int)bafh - (int)orgbafh + sizeof(BITMAPARRAYFILEHEADER)-sizeof(BITMAPFILEHEADER));
    8083
    8184        if(os2cursor == NULL) {
     
    8689        }
    8790
    88         memcpy((char *)&bafh->bfh, os2cursor, winres->getSize());
     91        memcpy((char *)&bafh->bfh, os2cursor, os2cursorsize);
    8992        free(os2cursor);
    9093
    91         bafh = (BITMAPARRAYFILEHEADER *)((int)&bafh->bfh + winres->getSize());
     94        bafh = (BITMAPARRAYFILEHEADER *)((int)&bafh->bfh + os2cursorsize);
    9295        delete winres;
    9396
  • trunk/src/kernel32/cvticon.cpp

    r589 r816  
    1 /* $Id: cvticon.cpp,v 1.2 1999-08-19 19:50:40 sandervl Exp $ */
     1/* $Id: cvticon.cpp,v 1.3 1999-09-04 12:41:46 sandervl Exp $ */
    22
    33/*
     
    2727
    2828//******************************************************************************
     29//******************************************************************************
     30ULONG QueryConvertedIconSize(WINBITMAPINFOHEADER *bmpHdr, int size)
     31{
     32 int bwsize, colorsize, rgbsize, iconsize;
     33
     34  bwsize   = (bmpHdr->biWidth*(bmpHdr->biHeight/2))/8;
     35  colorsize = bmpHdr->biWidth*(bmpHdr->biHeight/2);
     36  //SvL: 28-09-'98: only for <= 8
     37  if(bmpHdr->biBitCount <= 8)
     38        rgbsize = (1<<bmpHdr->biBitCount)*sizeof(RGB2);
     39  else  rgbsize = 0;
     40
     41  switch(bmpHdr->biBitCount) {
     42        case 1:
     43                colorsize /= 8;
     44                break;
     45        case 4:
     46                colorsize /= 2;
     47                break;
     48        case 8:
     49                break;
     50        case 16:
     51                colorsize *= 2;
     52                break;
     53        case 24:
     54                colorsize *= 3;
     55                break;
     56        case 32:
     57                colorsize *= 4;
     58                break;
     59  }
     60  if(bmpHdr->biSizeImage == 0 && bmpHdr->biCompression == 0) {
     61        bmpHdr->biSizeImage = bwsize + colorsize;
     62  }
     63
     64  //SvL: 28-09-'98: cllngenu.dll has an incorrect size in the header
     65  if(bmpHdr->biSizeImage < colorsize) {
     66        bmpHdr->biSizeImage = colorsize;
     67  }
     68  //bitmapfileheader for AndXor mask + 2 RGB structs + bitmapfileheader
     69  //for color bitmap + RGB structs for all the colors
     70  //SvL, 3-3-98: 2*bwsize
     71  iconsize = 2*sizeof(BITMAPFILEHEADER2) + 2*sizeof(RGB2) +
     72             rgbsize + 2*bwsize + bmpHdr->biSizeImage;
     73
     74  return iconsize;
     75}
     76//******************************************************************************
    2977//NOTE: offsetBits is the value added to the offBits bitmap structure members
    3078//      (handy for converting icon groups)
    3179//******************************************************************************
    32 void *ConvertIcon(WINBITMAPINFOHEADER *bmpHdr, int size, int offsetBits)
     80void *ConvertIcon(WINBITMAPINFOHEADER *bmpHdr, int size, int *os2size, int offsetBits)
    3381{
    3482 RGBQUAD *rgb;
     
    83131  iconsize = 2*sizeof(BITMAPFILEHEADER2) + 2*sizeof(RGB2) +
    84132             rgbsize + 2*bwsize + bmpHdr->biSizeImage;
     133#if 0
     134  //SvL: Not necessary anymore
    85135  //There are icons without an XOR mask, so check for it
    86136  if(bmpHdr->biSizeImage == colorsize) {
    87137        iconsize += bwsize;
    88138  }
     139#endif
    89140  iconhdr  = (BITMAPFILEHEADER2 *)malloc(iconsize);
    90141  memset(iconhdr, 0, iconsize);
     
    104155  os2rgb                 = (RGB2 *)(iconhdr+1);
    105156  memset(os2rgb, 0, sizeof(RGB2));
    106   memset(os2rgb+1, 0xff, sizeof(RGB2)); //not reserved byte
     157  memset(os2rgb+1, 0xff, sizeof(RGB)); //not reserved byte!
    107158  iconhdr2               = (BITMAPFILEHEADER2 *)(os2rgb+2);
    108159  iconhdr2->usType       = BFT_COLORICON;
     
    143194        memcpy((char *)os2rgb+2*bwsize, (char *)rgb, colorsize);
    144195  }
     196  *os2size = iconsize;
    145197  return (void *)iconhdr;
    146198}
  • trunk/src/kernel32/cvticongrp.cpp

    r589 r816  
    1 /* $Id: cvticongrp.cpp,v 1.1 1999-08-19 19:50:40 sandervl Exp $ */
     1/* $Id: cvticongrp.cpp,v 1.2 1999-09-04 12:41:46 sandervl Exp $ */
    22
    33/*
     
    3535{
    3636 ResourceDirectory *rdir = (ResourceDirectory *)(ihdr + 1);
    37  int i, groupsize = 0;
     37 int i, groupsize = 0, os2iconsize;
    3838 BITMAPARRAYFILEHEADER2 *bafh, *orgbafh;
    3939 WINBITMAPINFOHEADER    *iconhdr;
     
    5050        dprintf(("Bits    : %d", rdir->wBitCount));
    5151        dprintf(("ResBytes: %d", rdir->lBytesInRes));
    52         groupsize += module->getResourceSizeA((LPSTR)rdir->wNameOrdinal, (LPSTR)NTRT_ICON);
     52        winres     = (Win32Resource *)FindResourceA(module->getInstanceHandle(),
     53                                                   (LPCSTR)rdir->wNameOrdinal,
     54                                                   (LPSTR)NTRT_ICON);
     55        groupsize += winres->getOS2Size();
    5356        rdir++;
    5457  }
     
    7679
    7780        iconhdr = (WINBITMAPINFOHEADER *)winres->lockResource();
    78         os2icon = ConvertIcon(iconhdr, winres->getSize(), (int)bafh - (int)orgbafh + sizeof(BITMAPARRAYFILEHEADER2)-sizeof(BITMAPFILEHEADER2));
     81        os2icon = ConvertIcon(iconhdr, winres->getSize(), &os2iconsize, (int)bafh - (int)orgbafh + sizeof(BITMAPARRAYFILEHEADER2)-sizeof(BITMAPFILEHEADER2));
    7982
    8083        if(os2icon == NULL) {
     
    8588        }
    8689
    87         memcpy((char *)&bafh->bfh2, os2icon, winres->getSize());
     90        memcpy((char *)&bafh->bfh2, os2icon, os2iconsize);
    8891        free(os2icon);
    8992
    90         bafh = (BITMAPARRAYFILEHEADER2 *)((int)&bafh->bfh2 + winres->getSize());
     93        bafh = (BITMAPARRAYFILEHEADER2 *)((int)&bafh->bfh2 + os2iconsize);
    9194        delete winres;
    9295
  • trunk/src/kernel32/cvtresource.h

    r589 r816  
    1 /* $Id: cvtresource.h,v 1.2 1999-08-19 19:50:40 sandervl Exp $ */
     1/* $Id: cvtresource.h,v 1.3 1999-09-04 12:41:46 sandervl Exp $ */
    22
    33#ifndef _CVTRESOURCE_H_
     
    1212void *ConvertAccelerator(WINACCEL *accdata, int size, int cp = 0);
    1313void *ConvertBitmap(WINBITMAPINFOHEADER *pBHdr, ULONG ulSize, PULONG pulSize);
    14 void *ConvertCursor(CursorComponent *curHdr, int size, int offsetBits = 0);
     14void *ConvertCursor(CursorComponent *curHdr, int size, int *os2size, int offsetBits = 0);
    1515void *ConvertCursorGroup(CursorHeader *chdr, int size, Win32Image *module);
    16 void *ConvertIcon(WINBITMAPINFOHEADER *bmpHdr, int size, int offsetBits = 0);
     16void *ConvertIcon(WINBITMAPINFOHEADER *bmpHdr, int size, int *os2size, int offsetBits = 0);
    1717void *ConvertIconGroup(IconHeader *ihdr, int size, Win32Image *module);
    1818void *ConvertMenu(MenuHeader *menu, int size, int cp = 0);
    1919
     20ULONG QueryConvertedBitmapSize(WINBITMAPINFOHEADER *pBHdr, ULONG ulSize);
     21ULONG QueryConvertedCursorSize(CursorComponent *curHdr, int size);
     22ULONG QueryConvertedIconSize(WINBITMAPINFOHEADER *bmpHdr, int size);
    2023
    2124#endif /* _CVTRESOURCE_H_ */
  • trunk/src/kernel32/makefile

    r752 r816  
    1 # $Id: makefile,v 1.37 1999-08-31 14:36:45 sandervl Exp $
     1# $Id: makefile,v 1.38 1999-09-04 12:41:46 sandervl Exp $
    22
    33#
     
    251251winres.OBJ: \
    252252    .\winres.cpp \
     253    cvtresource.h \
    253254    $(PDWIN32_INCLUDE)\winresmenu.h \
    254255    $(PDWIN32_INCLUDE)\winres.h \
     
    349350
    350351clean:
    351         $(RM) *.OBJ *.LIB *.dll *~ *.map *.pch
     352        $(RM) *.OBJ *.LIB *.dll *.lrf *.res *.map *.pch
    352353        $(RM) $(PDWIN32_LIB)\$(TARGET).LIB
    353354        $(RM) $(PDWIN32_BIN)\$(TARGET).dll
  • trunk/src/kernel32/winres.cpp

    r761 r816  
    1 /* $Id: winres.cpp,v 1.14 1999-08-31 17:15:30 sandervl Exp $ */
     1/* $Id: winres.cpp,v 1.15 1999-09-04 12:41:46 sandervl Exp $ */
    22
    33/*
     
    331331}
    332332//******************************************************************************
     333//return size of converted win32 resource
     334//******************************************************************************
     335ULONG Win32Resource::getOS2Size()
     336{
     337  switch(type) {
     338    case NTRT_NEWBITMAP:
     339    case NTRT_BITMAP:
     340        return QueryConvertedBitmapSize((WINBITMAPINFOHEADER *)winresdata, ressize);
     341
     342    case NTRT_CURSOR:
     343        return QueryConvertedCursorSize((CursorComponent *)winresdata, ressize);
     344
     345    case NTRT_ICON:
     346        return QueryConvertedIconSize((WINBITMAPINFOHEADER *)winresdata, ressize);
     347
     348    case NTRT_GROUP_ICON:
     349    case NTRT_GROUP_CURSOR:
     350    case NTRT_ACCELERATORS:
     351    case NTRT_NEWMENU:
     352    case NTRT_MENU:
     353    case NTRT_NEWDIALOG:
     354    case NTRT_DIALOG:
     355    case NTRT_FONTDIR:
     356    case NTRT_FONT:
     357    case NTRT_MESSAGETABLE:
     358    case NTRT_RCDATA:
     359    case NTRT_VERSION:
     360    case NTRT_STRING:
     361    default:
     362        dprintf(("Win32Resource::getOS2Size SHOULDN'T BE CALLED for this resource type (%d) (NOT IMPLEMENTED)!!", type));
     363        break;
     364  }
     365  return 0;
     366}
     367//******************************************************************************
    333368//******************************************************************************
    334369PVOID Win32Resource::convertResource(void *win32res)
    335370{
    336  ULONG cvtressize;
     371 int cvtressize;
    337372
    338373  switch(type) {
     
    342377
    343378    case NTRT_CURSOR:
    344         return ConvertCursor((CursorComponent *)win32res, ressize);
     379        return ConvertCursor((CursorComponent *)win32res, ressize, &cvtressize);
    345380
    346381    case NTRT_GROUP_CURSOR:
     
    351386
    352387    case NTRT_ICON:
    353         return ConvertIcon((WINBITMAPINFOHEADER *)win32res, ressize);
     388        return ConvertIcon((WINBITMAPINFOHEADER *)win32res, ressize, &cvtressize);
    354389
    355390    case NTRT_ACCELERATORS:
Note: See TracChangeset for help on using the changeset viewer.