- Timestamp:
- Aug 21, 1999, 9:10:59 PM (26 years ago)
- Location:
- trunk/src/user32/new
- Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/new/loadres.cpp
r601 r609 1 /* $Id: loadres.cpp,v 1. 7 1999-08-20 20:09:50sandervl Exp $ */1 /* $Id: loadres.cpp,v 1.8 1999-08-21 19:10:59 sandervl Exp $ */ 2 2 3 3 /* … … 6 6 * Copyright 1998 Sander van Leeuwen 7 7 * 8 * Parts based on Wine code (objects\bitmap.c): 9 * 10 * Copyright 1993 Alexandre Julliard 11 * 1998 Huw D M Davies 8 12 * 9 13 * Project Odin Software License can be found in LICENSE.TXT … … 15 19 #include <heapstring.h> 16 20 #include <oslibres.h> 21 #include <winconst.h> 22 #include <win\virtual.h> 23 #include "dib.h" 17 24 18 25 //****************************************************************************** … … 159 166 //****************************************************************************** 160 167 //****************************************************************************** 168 BOOL IsSystemBitmap(ULONG *id) 169 { 170 switch(*id) 171 { 172 case OBM_UPARROW_W: 173 case OBM_DNARROW_W: 174 case OBM_RGARROW_W: 175 case OBM_LFARROW_W: 176 case OBM_RESTORE_W: 177 case OBM_RESTORED_W: 178 case OBM_UPARROWD_W: 179 case OBM_DNARROWD_W: 180 case OBM_RGARROWD_W: 181 case OBM_LFARROWD_W: 182 case OBM_OLD_UPARROW_W: 183 case OBM_OLD_DNARROW_W: 184 case OBM_OLD_RGARROW_W: 185 case OBM_OLD_LFARROW_W: 186 case OBM_CHECK_W: 187 case OBM_CHECKBOXES_W: 188 case OBM_BTNCORNERS_W: 189 case OBM_COMBO_W: 190 case OBM_REDUCE_W: 191 case OBM_REDUCED_W: 192 case OBM_ZOOM_W: 193 case OBM_ZOOMD_W: 194 case OBM_SIZE_W: 195 case OBM_CLOSE_W: 196 case OBM_MNARROW_W: 197 case OBM_UPARROWI_W: 198 case OBM_DNARROWI_W: 199 case OBM_RGARROWI_W: 200 case OBM_LFARROWI_W: 201 return TRUE; 202 203 //TODO: Not supported by Open32. Replacement may not be accurate 204 case OBM_OLD_CLOSE_W: 205 *id = OBM_CLOSE_W; 206 return TRUE; 207 208 case OBM_BTSIZE_W: 209 *id = OBM_SIZE_W; 210 return TRUE; 211 212 case OBM_OLD_REDUCE_W: 213 *id = OBM_REDUCE_W; 214 return TRUE; 215 216 case OBM_OLD_ZOOM_W: 217 *id = OBM_ZOOM_W; 218 return TRUE; 219 220 case OBM_OLD_RESTORE_W: 221 *id = OBM_RESTORE_W; 222 return TRUE; 223 224 default: 225 return FALSE; 226 } 227 } 228 //****************************************************************************** 229 //****************************************************************************** 230 HANDLE LoadBitmapA(HINSTANCE hinst, LPCSTR lpszName, int cxDesired, int cyDesired, 231 UINT fuLoad) 232 { 233 HBITMAP hbitmap = 0; 234 HDC hdc; 235 HRSRC hRsrc; 236 HGLOBAL handle; 237 char *ptr = NULL; 238 BITMAPINFO *info, *fix_info=NULL; 239 HGLOBAL hFix; 240 int size; 241 242 if (!(fuLoad & LR_LOADFROMFILE)) { 243 if (!(hRsrc = FindResourceA( hinst, lpszName, RT_BITMAPA ))) return 0; 244 if (!(handle = LoadResource( hinst, hRsrc ))) return 0; 245 246 if ((info = (BITMAPINFO *)LockResource( handle )) == NULL) return 0; 247 } 248 else 249 { 250 if (!(ptr = (char *)VIRTUAL_MapFileA( lpszName ))) return 0; 251 info = (BITMAPINFO *)(ptr + sizeof(BITMAPFILEHEADER)); 252 } 253 254 //TODO: This has to be removed once pe2lx stores win32 resources!!! 255 if (info->bmiHeader.biSize != sizeof(BITMAPCOREHEADER) && 256 info->bmiHeader.biSize != sizeof(BITMAPINFOHEADER)) 257 {//assume it contains a file header first 258 info = (BITMAPINFO *)((char *)info + sizeof(BITMAPFILEHEADER)); 259 } 260 261 size = DIB_BitmapInfoSize(info, DIB_RGB_COLORS); 262 if ((hFix = GlobalAlloc(0, size))) fix_info = (BITMAPINFO *)GlobalLock(hFix); 263 if (fix_info) { 264 BYTE pix; 265 266 memcpy(fix_info, info, size); 267 pix = *((LPBYTE)info+DIB_BitmapInfoSize(info, DIB_RGB_COLORS)); 268 DIB_FixColorsToLoadflags(fix_info, fuLoad, pix); 269 if ((hdc = GetDC(0)) != 0) { 270 char *bits = (char *)info + size; 271 if (fuLoad & LR_CREATEDIBSECTION) { 272 DIBSECTION dib; 273 hbitmap = CreateDIBSection(hdc, fix_info, DIB_RGB_COLORS, NULL, 0, 0); 274 GetObjectA(hbitmap, sizeof(DIBSECTION), &dib); 275 SetDIBits(hdc, hbitmap, 0, dib.dsBm.bmHeight, bits, info, 276 DIB_RGB_COLORS); 277 } 278 else { 279 hbitmap = CreateDIBitmap( hdc, &fix_info->bmiHeader, CBM_INIT, 280 bits, fix_info, DIB_RGB_COLORS ); 281 } 282 ReleaseDC( 0, hdc ); 283 } 284 GlobalUnlock(hFix); 285 GlobalFree(hFix); 286 } 287 if (fuLoad & LR_LOADFROMFILE) UnmapViewOfFile( ptr ); 288 return hbitmap; 289 } 290 //****************************************************************************** 291 //TODO: No support for RT_NEWBITMAP 292 //****************************************************************************** 161 293 HBITMAP WIN32API LoadBitmapA(HINSTANCE hinst, LPCSTR lpszBitmap) 162 294 { 163 HBITMAP rc; 164 165 if(HIWORD(lpszBitmap) != 0) 166 { //convert string name identifier to numeric id 167 dprintf(("lpszBitmap [%s]\n", lpszBitmap)); 168 169 lpszBitmap = (LPCSTR)ConvertNameId(hinst, (char *)lpszBitmap); 170 } 171 else dprintf(("lpszBitmap %08xh\n", (int)lpszBitmap)); 172 173 rc = O32_LoadBitmap(hinst, lpszBitmap); 174 175 dprintf(("LoadBitmapA returned %08xh\n", rc)); 295 HBITMAP hBitmap = 0; 296 297 if(IsSystemBitmap((ULONG *)&lpszBitmap)) { 298 hBitmap = O32_LoadBitmap(hinst, lpszBitmap); 299 } 300 else { 301 hBitmap = LoadBitmapA(hinst, lpszBitmap, 0, 0, 0); 302 } 303 dprintf(("LoadBitmapA returned %08xh\n", hBitmap)); 176 304 177 return(rc); 178 } 179 //****************************************************************************** 305 return(hBitmap); 306 } 307 //****************************************************************************** 308 //TODO: No support for RT_NEWBITMAP 180 309 //****************************************************************************** 181 310 HBITMAP WIN32API LoadBitmapW(HINSTANCE hinst, LPCWSTR lpszBitmap) 182 311 { 183 char *astring = NULL; 184 HBITMAP rc; 185 186 if(HIWORD(lpszBitmap) != 0) {//convert string name identifier to numeric id 187 astring = UnicodeToAsciiString((LPWSTR)lpszBitmap); 188 dprintf(("lpszBitmap %s\n", astring)); 189 190 lpszBitmap = (LPWSTR)ConvertNameId(hinst, (char *)astring); 191 } 192 else dprintf(("lpszBitmap %d\n", (int)lpszBitmap)); 193 194 rc = O32_LoadBitmap(hinst, (char *)lpszBitmap); 195 if(astring) 196 FreeAsciiString(astring); 197 198 dprintf(("LoadBitmapW returned %d\n", rc)); 199 return(rc); 312 HBITMAP hBitmap; 313 314 if(IsSystemBitmap((ULONG *)&lpszBitmap)) { 315 hBitmap = O32_LoadBitmap(hinst, (LPCSTR)lpszBitmap); 316 } 317 else { 318 if(HIWORD(lpszBitmap) != 0) { 319 lpszBitmap = (LPWSTR)UnicodeToAsciiString((LPWSTR)lpszBitmap); 320 } 321 hBitmap = LoadBitmapA(hinst, (LPSTR)lpszBitmap, 0, 0, 0); 322 } 323 324 if(HIWORD(lpszBitmap) != 0) 325 FreeAsciiString((LPSTR)lpszBitmap); 326 327 dprintf(("LoadBitmapW returned %08xh\n", hBitmap)); 328 329 return(hBitmap); 200 330 } 201 331 //****************************************************************************** … … 210 340 dprintf(("LoadImageA NOT COMPLETE (%d,%d)\n", cxDesired, cyDesired)); 211 341 342 if (fuLoad & LR_DEFAULTSIZE) { 343 if (uType == IMAGE_ICON) { 344 if (!cxDesired) cxDesired = GetSystemMetrics(SM_CXICON); 345 if (!cyDesired) cyDesired = GetSystemMetrics(SM_CYICON); 346 } 347 else if (uType == IMAGE_CURSOR) { 348 if (!cxDesired) cxDesired = GetSystemMetrics(SM_CXCURSOR); 349 if (!cyDesired) cyDesired = GetSystemMetrics(SM_CYCURSOR); 350 } 351 } 352 if (fuLoad & LR_LOADFROMFILE) fuLoad &= ~LR_SHARED; 353 212 354 switch(uType) { 213 355 case IMAGE_BITMAP: 214 hRet = (HANDLE)LoadBitmapA(hinst, lpszName );356 hRet = (HANDLE)LoadBitmapA(hinst, lpszName, cxDesired, cyDesired, fuLoad); 215 357 break; 216 358 case IMAGE_CURSOR: … … 237 379 dprintf(("LoadImageW NOT COMPLETE (%d,%d)\n", cxDesired, cyDesired)); 238 380 381 if (fuLoad & LR_DEFAULTSIZE) { 382 if (uType == IMAGE_ICON) { 383 if (!cxDesired) cxDesired = GetSystemMetrics(SM_CXICON); 384 if (!cyDesired) cyDesired = GetSystemMetrics(SM_CYICON); 385 } 386 else if (uType == IMAGE_CURSOR) { 387 if (!cxDesired) cxDesired = GetSystemMetrics(SM_CXCURSOR); 388 if (!cyDesired) cyDesired = GetSystemMetrics(SM_CYCURSOR); 389 } 390 } 391 if (fuLoad & LR_LOADFROMFILE) fuLoad &= ~LR_SHARED; 392 239 393 switch(uType) { 240 394 case IMAGE_BITMAP: -
trunk/src/user32/new/makefile
r604 r609 1 # $Id: makefile,v 1.2 8 1999-08-21 12:29:31sandervl Exp $1 # $Id: makefile,v 1.29 1999-08-21 19:10:59 sandervl Exp $ 2 2 3 3 # … … 31 31 controls.obj button.obj static.obj scroll.obj listbox.obj \ 32 32 combo.obj edit.obj clipboard.obj winicon.obj \ 33 oslibutil.obj oslibmsg.obj windlg.obj \33 oslibutil.obj oslibmsg.obj windlg.obj dib.obj \ 34 34 winprop.obj wingdi.obj oslibgdi.obj winaccel.obj winscrollbar.obj \ 35 35 nativerc.obj oslibres.obj … … 57 57 $(PDWIN32_INCLUDE)\winicon.h syscolor.h 58 58 char.obj: char.cpp user32.h 59 loadres.obj: loadres.cpp user32.h 59 loadres.obj: loadres.cpp user32.h dib.h 60 60 icon.obj: icon.cpp $(PDWIN32_INCLUDE)\winicon.h 61 61 winmenu.obj: winmenu.cpp user32.h $(PDWIN32_INCLUDE)\winres.h … … 110 110 111 111 clipboard.obj: clipboard.cpp 112 dib.obj: dib.cpp dib.h 112 113 113 114 clean:
Note:
See TracChangeset
for help on using the changeset viewer.