Cocoa: reimplement QPlatformBackingStore::scroll()
authorBradley T. Hughes <bradley.hughes@nokia.com>
Tue, 20 Mar 2012 12:27:07 +0000 (13:27 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 26 Mar 2012 07:10:27 +0000 (09:10 +0200)
Use qt_scrollImageInRect() from QtGui to accelerate scrolling in the
Cocoa plugin.

Change-Id: I8ad1377ed3307345f72d17c72049cec5472c97d3
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
src/plugins/platforms/cocoa/qcocoabackingstore.h
src/plugins/platforms/cocoa/qcocoabackingstore.mm

index 7946936..489938c 100644 (file)
@@ -60,6 +60,7 @@ public:
     QPaintDevice *paintDevice();
     void flush(QWindow *widget, const QRegion &region, const QPoint &offset);
     void resize (const QSize &size, const QRegion &);
+    bool scroll(const QRegion &area, int dx, int dy);
 
 private:
     QCocoaWindow *m_cocoaWindow;
index 5e221ff..3a55e00 100644 (file)
@@ -97,4 +97,16 @@ void QCocoaBackingStore::resize(const QSize &size, const QRegion &)
     [static_cast<QNSView *>(m_cocoaWindow->m_contentView) setImage:m_image];
 }
 
+bool QCocoaBackingStore::scroll(const QRegion &area, int dx, int dy)
+{
+    extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset);
+    QPoint qpoint(dx, dy);
+    const QVector<QRect> qrects = area.rects();
+    for (int i = 0; i < qrects.count(); ++i) {
+        const QRect &qrect = qrects.at(i);
+        qt_scrollRectInImage(*m_image, qrect, qpoint);
+    }
+    return true;
+}
+
 QT_END_NAMESPACE