Changeset 4755 for trunk/src/gdi32/objhandle.cpp
- Timestamp:
- Dec 5, 2000, 2:04:07 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gdi32/objhandle.cpp
r4596 r4755 1 /* $Id: objhandle.cpp,v 1. 6 2000-11-15 13:56:45sandervl Exp $ */1 /* $Id: objhandle.cpp,v 1.7 2000-12-05 13:04:06 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Handle Management Code for OS/2 … … 30 30 //****************************************************************************** 31 31 32 static ULONG objHandleTable[MAX_OBJECT_HANDLES] = {0}; 33 static ULONG lowestFreeIndex = 0; 34 static VMutex objTableMutex; 32 typedef struct { 33 ULONG dwUserData; 34 ObjectType type; 35 } GdiObject; 36 37 static GdiObject objHandleTable[MAX_OBJECT_HANDLES] = {0}; 38 static ULONG lowestFreeIndex = 0; 39 static VMutex objTableMutex; 35 40 36 41 //****************************************************************************** … … 38 43 BOOL ObjAllocateHandle(HANDLE *hObject, DWORD dwUserData, ObjectType type) 39 44 { 40 objTableMutex.enter(VMUTEX_WAIT_FOREVER); 41 if(lowestFreeIndex == -1) { 42 //oops, out of handles 43 dprintf(("ERROR: GDI: HwAllocateWindowHandle OUT OF GDI OBJECT HANDLES!!")); 45 objTableMutex.enter(VMUTEX_WAIT_FOREVER); 46 if(lowestFreeIndex == -1) { 47 //oops, out of handles 48 objTableMutex.leave(); 49 dprintf(("ERROR: GDI: HwAllocateWindowHandle OUT OF GDI OBJECT HANDLES!!")); 50 DebugInt3(); 51 return FALSE; 52 } 53 *hObject = lowestFreeIndex; 54 *hObject |= MAKE_HANDLE(type); 55 objHandleTable[lowestFreeIndex].dwUserData = dwUserData; 56 objHandleTable[lowestFreeIndex].type = type; 57 58 lowestFreeIndex = -1; 59 60 //find next free handle 61 for(int i=0;i<MAX_OBJECT_HANDLES;i++) { 62 if(objHandleTable[i].dwUserData == 0) { 63 lowestFreeIndex = i; 64 break; 65 } 66 } 44 67 objTableMutex.leave(); 45 DebugInt3(); 46 return FALSE; 47 } 48 *hObject = lowestFreeIndex; 49 *hObject |= MAKE_HANDLE(type); 50 objHandleTable[lowestFreeIndex] = dwUserData; 51 52 lowestFreeIndex = -1; 53 54 //find next free handle 55 for(int i=0;i<MAX_OBJECT_HANDLES;i++) { 56 if(objHandleTable[i] == 0) { 57 lowestFreeIndex = i; 58 break; 59 } 60 } 61 objTableMutex.leave(); 62 return TRUE; 68 return TRUE; 63 69 } 64 70 //****************************************************************************** … … 66 72 void ObjFreeHandle(HANDLE hObject) 67 73 { 68 hObject &= OBJHANDLE_MAGIC_MASK; 69 if(hObject < MAX_OBJECT_HANDLES) { 70 objTableMutex.enter(VMUTEX_WAIT_FOREVER); 71 objHandleTable[hObject] = 0; 72 if(lowestFreeIndex == -1 || hObject < lowestFreeIndex) 73 lowestFreeIndex = hObject; 74 75 objTableMutex.leave(); 76 } 77 } 78 //****************************************************************************** 79 //****************************************************************************** 80 DWORD ObjGetHandleData(HANDLE hObject) 81 { 82 switch(GET_OBJTYPE(hObject)) 83 { 84 case GDIOBJ_REGION: 85 break; 86 //case GDIOBJ_BITMAP 87 //case GDIOBJ_BRUSH 88 //case GDIOBJ_PALETTE 89 //case GDIOBJ_FONT 90 default: 74 hObject &= OBJHANDLE_MAGIC_MASK; 75 if(hObject < MAX_OBJECT_HANDLES) { 76 objTableMutex.enter(VMUTEX_WAIT_FOREVER); 77 objHandleTable[hObject].dwUserData = 0; 78 objHandleTable[hObject].type = GDIOBJ_NONE; 79 if(lowestFreeIndex == -1 || hObject < lowestFreeIndex) 80 lowestFreeIndex = hObject; 81 82 objTableMutex.leave(); 83 } 84 } 85 //****************************************************************************** 86 //****************************************************************************** 87 DWORD ObjGetHandleData(HANDLE hObject, ObjectType type) 88 { 89 hObject &= OBJHANDLE_MAGIC_MASK; 90 if(hObject < MAX_OBJECT_HANDLES && type == objHandleTable[hObject].type) { 91 return objHandleTable[hObject].dwUserData; 92 } 91 93 return HANDLE_OBJ_ERROR; 92 }93 94 hObject &= OBJHANDLE_MAGIC_MASK;95 if(hObject < MAX_OBJECT_HANDLES) {96 return objHandleTable[hObject];97 }98 return HANDLE_OBJ_ERROR;99 94 } 100 95 //****************************************************************************** … … 102 97 ObjectType ObjGetHandleType(HANDLE hObject) 103 98 { 104 switch(GET_OBJTYPE(hObject)) 105 { 106 case GDIOBJ_REGION: 107 return GDIOBJ_REGION; 108 //case GDIOBJ_BITMAP 109 //case GDIOBJ_BRUSH 110 //case GDIOBJ_PALETTE 111 //case GDIOBJ_FONT 112 default: 113 return GDIOBJ_ERROR; 114 } 99 hObject &= OBJHANDLE_MAGIC_MASK; 100 if(hObject < MAX_OBJECT_HANDLES && objHandleTable[hObject].dwUserData != 0) { 101 return objHandleTable[hObject].type; 102 } 103 return GDIOBJ_NONE; 115 104 } 116 105 //****************************************************************************** … … 226 215 if(DIBSection::getSection() != NULL) 227 216 { 228 DIBSection *dsect;229 230 dsect = DIBSection::find(hdc);231 if(dsect)232 {233 //remove previously selected dibsection234 dsect->UnSelectDIBObject();235 }236 dsect = DIBSection::find((DWORD)hObj);237 if(dsect)238 {239 dsect->SelectDIBObject(hdc);240 }217 DIBSection *dsect; 218 219 dsect = DIBSection::find(hdc); 220 if(dsect) 221 { 222 //remove previously selected dibsection 223 dsect->UnSelectDIBObject(); 224 } 225 dsect = DIBSection::find((DWORD)hObj); 226 if(dsect) 227 { 228 dsect->SelectDIBObject(hdc); 229 } 241 230 } 242 231 rc = O32_SelectObject(hdc, hObj); 243 232 if(rc != 0 && DIBSection::getSection != NULL) 244 233 { 245 DIBSection *dsect = DIBSection::find((DWORD)rc);246 if(dsect)247 {248 dsect->UnSelectDIBObject();249 }234 DIBSection *dsect = DIBSection::find((DWORD)rc); 235 if(dsect) 236 { 237 dsect->UnSelectDIBObject(); 238 } 250 239 } 251 240 #ifdef USING_OPEN32 252 if(O32_GetObjectType(hObj) == OBJ_BITMAP) 253 { 254 241 if(O32_GetObjectType(hObj) == OBJ_BITMAP) 242 { 243 //SvL: Open32 messes up the height of the hdc (for windows) 255 244 pDCData pHps = (pDCData)OSLibGpiQueryDCData((HPS)hdc); 256 245 if(pHps && pHps->hwnd) { 257 246 dprintf2(("change back origin")); 258 247 selectClientArea(pHps); 259 248 setPageXForm(pHps); … … 269 258 DWORD WIN32API GetObjectType( HGDIOBJ hObj) 270 259 { 271 dprintf2(("GDI32: GetObjectType\n"));272 if(ObjGetHandleType(hObj) == GDIOBJ_REGION) {260 dprintf2(("GDI32: GetObjectType\n")); 261 if(ObjGetHandleType(hObj) == GDIOBJ_REGION) { 273 262 SetLastError(ERROR_SUCCESS); 274 return OBJ_REGION;275 }276 return O32_GetObjectType(hObj);263 return OBJ_REGION; 264 } 265 return O32_GetObjectType(hObj); 277 266 } 278 267 //****************************************************************************** … … 280 269 BOOL WIN32API DeleteObject(HANDLE hObj) 281 270 { 282 dprintf(("GDI32: DeleteObject %x", hObj));283 if(ObjGetHandleType(hObj) == GDIOBJ_REGION) {284 OSLibDeleteRegion(ObjGetHandleData(hObj));285 ObjFreeHandle(hObj);271 dprintf(("GDI32: DeleteObject %x", hObj)); 272 if(ObjGetHandleType(hObj) == GDIOBJ_REGION) { 273 OSLibDeleteRegion(ObjGetHandleData(hObj, GDIOBJ_REGION)); 274 ObjFreeHandle(hObj); 286 275 SetLastError(ERROR_SUCCESS); 287 return OBJ_REGION;288 }289 DIBSection::deleteSection((DWORD)hObj);290 return O32_DeleteObject(hObj);276 return OBJ_REGION; 277 } 278 DIBSection::deleteSection((DWORD)hObj); 279 return O32_DeleteObject(hObj); 291 280 } 292 281 //****************************************************************************** … … 294 283 BOOL WIN32API SetObjectOwner( HGDIOBJ arg1, int arg2 ) 295 284 { 296 // Here is a guess for a undocumented entry297 dprintf(("WARNING: GDI32: SetObjectOwner - stub (TRUE)\n"));298 return TRUE;299 } 300 //****************************************************************************** 301 //****************************************************************************** 285 // Here is a guess for a undocumented entry 286 dprintf(("WARNING: GDI32: SetObjectOwner - stub (TRUE)\n")); 287 return TRUE; 288 } 289 //****************************************************************************** 290 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.