summaryrefslogtreecommitdiffstats
path: root/src/gui/graphicsview/qgraphicsitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/graphicsview/qgraphicsitem.cpp')
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 36d21a6..8042c46 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1427,12 +1427,14 @@ QGraphicsItem::~QGraphicsItem()
d_ptr->inDestructor = 1;
d_ptr->removeExtraItemCache();
+#ifndef QT_NO_GESTURES
if (d_ptr->isObject && !d_ptr->gestureContext.isEmpty()) {
QGraphicsObject *o = static_cast<QGraphicsObject *>(this);
QGestureManager *manager = QGestureManager::instance();
foreach (Qt::GestureType type, d_ptr->gestureContext.keys())
manager->cleanupCachedGestures(o, type);
}
+#endif
clearFocus();
@@ -5687,32 +5689,30 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect)
return;
}
+ // Find pixmap in cache.
QPixmap cachedPixmap;
if (!QPixmapCache::find(cache->key, &cachedPixmap)) {
update(rect);
return;
}
+ QRect scrollRect = (rect.isNull() ? boundingRect() : rect).toAlignedRect();
+ if (!scrollRect.intersects(cache->boundingRect))
+ return; // Nothing to scroll.
+
+ // Remove from cache to avoid deep copy when modifying.
+ QPixmapCache::remove(cache->key);
+
QRegion exposed;
- const bool scrollEntirePixmap = rect.isNull();
- if (scrollEntirePixmap) {
- // Scroll entire pixmap.
- cachedPixmap.scroll(dx, dy, cachedPixmap.rect(), &exposed);
- } else {
- if (!rect.intersects(cache->boundingRect))
- return; // Nothing to scroll.
- // Scroll sub-rect of pixmap. The rect is in item coordinates
- // so we have to translate it to pixmap coordinates.
- QRect scrollRect = rect.toAlignedRect();
- cachedPixmap.scroll(dx, dy, scrollRect.translated(-cache->boundingRect.topLeft()), &exposed);
- }
+ cachedPixmap.scroll(dx, dy, scrollRect.translated(-cache->boundingRect.topLeft()), &exposed);
- QPixmapCache::replace(cache->key, cachedPixmap);
+ // Reinsert into cache.
+ cache->key = QPixmapCache::insert(cachedPixmap);
// Translate the existing expose.
for (int i = 0; i < cache->exposed.size(); ++i) {
QRectF &e = cache->exposed[i];
- if (!scrollEntirePixmap && !e.intersects(rect))
+ if (!rect.isNull() && !e.intersects(rect))
continue;
e.translate(dx, dy);
}
@@ -7573,6 +7573,7 @@ QGraphicsObject::QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent
QGraphicsItem::d_ptr->isObject = true;
}
+#ifndef QT_NO_GESTURES
/*!
Subscribes the graphics object to the given \a gesture with specific \a flags.
@@ -7596,6 +7597,8 @@ void QGraphicsObject::ungrabGesture(Qt::GestureType gesture)
if (QGraphicsItem::d_ptr->gestureContext.remove(gesture) && QGraphicsItem::d_ptr->scene)
QGraphicsItem::d_ptr->scene->d_func()->ungrabGesture(this, gesture);
}
+#endif // QT_NO_GESTURES
+
/*!
Updates the item's micro focus. This is slot for convenience.