VOID NTAPI DC_vSetOwner(PDC pdc, ULONG ulOwner) { if (pdc->rosdc.hClipRgn) { IntGdiSetRegionOwner(pdc->rosdc.hClipRgn, ulOwner); } if (pdc->rosdc.hGCClipRgn) { IntGdiSetRegionOwner(pdc->rosdc.hGCClipRgn, ulOwner); } if (pdc->dclevel.hPath) { GreSetObjectOwner(pdc->dclevel.hPath, ulOwner); } /* Dereference current brush and pen */ BRUSH_ShareUnlockBrush(pdc->dclevel.pbrFill); BRUSH_ShareUnlockBrush(pdc->dclevel.pbrLine); /* Select the default fill and line brush */ pdc->dcattr.hbrush = StockObjects[WHITE_BRUSH]; pdc->dcattr.hpen = StockObjects[BLACK_PEN]; pdc->dclevel.pbrFill = BRUSH_ShareLockBrush(pdc->pdcattr->hbrush); pdc->dclevel.pbrLine = PEN_ShareLockPen(pdc->pdcattr->hpen); /* Mark them as dirty */ pdc->pdcattr->ulDirty_ |= DIRTY_FILL|DIRTY_LINE; /* Allocate or free DC attribute */ if (ulOwner == GDI_OBJ_HMGR_PUBLIC || ulOwner == GDI_OBJ_HMGR_NONE) { if (pdc->pdcattr != &pdc->dcattr) DC_vFreeDcAttr(pdc); } else if (ulOwner == GDI_OBJ_HMGR_POWNED) { if (pdc->pdcattr == &pdc->dcattr) DC_bAllocDcAttr(pdc); } /* Set the DC's ownership */ GDIOBJ_vSetObjectOwner(&pdc->BaseObject, ulOwner); }
HSURF APIENTRY EngCreateDeviceSurface( _In_ DHSURF dhsurf, _In_ SIZEL sizl, _In_ ULONG iFormat) { PSURFACE psurf; HSURF hsurf; /* Allocate a surface */ psurf = SURFACE_AllocSurface(STYPE_DEVICE, sizl.cx, sizl.cy, iFormat, 0, 0, 0, NULL); if (!psurf) { DPRINT1("SURFACE_AllocSurface failed.\n"); return NULL; } /* Set the device handle */ psurf->SurfObj.dhsurf = dhsurf; /* Set public ownership */ GDIOBJ_vSetObjectOwner(&psurf->BaseObject, GDI_OBJ_HMGR_PUBLIC); /* Get the handle for the surface */ hsurf = psurf->SurfObj.hsurf; /* Unlock the surface and return */ SURFACE_UnlockSurface(psurf); return hsurf; }
VOID NTAPI DC_vSetOwner(PDC pdc, ULONG ulOwner) { if (pdc->rosdc.hClipRgn) { IntGdiSetRegionOwner(pdc->rosdc.hClipRgn, ulOwner); } if (pdc->rosdc.hGCClipRgn) { IntGdiSetRegionOwner(pdc->rosdc.hGCClipRgn, ulOwner); } if (pdc->dclevel.hPath) { GreSetObjectOwner(pdc->dclevel.hPath, ulOwner); } IntGdiSetBrushOwner(pdc->dclevel.pbrFill, ulOwner); IntGdiSetBrushOwner(pdc->dclevel.pbrLine, ulOwner); /* Allocate or free DC attribute */ if (ulOwner == GDI_OBJ_HMGR_PUBLIC || ulOwner == GDI_OBJ_HMGR_NONE) { if (pdc->pdcattr != &pdc->dcattr) DC_vFreeDcAttr(pdc); } else if (ulOwner == GDI_OBJ_HMGR_POWNED) { if (pdc->pdcattr == &pdc->dcattr) DC_bAllocDcAttr(pdc); } /* Set the DC's ownership */ GDIOBJ_vSetObjectOwner(&pdc->BaseObject, ulOwner); }
HBITMAP APIENTRY EngCreateBitmap( _In_ SIZEL sizl, _In_ LONG lWidth, _In_ ULONG iFormat, _In_ ULONG fl, _In_opt_ PVOID pvBits) { PSURFACE psurf; HBITMAP hbmp; /* Allocate a surface */ psurf = SURFACE_AllocSurface(STYPE_BITMAP, sizl.cx, sizl.cy, iFormat, fl, lWidth, 0, pvBits); if (!psurf) { DPRINT1("SURFACE_AllocSurface failed.\n"); return NULL; } /* Get the handle for the bitmap */ hbmp = (HBITMAP)psurf->SurfObj.hsurf; /* Set public ownership */ GDIOBJ_vSetObjectOwner(&psurf->BaseObject, GDI_OBJ_HMGR_PUBLIC); /* Unlock the surface and return */ SURFACE_UnlockSurface(psurf); return hbmp; }