QCommonStyle: Reduce code duplication
authorKonstantin Ritt <ritt.ks@gmail.com>
Tue, 9 Oct 2012 13:18:49 +0000 (16:18 +0300)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sun, 14 Oct 2012 14:48:18 +0000 (16:48 +0200)
by re-using viewItemTextLayout() helper function.
Also use QTextLayout(QString, QFont) c-tor which is a bit faster than
using setText() + setFont() setters.

Change-Id: I0d09ba43bad2296e932f49fcb9cfd28f42c1f95d
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
src/widgets/styles/qcommonstyle.cpp

index 85d46bb..5c34cae 100644 (file)
@@ -712,6 +712,24 @@ static void drawArrow(const QStyle *style, const QStyleOptionToolButton *toolbut
 
 #ifndef QT_NO_ITEMVIEWS
 
+static QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth)
+{
+    qreal height = 0;
+    qreal widthUsed = 0;
+    textLayout.beginLayout();
+    while (true) {
+        QTextLine line = textLayout.createLine();
+        if (!line.isValid())
+            break;
+        line.setLineWidth(lineWidth);
+        line.setPosition(QPointF(0, height));
+        height += line.height();
+        widthUsed = qMax(widthUsed, line.naturalTextWidth());
+    }
+    textLayout.endLayout();
+    return QSizeF(widthUsed, height);
+}
+
 QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int role) const
 {
     const QWidget *widget = option->widget;
@@ -725,10 +743,8 @@ QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int
         if (option->features & QStyleOptionViewItem::HasDisplay) {
             QTextOption textOption;
             textOption.setWrapMode(QTextOption::WordWrap);
-            QTextLayout textLayout;
+            QTextLayout textLayout(option->text, option->font);
             textLayout.setTextOption(textOption);
-            textLayout.setFont(option->font);
-            textLayout.setText(option->text);
             const bool wrapText = option->features & QStyleOptionViewItem::WrapText;
             const int textMargin = proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, option, widget) + 1;
             QRect bounds = option->rect;
@@ -745,20 +761,9 @@ QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int
                 break;
             }
 
-            qreal height = 0, widthUsed = 0;
-            textLayout.beginLayout();
-            while (true) {
-                QTextLine line = textLayout.createLine();
-                if (!line.isValid())
-                    break;
-                line.setLineWidth(bounds.width());
-                line.setPosition(QPointF(0, height));
-                height += line.height();
-                widthUsed = qMax(widthUsed, line.naturalTextWidth());
-            }
-            textLayout.endLayout();
-            const QSize size(qCeil(widthUsed), qCeil(height));
-            return QSize(size.width() + 2 * textMargin, size.height());
+            const int lineWidth = bounds.width();
+            const QSizeF size = viewItemTextLayout(textLayout, lineWidth);
+            return QSize(qCeil(size.width()) + 2 * textMargin, qCeil(size.height()));
         }
         break;
     case Qt::DecorationRole:
@@ -773,25 +778,6 @@ QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int
     return QSize(0, 0);
 }
 
-static QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth)
-{
-    qreal height = 0;
-    qreal widthUsed = 0;
-    textLayout.beginLayout();
-    while (true) {
-        QTextLine line = textLayout.createLine();
-        if (!line.isValid())
-            break;
-        line.setLineWidth(lineWidth);
-        line.setPosition(QPointF(0, height));
-        height += line.height();
-        widthUsed = qMax(widthUsed, line.naturalTextWidth());
-    }
-    textLayout.endLayout();
-    return QSizeF(widthUsed, height);
-}
-
-
 void QCommonStylePrivate::viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const
 {
     const QWidget *widget = option->widget;
@@ -803,10 +789,8 @@ void QCommonStylePrivate::viewItemDrawText(QPainter *p, const QStyleOptionViewIt
     textOption.setWrapMode(wrapText ? QTextOption::WordWrap : QTextOption::ManualWrap);
     textOption.setTextDirection(option->direction);
     textOption.setAlignment(QStyle::visualAlignment(option->direction, option->displayAlignment));
-    QTextLayout textLayout;
+    QTextLayout textLayout(option->text, option->font);
     textLayout.setTextOption(textOption);
-    textLayout.setFont(option->font);
-    textLayout.setText(option->text);
 
     viewItemTextLayout(textLayout, textRect.width());