From d9f34cb7917e396a1df805687234d5473d82283b Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Thu, 30 Dec 2021 18:52:29 -0600 Subject: [PATCH] Fix to prevent hit testing of objects on invisible layers. --- src/drawingview.cpp | 61 +++++++++++++++++++++++++++++---------------- src/structs.h | 2 +- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/drawingview.cpp b/src/drawingview.cpp index 2e435d2..3baa2d7 100644 --- a/src/drawingview.cpp +++ b/src/drawingview.cpp @@ -809,8 +809,9 @@ void DrawingView::ToolHandler(int mode, Point p) void DrawingView::ToolDraw(Painter * painter) { - if (Global::tool == TTLine) + switch (Global::tool) { + case TTLine: if (Global::toolState == TSNone) { painter->DrawHandle(toolPoint[0]); @@ -830,9 +831,10 @@ void DrawingView::ToolDraw(Painter * painter) QString text = tr("Length: %1 in.\n") + QChar(0x2221) + tr(": %2"); informativeText = text.arg(absLength).arg(absAngle); } - } - else if (Global::tool == TTCircle) - { + + break; + + case TTCircle: if (Global::toolState == TSNone) { painter->DrawHandle(toolPoint[0]); @@ -850,9 +852,10 @@ void DrawingView::ToolDraw(Painter * painter) QString text = tr("Radius: %1 in."); informativeText = text.arg(length); } - } - else if (Global::tool == TTArc) - { + + break; + + case TTArc: if (Global::toolState == TSNone) { painter->DrawHandle(toolPoint[0]); @@ -894,9 +897,10 @@ void DrawingView::ToolDraw(Painter * painter) QString text = tr("Arc span: %1") + QChar(0x00B0); informativeText = text.arg(RADIANS_TO_DEGREES * span); } - } - else if (Global::tool == TTRotate) - { + + break; + + case TTRotate: if ((Global::toolState == TSNone) || (Global::toolState == TSPoint1)) painter->DrawHandle(toolPoint[0]); else if ((Global::toolState == TSPoint2) && shiftDown) @@ -915,9 +919,10 @@ void DrawingView::ToolDraw(Painter * painter) if (ctrlDown) informativeText += " (Copy)"; } - } - else if (Global::tool == TTMirror) - { + + break; + + case TTMirror: if ((Global::toolState == TSNone) || (Global::toolState == TSPoint1)) painter->DrawHandle(toolPoint[0]); else if ((Global::toolState == TSPoint2) && shiftDown) @@ -941,9 +946,10 @@ void DrawingView::ToolDraw(Painter * painter) if (ctrlDown) informativeText += " (Copy)"; } - } - else if (Global::tool == TTDimension) - { + + break; + + case TTDimension: if (Global::toolState == TSNone) { painter->DrawHandle(toolPoint[0]); @@ -963,9 +969,10 @@ void DrawingView::ToolDraw(Painter * painter) QString text = tr("Length: %1 in.\n") + QChar(0x2221) + tr(": %2"); informativeText = text.arg(absLength).arg(absAngle); } - } - else if (Global::tool == TTTrim) - { + + break; + + case TTTrim: if (toolObj[0] != NULL) { // We're assuming ATM it's just a line... @@ -974,9 +981,10 @@ void DrawingView::ToolDraw(Painter * painter) // QString text = tr("Arc span: %1") + QChar(0x00B0); // informativeText = text.arg(RADIANS_TO_DEGREES * span); } - } - else if (Global::tool == TTParallel) - { + + break; + + case TTParallel: if (Global::toolState == TSPoint1) { painter->SetPen(0xFF00FF, 2.0, LSSolid); @@ -1005,6 +1013,11 @@ void DrawingView::ToolDraw(Painter * painter) } } } + + break; + + default: + break; } } @@ -2626,6 +2639,10 @@ bool DrawingView::HitTest(Object * obj, Point point) { bool needUpdate = false; + // Make sure we don't hit test stuff on an invisible layer... + if (Global::layerHidden[obj->layer] == true) + return false; + switch (obj->type) { case OTLine: diff --git a/src/structs.h b/src/structs.h index 20a03d2..d0dbb55 100644 --- a/src/structs.h +++ b/src/structs.h @@ -119,7 +119,7 @@ struct Text { std::string s; Text(): type(OTText), id(Global::objectID++) {} - Text(Vector pt1, char * str, float th = 10.0, uint32_t c = 0): + Text(Vector pt1, const char * str, float th = 10.0, uint32_t c = 0): type(OTText), id(Global::objectID++), layer(0), color(c), thickness(th), style(LSSolid), selected(false), hovered(false), hitObject(false), measured(false), s(str) { p[0] = pt1; angle[0] = 0; } -- 2.37.2