aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-05-18 10:13:48 +0200
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-05-19 11:29:15 +0000
commit07882f73e8028577d9223b65a5abd6ffed5d2b35 (patch)
treefa6a2bca351dca8f1ae0b087901f0d1dd3efd1b2 /src/quick/items
parent0ace63da65a222873ecf4e966afe88afb89a25f8 (diff)
Optionally apply orientation on images
Adds the option to follow EXIF orientation. This was previuosly automatically applied to TIFF images, but not JPEGs except in Qt 5.4.1. [ChangeLog][Image] An autoTransform property has been added to control whether metadata image transforms such as EXIF orientation are automatically applied. By default it enabled for TIFF images and disabled for JPEG. Change-Id: I8a4cf204985b2a7d158a0e046e52db7cda970d20 Task-number: QTBUG-37946 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Diffstat (limited to 'src/quick/items')
-rw-r--r--src/quick/items/qquickimage.cpp11
-rw-r--r--src/quick/items/qquickimage_p.h2
-rw-r--r--src/quick/items/qquickimagebase.cpp27
-rw-r--r--src/quick/items/qquickimagebase_p.h4
-rw-r--r--src/quick/items/qquickimagebase_p_p.h6
-rw-r--r--src/quick/items/qquickitemsmodule.cpp1
6 files changed, 49 insertions, 2 deletions
diff --git a/src/quick/items/qquickimage.cpp b/src/quick/items/qquickimage.cpp
index a278fb72a2..f0f17551b7 100644
--- a/src/quick/items/qquickimage.cpp
+++ b/src/quick/items/qquickimage.cpp
@@ -152,6 +152,7 @@ QQuickImagePrivate::QQuickImagePrivate()
QQuickImage::QQuickImage(QQuickItem *parent)
: QQuickImageBase(*(new QQuickImagePrivate), parent)
{
+ connect(this, SIGNAL(autoTransformBaseChanged()), SIGNAL(autoTransformChanged()));
}
QQuickImage::QQuickImage(QQuickImagePrivate &dd, QQuickItem *parent)
@@ -820,4 +821,14 @@ void QQuickImage::setMipmap(bool use)
update();
}
+/*!
+ \qmlproperty bool QtQuick::Image::autoTransform
+ \since 5.5
+
+ This property holds whether the image should automatically apply
+ image transformation metadata such as EXIF orientation.
+
+ By default, this property is set to false.
+ */
+
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickimage_p.h b/src/quick/items/qquickimage_p.h
index efe83e7026..5b1aea5940 100644
--- a/src/quick/items/qquickimage_p.h
+++ b/src/quick/items/qquickimage_p.h
@@ -53,6 +53,7 @@ class Q_AUTOTEST_EXPORT QQuickImage : public QQuickImageBase
Q_PROPERTY(HAlignment horizontalAlignment READ horizontalAlignment WRITE setHorizontalAlignment NOTIFY horizontalAlignmentChanged)
Q_PROPERTY(VAlignment verticalAlignment READ verticalAlignment WRITE setVerticalAlignment NOTIFY verticalAlignmentChanged)
Q_PROPERTY(bool mipmap READ mipmap WRITE setMipmap NOTIFY mipmapChanged REVISION 1)
+ Q_PROPERTY(bool autoTransform READ autoTransform WRITE setAutoTransform NOTIFY autoTransformChanged REVISION 2)
public:
QQuickImage(QQuickItem *parent=0);
@@ -93,6 +94,7 @@ Q_SIGNALS:
void horizontalAlignmentChanged(HAlignment alignment);
void verticalAlignmentChanged(VAlignment alignment);
Q_REVISION(1) void mipmapChanged(bool);
+ Q_REVISION(2) void autoTransformChanged();
private Q_SLOTS:
void invalidateSceneGraph();
diff --git a/src/quick/items/qquickimagebase.cpp b/src/quick/items/qquickimagebase.cpp
index b54c34765f..8fba6e3d12 100644
--- a/src/quick/items/qquickimagebase.cpp
+++ b/src/quick/items/qquickimagebase.cpp
@@ -195,6 +195,10 @@ void QQuickImageBase::load()
d->oldSourceSize = sourceSize();
emit sourceSizeChanged();
}
+ if (autoTransform() != d->oldAutoTransform) {
+ d->oldAutoTransform = autoTransform();
+ emit autoTransformBaseChanged();
+ }
update();
} else {
@@ -223,7 +227,7 @@ void QQuickImageBase::load()
resolve2xLocalFile(d->url, targetDevicePixelRatio, &loadUrl, &d->devicePixelRatio);
}
- d->pix.load(qmlEngine(this), loadUrl, d->sourcesize * d->devicePixelRatio, options);
+ d->pix.load(qmlEngine(this), loadUrl, d->sourcesize * d->devicePixelRatio, options, d->autoTransform);
if (d->pix.isLoading()) {
if (d->progress != 0.0) {
@@ -278,6 +282,10 @@ void QQuickImageBase::requestFinished()
d->oldSourceSize = sourceSize();
emit sourceSizeChanged();
}
+ if (autoTransform() != d->oldAutoTransform) {
+ d->oldAutoTransform = autoTransform();
+ emit autoTransformBaseChanged();
+ }
update();
}
@@ -368,4 +376,21 @@ void QQuickImageBase::resolve2xLocalFile(const QUrl &url, qreal targetDevicePixe
*sourceDevicePixelRatio = qreal(2.0);
}
+bool QQuickImageBase::autoTransform() const
+{
+ Q_D(const QQuickImageBase);
+ if (d->autoTransform == UsePluginDefault)
+ return d->pix.autoTransform() == ApplyTransform;
+ return d->autoTransform == ApplyTransform;
+}
+
+void QQuickImageBase::setAutoTransform(bool transform)
+{
+ Q_D(QQuickImageBase);
+ if (d->autoTransform != UsePluginDefault && transform == (d->autoTransform == ApplyTransform))
+ return;
+ d->autoTransform = transform ? ApplyTransform : DoNotApplyTransform;
+ emit autoTransformBaseChanged();
+}
+
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickimagebase_p.h b/src/quick/items/qquickimagebase_p.h
index 978004f8fd..d43822bebe 100644
--- a/src/quick/items/qquickimagebase_p.h
+++ b/src/quick/items/qquickimagebase_p.h
@@ -78,6 +78,9 @@ public:
virtual void setMirror(bool mirror);
bool mirror() const;
+ virtual void setAutoTransform(bool transform);
+ bool autoTransform() const;
+
void resolve2xLocalFile(const QUrl &url, qreal targetDevicePixelRatio, QUrl *sourceUrl, qreal *sourceDevicePixelRatio);
Q_SIGNALS:
@@ -88,6 +91,7 @@ Q_SIGNALS:
void asynchronousChanged();
void cacheChanged();
void mirrorChanged();
+ void autoTransformBaseChanged();
protected:
virtual void load();
diff --git a/src/quick/items/qquickimagebase_p_p.h b/src/quick/items/qquickimagebase_p_p.h
index ebdf352e4e..cffe709116 100644
--- a/src/quick/items/qquickimagebase_p_p.h
+++ b/src/quick/items/qquickimagebase_p_p.h
@@ -62,9 +62,11 @@ public:
: status(QQuickImageBase::Null),
progress(0.0),
devicePixelRatio(1.0),
+ autoTransform(UsePluginDefault),
async(false),
cache(true),
- mirror(false)
+ mirror(false),
+ oldAutoTransform(false)
{
}
@@ -75,9 +77,11 @@ public:
QSize sourcesize;
QSize oldSourceSize;
qreal devicePixelRatio;
+ AutoTransform autoTransform;
bool async : 1;
bool cache : 1;
bool mirror: 1;
+ bool oldAutoTransform : 1;
};
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp
index 6c342cc491..8b4723f340 100644
--- a/src/quick/items/qquickitemsmodule.cpp
+++ b/src/quick/items/qquickitemsmodule.cpp
@@ -267,6 +267,7 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor)
qmlRegisterUncreatableType<QQuickOpenGLInfo>(uri, 2, 4,"OpenGLInfo", QQuickOpenGLInfo::tr("OpenGLInfo is only available via attached properties"));
qmlRegisterType<QQuickPinchArea, 1>(uri, 2, 5,"PinchArea");
+ qmlRegisterType<QQuickImage, 2>(uri, 2, 5,"Image");
}
static void initResources()