From kde-commits Tue Mar 31 14:48:53 2015 From: =?utf-8?b?QXVyw6lsaWVuIEfDonRlYXU=?= Date: Tue, 31 Mar 2015 14:48:53 +0000 To: kde-commits Subject: [gwenview] lib: Fix for wrong rotation of RAW images Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=142781334322041 Git commit f383a05dd25ce924094518962a4d82cbc914ee32 by Aur=C3=A9lien G=C3= =A2teau, on behalf of Martin Kyral. Committed on 22/03/2015 at 15:53. Pushed by gateau into branch 'master'. Fix for wrong rotation of RAW images Displaying of RAW images in gwenview was broken by https://bugreports.qt.io= /browse/QTBUG-37946. I am fixing (or rather workarounding it) by blocking E= XIF rotation iff the loaded image is RAW. REVIEW: 122873 M +4 -1 lib/document/loadingdocumentimpl.cpp M +2 -1 lib/thumbnailprovider/thumbnailgenerator.cpp M +1 -0 lib/thumbnailprovider/thumbnailgenerator.h http://commits.kde.org/gwenview/f383a05dd25ce924094518962a4d82cbc914ee32 diff --git a/lib/document/loadingdocumentimpl.cpp b/lib/document/loadingdoc= umentimpl.cpp index cc8bea9..8477c28 100644 --- a/lib/document/loadingdocumentimpl.cpp +++ b/lib/document/loadingdocumentimpl.cpp @@ -104,6 +104,7 @@ struct LoadingDocumentImplPrivate std::auto_ptr mJpegContent; QImage mImage; Cms::Profile::Ptr mCmsProfile; + bool mIsRawImage =3D false; = /** * Determine kind of document and switch to an implementation if it is= not @@ -222,6 +223,8 @@ struct LoadingDocumentImplPrivate = // need to fill mFormat so gwenview can tell the type when try= ing to save mFormat =3D mFormatHint; + + mIsRawImage =3D true; } else { #else { @@ -318,7 +321,7 @@ struct LoadingDocumentImplPrivate return; } = - if (mJpegContent.get() && GwenviewConfig::applyExifOrientation()) { + if (mJpegContent.get() && GwenviewConfig::applyExifOrientation() &= & !mIsRawImage) { Gwenview::Orientation orientation =3D mJpegContent->orientatio= n(); QMatrix matrix =3D ImageUtils::transformMatrix(orientation); mImage =3D mImage.transformed(matrix); diff --git a/lib/thumbnailprovider/thumbnailgenerator.cpp b/lib/thumbnailpr= ovider/thumbnailgenerator.cpp index 54875f5..36d55e8 100644 --- a/lib/thumbnailprovider/thumbnailgenerator.cpp +++ b/lib/thumbnailprovider/thumbnailgenerator.cpp @@ -102,6 +102,7 @@ bool ThumbnailContext::load(const QString &pixPath, int= pixelSize) buffer.open(QIODevice::ReadOnly); reader.setDevice(&buffer); reader.setFormat(formatHint); + mIsRawImage =3D true; } else { #else { @@ -121,7 +122,7 @@ bool ThumbnailContext::load(const QString &pixPath, int= pixelSize) // If applyExifOrientation is not set, don't use the // embedded thumbnail since it might be rotated differently // than the actual image - if (!content.rawData().isEmpty() && GwenviewConfig::applyExifOrientati= on()) { + if (!content.rawData().isEmpty() && GwenviewConfig::applyExifOrientati= on() && !mIsRawImage) { QImage thumbnail =3D content.thumbnail(); orientation =3D content.orientation(); = diff --git a/lib/thumbnailprovider/thumbnailgenerator.h b/lib/thumbnailprov= ider/thumbnailgenerator.h index 4571832..16ed43e 100644 --- a/lib/thumbnailprovider/thumbnailgenerator.h +++ b/lib/thumbnailprovider/thumbnailgenerator.h @@ -41,6 +41,7 @@ struct ThumbnailContext { int mOriginalWidth; int mOriginalHeight; bool mNeedCaching; + bool mIsRawImage =3D false; = bool load(const QString &pixPath, int pixelSize); };