Fix copy count and added dc path flags and support new arc direction.

svn path=/trunk/; revision=32992
This commit is contained in:
James Tabor 2008-04-17 01:12:58 +00:00
parent fb4af9ff8f
commit cbd1d50bb1
2 changed files with 31 additions and 2 deletions

View file

@ -9,6 +9,11 @@
// Get/SetBounds/Rect support. // Get/SetBounds/Rect support.
#define DCB_WINDOWMGR 0x8000 // Queries the Windows bounding rectangle instead of the application's #define DCB_WINDOWMGR 0x8000 // Queries the Windows bounding rectangle instead of the application's
/* DCPATH flPath */
#define DCPATH_ACTIVE 0x0001
#define DCPATH_SAVE 0x0002
#define DCPATH_CLOCKWISE 0x0004
/* DC flags */ /* DC flags */
#define DC_SAVED 0x0002 /* It is a saved DC */ #define DC_SAVED 0x0002 /* It is a saved DC */
#define DC_DIRTY 0x0004 /* hVisRgn has to be updated */ #define DC_DIRTY 0x0004 /* hVisRgn has to be updated */

View file

@ -2187,6 +2187,8 @@ NtGdiGetAndSetDCDword(
switch (u) switch (u)
{ {
case GdtGetSetCopyCount: case GdtGetSetCopyCount:
SafeResult = dc->ulCopyCount;
dc->ulCopyCount = dwIn;
break; break;
case GdiGetSetTextAlign: case GdiGetSetTextAlign:
SafeResult = Dc_Attr->lTextAlign; SafeResult = Dc_Attr->lTextAlign;
@ -2213,9 +2215,31 @@ NtGdiGetAndSetDCDword(
{ {
SetLastWin32Error(ERROR_INVALID_PARAMETER); SetLastWin32Error(ERROR_INVALID_PARAMETER);
Ret = FALSE; Ret = FALSE;
break;
} }
SafeResult = dc->w.ArcDirection; if ( Dc_Attr->dwLayout & LAYOUT_RTL )
dc->w.ArcDirection = dwIn; {
SafeResult = AD_CLOCKWISE - ((dc->DcLevel.flPath & DCPATH_CLOCKWISE) != 0);
if ( dwIn == AD_CLOCKWISE )
{
dc->DcLevel.flPath |= DCPATH_CLOCKWISE;
break;
}
dc->DcLevel.flPath &= ~DCPATH_CLOCKWISE;
}
else
{
SafeResult = ((dc->DcLevel.flPath & DCPATH_CLOCKWISE) != 0) + AD_COUNTERCLOCKWISE;
if ( dwIn == AD_COUNTERCLOCKWISE)
{
dc->DcLevel.flPath |= DCPATH_CLOCKWISE;
break;
}
dc->DcLevel.flPath &= ~DCPATH_CLOCKWISE;
}
SafeResult = dc->w.ArcDirection; // Fixme
dc->w.ArcDirection = dwIn; // Fixme
break; break;
default: default:
SetLastWin32Error(ERROR_INVALID_PARAMETER); SetLastWin32Error(ERROR_INVALID_PARAMETER);