diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2016-11-11 13:33:20 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-01-26 09:14:27 +0000 |
commit | 17e672a67ed2ba6c8ec3952ff4ab255cb45fcce6 (patch) | |
tree | 2a4d8cf1f73e8893d1cdd7bd020953ba338f1904 /src/gui/image/qpixmap_raster.cpp | |
parent | ffecbfc980c97290a66a2b569ee663c97c8c1298 (diff) |
Use QImage::reinterpretAsFormat in QPixmap
Use the new QImage method instead of operating on private API.
At the same time the code is improved to ensure the QImage is detached.
Change-Id: Ia015c0bb18d7bc62da38397594730254843e5a0d
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'src/gui/image/qpixmap_raster.cpp')
-rw-r--r-- | src/gui/image/qpixmap_raster.cpp | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/src/gui/image/qpixmap_raster.cpp b/src/gui/image/qpixmap_raster.cpp index 741f7713da..54a5b94840 100644 --- a/src/gui/image/qpixmap_raster.cpp +++ b/src/gui/image/qpixmap_raster.cpp @@ -51,7 +51,6 @@ #include <QImageReader> #include <QGuiApplication> #include <QScreen> -#include <private/qimage_p.h> #include <private/qsimd_p.h> #include <private/qdrawhelper_p.h> #include <qpa/qplatformscreen.h> @@ -135,7 +134,7 @@ bool QRasterPlatformPixmap::fromData(const uchar *buffer, uint len, const char * if (image.isNull()) return false; - createPixmapForImage(image, flags, /* inplace = */true); + createPixmapForImage(std::move(image), flags); return !isNull(); } @@ -143,13 +142,13 @@ void QRasterPlatformPixmap::fromImage(const QImage &sourceImage, Qt::ImageConversionFlags flags) { QImage image = sourceImage; - createPixmapForImage(image, flags, /* inplace = */false); + createPixmapForImage(std::move(image), flags); } void QRasterPlatformPixmap::fromImageInPlace(QImage &sourceImage, Qt::ImageConversionFlags flags) { - createPixmapForImage(sourceImage, flags, /* inplace = */true); + createPixmapForImage(std::move(sourceImage), flags); } void QRasterPlatformPixmap::fromImageReader(QImageReader *imageReader, @@ -160,7 +159,7 @@ void QRasterPlatformPixmap::fromImageReader(QImageReader *imageReader, if (image.isNull()) return; - createPixmapForImage(image, flags, /* inplace = */true); + createPixmapForImage(std::move(image), flags); } // from qbackingstore.cpp @@ -301,7 +300,7 @@ int QRasterPlatformPixmap::metric(QPaintDevice::PaintDeviceMetric metric) const return 0; } -void QRasterPlatformPixmap::createPixmapForImage(QImage &sourceImage, Qt::ImageConversionFlags flags, bool inPlace) +void QRasterPlatformPixmap::createPixmapForImage(QImage sourceImage, Qt::ImageConversionFlags flags) { QImage::Format format; if (flags & Qt::NoFormatConversion) @@ -335,16 +334,10 @@ void QRasterPlatformPixmap::createPixmapForImage(QImage &sourceImage, Qt::ImageC if (format == QImage::Format_RGB32 && (sourceImage.format() == QImage::Format_ARGB32 || sourceImage.format() == QImage::Format_ARGB32_Premultiplied)) { - inPlace = inPlace && sourceImage.isDetached(); - image = sourceImage; - if (!inPlace) - image.detach(); - if (image.d) - image.d->format = QImage::Format_RGB32; - } else if (inPlace && sourceImage.d->convertInPlace(format, flags)) { - image = sourceImage; + image = std::move(sourceImage); + image.reinterpretAsFormat(QImage::Format_RGB32); } else { - image = sourceImage.convertToFormat(format, flags); + image = std::move(sourceImage).convertToFormat(format, flags); } if (image.d) { |