gdi32: Fix the scaling of the width of cosmetic pens.

This commit is contained in:
Alexandre Julliard 2011-12-28 13:50:41 +01:00
parent 9b8d920cb7
commit ab63eb5c40
1 changed files with 10 additions and 12 deletions

View File

@ -1245,18 +1245,15 @@ static const dash_pattern dash_patterns[5] =
{6, {9, 3, 3, 3, 3, 3}, 24} /* PS_DASHDOTDOT */
};
static inline int get_pen_device_width( dibdrv_physdev *pdev, LOGPEN *pen )
static inline int get_pen_device_width( dibdrv_physdev *pdev, int width )
{
int width = pen->lopnWidth.x;
POINT pts[2];
if (pen->lopnStyle & PS_GEOMETRIC && width > 1)
{
POINT pts[2];
pts[0].x = pts[0].y = pts[1].y = 0;
pts[1].x = width;
LPtoDP( pdev->dev.hdc, pts, 2 );
width = abs( pts[1].x - pts[0].x );
}
if (!width) return 1;
pts[0].x = pts[0].y = pts[1].y = 0;
pts[1].x = width;
LPtoDP( pdev->dev.hdc, pts, 2 );
width = abs( pts[1].x - pts[0].x );
return max( width, 1 );
}
@ -1285,15 +1282,16 @@ HPEN dibdrv_SelectPen( PHYSDEV dev, HPEN hpen )
/* FIXME: add support for user style pens */
logpen.lopnStyle = elp->elpPenStyle;
logpen.lopnWidth.x = elp->elpWidth;
logpen.lopnWidth.y = 0;
logpen.lopnColor = elp->elpColor;
/* cosmetic ext pens are always 1-pixel wide */
if (!(logpen.lopnStyle & PS_GEOMETRIC)) logpen.lopnWidth.x = 0;
HeapFree( GetProcessHeap(), 0, elp );
}
pdev->pen_join = logpen.lopnStyle & PS_JOIN_MASK;
pdev->pen_endcap = logpen.lopnStyle & PS_ENDCAP_MASK;
pdev->pen_width = get_pen_device_width( pdev, &logpen );
pdev->pen_width = get_pen_device_width( pdev, logpen.lopnWidth.x );
if (hpen == GetStockObject( DC_PEN ))
logpen.lopnColor = GetDCPenColor( dev->hdc );