Changeset 6490 for trunk/src/user32/icon.cpp
- Timestamp:
- Aug 8, 2001, 2:06:29 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/icon.cpp
r6487 r6490 1 /* $Id: icon.cpp,v 1.1 1 2001-08-08 10:07:18sandervl Exp $ */1 /* $Id: icon.cpp,v 1.12 2001-08-08 12:06:29 sandervl Exp $ */ 2 2 3 3 /* … … 37 37 #define CBM_INIT_W 4 38 38 39 #if 040 //******************************************************************************41 //******************************************************************************42 PBYTE ConvertWin32Icon(PBYTE presbits, DWORD dwResSize, DWORD *OS2ResSize)43 {44 WINBITMAPINFOHEADER *bmpHdr = (WINBITMAPINFOHEADER *)presbits;45 BITMAPFILEHEADER *iconhdr;46 BITMAPFILEHEADER *iconhdr2;47 RGBQUAD *rgb;48 RGB *os2rgb;49 int bwsize, i, colorsize, rgbsize, iconsize;50 51 bwsize = (bmpHdr->biWidth*(bmpHdr->biHeight/2))/8;52 colorsize = bmpHdr->biWidth*(bmpHdr->biHeight/2);53 if(bmpHdr->biBitCount < 24)54 rgbsize = (1<<bmpHdr->biBitCount)*sizeof(RGB);55 else rgbsize = 0;56 57 switch(bmpHdr->biBitCount) {58 case 1:59 colorsize /= 8;60 break;61 case 4:62 colorsize /= 2;63 break;64 case 8:65 break;66 case 16:67 colorsize *= 2;68 break;69 case 24:70 colorsize *= 3;71 break;72 case 32:73 colorsize *= 4;74 break;75 }76 if(bmpHdr->biSizeImage == 0 && bmpHdr->biCompression == 0) {77 bmpHdr->biSizeImage = bwsize + colorsize;78 }79 #if 080 cout << "Icon size : " << bmpHdr->biSizeImage << endl;81 cout << "Icon Width : " << bmpHdr->biWidth << endl;82 //height for both the XOR and AND bitmap (color & BW)83 cout << "Height : " << bmpHdr->biHeight << endl;84 cout << "Icon Bitcount: " << bmpHdr->biBitCount << endl;85 cout << "Icon Compress: " << bmpHdr->biCompression << endl;86 #endif87 88 //bitmapfileheader for AndXor mask + 2 RGB structs + bitmapfileheader89 //for color bitmap + RGB structs for all the colors90 //SvL, 15-3-98: 2*bwsize91 iconsize = 2*sizeof(BITMAPFILEHEADER) + 2*sizeof(RGB) +92 rgbsize + 2*bwsize + bmpHdr->biSizeImage;93 //There are icons without an XOR mask, so check for it94 if(bmpHdr->biSizeImage == colorsize) {95 iconsize += bwsize;96 }97 iconhdr = (BITMAPFILEHEADER *)malloc(iconsize);98 iconhdr->usType = BFT_COLORICON;99 iconhdr->cbSize = sizeof(BITMAPFILEHEADER);100 iconhdr->xHotspot = 0;101 iconhdr->yHotspot = 0;102 iconhdr->offBits = 2*sizeof(BITMAPFILEHEADER) +103 2*sizeof(RGB) + rgbsize;104 iconhdr->bmp.cbFix = sizeof(BITMAPINFOHEADER);105 iconhdr->bmp.cx = (USHORT)bmpHdr->biWidth;106 iconhdr->bmp.cy = (USHORT)bmpHdr->biHeight;107 iconhdr->bmp.cPlanes = 1;108 iconhdr->bmp.cBitCount = 1;109 os2rgb = (RGB *)(iconhdr+1);110 memset(os2rgb, 0, sizeof(RGB));111 memset(os2rgb+1, 0xff, sizeof(RGB));112 iconhdr2 = (BITMAPFILEHEADER *)(os2rgb+2);113 iconhdr2->usType = BFT_COLORICON;114 iconhdr2->cbSize = sizeof(BITMAPFILEHEADER);115 iconhdr2->xHotspot = 0;116 iconhdr2->yHotspot = 0;117 iconhdr2->offBits = 2*sizeof(BITMAPFILEHEADER) +118 2*sizeof(RGB) + rgbsize + 2*bwsize;119 iconhdr2->bmp.cbFix = sizeof(BITMAPINFOHEADER);120 iconhdr2->bmp.cx = (USHORT)bmpHdr->biWidth;121 iconhdr2->bmp.cy = (USHORT)(bmpHdr->biHeight/2);122 iconhdr2->bmp.cPlanes = bmpHdr->biPlanes;123 iconhdr2->bmp.cBitCount= bmpHdr->biBitCount;124 os2rgb = (RGB *)(iconhdr2+1);125 rgb = (RGBQUAD *)(bmpHdr+1);126 if(bmpHdr->biBitCount < 24) {127 for(i=0;i<(1<<bmpHdr->biBitCount);i++) {128 os2rgb->bRed = rgb->red;129 os2rgb->bBlue = rgb->blue;130 os2rgb->bGreen = rgb->green;131 os2rgb++;132 rgb++;133 }134 }135 //write 2*mono pixels + color pixels136 //There are icons without an XOR mask, so check for it137 if(bmpHdr->biSizeImage == colorsize) {138 memset((char *)os2rgb, 0, bwsize);139 memset((char *)os2rgb+bwsize, 0, bwsize);140 memcpy((char *)os2rgb+2*bwsize, (char *)rgb, colorsize);141 }142 else {143 memcpy((char *)os2rgb, (char *)rgb+colorsize, bwsize);144 memcpy((char *)os2rgb+bwsize, (char *)rgb+colorsize, bwsize);145 memcpy((char *)os2rgb+2*bwsize, (char *)rgb, colorsize);146 }147 *OS2ResSize = iconsize;148 return((PBYTE)iconhdr);149 }150 //******************************************************************************151 //******************************************************************************152 void FreeIcon(void *os2icon)153 {154 free(os2icon);155 }156 //******************************************************************************157 //******************************************************************************158 #endif159 39 160 40 //****************************************************************************** … … 167 47 colorsize = DIB_GetDIBImageBytes(bmpHdr->biWidth, (bmpHdr->biHeight/2), bmpHdr->biBitCount); 168 48 169 //SvL: 28-09-'98: only for <= 8170 49 if(bmpHdr->biBitCount <= 8) 171 50 rgbsize = (1<<bmpHdr->biBitCount)*sizeof(RGB2); … … 184 63 //SvL, 3-3-98: 2*bwsize 185 64 iconsize = 2*sizeof(BITMAPFILEHEADER2) + 2*sizeof(RGB2) + 186 rgbsize + 2*bwsize + bmpHdr->biSizeImage;65 rgbsize + 2*bwsize + colorsize; 187 66 188 67 return iconsize; … … 226 105 //SvL, 3-3-98: 2*bwsize 227 106 iconsize = 2*sizeof(BITMAPFILEHEADER2) + 2*sizeof(RGB2) + 228 rgbsize + 2*bwsize + bmpHdr->biSizeImage;107 rgbsize + 2*bwsize + colorsize; 229 108 230 109 iconhdr = (BITMAPFILEHEADER2 *)malloc(iconsize); … … 241 120 iconhdr->bmp2.cPlanes = 1; 242 121 iconhdr->bmp2.cBitCount= 1; 122 iconhdr->bmp2.cbImage = 2*bwsize; 123 iconhdr->bmp2.cclrUsed = 2; 124 iconhdr->bmp2.cclrImportant = 2; 243 125 iconhdr->bmp2.ulCompression = BCA_UNCOMP; 244 126 iconhdr->bmp2.ulColorEncoding = BCE_RGB; … … 258 140 iconhdr2->bmp2.cPlanes = bmpHdr->biPlanes; 259 141 iconhdr2->bmp2.cBitCount= bmpHdr->biBitCount; 142 iconhdr2->bmp2.cbImage = colorsize; 143 iconhdr2->bmp2.cclrUsed = bmpHdr->biClrUsed; 144 iconhdr2->bmp2.cclrImportant = bmpHdr->biClrImportant; 260 145 iconhdr2->bmp2.ulCompression = BCA_UNCOMP; 261 146 iconhdr2->bmp2.ulColorEncoding = BCE_RGB; … … 328 213 rdir++; 329 214 } 330 groupsize = groupsize+ihdr->wCount* sizeof(BITMAPARRAYFILEHEADER2);215 groupsize = groupsize+ihdr->wCount*(sizeof(BITMAPARRAYFILEHEADER2) - sizeof(BITMAPFILEHEADER2)); 331 216 bafh = (BITMAPARRAYFILEHEADER2 *)malloc(groupsize); 332 217 memset(bafh, 0, groupsize);
Note:
See TracChangeset
for help on using the changeset viewer.