From 8fdd047c1ee3688f5538cae30e0acc98b96a2150 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Mon, 27 Apr 2015 21:36:27 -0500 Subject: [PATCH] Fixed add Line tool to respect keyboard override, slight cleanup to code. --- src/drawingview.cpp | 89 ++++++++++++++++++++++++++++----------------- src/drawingview.h | 10 +---- 2 files changed, 57 insertions(+), 42 deletions(-) diff --git a/src/drawingview.cpp b/src/drawingview.cpp index 015431c..d5dd3a4 100644 --- a/src/drawingview.cpp +++ b/src/drawingview.cpp @@ -39,6 +39,8 @@ #define BACKGROUND_MAX_SIZE 512 +enum { ToolMouseDown, ToolMouseMove, ToolMouseUp }; + // Class variable //Container DrawingView::document(Vector(0, 0)); @@ -602,68 +604,68 @@ void DrawingView::resizeEvent(QResizeEvent * /*event*/) } -void DrawingView::ToolMouseDown(Point p) +void DrawingView::ToolMouse(int mode, Point p) +{ + if (Global::tool == TTLine) + LineHandler(mode, p); +} + + +void DrawingView::ToolDraw(Painter * painter) { if (Global::tool == TTLine) { if (Global::toolState == TSNone) { - toolPoint[0] = p; -// toolState = TSPoint1; -// toolObject = (Object *)(new Line(p, Vector(0, 0))); + painter->DrawHandle(toolPoint[0]); } - else //if (Global::toolState == TSPoint1) + else if ((Global::toolState == TSPoint2) && shiftDown) { - toolPoint[1] = p; + painter->DrawHandle(toolPoint[1]); + } + else + { + painter->DrawLine(toolPoint[0], toolPoint[1]); + painter->DrawHandle(toolPoint[1]); } } } -void DrawingView::ToolMouseMove(Point p) +void DrawingView::LineHandler(int mode, Point p) { - if (Global::tool == TTLine) + 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; -void DrawingView::ToolMouseUp(Point p) -{ - if (Global::tool == TTLine) - { + break; + case ToolMouseUp: if (Global::toolState == TSNone) { Global::toolState = TSPoint2; // Prevent spurious line from drawing... toolPoint[1] = toolPoint[0]; } - else + else if ((Global::toolState == TSPoint2) && shiftDown) { - Line * l = new Line(toolPoint[0], toolPoint[1]); - document.objects.push_back(l); toolPoint[0] = toolPoint[1]; } - } -} - - -void DrawingView::ToolDraw(Painter * painter) -{ - if (Global::tool == TTLine) - { - if (Global::toolState == TSNone) - { - painter->DrawHandle(toolPoint[0]); - } else { - painter->DrawLine(toolPoint[0], toolPoint[1]); - painter->DrawHandle(toolPoint[1]); + Line * l = new Line(toolPoint[0], toolPoint[1]); + document.objects.push_back(l); + toolPoint[0] = toolPoint[1]; } } } @@ -706,7 +708,8 @@ void DrawingView::mousePressEvent(QMouseEvent * event) // Snap to object point if valid... - ToolMouseDown(point); +// ToolMouseDown(point); + ToolMouse(ToolMouseDown, point); //Also, may want to figure out if hovering over a snap point on an object, //snap to grid if not. return; @@ -766,6 +769,10 @@ void DrawingView::mouseMoveEvent(QMouseEvent * event) #if 1 // Grid processing... (only snap here is left button is down) // Umm, WHY?? + // well, it causes problems with selecting lines that aren't close to a grid line! + // THAT'S WHY! + // But even still, this is a bad approach, we need to not just do this for every + // case because it's WRONG to do it that way! !!! FIX !!! if (/*(event->buttons() & Qt::LeftButton) &&*/ Global::snapToGrid) { point = SnapPointToGrid(point); @@ -1057,7 +1064,8 @@ selected object last and thus fucks up the algorithm. Need to fix this... if (Global::tool) { // Need to do snapping, etc. as well - ToolMouseMove(point); +// ToolMouseMove(point); + ToolMouse(ToolMouseMove, point); } // This is used to draw the tool crosshair... @@ -1091,7 +1099,8 @@ void DrawingView::mouseReleaseEvent(QMouseEvent * event) if (Global::tool) { Vector point = Painter::QtToCartesianCoords(Vector(event->x(), event->y())); - ToolMouseUp(point); +// ToolMouseUp(point); + ToolMouse(ToolMouseUp, point); return; } #endif @@ -1164,10 +1173,16 @@ void DrawingView::keyPressEvent(QKeyEvent * event) if (toolAction) toolAction->KeyDown(event->key()); #endif + bool oldShift = shiftDown; + bool oldCtrl = ctrlDown; + if (event->key() == Qt::Key_Shift) shiftDown = true; else if (event->key() == Qt::Key_Control) ctrlDown = true; + + if ((oldShift != shiftDown) || (oldCtrl != ctrlDown)) + update(); } @@ -1177,10 +1192,16 @@ void DrawingView::keyReleaseEvent(QKeyEvent * event) if (toolAction) toolAction->KeyReleased(event->key()); #endif + bool oldShift = shiftDown; + bool oldCtrl = ctrlDown; + if (event->key() == Qt::Key_Shift) shiftDown = false; else if (event->key() == Qt::Key_Control) ctrlDown = false; + + if ((oldShift != shiftDown) || (oldCtrl != ctrlDown)) + update(); } // diff --git a/src/drawingview.h b/src/drawingview.h index 3d22b44..9095e53 100644 --- a/src/drawingview.h +++ b/src/drawingview.h @@ -24,10 +24,9 @@ class DrawingView: public QWidget void AddHoveredToSelection(void); void GetSelection(std::vector &); void GetHovered(std::vector &); - void ToolMouseDown(Point); - void ToolMouseMove(Point); - void ToolMouseUp(Point); + void ToolMouse(int, Point); void ToolDraw(Painter *); + void LineHandler(int, Point); public slots: void AddNewObjectToDocument(Object *); @@ -70,13 +69,8 @@ class DrawingView: public QWidget public: std::vector select; std::vector hover; -// int toolState; Point toolPoint[32]; -// Object * toolObject; - // Tool methods (static) - public: -// static void foo(); // public: // static Container document; }; -- 2.37.2