From 3c2db966e79e6437db75eebcff0bfc427f37c71b Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Sat, 9 May 2015 09:26:43 -0500 Subject: [PATCH] Added ability to create Circles. --- src/drawingview.cpp | 86 +++++++++++++++++++++++++++++++++++++++------ src/drawingview.h | 1 + 2 files changed, 76 insertions(+), 11 deletions(-) diff --git a/src/drawingview.cpp b/src/drawingview.cpp index f253bd9..16280d6 100644 --- a/src/drawingview.cpp +++ b/src/drawingview.cpp @@ -308,9 +308,6 @@ void DrawingView::paintEvent(QPaintEvent * /*event*/) // Do object rendering... RenderObjects(&painter, document.objects); - if (!informativeText.isEmpty()) - painter.DrawInformativeText(informativeText); - // Do tool rendering, if any... if (Global::tool) { @@ -326,6 +323,9 @@ void DrawingView::paintEvent(QPaintEvent * /*event*/) painter.SetBrush(QBrush(QColor(255, 127, 0, 100))); painter.DrawRect(Global::selection); } + + if (!informativeText.isEmpty()) + painter.DrawInformativeText(informativeText); } @@ -569,6 +569,8 @@ void DrawingView::ToolHandler(int mode, Point p) { if (Global::tool == TTLine) LineHandler(mode, p); + else if (Global::tool == TTCircle) + CircleHandler(mode, p); else if (Global::tool == TTRotate) RotateHandler(mode, p); } @@ -595,8 +597,28 @@ void DrawingView::ToolDraw(Painter * painter) double absAngle = v.Angle() * RADIANS_TO_DEGREES; double absLength = v.Magnitude(); QString text = tr("Length: %1 in.\n") + QChar(0x2221) + tr(": %2"); - text = text.arg(absLength).arg(absAngle); - painter->DrawInformativeText(text); + informativeText = text.arg(absLength).arg(absAngle); + } + } + else if (Global::tool == TTCircle) + { + if (Global::toolState == TSNone) + { + painter->DrawHandle(toolPoint[0]); + } + else if ((Global::toolState == TSPoint2) && shiftDown) + { + painter->DrawHandle(toolPoint[1]); + } + else + { + double length = Vector::Magnitude(toolPoint[0], toolPoint[1]); +// painter->DrawLine(toolPoint[0], toolPoint[1]); +// painter->DrawHandle(toolPoint[1]); + painter->SetBrush(QBrush(Qt::NoBrush)); + painter->DrawEllipse(toolPoint[0], length, length); + QString text = tr("Radius: %1 in.");//\n") + QChar(0x2221) + tr(": %2"); + informativeText = text.arg(length);//.arg(absAngle); } } else if (Global::tool == TTRotate) @@ -626,12 +648,12 @@ void DrawingView::ToolDraw(Painter * painter) double absAngle = (Vector(toolPoint[1] - toolPoint[0]).Angle()) * RADIANS_TO_DEGREES; QString text = QChar(0x2221) + QObject::tr(": %1"); - text = text.arg(absAngle); + informativeText = text.arg(absAngle); if (ctrlDown) - text += " (Copy)"; + informativeText += " (Copy)"; - painter->DrawInformativeText(text); +// painter->DrawInformativeText(text); } } } @@ -678,6 +700,49 @@ void DrawingView::LineHandler(int mode, Point p) } +void DrawingView::CircleHandler(int mode, Point p) +{ + switch (mode) + { + case ToolMouseDown: + if (Global::toolState == TSNone) + toolPoint[0] = p; + else + toolPoint[1] = p; + + break; + case ToolMouseMove: + if (Global::toolState == TSNone) + toolPoint[0] = p; + else + toolPoint[1] = p; + + break; + case ToolMouseUp: + if (Global::toolState == TSNone) + { + Global::toolState = TSPoint2; + // Prevent spurious line from drawing... + toolPoint[1] = toolPoint[0]; + } + else if ((Global::toolState == TSPoint2) && shiftDown) + { + // Key override is telling us to make a new line, not continue the + // previous one. + toolPoint[0] = toolPoint[1]; + } + else + { + double length = Vector::Magnitude(toolPoint[0], toolPoint[1]); + Circle * c = new Circle(toolPoint[0], length); + document.objects.push_back(c); + toolPoint[0] = toolPoint[1]; + Global::toolState = TSNone; + } + } +} + + void DrawingView::RotateHandler(int mode, Point p) { switch (mode) @@ -940,9 +1005,8 @@ void DrawingView::mouseReleaseEvent(QMouseEvent * event) select.push_back(*i); //hmm, this is no good, too late to do any good :-P -// if ((*i)->hovered) -// hover.push_back(*i); -// } +// if ((*i)->hovered) +// hover.push_back(*i); } } else if (event->button() == Qt::MiddleButton) diff --git a/src/drawingview.h b/src/drawingview.h index 162e968..c8e46ff 100644 --- a/src/drawingview.h +++ b/src/drawingview.h @@ -27,6 +27,7 @@ class DrawingView: public QWidget void ToolHandler(int, Point); void ToolDraw(Painter *); void LineHandler(int, Point); + void CircleHandler(int, Point); void RotateHandler(int, Point); void CheckObjectBounds(void); bool HitTestObjects(Point); -- 2.37.2