Author: jimtabor
Date: Thu Nov 27 14:51:19 2008
New Revision: 37694
URL:
http://svn.reactos.org/svn/reactos?rev=37694&view=rev
Log:
- Finnish up gdi wine pen cross test fixes.
- Fix width issue with simple stock pens.
- Fix Info DC building. This was made obvious with wine pen cross tests.
Modified:
trunk/reactos/subsystems/win32/win32k/objects/dc.c
trunk/reactos/subsystems/win32/win32k/objects/pen.c
trunk/reactos/subsystems/win32/win32k/objects/stockobj.c
Modified: trunk/reactos/subsystems/win32/win32k/objects/dc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dc.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dc.c [iso-8859-1] Thu Nov 27 14:51:19
2008
@@ -60,7 +60,7 @@
{
PDC NewDC, OrigDC;
PDC_ATTR nDc_Attr, oDc_Attr;
- HDC hNewDC, DisplayDC;
+ HDC hNewDC, DisplayDC = NULL;
HRGN hVisRgn;
UNICODE_STRING DriverName;
DWORD Layout = 0;
@@ -145,6 +145,8 @@
NewDC->DcLevel.flPath = OrigDC->DcLevel.flPath;
nDc_Attr->ulDirty_ = oDc_Attr->ulDirty_;
nDc_Attr->iCS_CP = oDc_Attr->iCS_CP;
+
+ NewDC->erclWindow = (RECTL){0,0,1,1};
DC_UnlockDc(NewDC);
DC_UnlockDc(OrigDC);
@@ -838,35 +840,30 @@
NewDC->flGraphics = PrimarySurface.DevInfo.flGraphicsCaps;
NewDC->flGraphics2 = PrimarySurface.DevInfo.flGraphicsCaps2;
+ NewDC->DcLevel.hpal = NtGdiGetStockObject(DEFAULT_PALETTE);
+
+ nDc_Attr->jROP2 = R2_COPYPEN;
+
+ NewDC->erclWindow.top = NewDC->erclWindow.left = 0;
+ NewDC->erclWindow.right = ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulHorzRes;
+ NewDC->erclWindow.bottom = ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulVertRes;
+ NewDC->DcLevel.flPath &= ~DCPATH_CLOCKWISE; // Default is CCW.
+
+ nDc_Attr->iCS_CP = ftGdiGetTextCharsetInfo(NewDC,NULL,0);
+
+ hVisRgn = NtGdiCreateRectRgn(0, 0,
((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulHorzRes,
+
((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulVertRes);
+
if (!CreateAsIC)
{
- NewDC->DcLevel.hpal = NtGdiGetStockObject(DEFAULT_PALETTE);
-
- nDc_Attr->jROP2 = R2_COPYPEN;
-
- NewDC->erclWindow.top = NewDC->erclWindow.left = 0;
- NewDC->erclWindow.right = ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulHorzRes;
- NewDC->erclWindow.bottom = ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulVertRes;
- NewDC->DcLevel.flPath &= ~DCPATH_CLOCKWISE; // Default is CCW.
-
- nDc_Attr->iCS_CP = ftGdiGetTextCharsetInfo(NewDC,NULL,0);
-
+ NewDC->pSurfInfo = NULL;
+// NewDC->DcLevel.pSurface =
DC_UnlockDc( NewDC );
-
- hVisRgn = NtGdiCreateRectRgn(0, 0,
((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulHorzRes,
- ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulVertRes);
- if (hVisRgn)
- {
- GdiSelectVisRgn(hNewDC, hVisRgn);
- NtGdiDeleteObject(hVisRgn);
- }
/* Initialize the DC state */
DC_InitDC(hNewDC);
IntGdiSetTextColor(hNewDC, RGB(0, 0, 0));
- IntGdiSetTextAlign(hNewDC, TA_TOP);
IntGdiSetBkColor(hNewDC, RGB(255, 255, 255));
- IntGdiSetBkMode(hNewDC, OPAQUE);
}
else
{
@@ -877,8 +874,22 @@
cannot accept a handle to an information context.
*/
NewDC->DC_Type = DC_TYPE_INFO;
+// NewDC->pSurfInfo =
+ NewDC->DcLevel.pSurface = NULL;
+ nDc_Attr->crBackgroundClr = nDc_Attr->ulBackgroundClr = RGB(255, 255, 255);
+ nDc_Attr->crForegroundClr = RGB(0, 0, 0);
DC_UnlockDc( NewDC );
}
+
+ if (hVisRgn)
+ {
+ GdiSelectVisRgn(hNewDC, hVisRgn);
+ NtGdiDeleteObject(hVisRgn);
+ }
+
+ IntGdiSetTextAlign(hNewDC, TA_TOP);
+ IntGdiSetBkMode(hNewDC, OPAQUE);
+
return hNewDC;
}
Modified: trunk/reactos/subsystems/win32/win32k/objects/pen.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/pen.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/pen.c [iso-8859-1] Thu Nov 27 14:51:19
2008
@@ -209,32 +209,34 @@
PLOGPEN pLogPen;
PEXTLOGPEN pExtLogPen;
INT cbRetCount;
- BOOLEAN isOldPen;
-
- isOldPen = (pPenObject->flAttrs & GDIBRUSH_IS_OLDSTYLEPEN) > 0;
- if ((pPenObject->ulPenStyle & PS_STYLE_MASK) == PS_NULL)
- {
- /* PS_NULL can be retrieved as LOGPEN or as EXTLOGPEN */
- if (cbCount == sizeof(LOGPEN))
- {
- isOldPen = TRUE;
- }
- else if (cbCount == sizeof(EXTLOGPEN))
- {
- isOldPen = FALSE;
- }
- }
-
- if (isOldPen)
+
+ if (pPenObject->flAttrs & GDIBRUSH_IS_OLDSTYLEPEN)
{
cbRetCount = sizeof(LOGPEN);
if (pBuffer)
{
+
if (cbCount < cbRetCount) return 0;
- pLogPen = (PLOGPEN)pBuffer;
- pLogPen->lopnWidth = pPenObject->ptPenWidth;
- pLogPen->lopnStyle = pPenObject->ulPenStyle;
- pLogPen->lopnColor = pPenObject->BrushAttr.lbColor;
+
+ if ( (pPenObject->ulPenStyle & PS_STYLE_MASK) == PS_NULL &&
+ cbCount == sizeof(EXTLOGPEN))
+ {
+ pExtLogPen = (PEXTLOGPEN)pBuffer;
+ pExtLogPen->elpPenStyle = pPenObject->ulPenStyle;
+ pExtLogPen->elpWidth = 0;
+ pExtLogPen->elpBrushStyle = pPenObject->ulStyle;
+ pExtLogPen->elpColor = pPenObject->BrushAttr.lbColor;
+ pExtLogPen->elpHatch = 0;
+ pExtLogPen->elpNumEntries = 0;
+ cbRetCount = sizeof(EXTLOGPEN);
+ }
+ else
+ {
+ pLogPen = (PLOGPEN)pBuffer;
+ pLogPen->lopnWidth = pPenObject->ptPenWidth;
+ pLogPen->lopnStyle = pPenObject->ulPenStyle;
+ pLogPen->lopnColor = pPenObject->BrushAttr.lbColor;
+ }
}
}
else
Modified: trunk/reactos/subsystems/win32/win32k/objects/stockobj.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/stockobj.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/stockobj.c [iso-8859-1] Thu Nov 27
14:51:19 2008
@@ -120,9 +120,9 @@
HPEN hPen;
PGDIBRUSHOBJ PenObject = PENOBJ_AllocPenWithHandle();
- if ((!dwWidth) && (dwPenStyle & PS_STYLE_MASK) != PS_SOLID) dwWidth = 1;
+ if ((dwPenStyle & PS_STYLE_MASK) == PS_NULL) dwWidth = 1;
- PenObject->ptPenWidth.x = dwWidth;
+ PenObject->ptPenWidth.x = abs(dwWidth);
PenObject->ptPenWidth.y = 0;
PenObject->ulPenStyle = dwPenStyle;
PenObject->BrushAttr.lbColor = ulColor;