gdi32: Implement the LineTo entry point in the path driver.
This commit is contained in:
parent
2c1ec7fc3b
commit
fc5e29486d
|
@ -325,7 +325,6 @@ extern void PATH_DestroyGdiPath(GdiPath *pPath) DECLSPEC_HIDDEN;
|
||||||
extern BOOL PATH_SavePath( DC *dst, DC *src ) DECLSPEC_HIDDEN;
|
extern BOOL PATH_SavePath( DC *dst, DC *src ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL PATH_RestorePath( DC *dst, DC *src ) DECLSPEC_HIDDEN;
|
extern BOOL PATH_RestorePath( DC *dst, DC *src ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
extern BOOL PATH_LineTo(DC *dc, INT x, INT y) DECLSPEC_HIDDEN;
|
|
||||||
extern BOOL PATH_Rectangle(DC *dc, INT x1, INT y1, INT x2, INT y2) DECLSPEC_HIDDEN;
|
extern BOOL PATH_Rectangle(DC *dc, INT x1, INT y1, INT x2, INT y2) DECLSPEC_HIDDEN;
|
||||||
extern BOOL PATH_ExtTextOut(DC *dc, INT x, INT y, UINT flags, const RECT *lprc,
|
extern BOOL PATH_ExtTextOut(DC *dc, INT x, INT y, UINT flags, const RECT *lprc,
|
||||||
LPCWSTR str, UINT count, const INT *dx) DECLSPEC_HIDDEN;
|
LPCWSTR str, UINT count, const INT *dx) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -232,18 +232,15 @@ BOOL nulldrv_PolylineTo( PHYSDEV dev, const POINT *points, INT count )
|
||||||
BOOL WINAPI LineTo( HDC hdc, INT x, INT y )
|
BOOL WINAPI LineTo( HDC hdc, INT x, INT y )
|
||||||
{
|
{
|
||||||
DC * dc = get_dc_ptr( hdc );
|
DC * dc = get_dc_ptr( hdc );
|
||||||
|
PHYSDEV physdev;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
|
||||||
if(!dc) return FALSE;
|
if(!dc) return FALSE;
|
||||||
|
|
||||||
update_dc( dc );
|
update_dc( dc );
|
||||||
if(PATH_IsPathOpen(dc->path))
|
physdev = GET_DC_PHYSDEV( dc, pLineTo );
|
||||||
ret = PATH_LineTo(dc, x, y);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pLineTo );
|
|
||||||
ret = physdev->funcs->pLineTo( physdev, x, y );
|
ret = physdev->funcs->pLineTo( physdev, x, y );
|
||||||
}
|
|
||||||
if(ret) {
|
if(ret) {
|
||||||
dc->CursPosX = x;
|
dc->CursPosX = x;
|
||||||
dc->CursPosY = y;
|
dc->CursPosY = y;
|
||||||
|
|
|
@ -895,42 +895,32 @@ static BOOL pathdrv_MoveTo( PHYSDEV dev, INT x, INT y )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PATH_LineTo
|
|
||||||
*
|
|
||||||
* Should be called when a LineTo is performed on a DC that has an
|
|
||||||
* open path. This adds a PT_LINETO entry to the path (and possibly
|
|
||||||
* a PT_MOVETO entry, if this is the first LineTo in a stroke).
|
|
||||||
* Returns TRUE if successful, else FALSE.
|
|
||||||
*/
|
|
||||||
BOOL PATH_LineTo(DC *dc, INT x, INT y)
|
|
||||||
{
|
|
||||||
GdiPath *pPath = &dc->path;
|
|
||||||
POINT point, pointCurPos;
|
|
||||||
|
|
||||||
/* Check that path is open */
|
/*************************************************************
|
||||||
if(pPath->state!=PATH_Open)
|
* pathdrv_LineTo
|
||||||
return FALSE;
|
*/
|
||||||
|
static BOOL pathdrv_LineTo( PHYSDEV dev, INT x, INT y )
|
||||||
|
{
|
||||||
|
struct path_physdev *physdev = get_path_physdev( dev );
|
||||||
|
POINT point, pointCurPos;
|
||||||
|
|
||||||
/* Convert point to device coordinates */
|
/* Convert point to device coordinates */
|
||||||
point.x = x;
|
point.x = x;
|
||||||
point.y = y;
|
point.y = y;
|
||||||
if(!LPtoDP(dc->hSelf, &point, 1))
|
LPtoDP( dev->hdc, &point, 1 );
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
/* Add a PT_MOVETO if necessary */
|
/* Add a PT_MOVETO if necessary */
|
||||||
if(pPath->newStroke)
|
if(physdev->path->newStroke)
|
||||||
{
|
{
|
||||||
pPath->newStroke=FALSE;
|
physdev->path->newStroke = FALSE;
|
||||||
pointCurPos.x = dc->CursPosX;
|
GetCurrentPositionEx( dev->hdc, &pointCurPos );
|
||||||
pointCurPos.y = dc->CursPosY;
|
LPtoDP( dev->hdc, &pointCurPos, 1 );
|
||||||
if(!LPtoDP(dc->hSelf, &pointCurPos, 1))
|
if(!PATH_AddEntry(physdev->path, &pointCurPos, PT_MOVETO))
|
||||||
return FALSE;
|
|
||||||
if(!PATH_AddEntry(pPath, &pointCurPos, PT_MOVETO))
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a PT_LINETO entry */
|
/* Add a PT_LINETO entry */
|
||||||
return PATH_AddEntry(pPath, &point, PT_LINETO);
|
return PATH_AddEntry(physdev->path, &point, PT_LINETO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PATH_RoundRect
|
/* PATH_RoundRect
|
||||||
|
@ -2360,7 +2350,7 @@ const struct gdi_dc_funcs path_driver =
|
||||||
NULL, /* pGetTextMetrics */
|
NULL, /* pGetTextMetrics */
|
||||||
NULL, /* pIntersectClipRect */
|
NULL, /* pIntersectClipRect */
|
||||||
NULL, /* pInvertRgn */
|
NULL, /* pInvertRgn */
|
||||||
NULL, /* pLineTo */
|
pathdrv_LineTo, /* pLineTo */
|
||||||
NULL, /* pModifyWorldTransform */
|
NULL, /* pModifyWorldTransform */
|
||||||
pathdrv_MoveTo, /* pMoveTo */
|
pathdrv_MoveTo, /* pMoveTo */
|
||||||
NULL, /* pOffsetClipRgn */
|
NULL, /* pOffsetClipRgn */
|
||||||
|
|
Loading…
Reference in New Issue