From 0eccc0f9ee9579883a829c373cfc1c072704bca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Wed, 29 Jul 2009 05:15:02 +0200 Subject: Make it possible to disable graphics effects. Adds QGraphicsEffect::setEnabled/isEnabled --- src/gui/graphicsview/qgraphicseffect.cpp | 12 ++++++++++++ src/gui/graphicsview/qgraphicseffect.h | 9 +++++++-- src/gui/graphicsview/qgraphicseffect_p.h | 5 +++-- src/gui/graphicsview/qgraphicsitem.cpp | 2 +- src/gui/graphicsview/qgraphicsscene.cpp | 4 ++-- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/gui/graphicsview/qgraphicseffect.cpp b/src/gui/graphicsview/qgraphicseffect.cpp index 63cf975..358826b 100644 --- a/src/gui/graphicsview/qgraphicseffect.cpp +++ b/src/gui/graphicsview/qgraphicseffect.cpp @@ -174,6 +174,18 @@ QRectF QGraphicsEffect::boundingRectFor(const QRectF &rect) const return rect; } +void QGraphicsEffect::setEnabled(bool enable) +{ + Q_D(QGraphicsEffect); + d->isEnabled = enable; +} + +bool QGraphicsEffect::isEnabled() const +{ + Q_D(const QGraphicsEffect); + return d->isEnabled; +} + QGraphicsGrayscaleEffect::QGraphicsGrayscaleEffect() : QGraphicsEffect(*new QGraphicsGrayscaleEffectPrivate) {} diff --git a/src/gui/graphicsview/qgraphicseffect.h b/src/gui/graphicsview/qgraphicseffect.h index 397651f..e484f1a 100644 --- a/src/gui/graphicsview/qgraphicseffect.h +++ b/src/gui/graphicsview/qgraphicseffect.h @@ -71,11 +71,11 @@ class Q_GUI_EXPORT QGraphicsEffectSource : public QObject Q_OBJECT public: ~QGraphicsEffectSource(); - QRectF boundingRect(Qt::CoordinateSystem s = Qt::LogicalCoordinates) const; const QGraphicsItem *graphicsItem() const; const QStyleOption *styleOption() const; void draw(QPainter *painter); - QPixmap pixmap(Qt::CoordinateSystem coordinateSystem, QPoint *offset = 0) const; + QRectF boundingRect(Qt::CoordinateSystem coordinateSystem = Qt::LogicalCoordinates) const; + QPixmap pixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = 0) const; protected: QGraphicsEffectSource(QGraphicsEffectSourcePrivate &dd, QObject *parent = 0); @@ -93,6 +93,7 @@ class QGraphicsEffectPrivate; class Q_GUI_EXPORT QGraphicsEffect : public QObject { Q_OBJECT + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) public: QGraphicsEffect(); virtual ~QGraphicsEffect(); @@ -102,6 +103,10 @@ public: QPixmap sourcePixmap() const; bool hasSourcePixmap() const; virtual QRectF boundingRectFor(const QRectF &rect) const; + bool isEnabled() const; + +public Q_SLOTS: + void setEnabled(bool enable); protected: QGraphicsEffect(QGraphicsEffectPrivate &d); diff --git a/src/gui/graphicsview/qgraphicseffect_p.h b/src/gui/graphicsview/qgraphicseffect_p.h index b106e8e..f084a84 100644 --- a/src/gui/graphicsview/qgraphicseffect_p.h +++ b/src/gui/graphicsview/qgraphicseffect_p.h @@ -82,7 +82,7 @@ class QGraphicsEffectPrivate : public QObjectPrivate { Q_DECLARE_PUBLIC(QGraphicsEffect) public: - QGraphicsEffectPrivate() : source(0), hasSourcePixmap(0) {} + QGraphicsEffectPrivate() : source(0), hasSourcePixmap(0), isEnabled(1) {} QGraphicsEffectSource *source; inline void setGraphicsEffectSource(QGraphicsEffectSource *newSource) { @@ -95,7 +95,8 @@ public: QRectF boundingRect; QPixmap sourcePixmap; quint32 hasSourcePixmap : 1; - quint32 padding : 31; // feel free to use + quint32 isEnabled : 1; + quint32 padding : 30; // feel free to use }; class QGraphicsGrayscaleEffectPrivate : public QGraphicsEffectPrivate diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index bb3258d..8c604e1 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -2252,7 +2252,7 @@ void QGraphicsItem::setGraphicsEffect(QGraphicsEffect *effect) */ QRectF QGraphicsItem::effectiveBoundingRect() const { - if (d_ptr->graphicsEffect) + if (d_ptr->graphicsEffect && d_ptr->graphicsEffect->isEnabled()) return d_ptr->graphicsEffect->boundingRect(); return boundingRect(); } diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 99aa347..9ce02a2 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -4303,7 +4303,7 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter * if (itemHasChildren && itemClipsChildrenToShape) ENSURE_TRANSFORM_PTR; - if (item->d_ptr->graphicsEffect) { + if (item->d_ptr->graphicsEffect && item->d_ptr->graphicsEffect->isEnabled()) { if (item->type() == 7) { item->d_ptr->graphicsEffect->setSourcePixmap(static_cast(item) ->pixmap()); @@ -4484,7 +4484,7 @@ void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, b QGraphicsItem *p = item->d_ptr->parent; while (p) { p->d_ptr->dirtyChildren = 1; - if (p->d_ptr->graphicsEffect) { + if (p->d_ptr->graphicsEffect && p->d_ptr->graphicsEffect->isEnabled()) { p->d_ptr->dirty = 1; p->d_ptr->fullUpdatePending = 1; } -- cgit v0.12