Difference between revisions of "Techwiki:DC State Saving"

From ReactOS Wiki
Jump to: navigation, search
(Saved content)
Line 7: Line 7:
  
 
===Saved content===
 
===Saved content===
The following fields are saved:
+
'''The following fields are saved:'''
DC.ppdev: either copied or initialized to the same value as the original DC
+
:DC.ppdev: either copied or initialized to the same value as the original DC
DC.dclevel.hpal
+
:DC.dclevel.hpal
DC.dclevel.ppal
+
:DC.dclevel.ppal
DC.dclevel.pColorSpace
+
:DC.dclevel.pColorSpace
DC.dclevel.lSaveDepth
+
:DC.dclevel.lSaveDepth
DC.dclevel.hdcSave
+
:DC.dclevel.hdcSave
DC.dclevel.pbrFill
+
:DC.dclevel.pbrFill
DC.dclevel.pbrLine
+
:DC.dclevel.pbrLine
DC.dclevel.pFont
+
:DC.dclevel.pFont
DC.dclevel.lapath (at least partly)
+
:DC.dclevel.lapath (at least partly)
DC.dclevel.ca
+
:DC.dclevel.ca
DC.dclevel.mxWorldToDevice
+
:DC.dclevel.mxWorldToDevice
DC.dclevel.mxDeviceToWorld
+
:DC.dclevel.mxDeviceToWorld
DC.dclevel.mxWorldToPage
+
:DC.dclevel.mxWorldToPage
DC.dclevel.efM11PtoD
+
:DC.dclevel.efM11PtoD
DC.dclevel.efM22PtoD
+
:DC.dclevel.efM22PtoD
DC.dclevel.pSurface
+
:DC.dclevel.pSurface
DC.dclevel.sizl
+
:DC.dclevel.sizl
  
The following fields are not saved:
+
'''The following fields are not saved:'''
DC.dhpdev
+
:DC.dhpdev
DC.dctype
+
:DC.dctype
DC.fs
+
:DC.fs
DC.hsem
+
:DC.hsem
DC.flGraphicsCaps
+
:DC.flGraphicsCaps
DC.flGraphicsCaps2
+
:DC.flGraphicsCaps2
DC.pdcattr
+
:DC.pdcattr
DC.erclClip
+
:DC.erclClip
DC.ptlDCOrig
+
:DC.ptlDCOrig
DC.erclWindow
+
:DC.erclWindow
DC.erclBounds
+
:DC.erclBounds
DC.erclBoundsApp
+
:DC.erclBoundsApp
DC.prgnVis
+
:DC.prgnVis
DC.prgnRao
+
:DC.prgnRao
DC.ptlFillOrigin
+
:DC.ptlFillOrigin
DC.eboFill
+
:DC.eboFill
DC.eboLine
+
:DC.eboLine
DC.eboText
+
:DC.eboText
DC.eboBackground
+
:DC.eboBackground
DC.hlfntCur
+
:DC.hlfntCur
DC.co
+
:DC.co
DC.ipfdDevMax
+
:DC.ipfdDevMax
DC.ulCopyCount
+
:DC.ulCopyCount
  
The following fields need investigation:
+
'''The following fields need investigation:'''
DC.hdcNext
+
:DC.hdcNext
DC.hdcPrev
+
:DC.hdcPrev
DC.prgnAPI
+
:DC.prgnAPI
DC.flSimulationFlags
+
:DC.flSimulationFlags
DC.lEscapement
+
:DC.lEscapement
DC.prfnt
+
:DC.prfnt
DC.pPFFList
+
:DC.pPFFList
DC.pClrxFormLnk
+
:DC.pClrxFormLnk
DC.pSurfInfo
+
:DC.pSurfInfo
DC.ptlDoBanding
+
:DC.ptlDoBanding
DC.dclevel.lIcmMode
+
:DC.dclevel.lIcmMode
DC.dclevel.ptlBrushOrigin
+
:DC.dclevel.ptlBrushOrigin
DC.dclevel.hpath
+
:DC.dclevel.hpath
DC.dclevel.flPath
+
:DC.dclevel.flPath
DC.dclevel.prgnClip
+
:DC.dclevel.prgnClip
DC.dclevel.prgnMeta
+
:DC.dclevel.prgnMeta
DC.dclevel.flFontState
+
:DC.dclevel.flFontState
DC.dclevel.ufi
+
:DC.dclevel.ufi
DC.dclevel.ufiLoc
+
:DC.dclevel.ufiLoc
DC.dclevel.pUFI
+
:DC.dclevel.pUFI
DC.dclevel.uNumUFIs
+
:DC.dclevel.uNumUFIs
DC.dclevel.ufiSet
+
:DC.dclevel.ufiSet
DC.dclevel.fl
+
:DC.dclevel.fl
DC.dclevel.flbrush
+
:DC.dclevel.flbrush
DC.dclevel.efDxPtoD
+
:DC.dclevel.efDxPtoD
DC.dclevel.efDyPtoD
+
:DC.dclevel.efDyPtoD
DC.dclevel.efM11_TWIPS
+
:DC.dclevel.efM11_TWIPS
DC.dclevel.efM22_TWIPS
+
:DC.dclevel.efM22_TWIPS
DC.dclevel.efPr11
+
:DC.dclevel.efPr11
DC.dclevel.efPr22
+
:DC.dclevel.efPr22
DC.pdcattr->pvLDC
+
:DC.pdcattr->pvLDC
DC.pdcattr->ulDirty
+
:DC.pdcattr->ulDirty
DC.pdcattr->hbrush
+
:DC.pdcattr->hbrush
DC.pdcattr->hpen
+
:DC.pdcattr->hpen
DC.pdcattr->crBackgroundClr
+
:DC.pdcattr->crBackgroundClr
DC.pdcattr->ulBackgroundClr
+
:DC.pdcattr->ulBackgroundClr
DC.pdcattr->crForegroundClr
+
:DC.pdcattr->crForegroundClr
DC.pdcattr->ulForegroundClr
+
:DC.pdcattr->ulForegroundClr
DC.pdcattr->crBrushClr
+
:DC.pdcattr->crBrushClr
DC.pdcattr->ulBrushClr
+
:DC.pdcattr->ulBrushClr
DC.pdcattr->crPenClr
+
:DC.pdcattr->crPenClr
DC.pdcattr->ulPenClr
+
:DC.pdcattr->ulPenClr
DC.pdcattr->iCS_CP
+
:DC.pdcattr->iCS_CP
DC.pdcattr->iGraphicsMode
+
:DC.pdcattr->iGraphicsMode
DC.pdcattr->jROP2
+
:DC.pdcattr->jROP2
DC.pdcattr->jBkMode
+
:DC.pdcattr->jBkMode
DC.pdcattr->jFillMode
+
:DC.pdcattr->jFillMode
DC.pdcattr->jStretchBltMode
+
:DC.pdcattr->jStretchBltMode
DC.pdcattr->ptlCurrent
+
:DC.pdcattr->ptlCurrent
DC.pdcattr->ptfxCurrent
+
:DC.pdcattr->ptfxCurrent
DC.pdcattr->lBkMode
+
:DC.pdcattr->lBkMode
DC.pdcattr->lFillMode
+
:DC.pdcattr->lFillMode
DC.pdcattr->lStretchBltMode
+
:DC.pdcattr->lStretchBltMode
DC.pdcattr->flFontMapper
+
:DC.pdcattr->flFontMapper
DC.pdcattr->lIcmMode
+
:DC.pdcattr->lIcmMode
DC.pdcattr->hcmXform
+
:DC.pdcattr->hcmXform
DC.pdcattr->hColorSpace
+
:DC.pdcattr->hColorSpace
DC.pdcattr->flIcmFlags
+
:DC.pdcattr->flIcmFlags
DC.pdcattr->IcmBrushColor
+
:DC.pdcattr->IcmBrushColor
DC.pdcattr->IcmPenColor
+
:DC.pdcattr->IcmPenColor
DC.pdcattr->pvLIcm
+
:DC.pdcattr->pvLIcm
DC.pdcattr->flTextAlign
+
:DC.pdcattr->flTextAlign
DC.pdcattr->lTextAlign
+
:DC.pdcattr->lTextAlign
DC.pdcattr->lTextExtra
+
:DC.pdcattr->lTextExtra
DC.pdcattr->lRelAbs
+
:DC.pdcattr->lRelAbs
DC.pdcattr->lBreakExtra
+
:DC.pdcattr->lBreakExtra
DC.pdcattr->cBreak
+
:DC.pdcattr->cBreak
DC.pdcattr->hlfntNew
+
:DC.pdcattr->hlfntNew
DC.pdcattr->mxWorldToDevice
+
:DC.pdcattr->mxWorldToDevice
DC.pdcattr->mxDeviceToWorld
+
:DC.pdcattr->mxDeviceToWorld
DC.pdcattr->mxWorldToPage
+
:DC.pdcattr->mxWorldToPage
DC.pdcattr->efM11PtoD
+
:DC.pdcattr->efM11PtoD
DC.pdcattr->efM22PtoD
+
:DC.pdcattr->efM22PtoD
DC.pdcattr->efDxPtoD
+
:DC.pdcattr->efDxPtoD
DC.pdcattr->efDyPtoD
+
:DC.pdcattr->efDyPtoD
DC.pdcattr->iMapMode
+
:DC.pdcattr->iMapMode
DC.pdcattr->dwLayout
+
:DC.pdcattr->dwLayout
DC.pdcattr->lWindowOrgx
+
:DC.pdcattr->lWindowOrgx
DC.pdcattr->ptlWindowOrg
+
:DC.pdcattr->ptlWindowOrg
DC.pdcattr->szlWindowExt
+
:DC.pdcattr->szlWindowExt
DC.pdcattr->ptlViewportOrg
+
:DC.pdcattr->ptlViewportOrg
DC.pdcattr->szlViewportExt
+
:DC.pdcattr->szlViewportExt
DC.pdcattr->flXform
+
:DC.pdcattr->flXform
DC.pdcattr->szlVirtualDevicePixel
+
:DC.pdcattr->szlVirtualDevicePixel
DC.pdcattr->szlVirtualDeviceMm
+
:DC.pdcattr->szlVirtualDeviceMm
DC.pdcattr->szlVirtualDeviceSize
+
:DC.pdcattr->szlVirtualDeviceSize
DC.pdcattr->ptlBrushOrigin
+
:DC.pdcattr->ptlBrushOrigin
DC.pdcattr->VisRectRegion
+
:DC.pdcattr->VisRectRegion

Revision as of 23:01, 24 March 2009

DC State saving is done from SaveDC (NtGdiSaveDC), restoring from RestoreDC (NtGdiRestoreDC). The Saved levels form a linked list of HDCs, with the first saved state DC in the original DC's dclevel.hdcSave. Each Saved DC has this field set to the last DC that was saved before. The hdcSave field is initialized with 0. The dclevel.lSaveDepth specifies the DCs save level. It is initialized with 1 and grows by one each time you call SaveDC. After calling RestoreDC, it is restored to the requested level. Saved DCs don't belong to the current process. Instead they have a ProcessId of something like 0x80000012 (found on XP).

Saved content

The following fields are saved:

DC.ppdev: either copied or initialized to the same value as the original DC
DC.dclevel.hpal
DC.dclevel.ppal
DC.dclevel.pColorSpace
DC.dclevel.lSaveDepth
DC.dclevel.hdcSave
DC.dclevel.pbrFill
DC.dclevel.pbrLine
DC.dclevel.pFont
DC.dclevel.lapath (at least partly)
DC.dclevel.ca
DC.dclevel.mxWorldToDevice
DC.dclevel.mxDeviceToWorld
DC.dclevel.mxWorldToPage
DC.dclevel.efM11PtoD
DC.dclevel.efM22PtoD
DC.dclevel.pSurface
DC.dclevel.sizl

The following fields are not saved:

DC.dhpdev
DC.dctype
DC.fs
DC.hsem
DC.flGraphicsCaps
DC.flGraphicsCaps2
DC.pdcattr
DC.erclClip
DC.ptlDCOrig
DC.erclWindow
DC.erclBounds
DC.erclBoundsApp
DC.prgnVis
DC.prgnRao
DC.ptlFillOrigin
DC.eboFill
DC.eboLine
DC.eboText
DC.eboBackground
DC.hlfntCur
DC.co
DC.ipfdDevMax
DC.ulCopyCount

The following fields need investigation:

DC.hdcNext
DC.hdcPrev
DC.prgnAPI
DC.flSimulationFlags
DC.lEscapement
DC.prfnt
DC.pPFFList
DC.pClrxFormLnk
DC.pSurfInfo
DC.ptlDoBanding
DC.dclevel.lIcmMode
DC.dclevel.ptlBrushOrigin
DC.dclevel.hpath
DC.dclevel.flPath
DC.dclevel.prgnClip
DC.dclevel.prgnMeta
DC.dclevel.flFontState
DC.dclevel.ufi
DC.dclevel.ufiLoc
DC.dclevel.pUFI
DC.dclevel.uNumUFIs
DC.dclevel.ufiSet
DC.dclevel.fl
DC.dclevel.flbrush
DC.dclevel.efDxPtoD
DC.dclevel.efDyPtoD
DC.dclevel.efM11_TWIPS
DC.dclevel.efM22_TWIPS
DC.dclevel.efPr11
DC.dclevel.efPr22
DC.pdcattr->pvLDC
DC.pdcattr->ulDirty
DC.pdcattr->hbrush
DC.pdcattr->hpen
DC.pdcattr->crBackgroundClr
DC.pdcattr->ulBackgroundClr
DC.pdcattr->crForegroundClr
DC.pdcattr->ulForegroundClr
DC.pdcattr->crBrushClr
DC.pdcattr->ulBrushClr
DC.pdcattr->crPenClr
DC.pdcattr->ulPenClr
DC.pdcattr->iCS_CP
DC.pdcattr->iGraphicsMode
DC.pdcattr->jROP2
DC.pdcattr->jBkMode
DC.pdcattr->jFillMode
DC.pdcattr->jStretchBltMode
DC.pdcattr->ptlCurrent
DC.pdcattr->ptfxCurrent
DC.pdcattr->lBkMode
DC.pdcattr->lFillMode
DC.pdcattr->lStretchBltMode
DC.pdcattr->flFontMapper
DC.pdcattr->lIcmMode
DC.pdcattr->hcmXform
DC.pdcattr->hColorSpace
DC.pdcattr->flIcmFlags
DC.pdcattr->IcmBrushColor
DC.pdcattr->IcmPenColor
DC.pdcattr->pvLIcm
DC.pdcattr->flTextAlign
DC.pdcattr->lTextAlign
DC.pdcattr->lTextExtra
DC.pdcattr->lRelAbs
DC.pdcattr->lBreakExtra
DC.pdcattr->cBreak
DC.pdcattr->hlfntNew
DC.pdcattr->mxWorldToDevice
DC.pdcattr->mxDeviceToWorld
DC.pdcattr->mxWorldToPage
DC.pdcattr->efM11PtoD
DC.pdcattr->efM22PtoD
DC.pdcattr->efDxPtoD
DC.pdcattr->efDyPtoD
DC.pdcattr->iMapMode
DC.pdcattr->dwLayout
DC.pdcattr->lWindowOrgx
DC.pdcattr->ptlWindowOrg
DC.pdcattr->szlWindowExt
DC.pdcattr->ptlViewportOrg
DC.pdcattr->szlViewportExt
DC.pdcattr->flXform
DC.pdcattr->szlVirtualDevicePixel
DC.pdcattr->szlVirtualDeviceMm
DC.pdcattr->szlVirtualDeviceSize
DC.pdcattr->ptlBrushOrigin
DC.pdcattr->VisRectRegion