From: Mohammed Sameer Date: Sat, 2 Mar 2013 21:47:32 +0000 (+0200) Subject: Generate proper thumbnails for portrait images. X-Git-Url: https://cgit.sxemacs.org/?a=commitdiff_plain;h=ff285a3c5bd8573fb4b7dd15da28f3e74ee63cf0;p=harmattan%2Fcameraplus Generate proper thumbnails for portrait images. How we create thumbnails for portrait is really messy. I am sure there is a better way to tell Quill to generate proper portrait thumbnails without having 2 display levels but I don't know how. The issue is we generate screen sized thumbnails for landscape but we generate half screen sized thumbnails for portrait --- diff --git a/src/main.cpp b/src/main.cpp index e49d80c..21f782b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -52,14 +52,30 @@ #include "qt_private/qdeclarativedebughelper_p.h" #endif /* QMLJSDEBUGGER */ -static void initQuill(PlatformSettings *settings) { - QList > previewLevels = settings->previewLevels(); - Quill::setPreviewLevelCount(previewLevels.size()); +QSize portraitSize(const QSize& size) { + return size.width() > size.height() ? QSize(size.height(), size.width()) : size; +} - for (int x = 0; x < previewLevels.size(); x++) { - Quill::setThumbnailFlavorName(x, previewLevels[x].first); - Quill::setPreviewSize(x, previewLevels[x].second); - } +QSize landscapeSize(const QSize& size) { + return size.width() > size.height() ? size : QSize(size.height(), size.width()); +} + +static void initQuill(PlatformSettings *settings) { + // How we create thumbnails for portrait is really messy. + // I am sure there is a better way to tell Quill to generate proper + // portrait thumbnails without having 2 display levels but I don't know how. + // The issue is we generate screen sized thumbnails for landscape + // but we generate half screen sized thumbnails for portrait + Quill::setPreviewLevelCount(2); + QSize size = settings->previewSize(); + + // Landscape: + Quill::setThumbnailFlavorName(LANDSCAPE_PREVIEW_LEVEL, settings->thumbnailFlavorName()); + Quill::setPreviewSize(LANDSCAPE_PREVIEW_LEVEL, landscapeSize(size)); + + // Portrait: + Quill::setThumbnailFlavorName(PORTRAIT_PREVIEW_LEVEL, settings->thumbnailFlavorName()); + Quill::setPreviewSize(PORTRAIT_PREVIEW_LEVEL, portraitSize(size)); Quill::setThumbnailExtension(settings->thumbnailExtension()); Quill::setBackgroundRenderingColor(settings->backgroundRenderingColor()); diff --git a/src/platformsettings.cpp b/src/platformsettings.cpp index 23dbcd2..2cce9ba 100644 --- a/src/platformsettings.cpp +++ b/src/platformsettings.cpp @@ -41,10 +41,12 @@ PlatformSettings::~PlatformSettings() { } -QList > PlatformSettings::previewLevels() { - return QList >() << - qMakePair(value("quill/thumbnailFlavorName", THUMBNAIL_FLAVOR_NAME).toString(), - value("quill/previewSize", PREVIEW_SIZE).toSize()); +QSize PlatformSettings::previewSize() { + return value("quill/previewSize", PREVIEW_SIZE).toSize(); +} + +QString PlatformSettings::thumbnailFlavorName() { + return value("quill/thumbnailFlavorName", THUMBNAIL_FLAVOR_NAME).toString(); } QString PlatformSettings::thumbnailExtension() { diff --git a/src/platformsettings.h b/src/platformsettings.h index 81ba127..8c71d28 100644 --- a/src/platformsettings.h +++ b/src/platformsettings.h @@ -31,7 +31,8 @@ public: PlatformSettings(); ~PlatformSettings(); - QList > previewLevels(); + QSize previewSize(); + QString thumbnailFlavorName(); QString thumbnailExtension(); QColor backgroundRenderingColor(); diff --git a/src/quillitem.cpp b/src/quillitem.cpp index 9d42659..1577ab1 100644 --- a/src/quillitem.cpp +++ b/src/quillitem.cpp @@ -58,7 +58,8 @@ void QuillItem::initialize(const QUrl& url, const QString& mimeType) { return; } - m_file->setDisplayLevel(0); + m_file->setDisplayLevel(isLandscape() ? LANDSCAPE_PREVIEW_LEVEL + : PORTRAIT_PREVIEW_LEVEL); if (fileError()) { return; @@ -127,3 +128,9 @@ bool QuillItem::fileError() { return false; } + +bool QuillItem::isLandscape() { + QSize size = m_file->fullImageSize(); + + return size.width() > size.height(); +} diff --git a/src/quillitem.h b/src/quillitem.h index 4ad3049..3b6dd86 100644 --- a/src/quillitem.h +++ b/src/quillitem.h @@ -25,6 +25,9 @@ #include +#define LANDSCAPE_PREVIEW_LEVEL 0 +#define PORTRAIT_PREVIEW_LEVEL 1 + class QuillFile; class QuillItem : public QDeclarativeItem { @@ -54,6 +57,7 @@ private slots: bool fileError(); private: + bool isLandscape(); void recreate(); void updateImage();