]> Shamusworld >> Repos - architektonas/blobdiff - src/drawingview.cpp
Added glue layer to Qt painting, to properly render cartesian coordinates.
[architektonas] / src / drawingview.cpp
index e904bdb7ef2a5240fa152392d33f121891a9ce91..148a34eed24bb9ded6dc67ca6f2359c7984d1bcb 100644 (file)
@@ -16,6 +16,8 @@
 //
 // STILL TO BE DONE:
 //
+// - Redo rendering code to *not* use Qt's transform functions, as they are tied
+//   to a left-handed system and we need a right-handed one.
 //
 
 // Uncomment this for debugging...
 #include "circle.h"
 #include "dimension.h"
 #include "line.h"
+#include "painter.h"
 
 
 DrawingView::DrawingView(QWidget * parent/*= NULL*/): QWidget(parent),
        // The value in the settings file will override this.
        useAntialiasing(true),
-//     scale(1.0), offsetX(-10), offsetY(-10), tool(TOOLSelect),
-//     ptHighlight(-1), oldPtHighlight(-1), ptNextHighlight(-1), oldPtNextHighlight(-1),
-//     polyFirstPoint(true)
        scale(1.0), offsetX(-10), offsetY(-10),
        document(Vector(0, 0)),
        gridSpacing(32.0), collided(false), rotateTool(false), rx(150.0), ry(150.0)
@@ -63,7 +63,6 @@ DrawingView::DrawingView(QWidget * parent/*= NULL*/): QWidget(parent),
 #if 1
        Dimension * dimension = new Dimension(Vector(0, 0), Vector(0, 0), &document);
        line->SetDimensionOnLine(dimension);
-//     line->SetDimensionOnPoint2(dimension);
        document.Add(dimension);
 #else
        // Alternate way to do the above...
@@ -95,11 +94,14 @@ QPoint DrawingView::GetAdjustedClientPosition(int x, int y)
 
 void DrawingView::paintEvent(QPaintEvent * /*event*/)
 {
-       QPainter painter(this);
+       QPainter qtPainter(this);
+       Painter painter(&qtPainter);
 
        if (useAntialiasing)
-               painter.setRenderHint(QPainter::Antialiasing);
+               qtPainter.setRenderHint(QPainter::Antialiasing);
 
+       Painter::screenSize = Vector(size().width(), size().height());
+#if 0
 #if 0
        painter.translate(QPoint(-offsetX, size.height() - (-offsetY)));
        painter.scale(1.0, -1.0);
@@ -112,22 +114,23 @@ void DrawingView::paintEvent(QPaintEvent * /*event*/)
        transform.translate(-offsetX, -size().height() - offsetY);
 //     transform.scale(0.25, 0.25);
        painter.setTransform(transform);
+#endif
 #endif
        Object::SetViewportHeight(size().height());
 
        // Draw coordinate axes
 
-       painter.setPen(QPen(Qt::blue, 1.0, Qt::DotLine));
-       painter.drawLine(0, -16384, 0, 16384);
-       painter.drawLine(-16384, 0, 16384, 0);
+       painter.SetPen(QPen(Qt::blue, 1.0, Qt::DotLine));
+       painter.DrawLine(0, -16384, 0, 16384);
+       painter.DrawLine(-16384, 0, 16384, 0);
 
        // Draw supplemental (tool related) points
 
        if (rotateTool)
        {
-               painter.setPen(QPen(QColor(0, 200, 0), 2.0, Qt::SolidLine));
-               painter.drawLine(rx - 10, ry, rx + 10, ry);
-               painter.drawLine(rx, ry - 10, rx, ry + 10);
+               painter.SetPen(QPen(QColor(0, 200, 0), 2.0, Qt::SolidLine));
+               painter.DrawLine(rx - 10, ry, rx + 10, ry);
+               painter.DrawLine(rx, ry - 10, rx, ry + 10);
        }
 
 // Maybe we can make the grid into a background brush instead, and let Qt deal
@@ -138,18 +141,19 @@ void DrawingView::paintEvent(QPaintEvent * /*event*/)
        painter.setPen(QPen(QColor(90, 90, 90), 1.0, Qt::DotLine));
 
        //these two loops kill performance!
+       // Also, these overwrite our coordinate axes
        for(double x=0; x<size().width(); x+=gridSpacing*10.0)
-               p.drawLine((int)x, -16384, (int)x, 16384);
+               painter.drawLine((int)x, -16384, (int)x, 16384);
 
        for(double y=0; y<size().height(); y+=gridSpacing*10.0)
-               p.drawLine(-16384, (int)y, 16384, (int)y);
+               painter.drawLine(-16384, (int)y, 16384, (int)y);
 #endif
 
-       painter.setPen(QPen(Qt::black, 1.0, Qt::SolidLine));
+       painter.SetPen(QPen(Qt::black, 1.0, Qt::SolidLine));
 
        for(double x=0; x<size().width(); x+=gridSpacing)
                for(double y=0; y<size().height(); y+=gridSpacing)
-                       painter.drawPoint((int)x, (int)y);
+                       painter.DrawPoint((int)x, (int)y);
 
        // The top level document takes care of rendering for us...
        document.Draw(&painter);