summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-04-05 12:05:18 +0300
committerAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-07-14 05:53:48 +0000
commit7682542b4b487003e43c4081be01c06655db3c7e (patch)
treed2a2a7900c9bd361dd23a345a16122262d4aa6a2
parent4cb3c3e15aba83a32f5b4ddcf4561bc231aa4dc2 (diff)
Factor out qt_getImageText() and qt_getImageTextFromDescription()
... and re-use them in QImageReader, QJpegHandler, QPngHandler. Change-Id: Iec89e47205f3c420e1e7eb4a2d3c1fbfe887fd8c Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
-rw-r--r--src/gui/image/qimage.cpp29
-rw-r--r--src/gui/image/qimage_p.h3
-rw-r--r--src/gui/image/qimagereader.cpp17
-rw-r--r--src/gui/image/qpnghandler.cpp21
-rw-r--r--src/plugins/imageformats/jpeg/jpeg.pro2
-rw-r--r--src/plugins/imageformats/jpeg/qjpeghandler.cpp25
6 files changed, 44 insertions, 53 deletions
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 9bd7d57c2b..3abfac1575 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -5216,4 +5216,33 @@ Q_GUI_EXPORT void qt_imageTransform(QImage &src, QImageIOHandler::Transformation
}
}
+QMap<QString, QString> qt_getImageText(const QImage &image, const QString &description)
+{
+ QMap<QString, QString> text = qt_getImageTextFromDescription(description);
+ const auto textKeys = image.textKeys();
+ for (const QString &key : textKeys) {
+ if (!key.isEmpty() && !text.contains(key))
+ text.insert(key, image.text(key));
+ }
+ return text;
+}
+
+QMap<QString, QString> qt_getImageTextFromDescription(const QString &description)
+{
+ QMap<QString, QString> text;
+ const auto pairs = description.splitRef(QLatin1String("\n\n"));
+ for (const QStringRef &pair : pairs) {
+ int index = pair.indexOf(QLatin1Char(':'));
+ if (index >= 0 && pair.indexOf(QLatin1Char(' ')) < index) {
+ if (!pair.trimmed().isEmpty())
+ text.insert(QLatin1String("Description"), pair.toString().simplified());
+ } else {
+ const QStringRef key = pair.left(index);
+ if (!key.trimmed().isEmpty())
+ text.insert(key.toString(), pair.mid(index + 2).toString().simplified());
+ }
+ }
+ return text;
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/image/qimage_p.h b/src/gui/image/qimage_p.h
index b6eacc6af8..775ab6d541 100644
--- a/src/gui/image/qimage_p.h
+++ b/src/gui/image/qimage_p.h
@@ -212,6 +212,9 @@ inline QImage::Format qt_alphaVersionForPainting(QImage::Format format)
return toFormat;
}
+Q_GUI_EXPORT QMap<QString, QString> qt_getImageText(const QImage &image, const QString &description);
+Q_GUI_EXPORT QMap<QString, QString> qt_getImageTextFromDescription(const QString &description);
+
QT_END_NAMESPACE
#endif // QIMAGE_P_H
diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp
index 0102ff5981..45d57856aa 100644
--- a/src/gui/image/qimagereader.cpp
+++ b/src/gui/image/qimagereader.cpp
@@ -147,6 +147,9 @@
#include <private/qfactoryloader_p.h>
#include <QMutexLocker>
+// for qt_getImageText
+#include <private/qimage_p.h>
+
// image handlers
#include <private/qbmphandler_p.h>
#include <private/qppmhandler_p.h>
@@ -592,18 +595,8 @@ bool QImageReaderPrivate::initHandler()
*/
void QImageReaderPrivate::getText()
{
- if (!text.isEmpty() || (!handler && !initHandler()) || !handler->supportsOption(QImageIOHandler::Description))
- return;
- foreach (const QString &pair, handler->option(QImageIOHandler::Description).toString().split(
- QLatin1String("\n\n"))) {
- int index = pair.indexOf(QLatin1Char(':'));
- if (index >= 0 && pair.indexOf(QLatin1Char(' ')) < index) {
- text.insert(QLatin1String("Description"), pair.simplified());
- } else {
- QString key = pair.left(index);
- text.insert(key, pair.mid(index + 2).simplified());
- }
- }
+ if (text.isEmpty() && (handler || initHandler()) && handler->supportsOption(QImageIOHandler::Description))
+ text = qt_getImageTextFromDescription(handler->option(QImageIOHandler::Description).toString());
}
/*!
diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp
index 96d6be502d..fdf77e162c 100644
--- a/src/gui/image/qpnghandler.cpp
+++ b/src/gui/image/qpnghandler.cpp
@@ -49,6 +49,8 @@
#include <qvariant.h>
#include <qvector.h>
+#include <private/qimage_p.h> // for qt_getImageText
+
#include <png.h>
#include <pngconf.h>
@@ -718,27 +720,10 @@ void QPNGImageWriter::setGamma(float g)
gamma = g;
}
-
static void set_text(const QImage &image, png_structp png_ptr, png_infop info_ptr,
const QString &description)
{
- QMap<QString, QString> text;
- foreach (const QString &key, image.textKeys()) {
- if (!key.isEmpty())
- text.insert(key, image.text(key));
- }
- foreach (const QString &pair, description.split(QLatin1String("\n\n"))) {
- int index = pair.indexOf(QLatin1Char(':'));
- if (index >= 0 && pair.indexOf(QLatin1Char(' ')) < index) {
- QString s = pair.simplified();
- if (!s.isEmpty())
- text.insert(QLatin1String("Description"), s);
- } else {
- QString key = pair.left(index);
- if (!key.simplified().isEmpty())
- text.insert(key, pair.mid(index + 2).simplified());
- }
- }
+ const QMap<QString, QString> text = qt_getImageText(image, description);
if (text.isEmpty())
return;
diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro
index 9181abb465..8954cc6402 100644
--- a/src/plugins/imageformats/jpeg/jpeg.pro
+++ b/src/plugins/imageformats/jpeg/jpeg.pro
@@ -1,6 +1,6 @@
TARGET = qjpeg
-QT += core-private
+QT += core-private gui-private
SOURCES += main.cpp qjpeghandler.cpp
HEADERS += main.h qjpeghandler_p.h
diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
index 52e8b39f11..d89b8d398b 100644
--- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp
+++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
@@ -45,6 +45,7 @@
#include <qbuffer.h>
#include <qmath.h>
#include <private/qsimd_p.h>
+#include <private/qimage_p.h> // for qt_getImageText
#include <stdio.h> // jpeglib needs this to be pre-included
#include <setjmp.h>
@@ -491,30 +492,10 @@ inline my_jpeg_destination_mgr::my_jpeg_destination_mgr(QIODevice *device)
free_in_buffer = max_buf;
}
-
static inline void set_text(const QImage &image, j_compress_ptr cinfo, const QString &description)
{
- QMap<QString, QString> text;
- foreach (const QString &key, image.textKeys()) {
- if (!key.isEmpty())
- text.insert(key, image.text(key));
- }
- foreach (const QString &pair, description.split(QLatin1String("\n\n"))) {
- int index = pair.indexOf(QLatin1Char(':'));
- if (index >= 0 && pair.indexOf(QLatin1Char(' ')) < index) {
- QString s = pair.simplified();
- if (!s.isEmpty())
- text.insert(QLatin1String("Description"), s);
- } else {
- QString key = pair.left(index);
- if (!key.simplified().isEmpty())
- text.insert(key, pair.mid(index + 2).simplified());
- }
- }
- if (text.isEmpty())
- return;
-
- for (QMap<QString, QString>::ConstIterator it = text.constBegin(); it != text.constEnd(); ++it) {
+ const QMap<QString, QString> text = qt_getImageText(image, description);
+ for (auto it = text.begin(), end = text.end(); it != end; ++it) {
QByteArray comment = it.key().toLatin1();
if (!comment.isEmpty())
comment += ": ";