/*********************************************************************** * PEN_DeleteObject */ static BOOL PEN_DeleteObject( HGDIOBJ handle ) { PENOBJ *pen = free_gdi_handle( handle ); if (!pen) return FALSE; return HeapFree( GetProcessHeap(), 0, pen ); }
/*********************************************************************** * BITMAP_DeleteObject */ static BOOL BITMAP_DeleteObject( HGDIOBJ handle ) { BITMAPOBJ *bmp = free_gdi_handle( handle ); if (!bmp) return FALSE; HeapFree( GetProcessHeap(), 0, bmp->dib.dsBm.bmBits ); return HeapFree( GetProcessHeap(), 0, bmp ); }
/*********************************************************************** * BRUSH_DeleteObject */ static BOOL BRUSH_DeleteObject( HGDIOBJ handle ) { BRUSHOBJ *brush = free_gdi_handle( handle ); if (!brush) return FALSE; free_brush_pattern( &brush->pattern ); return HeapFree( GetProcessHeap(), 0, brush ); }
/*********************************************************************** * PALETTE_DeleteObject */ static BOOL PALETTE_DeleteObject( HGDIOBJ handle ) { PALETTEOBJ *obj; PALETTE_UnrealizeObject( handle ); if (!(obj = free_gdi_handle( handle ))) return FALSE; HeapFree( GetProcessHeap(), 0, obj->entries ); return HeapFree( GetProcessHeap(), 0, obj ); }
/*********************************************************************** * BRUSH_DeleteObject */ static BOOL BRUSH_DeleteObject( HGDIOBJ handle ) { BRUSHOBJ *brush = free_gdi_handle( handle ); if (!brush) return FALSE; if (brush->bits.free) brush->bits.free( &brush->bits ); if (brush->bitmap) DeleteObject( brush->bitmap ); HeapFree( GetProcessHeap(), 0, brush->info ); return HeapFree( GetProcessHeap(), 0, brush ); }
/*********************************************************************** * BRUSH_DeleteObject */ static BOOL BRUSH_DeleteObject( HGDIOBJ handle ) { BRUSHOBJ *brush = free_gdi_handle( handle ); if (!brush) return FALSE; switch(brush->logbrush.lbStyle) { case BS_PATTERN: DeleteObject( (HGDIOBJ)brush->logbrush.lbHatch ); break; case BS_DIBPATTERN: GlobalFree( (HGLOBAL)brush->logbrush.lbHatch ); break; } return HeapFree( GetProcessHeap(), 0, brush ); }
/*********************************************************************** * BITMAP_DeleteObject */ static BOOL BITMAP_DeleteObject( HGDIOBJ handle ) { const struct gdi_dc_funcs *funcs; BITMAPOBJ *bmp = GDI_GetObjPtr( handle, OBJ_BITMAP ); if (!bmp) return FALSE; funcs = bmp->funcs; GDI_ReleaseObj( handle ); funcs->pDeleteBitmap( handle ); if (!(bmp = free_gdi_handle( handle ))) return FALSE; HeapFree( GetProcessHeap(), 0, bmp->bitmap.bmBits ); if (bmp->dib) { DIBSECTION *dib = bmp->dib; if (dib->dsBm.bmBits) { if (dib->dshSection) { SYSTEM_INFO SystemInfo; GetSystemInfo( &SystemInfo ); UnmapViewOfFile( (char *)dib->dsBm.bmBits - (dib->dsOffset % SystemInfo.dwAllocationGranularity) ); } else if (!dib->dsOffset) VirtualFree(dib->dsBm.bmBits, 0L, MEM_RELEASE ); } HeapFree(GetProcessHeap(), 0, dib); HeapFree(GetProcessHeap(), 0, bmp->color_table); } return HeapFree( GetProcessHeap(), 0, bmp ); }