]> Shamusworld >> Repos - architektonas/blobdiff - src/painter.cpp
Preliminary start on zooming/circle hover feedback.
[architektonas] / src / painter.cpp
index 8e664d21b4fdc54a50d30bd347b6d5fff46f1df1..2a0c60060869deed8771872a1fd4c06b3af97407 100644 (file)
@@ -38,7 +38,7 @@ Vector Painter::CartesianToQtCoords(Vector v)
        return Vector((v.x - origin.x) * zoom, screenSize.y - ((v.y - origin.y) * zoom));
 }
 
-Vector Painter::QtCoordsToCartesian(Vector v)
+Vector Painter::QtToCartesianCoords(Vector v)
 {
        // Convert screen location, with inverted Y-axis coordinates, to regular
        // Cartesian coordinates at the current zoom level.
@@ -100,6 +100,9 @@ void Painter::SetPen(QPen pen)
 
 void Painter::DrawAngledText(Vector center, double angle, QString text)
 {
+       // Strategy: Since Qt doesn't have any rotated text drawing functions,
+       // we instead translate the origin to the center of the text to be drawn and
+       // then rotate the frame to the desired angle.
        center = CartesianToQtCoords(center);
 
        // We may need this stuff... If dimension text is large enough.
@@ -107,17 +110,13 @@ void Painter::DrawAngledText(Vector center, double angle, QString text)
 //     int textHeight = QFontMetrics(painter->font()).height();
        QRectF textBox(-100, -100, 200, 200);   // x, y, w, h; x/y = upper left corner
 
-       // Some things to note here: if angle > 90 degrees, then we need to take the negative
-       // of the angle for our text.
-       painter->save();
-       painter->translate(center.x, center.y);
        // This is in pixels. Might not render correctly at all zoom levels.
        // Need to figure out if dimensions are always rendered at one size regardless of zoom,
        // or if they have a definite size, and are thus zoomable.
        // If zoomable, this is incorrect:
        int yOffset = -12;
 
-       //Fix text so it isn't upside down...
+       // Fix text so it isn't upside down...
        if ((angle > PI * 0.5) && (angle < PI * 1.5))
        {
                angle += PI;
@@ -125,7 +124,9 @@ void Painter::DrawAngledText(Vector center, double angle, QString text)
        }
 
        textBox.translate(0, yOffset);
-       // Angles are backwards in the Qt coord system...
+       painter->save();
+       painter->translate(center.x, center.y);
+       // Angles are backwards in the Qt coord system, so we flip ours...
        painter->rotate(-angle * RADIANS_TO_DEGREES);
        painter->drawText(textBox, Qt::AlignCenter, text);
        painter->restore();