Changeset 996 for trunk/src/user32/oslibres.cpp
- Timestamp:
- Sep 21, 1999, 10:24:05 AM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/oslibres.cpp
r949 r996 1 /* $Id: oslibres.cpp,v 1. 1 1999-09-15 23:18:54 sandervl Exp $ */1 /* $Id: oslibres.cpp,v 1.2 1999-09-21 08:24:04 sandervl Exp $ */ 2 2 /* 3 3 * Window API wrappers for OS/2 … … 57 57 58 58 if(iconbitmap == NULL) { 59 60 59 dprintf(("OSLibWinCreateIcon iconbitmap == NULL!!")); 60 return 0; 61 61 } 62 62 if(bafh->usType == BFT_BITMAPARRAY && bafh->cbSize == sizeof(BITMAPARRAYFILEHEADER2)) { 63 bfhBW = &bafh->bfh2; 64 bfhColor = (BITMAPFILEHEADER2 *)((char *)&bafh->bfh2 + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2)); 63 // search best icon for the current screen, 64 // TODO: maybe compare icon size with screen size. 65 // Some bugs with black/white Icons ? 66 BITMAPARRAYFILEHEADER2 *next, *found; 67 LONG bitcountScreen, bitcountIcon=-1, cxIcon=-1, cyIcon=-1; 68 69 HPS hps = WinGetPS(HWND_DESKTOP); 70 HDC hdc = GpiQueryDevice(hps); 71 DevQueryCaps(hdc, CAPS_COLOR_BITCOUNT, 1, &bitcountScreen); 72 WinReleasePS(hps); 73 74 next = found = bafh; 75 while(TRUE) 76 { 77 bfhColor = (BITMAPFILEHEADER2 *)((char *)&next->bfh2 + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2)); 78 if(bfhColor->bmp2.cBitCount <= bitcountScreen && 79 bfhColor->bmp2.cBitCount > bitcountIcon || 80 (bfhColor->bmp2.cBitCount == bitcountIcon && 81 (cxIcon < bfhColor->bmp2.cx || cyIcon < bfhColor->bmp2.cy))) 82 { 83 found = next; 84 bitcountIcon = bfhColor->bmp2.cBitCount; 85 cxIcon = bfhColor->bmp2.cx; 86 cyIcon = bfhColor->bmp2.cy; 87 } 88 if(next->offNext != 0) 89 next = (BITMAPARRAYFILEHEADER2 *) ((char *)bafh + next->offNext); 90 else 91 break; 92 } 93 bfhBW = &found->bfh2; 94 bfhColor = (BITMAPFILEHEADER2 *)((char *)bfhBW + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2)); 65 95 } 66 96 else {//single icon 67 68 69 97 bfhBW = (BITMAPFILEHEADER2 *)iconbitmap; 98 bfhColor = (BITMAPFILEHEADER2 *)((char *)bfhBW + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2)); 99 bafh = (BITMAPARRAYFILEHEADER2 *)bfhBW; //for calculation bitmap offset 70 100 } 71 101 hps = WinGetScreenPS(HWND_DESKTOP); 72 102 73 hbmColor = GpiCreateBitmap(hps, &bfhColor->bmp2, CBM_INIT, 74 103 hbmColor = GpiCreateBitmap(hps, &bfhColor->bmp2, CBM_INIT, 104 (char *)bafh + bfhColor->offBits, 75 105 (BITMAPINFO2 *)&bfhColor->bmp2); 76 106 if(hbmColor == GPI_ERROR) { … … 79 109 return 0; 80 110 } 81 hbmMask = GpiCreateBitmap(hps, &bfhBW->bmp2, CBM_INIT, 82 111 hbmMask = GpiCreateBitmap(hps, &bfhBW->bmp2, CBM_INIT, 112 (char *)bafh + bfhBW->offBits, 83 113 (BITMAPINFO2 *)&bfhBW->bmp2); 84 114 if(hbmMask == GPI_ERROR) { … … 114 144 115 145 if(cursorbitmap == NULL) { 116 dprintf(("OSLibWinCreatePointer cursorbitmap == NULL!!"));117 return 0;146 dprintf(("OSLibWinCreatePointer cursorbitmap == NULL!!")); 147 return 0; 118 148 } 119 149 //skip xor/and mask 120 150 hps = WinGetScreenPS(HWND_DESKTOP); 121 hbmColor = GpiCreateBitmap(hps, &bfh->bmp2, CBM_INIT, 122 151 hbmColor = GpiCreateBitmap(hps, &bfh->bmp2, CBM_INIT, 152 (char *)bfh + bfh->offBits, 123 153 (BITMAPINFO2 *)&bfh->bmp2); 124 154 if(hbmColor == GPI_ERROR) { … … 148 178 149 179 switch(type) { 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 180 case IDI_APPLICATION_W: 181 os2type = SPTR_PROGRAM; 182 break; 183 case IDI_HAND_W: 184 os2type = SPTR_ICONWARNING; 185 break; 186 case IDI_QUESTION_W: 187 os2type = SPTR_ICONQUESTION; 188 break; 189 case IDI_EXCLAMATION_W: 190 os2type = SPTR_ICONWARNING; 191 break; 192 case IDI_ASTERISK_W: 193 os2type = SPTR_ICONINFORMATION; 194 break; 195 default: 196 return 0; 167 197 } 168 198 … … 176 206 177 207 switch(type) { 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 208 case IDC_ARROW_W: 209 os2type = SPTR_ARROW; 210 break; 211 case IDC_UPARROW_W: 212 os2type = SPTR_ARROW; 213 break; 214 case IDC_IBEAM_W: 215 os2type = SPTR_TEXT; 216 break; 217 case IDC_ICON_W: 218 os2type = SPTR_PROGRAM; 219 break; 220 case IDC_NO_W: 221 os2type = SPTR_ILLEGAL; 222 break; 223 case IDC_CROSS_W: 224 os2type = SPTR_MOVE; 225 break; 226 case IDC_SIZE_W: 227 os2type = SPTR_MOVE; 228 break; 229 case IDC_SIZEALL_W: 230 os2type = SPTR_MOVE; 231 break; 232 case IDC_SIZENESW_W: 233 os2type = SPTR_SIZENESW; 234 break; 235 case IDC_SIZENS_W: 236 os2type = SPTR_SIZENS; 237 break; 238 case IDC_SIZENWSE_W: 239 os2type = SPTR_SIZENWSE; 240 break; 241 case IDC_SIZEWE_W: 242 os2type = SPTR_SIZEWE; 243 break; 244 case IDC_WAIT_W: 245 os2type = SPTR_WAIT; 246 break; 247 case IDC_APPSTARTING_W: 248 os2type = SPTR_WAIT; 249 break; 250 case IDC_HELP_W: //TODO: Create a cursor for this one 251 os2type = SPTR_WAIT; 252 break; 253 default: 254 return 0; 225 255 } 226 256 return WinQuerySysPointer(HWND_DESKTOP, os2type, TRUE);
Note:
See TracChangeset
for help on using the changeset viewer.