gdi32: Allow arbitrary start entry types in PATH_DoArcPart, not just PT_MOVETOs.
This commit is contained in:
parent
80b7134bb8
commit
e04aebd654
|
@ -97,7 +97,7 @@ static BOOL PATH_PathToRegion(GdiPath *pPath, INT nPolyFillMode,
|
||||||
static void PATH_EmptyPath(GdiPath *pPath);
|
static void PATH_EmptyPath(GdiPath *pPath);
|
||||||
static BOOL PATH_ReserveEntries(GdiPath *pPath, INT numEntries);
|
static BOOL PATH_ReserveEntries(GdiPath *pPath, INT numEntries);
|
||||||
static BOOL PATH_DoArcPart(GdiPath *pPath, FLOAT_POINT corners[],
|
static BOOL PATH_DoArcPart(GdiPath *pPath, FLOAT_POINT corners[],
|
||||||
double angleStart, double angleEnd, BOOL addMoveTo);
|
double angleStart, double angleEnd, BYTE startEntryType);
|
||||||
static void PATH_ScaleNormalizedPoint(FLOAT_POINT corners[], double x,
|
static void PATH_ScaleNormalizedPoint(FLOAT_POINT corners[], double x,
|
||||||
double y, POINT *pPoint);
|
double y, POINT *pPoint);
|
||||||
static void PATH_NormalizePoint(FLOAT_POINT corners[], const FLOAT_POINT
|
static void PATH_NormalizePoint(FLOAT_POINT corners[], const FLOAT_POINT
|
||||||
|
@ -624,7 +624,7 @@ BOOL PATH_RoundRect(DC *dc, INT x1, INT y1, INT x2, INT y2, INT ell_width, INT e
|
||||||
ellCorners[0].y = corners[0].y;
|
ellCorners[0].y = corners[0].y;
|
||||||
ellCorners[1].x = corners[1].x;
|
ellCorners[1].x = corners[1].x;
|
||||||
ellCorners[1].y = corners[0].y+ell_height;
|
ellCorners[1].y = corners[0].y+ell_height;
|
||||||
if(!PATH_DoArcPart(pPath, ellCorners, 0, -M_PI_2, TRUE))
|
if(!PATH_DoArcPart(pPath, ellCorners, 0, -M_PI_2, PT_MOVETO))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
pointTemp.x = corners[0].x+ell_width/2;
|
pointTemp.x = corners[0].x+ell_width/2;
|
||||||
pointTemp.y = corners[0].y;
|
pointTemp.y = corners[0].y;
|
||||||
|
@ -848,7 +848,7 @@ BOOL PATH_Arc(DC *dc, INT x1, INT y1, INT x2, INT y2,
|
||||||
|
|
||||||
/* Add the Bezier spline to the path */
|
/* Add the Bezier spline to the path */
|
||||||
PATH_DoArcPart(pPath, corners, angleStartQuadrant, angleEndQuadrant,
|
PATH_DoArcPart(pPath, corners, angleStartQuadrant, angleEndQuadrant,
|
||||||
start);
|
start ? PT_MOVETO : FALSE);
|
||||||
start=FALSE;
|
start=FALSE;
|
||||||
} while(!end);
|
} while(!end);
|
||||||
|
|
||||||
|
@ -1521,12 +1521,12 @@ static BOOL PATH_ReserveEntries(GdiPath *pPath, INT numEntries)
|
||||||
* Creates a Bezier spline that corresponds to part of an arc and appends the
|
* Creates a Bezier spline that corresponds to part of an arc and appends the
|
||||||
* corresponding points to the path. The start and end angles are passed in
|
* corresponding points to the path. The start and end angles are passed in
|
||||||
* "angleStart" and "angleEnd"; these angles should span a quarter circle
|
* "angleStart" and "angleEnd"; these angles should span a quarter circle
|
||||||
* at most. If "addMoveTo" is true, a PT_MOVETO entry for the first control
|
* at most. If "startEntryType" is non-zero, an entry of that type for the first
|
||||||
* point is added to the path; otherwise, it is assumed that the current
|
* control point is added to the path; otherwise, it is assumed that the current
|
||||||
* position is equal to the first control point.
|
* position is equal to the first control point.
|
||||||
*/
|
*/
|
||||||
static BOOL PATH_DoArcPart(GdiPath *pPath, FLOAT_POINT corners[],
|
static BOOL PATH_DoArcPart(GdiPath *pPath, FLOAT_POINT corners[],
|
||||||
double angleStart, double angleEnd, BOOL addMoveTo)
|
double angleStart, double angleEnd, BYTE startEntryType)
|
||||||
{
|
{
|
||||||
double halfAngle, a;
|
double halfAngle, a;
|
||||||
double xNorm[4], yNorm[4];
|
double xNorm[4], yNorm[4];
|
||||||
|
@ -1559,10 +1559,10 @@ static BOOL PATH_DoArcPart(GdiPath *pPath, FLOAT_POINT corners[],
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add starting point to path if desired */
|
/* Add starting point to path if desired */
|
||||||
if(addMoveTo)
|
if(startEntryType)
|
||||||
{
|
{
|
||||||
PATH_ScaleNormalizedPoint(corners, xNorm[0], yNorm[0], &point);
|
PATH_ScaleNormalizedPoint(corners, xNorm[0], yNorm[0], &point);
|
||||||
if(!PATH_AddEntry(pPath, &point, PT_MOVETO))
|
if(!PATH_AddEntry(pPath, &point, startEntryType))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1937,7 +1937,7 @@ static BOOL PATH_WidenPath(DC *dc)
|
||||||
corners[0].y = yo - penWidthIn;
|
corners[0].y = yo - penWidthIn;
|
||||||
corners[1].x = xo + penWidthOut;
|
corners[1].x = xo + penWidthOut;
|
||||||
corners[1].y = yo + penWidthOut;
|
corners[1].y = yo + penWidthOut;
|
||||||
PATH_DoArcPart(pUpPath ,corners, theta + M_PI_2 , theta + 3 * M_PI_4, (j == 0 ? TRUE : FALSE));
|
PATH_DoArcPart(pUpPath ,corners, theta + M_PI_2 , theta + 3 * M_PI_4, (j == 0 ? PT_MOVETO : FALSE));
|
||||||
PATH_DoArcPart(pUpPath ,corners, theta + 3 * M_PI_4 , theta + M_PI, FALSE);
|
PATH_DoArcPart(pUpPath ,corners, theta + 3 * M_PI_4 , theta + M_PI, FALSE);
|
||||||
PATH_DoArcPart(pUpPath ,corners, theta + M_PI, theta + 5 * M_PI_4, FALSE);
|
PATH_DoArcPart(pUpPath ,corners, theta + M_PI, theta + 5 * M_PI_4, FALSE);
|
||||||
PATH_DoArcPart(pUpPath ,corners, theta + 5 * M_PI_4 , theta + 3 * M_PI_2, FALSE);
|
PATH_DoArcPart(pUpPath ,corners, theta + 5 * M_PI_4 , theta + 3 * M_PI_2, FALSE);
|
||||||
|
|
Loading…
Reference in New Issue