diff options
Diffstat (limited to 'generic/tkCanvArc.c')
-rw-r--r-- | generic/tkCanvArc.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/generic/tkCanvArc.c b/generic/tkCanvArc.c index ca9ef34..3741829 100644 --- a/generic/tkCanvArc.c +++ b/generic/tkCanvArc.c @@ -1520,23 +1520,21 @@ RotateArc( double angleRad) { ArcItem *arcPtr = (ArcItem *) itemPtr; - double x, y, nx, ny; - double s = sin(angleRad); - double c = cos(angleRad); - - x = arcPtr->bbox[0] - originX; - y = arcPtr->bbox[1] - originY; - nx = x * c - y * s; - ny = x * s + y * c; - arcPtr->bbox[0] = nx + originX; - arcPtr->bbox[1] = ny + originY; - - x = arcPtr->bbox[2] - originX; - y = arcPtr->bbox[3] - originY; - nx = x * c - y * s; - ny = x * s + y * c; - arcPtr->bbox[2] = nx + originX; - arcPtr->bbox[3] = ny + originY; + double s = sin(angleRad), c = cos(angleRad); + double coords[4]; + + memcpy(coords, arcPtr->bbox, sizeof(coords)); + TkRotatePoint(originX, originY, s, c, &coords[0], &coords[1]); + TkRotatePoint(originX, originY, s, c, &coords[2], &coords[3]); + + /* + * Sort the points for the bounding box. + */ + + arcPtr->bbox[0] = (coords[0] < coords[2]) ? coords[0] : coords[2]; + arcPtr->bbox[1] = (coords[1] < coords[3]) ? coords[1] : coords[3]; + arcPtr->bbox[2] = (coords[0] < coords[2]) ? coords[2] : coords[0]; + arcPtr->bbox[3] = (coords[1] < coords[3]) ? coords[3] : coords[1]; /* * TODO: update the arc endpoints? |