summaryrefslogtreecommitdiffstats
path: root/src/gui/image
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2014-01-13 12:43:48 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-23 18:20:49 +0100
commitc695543f76715f1f7acef32102c325399d0953cf (patch)
tree5104a7ac9f3f65c2d0151e743089b4afb5dd00ff /src/gui/image
parent3d7d710424056a3c8a4062da234821acd91ee0af (diff)
Ref qualified version of QImage::convertToFormat
Add ref qualified versions of QImage::convertToFormat, so that a temporary QImage can be converted in-place to a format of equal depth. [ChangeLog][QtGui][QImage]Added rvalue qualified convertToFormat method for in-place conversion Change-Id: I2eed5ffd63f5aea4ffa1147bf7607b02a49d9c5d Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Diffstat (limited to 'src/gui/image')
-rw-r--r--src/gui/image/qimage.cpp16
-rw-r--r--src/gui/image/qimage.h14
-rw-r--r--src/gui/image/qimage_compat.cpp6
3 files changed, 35 insertions, 1 deletions
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index d6037fb2d6..305595b68e 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -1862,6 +1862,8 @@ QImage::Format QImage::format() const
}
/*!
+ \fn QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) const
+
Returns a copy of the image in the given \a format.
The specified image conversion \a flags control how the image data
@@ -1869,7 +1871,11 @@ QImage::Format QImage::format() const
\sa {Image Formats}
*/
-QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) const
+
+/*!
+ \internal
+*/
+QImage QImage::convertToFormat_helper(Format format, Qt::ImageConversionFlags flags) const
{
if (!d || d->format == format)
return *this;
@@ -1902,6 +1908,14 @@ QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) co
return convertToFormat(Format_ARGB32, flags).convertToFormat(format, flags);
}
+/*!
+ \internal
+*/
+bool QImage::convertToFormat_inplace(Format format, Qt::ImageConversionFlags flags)
+{
+ return d && d->convertInPlace(format, flags);
+}
+
static inline int pixel_distance(QRgb p1, QRgb p2) {
int r1 = qRed(p1);
int g1 = qGreen(p1);
diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h
index e8f195c18e..4326d5dbbc 100644
--- a/src/gui/image/qimage.h
+++ b/src/gui/image/qimage.h
@@ -172,7 +172,19 @@ public:
Format format() const;
+#if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QIMAGE_COMPAT_CPP)
+ QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const & Q_REQUIRED_RESULT
+ { return convertToFormat_helper(f, flags); }
+ QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) && Q_REQUIRED_RESULT
+ {
+ if (convertToFormat_inplace(f, flags))
+ return std::move(*this);
+ else
+ return convertToFormat_helper(f, flags);
+ }
+#else
QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const Q_REQUIRED_RESULT;
+#endif
QImage convertToFormat(Format f, const QVector<QRgb> &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const Q_REQUIRED_RESULT;
int width() const;
@@ -313,6 +325,8 @@ protected:
QImage rgbSwapped_helper() const;
void mirrored_inplace(bool horizontal, bool vertical);
void rgbSwapped_inplace();
+ QImage convertToFormat_helper(Format format, Qt::ImageConversionFlags flags) const;
+ bool convertToFormat_inplace(Format format, Qt::ImageConversionFlags flags);
private:
friend class QWSOnScreenSurface;
diff --git a/src/gui/image/qimage_compat.cpp b/src/gui/image/qimage_compat.cpp
index 9886d392fb..9acf5c18fa 100644
--- a/src/gui/image/qimage_compat.cpp
+++ b/src/gui/image/qimage_compat.cpp
@@ -49,6 +49,12 @@
QT_BEGIN_NAMESPACE
// These implementations must be the same as the inline versions in qimage.h
+
+QImage QImage::convertToFormat(Format f, Qt::ImageConversionFlags flags) const
+{
+ return convertToFormat_helper(f, flags);
+}
+
QImage QImage::mirrored(bool horizontally, bool vertically) const
{
return mirrored_helper(horizontally, vertically);