]> Shamusworld >> Repos - architektonas/commitdiff
Fixed add Line tool to respect keyboard override, slight cleanup to code.
authorShamus Hammons <jlhamm@acm.org>
Tue, 28 Apr 2015 02:36:27 +0000 (21:36 -0500)
committerShamus Hammons <jlhamm@acm.org>
Tue, 28 Apr 2015 02:36:27 +0000 (21:36 -0500)
src/drawingview.cpp
src/drawingview.h

index 015431c88e3fece1f53954e22d489a460bd5e1bf..d5dd3a4d8d392c8668ab0302aad6270991d11bab 100644 (file)
@@ -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();
 }
 
 //
index 3d22b44e83e97224b9e1c38eee3201d56972d2b0..9095e53fa2e63cc97d1141ec73eca65790bb5dac 100644 (file)
@@ -24,10 +24,9 @@ class DrawingView: public QWidget
                void AddHoveredToSelection(void);
                void GetSelection(std::vector<void *> &);
                void GetHovered(std::vector<void *> &);
-               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<void *> select;
                std::vector<void *> hover;
-//             int toolState;
                Point toolPoint[32];
-//             Object * toolObject;
 
-       // Tool methods (static)
-       public:
-//             static void foo();
 //     public:
 //             static Container document;
 };