forked from Mirrors/wine-wine
Keep width for cosmetic pens, don't use LPtoDP() for widths and
convert the dashes for PS_USERSTYLE pens into device units.oldstable
parent
4440a7278f
commit
d17e2073be
|
@ -121,7 +121,18 @@ static inline void INTERNAL_LPTODP_FLOAT(DC *dc, FLOAT_POINT *point)
|
||||||
dc->xformWorld2Vport.eDy;
|
dc->xformWorld2Vport.eDy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Performs a world-to-viewport transformation on the specified width.
|
||||||
|
*/
|
||||||
|
static inline void INTERNAL_WSTODS(DC *dc, LONG *width)
|
||||||
|
{
|
||||||
|
POINT pt[2];
|
||||||
|
pt[0].x = pt[0].y = 0;
|
||||||
|
pt[1].x = *width;
|
||||||
|
pt[1].y = 0;
|
||||||
|
LPtoDP(dc->hSelf, pt, 2);
|
||||||
|
*width = pt[1].x - pt[0].x;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* BeginPath (GDI32.@)
|
* BeginPath (GDI32.@)
|
||||||
*/
|
*/
|
||||||
|
@ -1446,24 +1457,28 @@ static BOOL PATH_StrokePath(DC *dc, GdiPath *pPath)
|
||||||
if(pPath->state != PATH_Closed)
|
if(pPath->state != PATH_Closed)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Convert pen width to DP for MWT_IDENTITY */
|
/* Convert pen properties from logical to device units for MWT_IDENTITY */
|
||||||
hOldPen = GetCurrentObject(dc->hSelf, OBJ_PEN);
|
hOldPen = GetCurrentObject(dc->hSelf, OBJ_PEN);
|
||||||
if(GetObjectType(hOldPen) == OBJ_EXTPEN) {
|
if(GetObjectType(hOldPen) == OBJ_EXTPEN) {
|
||||||
POINT ptPenWidth;
|
|
||||||
EXTLOGPEN elp;
|
EXTLOGPEN elp;
|
||||||
LOGBRUSH lb;
|
LOGBRUSH lb;
|
||||||
GetObjectW(hOldPen, sizeof(EXTLOGPEN), &elp);
|
GetObjectW(hOldPen, sizeof(EXTLOGPEN), &elp);
|
||||||
ptPenWidth.x = elp.elpWidth;
|
if(elp.elpPenStyle & PS_GEOMETRIC) {
|
||||||
LPtoDP(dc->hSelf, &ptPenWidth, 1);
|
INTERNAL_WSTODS(dc, &elp.elpWidth);
|
||||||
|
if(elp.elpPenStyle & PS_USERSTYLE)
|
||||||
|
for(i = 0; i < elp.elpNumEntries; i++)
|
||||||
|
INTERNAL_WSTODS(dc, &elp.elpStyleEntry[i]);
|
||||||
|
}
|
||||||
lb.lbStyle = elp.elpBrushStyle;
|
lb.lbStyle = elp.elpBrushStyle;
|
||||||
lb.lbColor = elp.elpColor;
|
lb.lbColor = elp.elpColor;
|
||||||
lb.lbHatch = elp.elpHatch;
|
lb.lbHatch = elp.elpHatch;
|
||||||
hNewPen = ExtCreatePen(elp.elpPenStyle, ptPenWidth.x, &lb,
|
hNewPen = ExtCreatePen(elp.elpPenStyle, elp.elpWidth, &lb,
|
||||||
elp.elpNumEntries, elp.elpStyleEntry);
|
elp.elpNumEntries, elp.elpStyleEntry);
|
||||||
} else /* OBJ_PEN */ {
|
} else /* OBJ_PEN */ {
|
||||||
LOGPEN lp;
|
LOGPEN lp;
|
||||||
GetObjectW(hOldPen, sizeof(LOGPEN), &lp);
|
GetObjectW(hOldPen, sizeof(LOGPEN), &lp);
|
||||||
LPtoDP(dc->hSelf, &lp.lopnWidth, 1);
|
if(lp.lopnWidth.x > 0)
|
||||||
|
INTERNAL_WSTODS(dc, &lp.lopnWidth.x);
|
||||||
hNewPen = CreatePenIndirect(&lp);
|
hNewPen = CreatePenIndirect(&lp);
|
||||||
}
|
}
|
||||||
SelectObject(dc->hSelf, hNewPen);
|
SelectObject(dc->hSelf, hNewPen);
|
||||||
|
@ -1494,8 +1509,7 @@ static BOOL PATH_StrokePath(DC *dc, GdiPath *pPath)
|
||||||
|
|
||||||
for(i = 0; i < pPath->numEntriesUsed; i++) {
|
for(i = 0; i < pPath->numEntriesUsed; i++) {
|
||||||
if((i == 0 || (pPath->pFlags[i-1] & PT_CLOSEFIGURE)) &&
|
if((i == 0 || (pPath->pFlags[i-1] & PT_CLOSEFIGURE)) &&
|
||||||
(pPath->pFlags[i] != PT_MOVETO))
|
(pPath->pFlags[i] != PT_MOVETO)) {
|
||||||
{
|
|
||||||
ERR("Expected PT_MOVETO %s, got path flag %d\n",
|
ERR("Expected PT_MOVETO %s, got path flag %d\n",
|
||||||
i == 0 ? "as first point" : "after PT_CLOSEFIGURE",
|
i == 0 ? "as first point" : "after PT_CLOSEFIGURE",
|
||||||
(INT)pPath->pFlags[i]);
|
(INT)pPath->pFlags[i]);
|
||||||
|
|
Loading…
Reference in New Issue