]> Shamusworld >> Repos - architektonas/blobdiff - src/drawingview.cpp
Beginning to make the Layer widget functional.
[architektonas] / src / drawingview.cpp
index 5bbcddf62ffeb0396b5f5edc5924e46ceaea9a5e..3020368913cfa3b4358df95669b1b65649523d15 100644 (file)
@@ -47,16 +47,17 @@ DrawingView::DrawingView(QWidget * parent/*= NULL*/): QWidget(parent),
        gridBackground(BACKGROUND_MAX_SIZE, BACKGROUND_MAX_SIZE),
        scale(1.0), offsetX(-10), offsetY(-10),
        document(Vector(0, 0)),
        gridBackground(BACKGROUND_MAX_SIZE, BACKGROUND_MAX_SIZE),
        scale(1.0), offsetX(-10), offsetY(-10),
        document(Vector(0, 0)),
-       gridSpacing(12.0), gridPixels(0), collided(false), rotateTool(false),
+       /*gridSpacing(12.0),*/ gridPixels(0), collided(false), rotateTool(false),
        rx(150.0), ry(150.0),
        rx(150.0), ry(150.0),
-       scrollDrag(false), addLineTool(false), addCircleTool(false),
-       addDimensionTool(false),
+//     scrollDrag(false), addLineTool(false), addCircleTool(false),
+//     addDimensionTool(false),
        toolAction(NULL)
 {
        document.isTopLevelContainer = true;
        setBackgroundRole(QPalette::Base);
        setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
 
        toolAction(NULL)
 {
        document.isTopLevelContainer = true;
        setBackgroundRole(QPalette::Base);
        setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
 
+       Object::gridSpacing = 12.0;
 //     toolPalette = new ToolWindow();
 //     CreateCursors();
 //     setCursor(cur[TOOLSelect]);
 //     toolPalette = new ToolWindow();
 //     CreateCursors();
 //     setCursor(cur[TOOLSelect]);
@@ -168,7 +169,8 @@ void DrawingView::SetGridSize(uint32_t size)
        pmp.end();
 
        // Set up new BG brush & zoom level (pixels per base unit)
        pmp.end();
 
        // Set up new BG brush & zoom level (pixels per base unit)
-       Painter::zoom = gridPixels / gridSpacing;
+//     Painter::zoom = gridPixels / gridSpacing;
+       Painter::zoom = gridPixels / Object::gridSpacing;
        UpdateGridBackground();
 }
 
        UpdateGridBackground();
 }
 
@@ -264,6 +266,13 @@ void DrawingView::AddNewObjectToDocument(Object * object)
 }
 
 
 }
 
 
+void DrawingView::SetCurrentLayer(int layer)
+{
+       Object::currentLayer = layer;
+//printf("DrawingView::CurrentLayer = %i\n", layer);
+}
+
+
 QPoint DrawingView::GetAdjustedMousePosition(QMouseEvent * event)
 {
        // This is undoing the transform, e.g. going from client coords to local coords.
 QPoint DrawingView::GetAdjustedMousePosition(QMouseEvent * event)
 {
        // This is undoing the transform, e.g. going from client coords to local coords.
@@ -282,6 +291,7 @@ QPoint DrawingView::GetAdjustedClientPosition(int x, int y)
 }
 
 
 }
 
 
+#if 0
 //
 // This looks strange, but it's really quite simple: We want a point that's
 // more than half-way to the next grid point to snap there while conversely we
 //
 // This looks strange, but it's really quite simple: We want a point that's
 // more than half-way to the next grid point to snap there while conversely we
@@ -300,6 +310,7 @@ Vector DrawingView::SnapPointToGrid(Vector point)
        point *= gridSpacing;
        return point;
 }
        point *= gridSpacing;
        return point;
 }
+#endif
 
 
 void DrawingView::paintEvent(QPaintEvent * /*event*/)
 
 
 void DrawingView::paintEvent(QPaintEvent * /*event*/)
@@ -375,9 +386,13 @@ So, how to fix this? Have the Object check itself?
 Maybe we can fix this by having the initial point not be snapped, but when there's
 a drag, we substitute the snapped point 'oldPoint' which the Object keeps track of
 internally to know how far it was dragged...
 Maybe we can fix this by having the initial point not be snapped, but when there's
 a drag, we substitute the snapped point 'oldPoint' which the Object keeps track of
 internally to know how far it was dragged...
+
+Now we do... :-/
 */
 */
+#if 0
                if (Object::snapToGrid)
                if (Object::snapToGrid)
-                       point = SnapPointToGrid(point);
+                       point = Object::SnapPointToGrid(point);
+#endif
 
                collided = document.Collided(point);
 
 
                collided = document.Collided(point);
 
@@ -385,7 +400,12 @@ internally to know how far it was dragged...
                        update();       // Do an update if collided with at least *one* object in the document
 
                if (toolAction)
                        update();       // Do an update if collided with at least *one* object in the document
 
                if (toolAction)
+               {
+                       if (Object::snapToGrid)
+                               point = Object::SnapPointToGrid(point);
+
                        toolAction->MouseDown(point);
                        toolAction->MouseDown(point);
+               }
 
                // Didn't hit any object and not using a tool, so do a selection rectangle
                if (!(collided || toolAction))
 
                // Didn't hit any object and not using a tool, so do a selection rectangle
                if (!(collided || toolAction))
@@ -427,25 +447,11 @@ void DrawingView::mouseMoveEvent(QMouseEvent * event)
        }
 
        // Grid processing...
        }
 
        // Grid processing...
-#if 1
        if ((event->buttons() & Qt::LeftButton) && Object::snapToGrid)
        {
        if ((event->buttons() & Qt::LeftButton) && Object::snapToGrid)
        {
-#if 0
-               point += gridSpacing / 2.0;                                     // *This* adds to Z!!!
-               point /= gridSpacing;
-//200% is ok, gridSpacing = 6 in this case...
-//won't run into problems until gridSpacing = 1.5 (zoom = 800%)
-//run into problems with this approach: when zoom level is 200% this truncates to
-//integers, which is *not* what's wanted here...
-               point.x = floor(point.x);//need to fix this for negative numbers...
-               point.y = floor(point.y);
-               point.z = 0;                                                            // Make *sure* Z doesn't go anywhere!!!
-               point *= gridSpacing;
-#else
-               point = SnapPointToGrid(point);
-#endif
+               point = Object::SnapPointToGrid(point);
        }
        }
-#endif
+
        oldPoint = point;
 //we should keep track of the last point here and only pass this down *if* the point
 //changed...
        oldPoint = point;
 //we should keep track of the last point here and only pass this down *if* the point
 //changed...
@@ -458,7 +464,7 @@ void DrawingView::mouseMoveEvent(QMouseEvent * event)
        {
                if (Object::snapToGrid)
                {
        {
                if (Object::snapToGrid)
                {
-                       point = SnapPointToGrid(point);
+                       point = Object::SnapPointToGrid(point);
                        oldPoint = point;
                }
 
                        oldPoint = point;
                }
 
@@ -497,3 +503,27 @@ void DrawingView::mouseReleaseEvent(QMouseEvent * event)
        }
 }
 
        }
 }
 
+
+void DrawingView::keyPressEvent(QKeyEvent * event)
+{
+       if (toolAction)
+       {
+               bool needUpdate = toolAction->KeyDown(event->key());
+
+               if (needUpdate)
+                       update();
+       }
+}
+
+
+void DrawingView::keyReleaseEvent(QKeyEvent * event)
+{
+       if (toolAction)
+       {
+               bool needUpdate = toolAction->KeyReleased(event->key());
+
+               if (needUpdate)
+                       update();
+       }
+}
+