[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-panel-devel
Subject: [Panel-devel] patch: icon size
From: "M. Costa" <m.costacano () gmail ! com>
Date: 2007-08-07 20:27:52
Message-ID: 200708072227.52580.m.costacano () gmail ! com
[Download RAW message or body]
This patch removes the need of a QStyleOptionGraphicsItem to calculate the
geometry of a "not painted yet" Icon. With it the following makeSomething
works
Icon *icon = new Icon("some text", this);
makeSomething(icon->geometry()); // ok
Now the geometry returns 140.8x140.8 witch is the 128*1.1 set in the
constructor.
Why Icon::size() always returns -1,-1?
Why are there size() geometry() and boundingRect()?
["libplasma-widgets.iconSize.patch" (text/x-diff)]
Index: widgets/icon.cpp
===================================================================
--- widgets/icon.cpp (revision 697241)
+++ widgets/icon.cpp (working copy)
@@ -58,8 +58,7 @@
size(128*1.1, 128*1.1),
iconSize(128, 128),
state(Private::NoState),
- orientation(Qt::Vertical),
- calculateSizeRequested(true) // First time always true
+ orientation(Qt::Vertical)
{
svg.setContentType(Plasma::Svg::ImageSet);
svg.resize(size);
@@ -316,6 +315,7 @@
d->setVerticalMargin(Private::TextMargin, 6, 2);
d->setVerticalMargin(Private::IconMargin, focusHMargin, focusVMargin);
d->setVerticalMargin(Private::ItemMargin, 0, 0);
+ calculateSize();
}
void Icon::addAction(QAction *action)
@@ -361,7 +361,7 @@
update(); // redraw since an action has been deleted.
}
-QSizeF Icon::Private::displaySizeHint(const QStyleOptionGraphicsItem *option) const
+QSizeF Icon::Private::displaySizeHint() const
{
QString label = text;
// const qreal maxWidth = (orientation == Qt::Vertical) ? iconSize.width() + 10 \
: 32757; @@ -376,21 +376,18 @@
label += QString(QChar::LineSeparator) + info;
QTextLayout layout;
- setLayoutOptions(layout, option);
- QSizeF size = layoutText(layout, option, label, QSizeF(iconSize.width() + 10, \
32757)); + setLayoutOptions(layout);
+ QSizeF size = layoutText(layout, label, QSizeF(iconSize.width() + 10, 32757));
return addMargin(size, TextMargin);
}
-void Icon::calculateSize(const QStyleOptionGraphicsItem *option)
+void Icon::calculateSize()
{
- if (!d->calculateSizeRequested)
- return;
-
prepareGeometryChange();
d->setActiveMargins();
- const QSizeF displaySize = d->displaySizeHint(option);
+ const QSizeF displaySize = d->displaySizeHint();
const QSizeF decorationSize = d->addMargin(d->iconSize, Private::IconMargin);
QSizeF newSize;
@@ -407,7 +404,6 @@
d->size = d->addMargin(newSize, Private::ItemMargin);
d->svg.resize(d->size);
- d->calculateSizeRequested = false;
int count = 0;
foreach (IconAction* iconAction, d->cornerActions) {
@@ -564,14 +560,14 @@
}
// Lays the text out in a rectangle no larger than constraints, eliding it as \
necessary
-QSizeF Icon::Private::layoutText(QTextLayout &layout, const QStyleOptionGraphicsItem \
*option, +QSizeF Icon::Private::layoutText(QTextLayout &layout,
const QString &text, const QSizeF &constraints) \
const {
const QSizeF size = layoutText(layout, text, constraints.width());
if (size.width() > constraints.width() || size.height() > constraints.height())
{
- const QString elided = elidedText(layout, option, constraints);
+ const QString elided = elidedText(layout, constraints);
return layoutText(layout, elided, constraints.width());
}
@@ -609,10 +605,8 @@
// or word breaking the line if it's wider than the max width, and finally adding an
// ellipses at the end of the last line, if there are more lines than will fit \
within // the vertical size constraints.
-QString Icon::Private::elidedText(QTextLayout &layout, const \
QStyleOptionGraphicsItem *option,
- const QSizeF &size) const
+QString Icon::Private::elidedText(QTextLayout &layout,const QSizeF &size) const
{
- Q_UNUSED(option)
QFontMetricsF metrics(layout.font());
const QString text = layout.text();
@@ -662,7 +656,7 @@
{
bool showInformation = false;
- setLayoutOptions(*labelLayout, option);
+ setLayoutOptions(*labelLayout);
QFontMetricsF fm(labelLayout->font());
const QRectF textArea = labelRectangle(option, icon, text);
@@ -686,12 +680,12 @@
}
// Lay out the label text, and adjust the max info size based on the label size
- labelSize = layoutText(*labelLayout, option, text, maxLabelSize);
+ labelSize = layoutText(*labelLayout, text, maxLabelSize);
maxInfoSize.rheight() -= labelSize.height();
// Lay out the info text
if (showInformation)
- infoSize = layoutText(*infoLayout, option, infoText, maxInfoSize);
+ infoSize = layoutText(*infoLayout, infoText, maxInfoSize);
else
infoSize = QSizeF(0, 0);
@@ -775,7 +769,7 @@
}
#endif
- calculateSize(option);
+ calculateSize();
d->setActiveMargins();
// Compute the metrics, and lay out the text items
@@ -836,7 +830,7 @@
void Icon::setText(const QString& text)
{
d->text = text;
- d->calculateSizeRequested = true;
+ calculateSize();
}
QString Icon::text() const
@@ -847,7 +841,7 @@
void Icon::setInfoText(const QString& text)
{
d->infoText = text;
- d->calculateSizeRequested = true;
+ calculateSize();
}
QString Icon::infoText() const
@@ -873,7 +867,7 @@
void Icon::setIcon(const KIcon& icon)
{
d->icon = icon;
- d->calculateSizeRequested = true;
+ calculateSize();
}
QSizeF Icon::iconSize() const
@@ -884,7 +878,7 @@
void Icon::setIconSize(const QSizeF& s)
{
d->iconSize = s;
- d->calculateSizeRequested = true;
+ calculateSize();
}
void Icon::setIconSize(int w, int h)
Index: widgets/icon_p.h
===================================================================
--- widgets/icon_p.h (revision 697241)
+++ widgets/icon_p.h (working copy)
@@ -104,14 +104,13 @@
QPixmap decoration(const QStyleOptionGraphicsItem *option) const;
QPointF iconPosition(const QStyleOptionGraphicsItem *option, const QPixmap \
&pixmap) const;
- QSizeF displaySizeHint(const QStyleOptionGraphicsItem *option) const;
+ QSizeF displaySizeHint() const;
QBrush foregroundBrush(const QStyleOptionGraphicsItem *option) const;
QBrush backgroundBrush(const QStyleOptionGraphicsItem *option) const;
- QString elidedText(QTextLayout &layout, const QStyleOptionGraphicsItem *option,
- const QSizeF &maxSize) const;
- QSizeF layoutText(QTextLayout &layout, const QStyleOptionGraphicsItem *option,
+ QString elidedText(QTextLayout &layout, const QSizeF &maxSize) const;
+ QSizeF layoutText(QTextLayout &layout,
const QString &text, const QSizeF &constraints) const;
QSizeF layoutText(QTextLayout &layout, const QString &text, qreal maxWidth) \
const;
QRectF labelRectangle(const QStyleOptionGraphicsItem *option, const QPixmap \
&icon, @@ -119,7 +118,7 @@
void layoutTextItems(const QStyleOptionGraphicsItem *option, const QPixmap \
&icon,
QTextLayout *labelLayout, QTextLayout *infoLayout, \
QRectF *textBoundingRect) const;
- inline void setLayoutOptions(QTextLayout &layout, const QStyleOptionGraphicsItem \
*options) const; + inline void setLayoutOptions(QTextLayout &layout) const;
// Margin functions
@@ -173,7 +172,6 @@
KIcon icon;
ButtonState state;
Qt::Orientation orientation;
- bool calculateSizeRequested;
QList<IconAction*> cornerActions;
@@ -183,10 +181,10 @@
};
// Inline methods
-void Icon::Private::setLayoutOptions(QTextLayout &layout, const \
QStyleOptionGraphicsItem *option) const +void \
Icon::Private::setLayoutOptions(QTextLayout &layout) const {
QTextOption textoption;
- textoption.setTextDirection(option->direction);
+ textoption.setTextDirection(qApp->layoutDirection());
textoption.setAlignment(Qt::AlignCenter); // NOTE: assumption
textoption.setWrapMode(QTextOption::WordWrap); // NOTE: assumption as well
Index: widgets/icon.h
===================================================================
--- widgets/icon.h (revision 697241)
+++ widgets/icon.h (working copy)
@@ -198,7 +198,7 @@
private:
void init();
- void calculateSize(const QStyleOptionGraphicsItem *option);
+ void calculateSize();
Private * const d;
_______________________________________________
Panel-devel mailing list
Panel-devel@kde.org
https://mail.kde.org/mailman/listinfo/panel-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic