OSDN Git Service

QWindowSurface cleanup
authorIvailo Monev <xakepa10@laimg.moc>
Fri, 7 Jun 2019 19:25:53 +0000 (19:25 +0000)
committerIvailo Monev <xakepa10@laimg.moc>
Fri, 7 Jun 2019 19:25:53 +0000 (19:25 +0000)
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
src/gui/painting/qwindowsurface.cpp

index e0043be..059ec0c 100644 (file)
@@ -232,15 +232,13 @@ QImage* QWindowSurface::buffer(const QWidget *widget)
 */
 QPixmap QWindowSurface::grabWidget(const QWidget *widget, const QRect &rectangle) const
 {
-    QPixmap result;
-
     if (widget->window() != window())
-        return result;
+        return QPixmap();
 
     const QImage *img = const_cast<QWindowSurface *>(this)->buffer(widget->window());
 
     if (!img || img->isNull())
-        return result;
+        return QPixmap();
 
     QRect rect = rectangle.isEmpty() ? widget->rect() : (widget->rect() & rectangle);
 
@@ -248,15 +246,12 @@ QPixmap QWindowSurface::grabWidget(const QWidget *widget, const QRect &rectangle
     rect &= QRect(QPoint(), img->size());
 
     if (rect.isEmpty())
-        return result;
+        return QPixmap();
 
     QImage subimg(img->scanLine(rect.y()) + rect.x() * img->depth() / 8,
                   rect.width(), rect.height(),
                   img->bytesPerLine(), img->format());
-    subimg.detach(); //### expensive -- maybe we should have a real SubImage that shares reference count
-
-    result = QPixmap::fromImage(subimg);
-    return result;
+    return QPixmap::fromImage(subimg);
 }
 
 /*!
@@ -298,11 +293,6 @@ QWindowSurface::WindowSurfaceFeatures QWindowSurface::features() const
 
 void qt_scrollRectInImage(const QImage *img, const QRect &rect, const QPoint &offset)
 {
-    uchar *mem = const_cast<uchar*>(img->bits());
-
-    int lineskip = img->bytesPerLine();
-    int depth = img->depth() >> 3;
-
     const QRect imageRect(0, 0, img->width(), img->height());
     const QRect r = rect & imageRect & imageRect.translated(-offset);
     const QPoint p = rect.topLeft() + offset;
@@ -310,6 +300,10 @@ void qt_scrollRectInImage(const QImage *img, const QRect &rect, const QPoint &of
     if (r.isEmpty())
         return;
 
+    uchar *mem = const_cast<uchar*>(img->bits());
+    int lineskip = img->bytesPerLine();
+    int depth = img->depth() >> 3;
+
     const uchar *src;
     uchar *dest;
 
@@ -328,22 +322,18 @@ void qt_scrollRectInImage(const QImage *img, const QRect &rect, const QPoint &of
 
     // overlapping segments?
     if (offset.y() == 0 && qAbs(offset.x()) < w) {
-        do {
+        while (--h) {
             ::memmove(dest, src, bytes);
             dest += lineskip;
             src += lineskip;
-        } while (--h);
+        }
     } else {
-        do {
+        while (--h) {
             ::memcpy(dest, src, bytes);
             dest += lineskip;
             src += lineskip;
-        } while (--h);
+        }
     }
 }
 
 QT_END_NAMESPACE
-
-
-
-