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); }
/* IntUpdateMonitorSize * * Reset size of the monitor using atached device * * Arguments * * PMONITOR * pGdiDevice Pointer to the PDEVOBJ, which size has changed * * Return value * Returns a NTSTATUS */ NTSTATUS IntUpdateMonitorSize(IN PDEVOBJ *pGdiDevice) { PMONITOR Monitor; for (Monitor = gMonitorList; Monitor != NULL; Monitor = Monitor->Next) { if (Monitor->GdiDevice == pGdiDevice) break; } if (Monitor == NULL) { /* no monitor for given device found */ return STATUS_INVALID_PARAMETER; } Monitor->rcMonitor.left = 0; Monitor->rcMonitor.top = 0; Monitor->rcMonitor.right = Monitor->rcMonitor.left + Monitor->GdiDevice->gdiinfo.ulHorzRes; Monitor->rcMonitor.bottom = Monitor->rcMonitor.top + Monitor->GdiDevice->gdiinfo.ulVertRes; Monitor->rcWork = Monitor->rcMonitor; if (Monitor->hrgnMonitor) { GreSetObjectOwner(Monitor->hrgnMonitor, GDI_OBJ_HMGR_POWNED); GreDeleteObject(Monitor->hrgnMonitor); } Monitor->hrgnMonitor = IntSysCreateRectRgnIndirect( &Monitor->rcMonitor ); IntGdiSetRegionOwner(Monitor->hrgnMonitor, GDI_OBJ_HMGR_PUBLIC); return STATUS_SUCCESS; }
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); }
/* UserUpdateMonitorSize * * Reset size of the monitor using atached device * * Arguments * * PMONITOR * pGdiDevice Pointer to the PDEVOBJ, which size has changed * * Return value * Returns a NTSTATUS */ NTSTATUS NTAPI UserUpdateMonitorSize(IN HDEV hDev) { PMONITOR pMonitor; SIZEL DeviceSize; /* Find monitor attached to given device */ for (pMonitor = gMonitorList; pMonitor != NULL; pMonitor = pMonitor->pMonitorNext) { if (pMonitor->hDev == hDev) break; } if (pMonitor == NULL) { /* No monitor has been found */ return STATUS_INVALID_PARAMETER; } /* Get the size of the hdev */ PDEVOBJ_sizl((PPDEVOBJ)hDev, &DeviceSize); /* Update monitor size */ pMonitor->rcMonitor.left = 0; pMonitor->rcMonitor.top = 0; pMonitor->rcMonitor.right = pMonitor->rcMonitor.left + DeviceSize.cx; pMonitor->rcMonitor.bottom = pMonitor->rcMonitor.top + DeviceSize.cy; pMonitor->rcWork = pMonitor->rcMonitor; /* Destroy monitor region... */ if (pMonitor->hrgnMonitor) { GreSetObjectOwner(pMonitor->hrgnMonitor, GDI_OBJ_HMGR_POWNED); GreDeleteObject(pMonitor->hrgnMonitor); } /* ...and create new one */ pMonitor->hrgnMonitor = NtGdiCreateRectRgn( pMonitor->rcMonitor.left, pMonitor->rcMonitor.top, pMonitor->rcMonitor.right, pMonitor->rcMonitor.bottom); if (pMonitor->hrgnMonitor) IntGdiSetRegionOwner(pMonitor->hrgnMonitor, GDI_OBJ_HMGR_PUBLIC); return STATUS_SUCCESS; }