[Marble-commits] KDE/kdeedu/marble/src/lib/routing

Dennis Nienhüser earthwings at gentoo.org
Wed Mar 31 17:16:50 CEST 2010


SVN commit 1109638 by nienhueser:

Choose a suitable font size that fits in the pixmap circle.

 M  +25 -3     RouteSkeleton.cpp  


--- trunk/KDE/kdeedu/marble/src/lib/routing/RouteSkeleton.cpp #1109637:1109638
@@ -29,6 +29,8 @@
 
     RouteSkeleton::AvoidFeatures m_avoidFeatures;
 
+    int m_fontSize;
+
     /** Determines a suitable index for inserting a via point */
     int viaIndex(const GeoDataCoordinates &position) const;
 
@@ -37,7 +39,8 @@
 
 RouteSkeletonPrivate::RouteSkeletonPrivate() :
     m_routePreference(RouteSkeleton::CarFastest),
-    m_avoidFeatures(RouteSkeleton::AvoidNone)
+    m_avoidFeatures(RouteSkeleton::AvoidNone),
+    m_fontSize(0)
 {
   // nothing to do
 }
@@ -152,10 +155,29 @@
     painter.drawEllipse(1,1,13,13);
     painter.setBrush(QColor(Qt::black));
 
-    // Paint a character denoting the position (0=A, 1=B, 2=C, ...)
     char text = char('A' + position);
-    painter.drawText(2,2,12,12, Qt::AlignCenter, QString(text));
 
+    // Choose a suitable font size once (same for all pixmaps)
+    if (d->m_fontSize == 0) {
+        QFont font = painter.font();
+        d->m_fontSize = 20;
+        while (d->m_fontSize-- > 0) {
+            font.setPointSize(d->m_fontSize);
+            QFontMetrics fontMetric(font);
+            if (fontMetric.width(text) <= 12 && fontMetric.height() <= 12) {
+                break;
+            }
+        }
+    }
+
+    Q_ASSERT(d->m_fontSize);
+    QFont font = painter.font();
+    font.setPointSize(d->m_fontSize);
+    painter.setFont(font);
+
+    // Paint a character denoting the position (0=A, 1=B, 2=C, ...)
+    painter.drawText(2, 2, 12, 12, Qt::AlignCenter, QString(text));
+
     d->m_pixmapCache.insert(position, QPixmap::fromImage(result));
     return pixmap(position);
 }


More information about the Marble-commits mailing list