Optimize and cleanup dcutil.

svn path=/trunk/; revision=30582
This commit is contained in:
James Tabor 2007-11-20 02:22:30 +00:00
parent d8159c7929
commit 3d30146033
3 changed files with 12 additions and 53 deletions

View file

@ -94,8 +94,8 @@ VOID FASTCALL IntGdiCopyToSaveState(PDC, PDC);
VOID FASTCALL DC_UpdateXforms(PDC dc);
BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
BOOL FASTCALL DCU_SyncDcAttrtoUser(PDC, FLONG);
BOOL FASTCALL DCU_SynchDcAttrtoUser(HDC, FLONG);
BOOL FASTCALL DCU_SyncDcAttrtoUser(PDC);
BOOL FASTCALL DCU_SynchDcAttrtoUser(HDC);
VOID FASTCALL IntGetViewportExtEx(PDC dc, LPSIZE pt);
VOID FASTCALL IntGetViewportOrgEx(PDC dc, LPPOINT pt);

View file

@ -580,7 +580,7 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
// Need to set ownership so Sync dcattr will work.
DC_SetOwnership( Dce->hDC, PsGetCurrentProcess());
DC_AllocateDcAttr( Dce->hDC ); // Allocate new dcattr
DCU_SynchDcAttrtoUser( Dce->hDC, -1); // Copy data from dc to dcattr
DCU_SynchDcAttrtoUser( Dce->hDC); // Copy data from dc to dcattr
Dce->pProcess = PsGetCurrentProcess(); // Set the temp owning process
}
return(Dce->hDC);

View file

@ -107,77 +107,36 @@ INT STDCALL func_name( HDC hdc, INT mode ) \
static
VOID
CopytoUserDcAttr(PDC dc, PDC_ATTR Dc_Attr, FLONG Dirty)
CopytoUserDcAttr(PDC dc, PDC_ATTR Dc_Attr)
{
Dc_Attr->hpen = dc->Dc_Attr.hpen;
Dc_Attr->hbrush = dc->Dc_Attr.hbrush;
Dc_Attr->hColorSpace = dc->Dc_Attr.hColorSpace;
Dc_Attr->hlfntNew = dc->Dc_Attr.hlfntNew;
Dc_Attr->jROP2 = dc->Dc_Attr.jROP2;
Dc_Attr->jFillMode = dc->Dc_Attr.jFillMode;
Dc_Attr->jStretchBltMode = dc->Dc_Attr.jStretchBltMode;
Dc_Attr->lRelAbs = dc->Dc_Attr.lRelAbs;
Dc_Attr->jBkMode = dc->Dc_Attr.jBkMode;
Dc_Attr->crBackgroundClr = dc->Dc_Attr.crBackgroundClr;
Dc_Attr->ulBackgroundClr = dc->Dc_Attr.ulBackgroundClr;
Dc_Attr->crForegroundClr = dc->Dc_Attr.crForegroundClr;
Dc_Attr->ulForegroundClr = dc->Dc_Attr.ulForegroundClr;
Dc_Attr->ulBrushClr = dc->Dc_Attr.ulBrushClr;
Dc_Attr->crBrushClr = dc->Dc_Attr.crBrushClr;
Dc_Attr->ulPenClr = dc->Dc_Attr.ulPenClr;
Dc_Attr->crPenClr = dc->Dc_Attr.crPenClr;
Dc_Attr->ptlBrushOrigin = dc->Dc_Attr.ptlBrushOrigin;
Dc_Attr->lTextAlign = dc->Dc_Attr.lTextAlign;
Dc_Attr->lTextExtra = dc->Dc_Attr.lTextExtra;
Dc_Attr->cBreak = dc->Dc_Attr.cBreak;
Dc_Attr->lBreakExtra = dc->Dc_Attr.lBreakExtra;
Dc_Attr->iMapMode = dc->Dc_Attr.iMapMode;
Dc_Attr->iGraphicsMode = dc->Dc_Attr.iGraphicsMode;
Dc_Attr->ptlCurrent = dc->Dc_Attr.ptlCurrent;
Dc_Attr->ptlWindowOrg = dc->Dc_Attr.ptlWindowOrg;
Dc_Attr->szlWindowExt = dc->Dc_Attr.szlWindowExt;
Dc_Attr->ptlViewportOrg = dc->Dc_Attr.ptlViewportOrg;
Dc_Attr->szlViewportExt = dc->Dc_Attr.szlViewportExt;
Dc_Attr->ulDirty_ = dc->Dc_Attr.ulDirty_; //Copy flags! We may have set them.
MmCopyToCaller(Dc_Attr, &dc->Dc_Attr, sizeof(DC_ATTR));
XForm2MatrixS( &Dc_Attr->mxWorldToDevice, &dc->w.xformWorld2Vport);
XForm2MatrixS( &Dc_Attr->mxDevicetoWorld, &dc->w.xformVport2World);
XForm2MatrixS( &Dc_Attr->mxWorldToPage, &dc->w.xformWorld2Wnd);
XForm2MatrixS( &dc->Dc_Attr.mxWorldToDevice, &dc->w.xformWorld2Vport);
XForm2MatrixS( &dc->Dc_Attr.mxDevicetoWorld, &dc->w.xformVport2World);
XForm2MatrixS( &dc->Dc_Attr.mxWorldToPage, &dc->w.xformWorld2Wnd);
MmCopyToCaller(Dc_Attr, &dc->Dc_Attr, sizeof(DC_ATTR));
}
BOOL
FASTCALL
DCU_SyncDcAttrtoUser(PDC dc, FLONG Dirty)
DCU_SyncDcAttrtoUser(PDC dc)
{
PDC_ATTR Dc_Attr = dc->pDc_Attr;
if (!Dirty) return FALSE;
if (Dc_Attr == ((PDC_ATTR)&dc->Dc_Attr)) return TRUE; // No need to copy self.
if (!Dc_Attr) return FALSE;
else
CopytoUserDcAttr( dc, Dc_Attr, Dirty);
CopytoUserDcAttr( dc, Dc_Attr);
return TRUE;
}
BOOL
FASTCALL
DCU_SynchDcAttrtoUser(HDC hDC, FLONG Dirty)
DCU_SynchDcAttrtoUser(HDC hDC)
{
PDC pDC = DC_LockDc ( hDC );
if (!pDC) return FALSE;
BOOL Ret = DCU_SyncDcAttrtoUser(pDC, Dirty);
BOOL Ret = DCU_SyncDcAttrtoUser(pDC);
DC_UnlockDc( pDC );
return Ret;
}