X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Farc.cpp;h=6391eaecd0d813cfe14928996025081a9b28ae37;hb=f507d97c1b1118834a70332f5f79d8479a6964c0;hp=6aefc1c52bc663d1070e8b8e252f175962266737;hpb=8a5bf49d09b5a00ebea3ffc449519ad05b0326cc;p=architektonas diff --git a/src/arc.cpp b/src/arc.cpp index 6aefc1c..6391eae 100644 --- a/src/arc.cpp +++ b/src/arc.cpp @@ -168,6 +168,9 @@ Also: should put the snap logic into the Object base class (as a static method). if (snapToGrid) point = SnapPointToGrid(point); + if (snapPointIsValid) + point = snapPoint; + /* State Management: We want the arc to go into OSSelected mode if we click on it but don't drag. @@ -241,6 +244,13 @@ so let's do like this: SaveHitState(); bool hovered = HitTest(point); needUpdate = HitStateChanged(); + + if (snapToGrid) + point = SnapPointToGrid(point); + + if (snapPointIsValid) + point = snapPoint; + objectWasDragged = (draggingCenter | draggingEdge | draggingRotate | draggingSpan); if (objectWasDragged) @@ -324,14 +334,26 @@ point (to get the correct position). hitArc = true; #else if ((length * Painter::zoom) < 8.0) + { hitCenter = true; + snapPoint = position; + snapPointIsValid = true; + } else if (((fabs(length - radius) * Painter::zoom) < 2.0) && AngleInArcSpan(pointerAngle)) hitArc = true; else if ((Vector::Magnitude(handle2, point) * Painter::zoom) < 8.0) + { hitRotate = true; + snapPoint = handle2; + snapPointIsValid = true; + } else if ((Vector::Magnitude(handle3, point) * Painter::zoom) < 8.0) + { hitSpan = true; + snapPoint = handle3; + snapPointIsValid = true; + } #endif return (hitCenter || hitArc || hitRotate || hitSpan ? true : false); @@ -346,6 +368,7 @@ point (to get the correct position). QPointF p2(cos(end), sin(end)); QRectF bounds(p1, p2); +#if 0 // Swap X/Y coordinates if they're backwards... if (bounds.left() > bounds.right()) { @@ -360,6 +383,9 @@ point (to get the correct position). bounds.setBottom(bounds.top()); bounds.setTop(temp); } +#else + bounds = bounds.normalized(); +#endif // If the end of the arc is before the beginning, add 360 degrees to it if (end < start) @@ -466,7 +492,7 @@ same reference number. Point c2 = Geometry::RotatePointAroundPoint(angleStartPoint, point, angle); position = c1; - startAngle = Vector(c2, c1).Angle(); + startAngle = Vector(c1, c2).Angle(); }