X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fpainter.cpp;h=308cab6b7bd87ed587cb884ae52113f1173abaad;hb=bb8d0671717bac2c5350e34024273381be1d8175;hp=7d146b1888cdfb3d5b430cf0c2e269860e4c2aee;hpb=ba6723b86d8dd67ebc7b11b245de3e7ff64f06b1;p=architektonas diff --git a/src/painter.cpp b/src/painter.cpp index 7d146b1..308cab6 100644 --- a/src/painter.cpp +++ b/src/painter.cpp @@ -106,7 +106,7 @@ void Painter::SetPen(QPen pen) } -void Painter::DrawAngledText(Vector center, double angle, QString text) +void Painter::DrawAngledText(Vector center, double angle, QString text, double size) { if (!painter) return; @@ -119,29 +119,22 @@ void Painter::DrawAngledText(Vector center, double angle, QString text) // We may need this stuff... If dimension text is large enough. // int textWidth = QFontMetrics(painter->font()).width(text); // int textHeight = QFontMetrics(painter->font()).height(); -// NOTE: SCREEN_ZOOM is a kludge to make things look right at screen resolution... - QRectF textBox(-100.0 * zoom * SCREEN_ZOOM, -100.0 * zoom * SCREEN_ZOOM, 200.0 * zoom * SCREEN_ZOOM, 200.0 * zoom * SCREEN_ZOOM); // x, y, w, h; x/y = upper left corner + QRectF textBox(-100.0 * zoom * size, -100.0 * zoom * size, 200.0 * zoom * size, 200.0 * zoom * size); // x, y, w, h; x/y = upper left corner // 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: - // (Added zoom, so this is correct now :-) - float yOffset = -12.0 * zoom * SCREEN_ZOOM; + // 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. + float yOffset = -12.0 * zoom * size; // Fix text so it isn't upside down... if ((angle > PI * 0.5) && (angle < PI * 1.5)) { angle += PI; - yOffset = 12.0 * zoom * SCREEN_ZOOM; + yOffset = 12.0 * zoom * size; } -#if 0 - Vector offset = CartesianToQtCoords(Vector(0, yOffset)); - textBox.translate(offset.x, offset.y); -#else textBox.translate(0, yOffset); -#endif painter->save(); painter->translate(center.x, center.y); // Angles are backwards in the Qt coord system, so we flip ours... @@ -215,6 +208,7 @@ void Painter::DrawPoint(int x, int y) } +// This is drawn in Qt coordinates... void Painter::DrawRoundedRect(QRectF rect, double radiusX, double radiusY) { if (!painter) @@ -224,6 +218,22 @@ void Painter::DrawRoundedRect(QRectF rect, double radiusX, double radiusY) } +// This is drawn partially in Cartesian coordinates, and partially in Qt +// coordinates. The rect itself is in Cartesian but we want to pad it by a set +// number of pixels. +void Painter::DrawPaddedRect(QRectF rect) +{ + if (!painter) + return; + + Vector v1 = CartesianToQtCoords(Vector(rect.x(), rect.y())); + Vector v2 = CartesianToQtCoords(Vector(rect.right(), rect.bottom())); + QRectF screenRect(QPointF(v1.x, v1.y), QPointF(v2.x, v2.y)); + screenRect.adjust(-8, 8, 8, -8); // Left/top, right/bottom + painter->drawRect(screenRect); +} + + void Painter::DrawRect(QRectF rect) { if (!painter) @@ -245,7 +255,7 @@ void Painter::DrawText(QRectF rect, int type, QString text) } -void Painter::DrawArrowhead(Vector head, Vector tail) +void Painter::DrawArrowhead(Vector head, Vector tail, double size) { QPolygonF arrow; @@ -255,10 +265,9 @@ void Painter::DrawArrowhead(Vector head, Vector tail) Vector orthogonal = Vector(cos(orthoAngle), sin(orthoAngle)); Vector unit = Vector(head - tail).Unit(); -// NOTE: SCREEN_ZOOM is a kludge to make things look right at scale... - Point p1 = head - (unit * 9.0 * SCREEN_ZOOM); - Point p2 = p1 + (orthogonal * 3.0 * SCREEN_ZOOM); - Point p3 = p1 - (orthogonal * 3.0 * SCREEN_ZOOM); + Point p1 = head - (unit * 9.0 * size); + Point p2 = p1 + (orthogonal * 3.0 * size); + Point p3 = p1 - (orthogonal * 3.0 * size); Point p4 = CartesianToQtCoords(head); Point p5 = CartesianToQtCoords(p2);