mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 17:16:04 +00:00
- Started the use of DC_ATTR. Created dcutil.c to handle xfers. I choose XForms this time and still trouble shooting it. If anyone wants to join in and help. Optimize syncing the data packets, add more, etc. Don't be shy!
- Removed NtGdiGetWorldTransform from w32ksvc.db and updated ntgdibad.h. - Implemented GetTransform redirect to NtGdiGetTransform. - Connected the gdi32 parts. svn path=/trunk/; revision=28442
This commit is contained in:
parent
e2e96c6bc8
commit
e308fab607
11 changed files with 127 additions and 77 deletions
|
@ -453,13 +453,13 @@ GetTextFaceW@12
|
||||||
GetTextFaceAliasW@12
|
GetTextFaceAliasW@12
|
||||||
GetTextMetricsA@8
|
GetTextMetricsA@8
|
||||||
GetTextMetricsW@8
|
GetTextMetricsW@8
|
||||||
GetTransform@12
|
GetTransform@12=NtGdiGetTransform@12
|
||||||
GetViewportExtEx@8
|
GetViewportExtEx@8
|
||||||
GetViewportOrgEx@8
|
GetViewportOrgEx@8
|
||||||
GetWinMetaFileBits@20
|
GetWinMetaFileBits@20
|
||||||
GetWindowExtEx@8
|
GetWindowExtEx@8
|
||||||
GetWindowOrgEx@8
|
GetWindowOrgEx@8
|
||||||
GetWorldTransform@8=NtGdiGetWorldTransform@8
|
GetWorldTransform@8
|
||||||
HT_Get8BPPFormatPalette@16
|
HT_Get8BPPFormatPalette@16
|
||||||
HT_Get8BPPMaskPalette@24
|
HT_Get8BPPMaskPalette@24
|
||||||
IntersectClipRect@20=NtGdiIntersectClipRect@20
|
IntersectClipRect@20=NtGdiIntersectClipRect@20
|
||||||
|
|
|
@ -1869,18 +1869,6 @@ GetTextFaceAliasW(HDC hdc,int cChar,LPWSTR pszOut)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
BOOL
|
|
||||||
STDCALL
|
|
||||||
GetTransform(HDC hdc, DWORD iXform, LPXFORM pxf)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -103,7 +103,7 @@ DPtoLP ( HDC hDC, LPPOINT Points, INT Count )
|
||||||
if (Dc_Attr->flXform & ( DEVICE_TO_WORLD_INVALID | // Force a full recalibration!
|
if (Dc_Attr->flXform & ( DEVICE_TO_WORLD_INVALID | // Force a full recalibration!
|
||||||
PAGE_XLATE_CHANGED | // Changes or Updates have been made,
|
PAGE_XLATE_CHANGED | // Changes or Updates have been made,
|
||||||
PAGE_EXTENTS_CHANGED | // do processing in kernel space.
|
PAGE_EXTENTS_CHANGED | // do processing in kernel space.
|
||||||
WORLD_XFORM_CHANGED )
|
WORLD_XFORM_CHANGED ))
|
||||||
#endif
|
#endif
|
||||||
return NtGdiTransformPoints( hDC, Points, Points, Count, GdiDpToLp); // DPtoLP mode.
|
return NtGdiTransformPoints( hDC, Points, Points, Count, GdiDpToLp); // DPtoLP mode.
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -121,7 +121,7 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
LPtoDP ( HDC hDC, LPPOINT Points, INT Count )
|
LPtoDP ( HDC hDC, LPPOINT Points, INT Count )
|
||||||
{
|
{
|
||||||
#if 0
|
//#if 0
|
||||||
INT i;
|
INT i;
|
||||||
PDC_ATTR Dc_Attr;
|
PDC_ATTR Dc_Attr;
|
||||||
|
|
||||||
|
@ -129,17 +129,25 @@ LPtoDP ( HDC hDC, LPPOINT Points, INT Count )
|
||||||
|
|
||||||
if (Dc_Attr->flXform & ( PAGE_XLATE_CHANGED | // Check for Changes and Updates
|
if (Dc_Attr->flXform & ( PAGE_XLATE_CHANGED | // Check for Changes and Updates
|
||||||
PAGE_EXTENTS_CHANGED |
|
PAGE_EXTENTS_CHANGED |
|
||||||
WORLD_XFORM_CHANGED )
|
WORLD_XFORM_CHANGED ))
|
||||||
#endif
|
//#endif
|
||||||
return NtGdiTransformPoints( hDC, Points, Points, Count, GdiLpToDp); // LPtoDP mode
|
return NtGdiTransformPoints( hDC, Points, Points, Count, GdiLpToDp); // LPtoDP mode
|
||||||
#if 0
|
//#if 0
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for ( i = 0; i < Count; i++ )
|
for ( i = 0; i < Count; i++ )
|
||||||
CoordCnvP ( &Dc_Attr->mxWorldToDevice, &Points[i] );
|
CoordCnvP ( &Dc_Attr->mxWorldToDevice, &Points[i] );
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
#endif
|
//#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
STDCALL
|
||||||
|
GetWorldTransform( HDC hDC, LPXFORM lpXform )
|
||||||
|
{
|
||||||
|
return NtGdiGetTransform( hDC, GdiWorldSpaceToPageSpace, lpXform);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -465,14 +465,6 @@ BOOL STDCALL NtGdiGetWindowExtEx(HDC hDC, LPSIZE windowExt);
|
||||||
/* Needs to be done in user-mode. */
|
/* Needs to be done in user-mode. */
|
||||||
BOOL STDCALL NtGdiGetWindowOrgEx(HDC hDC, LPPOINT windowOrg);
|
BOOL STDCALL NtGdiGetWindowOrgEx(HDC hDC, LPPOINT windowOrg);
|
||||||
|
|
||||||
/* Use NtGdiGetTransform with GdiWorldSpaceToPageSpace */
|
|
||||||
BOOL
|
|
||||||
STDCALL
|
|
||||||
NtGdiGetWorldTransform (
|
|
||||||
HDC hDC,
|
|
||||||
LPXFORM Xform
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Needs to be done in user-mode. */
|
/* Needs to be done in user-mode. */
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
|
|
|
@ -153,6 +153,8 @@ VOID FASTCALL DC_SetOwnership(HDC DC, PEPROCESS Owner);
|
||||||
VOID FASTCALL DC_UpdateXforms(PDC dc);
|
VOID FASTCALL DC_UpdateXforms(PDC dc);
|
||||||
BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
|
BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
|
||||||
|
|
||||||
|
BOOL FASTCALL DCU_UpdateUserXForms(PDC, ULONG);
|
||||||
|
|
||||||
VOID FASTCALL IntGetViewportExtEx(PDC dc, LPSIZE pt);
|
VOID FASTCALL IntGetViewportExtEx(PDC dc, LPSIZE pt);
|
||||||
VOID FASTCALL IntGetViewportOrgEx(PDC dc, LPPOINT pt);
|
VOID FASTCALL IntGetViewportOrgEx(PDC dc, LPPOINT pt);
|
||||||
VOID FASTCALL IntGetWindowExtEx(PDC dc, LPSIZE pt);
|
VOID FASTCALL IntGetWindowExtEx(PDC dc, LPSIZE pt);
|
||||||
|
|
|
@ -194,7 +194,6 @@ IntGdiModifyWorldTransform(PDC pDc,
|
||||||
|
|
||||||
case MWT_MAX+1: // Must be MWT_SET????
|
case MWT_MAX+1: // Must be MWT_SET????
|
||||||
pDc->w.xformWorld2Wnd = *lpXForm; // Do it like Wine.
|
pDc->w.xformWorld2Wnd = *lpXForm; // Do it like Wine.
|
||||||
DC_UpdateXforms(pDc); // Good wine port here too.
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -203,7 +202,6 @@ IntGdiModifyWorldTransform(PDC pDc,
|
||||||
}
|
}
|
||||||
|
|
||||||
DC_UpdateXforms(pDc);
|
DC_UpdateXforms(pDc);
|
||||||
DC_UnlockDc(pDc);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,8 +227,9 @@ NtGdiGetGraphicsMode ( HDC hDC )
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
NtGdiGetWorldTransform(HDC hDC,
|
NtGdiGetTransform(HDC hDC,
|
||||||
LPXFORM XForm)
|
DWORD iXform,
|
||||||
|
LPXFORM XForm)
|
||||||
{
|
{
|
||||||
PDC dc;
|
PDC dc;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
@ -253,7 +252,14 @@ NtGdiGetWorldTransform(HDC hDC,
|
||||||
ProbeForWrite(XForm,
|
ProbeForWrite(XForm,
|
||||||
sizeof(XFORM),
|
sizeof(XFORM),
|
||||||
1);
|
1);
|
||||||
*XForm = dc->w.xformWorld2Wnd;
|
switch(iXform)
|
||||||
|
{
|
||||||
|
case GdiWorldSpaceToPageSpace:
|
||||||
|
*XForm = dc->w.xformWorld2Wnd;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -403,7 +409,10 @@ NtGdiTransformPoints( HDC hDC,
|
||||||
SetLastNtError(Status);
|
SetLastNtError(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// If we are getting called that means User XForms is a mess!
|
||||||
|
//
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
ExFreePool(Points);
|
ExFreePool(Points);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -436,7 +445,7 @@ NtGdiModifyWorldTransform(HDC hDC,
|
||||||
{
|
{
|
||||||
ProbeForRead(UnsafeXForm, sizeof(XFORM), 1);
|
ProbeForRead(UnsafeXForm, sizeof(XFORM), 1);
|
||||||
RtlCopyMemory(&SafeXForm, UnsafeXForm, sizeof(XFORM));
|
RtlCopyMemory(&SafeXForm, UnsafeXForm, sizeof(XFORM));
|
||||||
|
|
||||||
Ret = IntGdiModifyWorldTransform(dc, &SafeXForm, Mode);
|
Ret = IntGdiModifyWorldTransform(dc, &SafeXForm, Mode);
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
@ -493,7 +502,7 @@ NtGdiOffsetViewportOrgEx(HDC hDC,
|
||||||
dc->Dc_Attr.ptlViewportOrg.x += XOffset;
|
dc->Dc_Attr.ptlViewportOrg.x += XOffset;
|
||||||
dc->Dc_Attr.ptlViewportOrg.y += YOffset;
|
dc->Dc_Attr.ptlViewportOrg.y += YOffset;
|
||||||
DC_UpdateXforms(dc);
|
DC_UpdateXforms(dc);
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -544,6 +553,7 @@ NtGdiOffsetWindowOrgEx(HDC hDC,
|
||||||
dc->Dc_Attr.ptlWindowOrg.y += YOffset;
|
dc->Dc_Attr.ptlWindowOrg.y += YOffset;
|
||||||
|
|
||||||
DC_UpdateXforms(dc);
|
DC_UpdateXforms(dc);
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -680,6 +690,7 @@ NtGdiSetMapMode(HDC hDC,
|
||||||
}
|
}
|
||||||
|
|
||||||
DC_UpdateXforms(dc);
|
DC_UpdateXforms(dc);
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
}
|
}
|
||||||
|
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
@ -732,7 +743,7 @@ NtGdiSetViewportExtEx(HDC hDC,
|
||||||
Size->cx = dc->Dc_Attr.szlViewportExt.cx;
|
Size->cx = dc->Dc_Attr.szlViewportExt.cx;
|
||||||
Size->cy = dc->Dc_Attr.szlViewportExt.cy;
|
Size->cy = dc->Dc_Attr.szlViewportExt.cy;
|
||||||
|
|
||||||
dc->Dc_Attr.szlViewportExt.cx = XExtent;
|
dc->Dc_Attr.szlViewportExt.cx = XExtent;
|
||||||
dc->Dc_Attr.szlViewportExt.cy = YExtent;
|
dc->Dc_Attr.szlViewportExt.cy = YExtent;
|
||||||
|
|
||||||
if (dc->Dc_Attr.iMapMode == MM_ISOTROPIC)
|
if (dc->Dc_Attr.iMapMode == MM_ISOTROPIC)
|
||||||
|
@ -754,6 +765,7 @@ NtGdiSetViewportExtEx(HDC hDC,
|
||||||
|
|
||||||
|
|
||||||
DC_UpdateXforms(dc);
|
DC_UpdateXforms(dc);
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -805,6 +817,7 @@ NtGdiSetViewportOrgEx(HDC hDC,
|
||||||
dc->Dc_Attr.ptlViewportOrg.y = Y;
|
dc->Dc_Attr.ptlViewportOrg.y = Y;
|
||||||
|
|
||||||
DC_UpdateXforms(dc);
|
DC_UpdateXforms(dc);
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -868,6 +881,7 @@ NtGdiSetWindowExtEx(HDC hDC,
|
||||||
dc->Dc_Attr.szlWindowExt.cy = YExtent;
|
dc->Dc_Attr.szlWindowExt.cy = YExtent;
|
||||||
|
|
||||||
DC_UpdateXforms(dc);
|
DC_UpdateXforms(dc);
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -919,6 +933,7 @@ NtGdiSetWindowOrgEx(HDC hDC,
|
||||||
dc->Dc_Attr.ptlWindowOrg.y = Y;
|
dc->Dc_Attr.ptlWindowOrg.y = Y;
|
||||||
|
|
||||||
DC_UpdateXforms(dc);
|
DC_UpdateXforms(dc);
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -1327,6 +1327,7 @@ IntGdiGetDCState(HDC hDC)
|
||||||
newdc->w.xformWorld2Vport = dc->w.xformWorld2Vport;
|
newdc->w.xformWorld2Vport = dc->w.xformWorld2Vport;
|
||||||
newdc->w.xformVport2World = dc->w.xformVport2World;
|
newdc->w.xformVport2World = dc->w.xformVport2World;
|
||||||
newdc->w.vport2WorldValid = dc->w.vport2WorldValid;
|
newdc->w.vport2WorldValid = dc->w.vport2WorldValid;
|
||||||
|
DCU_UpdateUserXForms(newdc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
newdc->Dc_Attr.ptlWindowOrg.x = dc->Dc_Attr.ptlWindowOrg.x;
|
newdc->Dc_Attr.ptlWindowOrg.x = dc->Dc_Attr.ptlWindowOrg.x;
|
||||||
newdc->Dc_Attr.ptlWindowOrg.y = dc->Dc_Attr.ptlWindowOrg.y;
|
newdc->Dc_Attr.ptlWindowOrg.y = dc->Dc_Attr.ptlWindowOrg.y;
|
||||||
newdc->Dc_Attr.szlWindowExt.cx = dc->Dc_Attr.szlWindowExt.cx;
|
newdc->Dc_Attr.szlWindowExt.cx = dc->Dc_Attr.szlWindowExt.cx;
|
||||||
|
@ -1409,7 +1410,7 @@ IntGdiSetDCState ( HDC hDC, HDC hDCSave )
|
||||||
dc->w.xformWorld2Vport = dcs->w.xformWorld2Vport;
|
dc->w.xformWorld2Vport = dcs->w.xformWorld2Vport;
|
||||||
dc->w.xformVport2World = dcs->w.xformVport2World;
|
dc->w.xformVport2World = dcs->w.xformVport2World;
|
||||||
dc->w.vport2WorldValid = dcs->w.vport2WorldValid;
|
dc->w.vport2WorldValid = dcs->w.vport2WorldValid;
|
||||||
|
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
|
||||||
dc->Dc_Attr.ptlWindowOrg.x = dcs->Dc_Attr.ptlWindowOrg.x;
|
dc->Dc_Attr.ptlWindowOrg.x = dcs->Dc_Attr.ptlWindowOrg.x;
|
||||||
dc->Dc_Attr.ptlWindowOrg.y = dcs->Dc_Attr.ptlWindowOrg.y;
|
dc->Dc_Attr.ptlWindowOrg.y = dcs->Dc_Attr.ptlWindowOrg.y;
|
||||||
dc->Dc_Attr.szlWindowExt.cx = dcs->Dc_Attr.szlWindowExt.cx;
|
dc->Dc_Attr.szlWindowExt.cx = dcs->Dc_Attr.szlWindowExt.cx;
|
||||||
|
@ -2327,7 +2328,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
|
||||||
PDC NewDC;
|
PDC NewDC;
|
||||||
HDC hDC;
|
HDC hDC;
|
||||||
PWSTR Buf = NULL;
|
PWSTR Buf = NULL;
|
||||||
// PDC_ATTR DC_Attr = NULL;
|
PDC_ATTR DC_Attr = NULL;
|
||||||
|
|
||||||
if (Driver != NULL)
|
if (Driver != NULL)
|
||||||
{
|
{
|
||||||
|
@ -2348,7 +2349,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#if 0
|
//#if 0
|
||||||
PVOID NewMem = NULL;
|
PVOID NewMem = NULL;
|
||||||
ULONG MemSize = sizeof(DC_ATTR); //PAGE_SIZE it will allocate that size
|
ULONG MemSize = sizeof(DC_ATTR); //PAGE_SIZE it will allocate that size
|
||||||
NTSTATUS Status = ZwAllocateVirtualMemory(NtCurrentProcess(),
|
NTSTATUS Status = ZwAllocateVirtualMemory(NtCurrentProcess(),
|
||||||
|
@ -2374,69 +2375,66 @@ DC_AllocDC(PUNICODE_STRING Driver)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KeLeaveCriticalRegion();
|
KeLeaveCriticalRegion();
|
||||||
#endif
|
//#endif
|
||||||
NewDC = DC_LockDc(hDC);
|
NewDC = DC_LockDc(hDC);
|
||||||
/* FIXME - Handle NewDC == NULL! */
|
/* FIXME - Handle NewDC == NULL! */
|
||||||
#if 0
|
//#if 0
|
||||||
if(NewMem)
|
if(NewMem)
|
||||||
{
|
{
|
||||||
NewDC->pDc_Attr = NewMem; // Store pointer
|
NewDC->pDc_Attr = NewMem; // Store pointer
|
||||||
DC_Attr = NewMem;
|
DC_Attr = NewMem;
|
||||||
}
|
}
|
||||||
#endif
|
//#endif
|
||||||
if (Driver != NULL)
|
if (Driver != NULL)
|
||||||
{
|
{
|
||||||
RtlCopyMemory(&NewDC->DriverName, Driver, sizeof(UNICODE_STRING));
|
RtlCopyMemory(&NewDC->DriverName, Driver, sizeof(UNICODE_STRING));
|
||||||
NewDC->DriverName.Buffer = Buf;
|
NewDC->DriverName.Buffer = Buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
// gxf_long a;
|
|
||||||
// a.f = 1.0f;
|
|
||||||
|
|
||||||
NewDC->w.xformWorld2Wnd.eM11 = 1.0f;
|
NewDC->w.xformWorld2Wnd.eM11 = 1.0f;
|
||||||
// DC_Attr->mxWorldToPage.efM11.lExp = XFPEXP(a);
|
NewDC->w.xformWorld2Wnd.eM12 = 0.0f;
|
||||||
// DC_Attr->mxWorldToPage.efM11.lMant = XFPMANT(a);
|
|
||||||
|
|
||||||
NewDC->w.xformWorld2Wnd.eM12 = 0.0f; //Already Zero!
|
|
||||||
NewDC->w.xformWorld2Wnd.eM21 = 0.0f;
|
NewDC->w.xformWorld2Wnd.eM21 = 0.0f;
|
||||||
|
|
||||||
NewDC->w.xformWorld2Wnd.eM22 = 1.0f;
|
NewDC->w.xformWorld2Wnd.eM22 = 1.0f;
|
||||||
// DC_Attr->mxWorldToPage.efM22.lExp = XFPEXP(a);
|
NewDC->w.xformWorld2Wnd.eDx = 0.0f;
|
||||||
// DC_Attr->mxWorldToPage.efM22.lMant = XFPMANT(a);
|
|
||||||
|
|
||||||
NewDC->w.xformWorld2Wnd.eDx = 0.0f; //Already Zero!
|
|
||||||
NewDC->w.xformWorld2Wnd.eDy = 0.0f;
|
NewDC->w.xformWorld2Wnd.eDy = 0.0f;
|
||||||
|
|
||||||
NewDC->w.xformWorld2Vport = NewDC->w.xformWorld2Wnd;
|
NewDC->w.xformWorld2Vport = NewDC->w.xformWorld2Wnd;
|
||||||
// DC_Attr->mxWorldToDevice = DC_Attr->mxWorldToPage;
|
|
||||||
|
|
||||||
NewDC->w.xformVport2World = NewDC->w.xformWorld2Wnd;
|
NewDC->w.xformVport2World = NewDC->w.xformWorld2Wnd;
|
||||||
// DC_Attr->mxDevicetoWorld = DC_Attr->mxWorldToPage;
|
|
||||||
|
|
||||||
NewDC->w.vport2WorldValid = TRUE;
|
NewDC->w.vport2WorldValid = TRUE;
|
||||||
// DC_Attr->flXform = DEVICE_TO_PAGE_INVALID; // More research.
|
|
||||||
|
XForm2MatrixS( &DC_Attr->mxWorldToDevice, &NewDC->w.xformWorld2Vport);
|
||||||
|
XForm2MatrixS( &DC_Attr->mxDevicetoWorld, &NewDC->w.xformVport2World);
|
||||||
|
XForm2MatrixS( &DC_Attr->mxWorldToPage, &NewDC->w.xformWorld2Wnd);
|
||||||
|
|
||||||
|
// Setup syncing bits for the dcattr data packets.
|
||||||
|
NewDC->Dc_Attr.flXform = DEVICE_TO_PAGE_INVALID;
|
||||||
|
DC_Attr->flXform = NewDC->Dc_Attr.flXform;
|
||||||
|
NewDC->Dc_Attr.ulDirty_ = 0; // Server side
|
||||||
|
DC_Attr->ulDirty_ = 0; // Client side
|
||||||
|
|
||||||
NewDC->Dc_Attr.iMapMode = MM_TEXT;
|
NewDC->Dc_Attr.iMapMode = MM_TEXT;
|
||||||
// DC_Attr->iMapMode = MM_TEXT;
|
DC_Attr->iMapMode = MM_TEXT;
|
||||||
|
|
||||||
|
NewDC->Dc_Attr.szlWindowExt.cx = 1; // Float to Int,,, WRONG!
|
||||||
|
NewDC->Dc_Attr.szlWindowExt.cy = 1;
|
||||||
|
NewDC->Dc_Attr.szlViewportExt.cx = 1;
|
||||||
|
NewDC->Dc_Attr.szlViewportExt.cy = 1;
|
||||||
|
DC_Attr->szlWindowExt.cx = 1;
|
||||||
|
DC_Attr->szlWindowExt.cy = 1;
|
||||||
|
DC_Attr->szlViewportExt.cx = 1;
|
||||||
|
DC_Attr->szlViewportExt.cy = 1;
|
||||||
|
|
||||||
//// HELP! FLOAT to INT !!!!!!!!!
|
|
||||||
NewDC->Dc_Attr.szlWindowExt.cx = 1.0f;
|
|
||||||
NewDC->Dc_Attr.szlWindowExt.cy = 1.0f;
|
|
||||||
NewDC->Dc_Attr.szlViewportExt.cx = 1.0f;
|
|
||||||
NewDC->Dc_Attr.szlViewportExt.cy = 1.0f;
|
|
||||||
|
|
||||||
NewDC->Dc_Attr.crForegroundClr = 0;
|
NewDC->Dc_Attr.crForegroundClr = 0;
|
||||||
// NewDC->pDc_Attr->ulForegroundClr = 0; // Already Zero
|
NewDC->Dc_Attr.ulForegroundClr = 0;
|
||||||
// NewDC->pDc_Attr->crForegroundClr = 0;
|
|
||||||
|
|
||||||
|
NewDC->Dc_Attr.ulBackgroundClr = 0xffffff;
|
||||||
NewDC->Dc_Attr.crBackgroundClr = 0xffffff;
|
NewDC->Dc_Attr.crBackgroundClr = 0xffffff;
|
||||||
// DC_Attr->ulBackgroundClr = 0xffffff;
|
DC_Attr->ulBackgroundClr = 0xffffff;
|
||||||
// DC_Attr->crBackgroundClr = 0xffffff;
|
DC_Attr->crBackgroundClr = 0xffffff;
|
||||||
|
|
||||||
NewDC->Dc_Attr.hlfntNew = NtGdiGetStockObject(SYSTEM_FONT);
|
NewDC->Dc_Attr.hlfntNew = NtGdiGetStockObject(SYSTEM_FONT);
|
||||||
|
DC_Attr->hlfntNew = NewDC->Dc_Attr.hlfntNew; // It's a service to the user.
|
||||||
TextIntRealizeFont(NewDC->Dc_Attr.hlfntNew);
|
TextIntRealizeFont(NewDC->Dc_Attr.hlfntNew);
|
||||||
// DC_Attr->hlfntNew = NtGdiGetStockObject(SYSTEM_FONT);
|
|
||||||
|
|
||||||
NewDC->w.hPalette = NtGdiGetStockObject(DEFAULT_PALETTE);
|
NewDC->w.hPalette = NtGdiGetStockObject(DEFAULT_PALETTE);
|
||||||
|
|
||||||
|
@ -2475,7 +2473,7 @@ DC_InitDC(HDC DCHandle)
|
||||||
VOID FASTCALL
|
VOID FASTCALL
|
||||||
DC_FreeDC(HDC DCToFree)
|
DC_FreeDC(HDC DCToFree)
|
||||||
{
|
{
|
||||||
#if 0
|
//#if 0
|
||||||
KeEnterCriticalRegion();
|
KeEnterCriticalRegion();
|
||||||
{
|
{
|
||||||
INT Index = GDI_HANDLE_GET_INDEX((HGDIOBJ)DCToFree);
|
INT Index = GDI_HANDLE_GET_INDEX((HGDIOBJ)DCToFree);
|
||||||
|
@ -2495,7 +2493,7 @@ DC_FreeDC(HDC DCToFree)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KeLeaveCriticalRegion();
|
KeLeaveCriticalRegion();
|
||||||
#endif
|
//#endif
|
||||||
if (!GDIOBJ_FreeObj(GdiHandleTable, DCToFree, GDI_OBJECT_TYPE_DC))
|
if (!GDIOBJ_FreeObj(GdiHandleTable, DCToFree, GDI_OBJECT_TYPE_DC))
|
||||||
{
|
{
|
||||||
DPRINT("DC_FreeDC failed\n");
|
DPRINT("DC_FreeDC failed\n");
|
||||||
|
|
47
reactos/subsystems/win32/win32k/objects/dcutil.c
Normal file
47
reactos/subsystems/win32/win32k/objects/dcutil.c
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
|
||||||
|
#include <w32k.h>
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
FASTCALL
|
||||||
|
DCU_UpdateUserXForms(PDC pDC, ULONG uMask)
|
||||||
|
{
|
||||||
|
PDC_ATTR DC_Attr = pDC->pDc_Attr;
|
||||||
|
|
||||||
|
if (!uMask) return FALSE;
|
||||||
|
|
||||||
|
if (!DC_Attr) return FALSE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
_SEH_TRY
|
||||||
|
{
|
||||||
|
ProbeForWrite(DC_Attr,
|
||||||
|
sizeof(DC_ATTR),
|
||||||
|
1);
|
||||||
|
if (uMask & WORLD_XFORM_CHANGED)
|
||||||
|
XForm2MatrixS( &DC_Attr->mxWorldToDevice, &pDC->w.xformWorld2Vport);
|
||||||
|
|
||||||
|
if (uMask & DEVICE_TO_WORLD_INVALID)
|
||||||
|
XForm2MatrixS( &DC_Attr->mxDevicetoWorld, &pDC->w.xformVport2World);
|
||||||
|
|
||||||
|
if (uMask & WORLD_TO_PAGE_IDENTITY)
|
||||||
|
XForm2MatrixS( &DC_Attr->mxWorldToPage, &pDC->w.xformWorld2Wnd);
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
Status = _SEH_GetExceptionCode();
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
if(!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastNtError(Status);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -424,7 +424,7 @@ PATH_FillPath( PDC dc, GdiPath *pPath )
|
||||||
* tests show that resetting the graphics mode to GM_COMPATIBLE does
|
* tests show that resetting the graphics mode to GM_COMPATIBLE does
|
||||||
* not reset the world transform.
|
* not reset the world transform.
|
||||||
*/
|
*/
|
||||||
NtGdiGetWorldTransform( dc->hSelf, &xform );
|
NtGdiGetTransform( dc->hSelf, GdiWorldSpaceToPageSpace, &xform );
|
||||||
|
|
||||||
/* Set MM_TEXT */
|
/* Set MM_TEXT */
|
||||||
NtGdiSetMapMode( dc->hSelf, MM_TEXT );
|
NtGdiSetMapMode( dc->hSelf, MM_TEXT );
|
||||||
|
|
|
@ -214,7 +214,7 @@ NtGdiGetTextExtent 5
|
||||||
NtGdiGetTextExtentExW 8
|
NtGdiGetTextExtentExW 8
|
||||||
NtGdiGetTextFaceW 4
|
NtGdiGetTextFaceW 4
|
||||||
NtGdiGetTextMetricsW 3
|
NtGdiGetTextMetricsW 3
|
||||||
# NtGdiGetTransform 3
|
NtGdiGetTransform 3
|
||||||
# NtGdiGetUFI 6
|
# NtGdiGetUFI 6
|
||||||
# NtGdiGetEmbUFI 7
|
# NtGdiGetEmbUFI 7
|
||||||
# NtGdiGetUFIPathname 10
|
# NtGdiGetUFIPathname 10
|
||||||
|
@ -806,7 +806,6 @@ NtGdiGetSystemPaletteEntries 4
|
||||||
NtGdiGetTextAlign 1
|
NtGdiGetTextAlign 1
|
||||||
NtGdiGetTextColor 1
|
NtGdiGetTextColor 1
|
||||||
NtGdiGetTextExtentPoint32 4
|
NtGdiGetTextExtentPoint32 4
|
||||||
NtGdiGetWorldTransform 2
|
|
||||||
NtGdiMoveToEx 4
|
NtGdiMoveToEx 4
|
||||||
NtGdiOffsetViewportOrgEx 4
|
NtGdiOffsetViewportOrgEx 4
|
||||||
NtGdiOffsetWindowOrgEx 4
|
NtGdiOffsetWindowOrgEx 4
|
||||||
|
|
|
@ -140,6 +140,7 @@
|
||||||
<file>color.c</file>
|
<file>color.c</file>
|
||||||
<file>coord.c</file>
|
<file>coord.c</file>
|
||||||
<file>dc.c</file>
|
<file>dc.c</file>
|
||||||
|
<file>dcutil.c</file>
|
||||||
<file>dibobj.c</file>
|
<file>dibobj.c</file>
|
||||||
<file>fillshap.c</file>
|
<file>fillshap.c</file>
|
||||||
<file>gdiobj.c</file>
|
<file>gdiobj.c</file>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue