gdi32: Fix the scaling of the width of cosmetic pens.
This commit is contained in:
parent
9b8d920cb7
commit
ab63eb5c40
|
@ -1245,18 +1245,15 @@ static const dash_pattern dash_patterns[5] =
|
||||||
{6, {9, 3, 3, 3, 3, 3}, 24} /* PS_DASHDOTDOT */
|
{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)
|
if (!width) return 1;
|
||||||
{
|
pts[0].x = pts[0].y = pts[1].y = 0;
|
||||||
POINT pts[2];
|
pts[1].x = width;
|
||||||
pts[0].x = pts[0].y = pts[1].y = 0;
|
LPtoDP( pdev->dev.hdc, pts, 2 );
|
||||||
pts[1].x = width;
|
width = abs( pts[1].x - pts[0].x );
|
||||||
LPtoDP( pdev->dev.hdc, pts, 2 );
|
|
||||||
width = abs( pts[1].x - pts[0].x );
|
|
||||||
}
|
|
||||||
return max( width, 1 );
|
return max( width, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1285,15 +1282,16 @@ HPEN dibdrv_SelectPen( PHYSDEV dev, HPEN hpen )
|
||||||
/* FIXME: add support for user style pens */
|
/* FIXME: add support for user style pens */
|
||||||
logpen.lopnStyle = elp->elpPenStyle;
|
logpen.lopnStyle = elp->elpPenStyle;
|
||||||
logpen.lopnWidth.x = elp->elpWidth;
|
logpen.lopnWidth.x = elp->elpWidth;
|
||||||
logpen.lopnWidth.y = 0;
|
|
||||||
logpen.lopnColor = elp->elpColor;
|
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 );
|
HeapFree( GetProcessHeap(), 0, elp );
|
||||||
}
|
}
|
||||||
|
|
||||||
pdev->pen_join = logpen.lopnStyle & PS_JOIN_MASK;
|
pdev->pen_join = logpen.lopnStyle & PS_JOIN_MASK;
|
||||||
pdev->pen_endcap = logpen.lopnStyle & PS_ENDCAP_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 ))
|
if (hpen == GetStockObject( DC_PEN ))
|
||||||
logpen.lopnColor = GetDCPenColor( dev->hdc );
|
logpen.lopnColor = GetDCPenColor( dev->hdc );
|
||||||
|
|
Loading…
Reference in New Issue