- Timestamp:
- Aug 26, 2001, 4:23:35 PM (24 years ago)
- Location:
- trunk/src/user32
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/oslibres.cpp
r6586 r6595 1 /* $Id: oslibres.cpp,v 1. 19 2001-08-25 10:54:19sandervl Exp $ */1 /* $Id: oslibres.cpp,v 1.20 2001-08-26 14:23:33 sandervl Exp $ */ 2 2 /* 3 3 * Window API wrappers for OS/2 … … 25 25 #include "oslibres.h" 26 26 #include "pmwindow.h" 27 #include <wingdi32.h> 27 28 28 29 #define DBG_LOCALLOG DBG_oslibres … … 307 308 pBmpColor->ulColorEncoding = BCE_RGB; 308 309 309 310 311 312 313 314 315 316 317 318 319 310 os2rgb = &pBmpColor->argbColor[0]; 311 rgb = (RGBQUAD *)(pXorBits); 312 313 if(pXorBmp->bmBitsPixel <= 8) { 314 for(i=0;i<(1<<pXorBmp->bmBitsPixel);i++) { 315 os2rgb->bRed = rgb->rgbRed; 316 os2rgb->bBlue = rgb->rgbBlue; 317 os2rgb->bGreen = rgb->rgbGreen; 318 os2rgb++; 319 rgb++; 320 } 320 321 } 321 322 … … 329 330 src += pXorBmp->bmWidthBytes; 330 331 } 332 } 333 else 334 if(pXorBmp->bmBitsPixel == 16) { 335 ConvertRGB555to565(os2rgb, rgb, pXorBmp->bmHeight * pXorBmp->bmWidthBytes); 331 336 } 332 337 else memcpy(os2rgb, rgb, pXorBmp->bmHeight * pXorBmp->bmWidthBytes); -
trunk/src/user32/winicon.cpp
r6487 r6595 1 /* $Id: winicon.cpp,v 1.2 8 2001-08-08 10:07:19sandervl Exp $ */1 /* $Id: winicon.cpp,v 1.29 2001-08-26 14:23:35 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Icon Code for OS/2 … … 101 101 static ICONCACHE* CURSORICON_FindCache(HANDLE handle); 102 102 103 static HGLOBAL CreateCursorIconIndirect( HINSTANCE hInstance, 104 CURSORICONINFO *info, 105 LPCVOID lpANDbits, 106 LPCVOID lpXORbits, BOOL fIcon); 107 103 108 /*********************************************************************** 104 109 * CreateIcon (USER32.75) … … 122 127 info.dwResGroupId = -1; 123 128 info.hColorBmp = 0; 124 return CreateCursorIconIndirect(0, &info, lpANDbits, lpXORbits );129 return CreateCursorIconIndirect(0, &info, lpANDbits, lpXORbits, TRUE); 125 130 } 126 131 /********************************************************************** … … 149 154 BITMAP bmpXor,bmpAnd; 150 155 HICON hObj; 151 int sizeXor,sizeAnd ;156 int sizeXor,sizeAnd,colortablesize; 152 157 153 158 dprintf(("USER32: CreateIconIndirect %x", iconinfo)); … … 156 161 GetObjectA( iconinfo->hbmMask, sizeof(bmpAnd), &bmpAnd ); 157 162 158 sizeXor = bmpXor.bmHeight * bmpXor.bmWidthBytes; 163 colortablesize = 0; 164 165 if(bmpXor.bmBitsPixel <= 8) { 166 colortablesize = sizeof(RGBQUAD)*(1<<bmpXor.bmBitsPixel); 167 sizeXor = bmpXor.bmHeight * bmpXor.bmWidthBytes + colortablesize; 168 } 169 else sizeXor = bmpXor.bmHeight * bmpXor.bmWidthBytes; 170 159 171 sizeAnd = bmpAnd.bmHeight * bmpAnd.bmWidthBytes; 160 172 … … 189 201 /* Transfer the bitmap bits to the CURSORICONINFO structure */ 190 202 GetBitmapBits( iconinfo->hbmMask ,sizeAnd,(char*)(info + 1) ); 191 GetBitmapBits( iconinfo->hbmColor,sizeXor,(char*)(info + 1) +sizeAnd); 203 if(bmpXor.bmBitsPixel > 1) 204 { 205 BITMAPINFO* pInfo = (BITMAPINFO *)malloc(sizeof(BITMAPINFO)+colortablesize+3*sizeof(DWORD)); //+ extra space for > 8bpp images 206 HBITMAP oldbmp; 207 HDC hdc; 208 209 hdc = CreateCompatibleDC(0); 210 211 memset(pInfo, 0, sizeof(BITMAPINFO)+colortablesize+3*sizeof(DWORD)); 212 pInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 213 pInfo->bmiHeader.biPlanes = info->bPlanes; 214 pInfo->bmiHeader.biBitCount = info->bBitsPerPixel; 215 216 GetDIBits(hdc, iconinfo->hbmColor, 0, bmpXor.bmHeight, (char *)(info + 1) + sizeAnd + colortablesize, pInfo, DIB_RGB_COLORS); 217 if(colortablesize) { 218 memcpy((char *)(info + 1) + sizeAnd, (char *)&pInfo->bmiHeader + pInfo->bmiHeader.biSize, colortablesize); 219 } 220 221 DeleteDC(hdc); 222 free(pInfo); 223 } 224 else { 225 GetBitmapBits( iconinfo->hbmColor,sizeXor,(char*)(info + 1) +sizeAnd); 226 } 227 228 #ifdef __WIN32OS2__ 229 info->hColorBmp = OSLibWinCreatePointer(info, (char*)(info + 1), (LPBITMAP_W)&bmpAnd, (char*)(info + 1) + sizeAnd, (LPBITMAP_W)&bmpXor, FALSE); 230 #endif 192 231 GlobalUnlock(hObj); 193 232 … … 200 239 } 201 240 #endif 241 dprintf(("USER32: CreateIconIndirect %x returned %x", iconinfo, hIcon)); 202 242 return hIcon; 203 243 } … … 352 392 info.hColorBmp = 0; 353 393 354 return CreateCursorIconIndirect( 0, &info, lpANDbits, lpXORbits 394 return CreateCursorIconIndirect( 0, &info, lpANDbits, lpXORbits, FALSE); 355 395 } 356 396 //****************************************************************************** … … 520 560 * CreateCursorIconIndirect 521 561 */ 522 HGLOBAL WIN32APICreateCursorIconIndirect( HINSTANCE hInstance,523 524 525 LPCVOID lpXORbits)562 static HGLOBAL CreateCursorIconIndirect( HINSTANCE hInstance, 563 CURSORICONINFO *info, 564 LPCVOID lpANDbits, 565 LPCVOID lpXORbits, BOOL fIcon) 526 566 { 527 567 HGLOBAL handle; 528 568 char *ptr; 529 569 int sizeAnd, sizeXor; 570 #ifdef __WIN32OS2__ 571 BITMAP bmpXor, bmpAnd; 572 #endif 530 573 531 574 if (!lpXORbits || !lpANDbits || info->bPlanes != 1) return 0; … … 540 583 memcpy( ptr + sizeof(CURSORICONINFO), lpANDbits, sizeAnd ); 541 584 memcpy( ptr + sizeof(CURSORICONINFO) + sizeAnd, lpXORbits, sizeXor ); 585 #ifdef __WIN32OS2__ 586 bmpAnd.bmType = 0; 587 bmpAnd.bmWidth = info->nWidth; 588 bmpAnd.bmHeight = info->nHeight; 589 bmpAnd.bmWidthBytes = BITMAP_GetWidthBytes(info->nWidth, 1); 590 bmpAnd.bmPlanes = info->bPlanes; 591 bmpAnd.bmBitsPixel = 1; 592 bmpAnd.bmBits = NULL; 593 594 bmpXor.bmType = 0; 595 bmpXor.bmWidth = info->nWidth; 596 bmpXor.bmHeight = info->nHeight; 597 bmpXor.bmWidthBytes = info->nWidthBytes; 598 bmpXor.bmPlanes = info->bPlanes; 599 bmpXor.bmBitsPixel = info->bBitsPerPixel; 600 bmpXor.bmBits = NULL; 601 ((CURSORICONINFO *)ptr)->hColorBmp = 602 OSLibWinCreatePointer(info, (char *)lpANDbits, (LPBITMAP_W)&bmpAnd, (char *)lpXORbits, (LPBITMAP_W)&bmpXor, fIcon == FALSE); 603 #endif 542 604 GlobalUnlock( handle ); 543 605 … … 549 611 return 0; 550 612 } 613 dprintf(("USER32: CreateCursorIconIndirect returned %x", hIcon)); 551 614 return hIcon; 552 615 #else
Note:
See TracChangeset
for help on using the changeset viewer.