Optimization. Avoid calling prepareGeometryChange() if the new and old geometry have the same size. Added a graphicsItem() method to LayoutItem which returns the associated graphics item (if any). Needed for effects during layouting.
svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=699494
This commit is contained in:
parent
ca39faf71a
commit
482f9824ba
|
@ -56,6 +56,11 @@ LayoutItem::~LayoutItem()
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QGraphicsItem* LayoutItem::graphicsItem()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool LayoutItem::hasHeightForWidth() const
|
bool LayoutItem::hasHeightForWidth() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
#include <plasma/plasma_export.h>
|
#include <plasma/plasma_export.h>
|
||||||
|
|
||||||
|
class QGraphicsItem;
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -137,6 +139,14 @@ class PLASMA_EXPORT LayoutItem
|
||||||
**/
|
**/
|
||||||
Layout* managingLayout() const;
|
Layout* managingLayout() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the graphics item associated with this layout item or 0
|
||||||
|
* if there is no associated graphics item.
|
||||||
|
*
|
||||||
|
* The default implementation returns 0.
|
||||||
|
*/
|
||||||
|
virtual QGraphicsItem* graphicsItem();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class Private;
|
class Private;
|
||||||
Private *const d;
|
Private *const d;
|
||||||
|
|
|
@ -39,6 +39,7 @@ class Widget::Private
|
||||||
public:
|
public:
|
||||||
Private()
|
Private()
|
||||||
: parent(0)
|
: parent(0)
|
||||||
|
, opacity(1.0)
|
||||||
{ }
|
{ }
|
||||||
~Private() { }
|
~Private() { }
|
||||||
|
|
||||||
|
@ -49,9 +50,16 @@ class Widget::Private
|
||||||
Widget *parent;
|
Widget *parent;
|
||||||
QList<Widget *> childList;
|
QList<Widget *> childList;
|
||||||
|
|
||||||
|
qreal opacity;
|
||||||
|
|
||||||
bool shouldPaint(QPainter *painter, const QTransform &transform);
|
bool shouldPaint(QPainter *painter, const QTransform &transform);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
QGraphicsItem* Widget::graphicsItem()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
bool Widget::Private::shouldPaint(QPainter *painter, const QTransform &transform)
|
bool Widget::Private::shouldPaint(QPainter *painter, const QTransform &transform)
|
||||||
{
|
{
|
||||||
qreal zoomLevel = painter->transform().m11() / transform.m11();
|
qreal zoomLevel = painter->transform().m11() / transform.m11();
|
||||||
|
@ -77,6 +85,11 @@ Widget::~Widget()
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Widget::setOpacity(qreal opacity)
|
||||||
|
{
|
||||||
|
d->opacity = opacity;
|
||||||
|
}
|
||||||
|
|
||||||
Qt::Orientations Widget::expandingDirections() const
|
Qt::Orientations Widget::expandingDirections() const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -138,12 +151,14 @@ QRectF Widget::localGeometry() const
|
||||||
|
|
||||||
void Widget::setGeometry(const QRectF& geometry)
|
void Widget::setGeometry(const QRectF& geometry)
|
||||||
{
|
{
|
||||||
prepareGeometryChange();
|
bool sizeChange = d->size != geometry.size();
|
||||||
|
|
||||||
|
if ( sizeChange ) {
|
||||||
|
prepareGeometryChange();
|
||||||
|
d->size = geometry.size();
|
||||||
|
}
|
||||||
setPos(geometry.topLeft());
|
setPos(geometry.topLeft());
|
||||||
d->size = geometry.size();
|
|
||||||
|
|
||||||
updateGeometry();
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,7 +167,7 @@ void Widget::updateGeometry()
|
||||||
prepareGeometryChange();
|
prepareGeometryChange();
|
||||||
|
|
||||||
if (layout()) {
|
if (layout()) {
|
||||||
kDebug() << (void *) this << " updating geometry to " << size();
|
// kDebug() << (void *) this << " updating geometry to " << size();
|
||||||
layout()->setGeometry(geometry());
|
layout()->setGeometry(geometry());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,6 +242,8 @@ void Widget::addChild(Widget *w)
|
||||||
|
|
||||||
void Widget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
void Widget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||||
{
|
{
|
||||||
|
painter->setOpacity(d->opacity);
|
||||||
|
|
||||||
if (d->shouldPaint(painter, transform())) {
|
if (d->shouldPaint(painter, transform())) {
|
||||||
paintWidget(painter, option, widget);
|
paintWidget(painter, option, widget);
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,6 +218,10 @@ public:
|
||||||
*/
|
*/
|
||||||
Q_INVOKABLE void addChild(Widget *widget);
|
Q_INVOKABLE void addChild(Widget *widget);
|
||||||
|
|
||||||
|
void setOpacity(qreal opacity);
|
||||||
|
|
||||||
|
virtual QGraphicsItem* graphicsItem();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Paints the widget
|
* Paints the widget
|
||||||
|
|
Loading…
Reference in New Issue
Block a user