same size for each item in widgetexplorer
Reza Shah
rshah0385 at kireihana.com
Wed Aug 10 15:04:41 UTC 2011
Hi,
I changed abstracticon class to make the size of each item uniform in
Add Widgets dialog.
If the new codes are ok, please commit for me.
Thanks.
The codes: http://pastebin.com/KXGiduEd
The old and new screenshot: http://imagebin.org/167302
diff --git a/libs/plasmagenericshell/abstracticon.cpp
b/libs/plasmagenericshell/abstracticon.cpp
index 0fbdb9e..adda782 100644
--- a/libs/plasmagenericshell/abstracticon.cpp
+++ b/libs/plasmagenericshell/abstracticon.cpp
@@ -29,6 +29,8 @@
#include <QPropertyAnimation>
#include <QStyleOptionGraphicsItem>
#include <QPainter>
+#include <QTextLayout>
+#include <QTextLine>
#include <KIconLoader>
#include <KIcon>
@@ -89,8 +91,8 @@ QSizeF AbstractIcon::sizeHint(Qt::SizeHint which,
const QSizeF &constraint) cons
qreal l, t, r, b;
getContentsMargins(&l, &t, &r, &b);
QFontMetrics fm(font());
- const int minHeight = m_iconHeight + 2 + fm.height();
- QSizeF s(qMax(m_iconHeight, fm.width(m_name)) + l + r,
minHeight + t + b);
+ const int minHeight = m_iconHeight + 2 + fm.height()*3; //maximum 3 lines
+ QSizeF s(m_iconHeight*2 + l + r, minHeight + t + b);
return s;
}
@@ -301,7 +303,32 @@ void AbstractIcon::paintForeground(QPainter
*painter, const QStyleOptionGraphics
}
painter->drawPixmap(iconRect, pixmap(QSize(m_iconHeight, m_iconHeight)));
- painter->drawText(textRect, flags, m_name);
+
+ QTextLayout textLayout(m_name, painter->font());
+ int totalWidth = 0;
+ int lineCreated = 0;
+ textLayout.beginLayout();
+
+ forever {
+ QTextLine line = textLayout.createLine();
+
+ if (!line.isValid())
+ break;
+
+ line.setLineWidth(textRect.width());
+ totalWidth += line.naturalTextWidth();
+
+ lineCreated++;
+ }
+ textLayout.endLayout();
+
+ totalWidth += textRect.width();
+
+ if (lineCreated == 1) {
+ totalWidth = textRect.width();
+ }
+ QString newText = painter->fontMetrics().elidedText(m_name,
Qt::ElideRight, totalWidth);
+ painter->drawText(textRect, Qt::AlignHCenter | Qt::AlignVCenter |
Qt::TextWordWrap, newText);
}
qreal AbstractIcon::backgroundFadeAlpha() const
More information about the Plasma-devel
mailing list