[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