Generate proper thumbnails for portrait images.
authorMohammed Sameer <msameer@foolab.org>
Sat, 2 Mar 2013 21:47:32 +0000 (23:47 +0200)
committerMohammed Sameer <msameer@foolab.org>
Sat, 2 Mar 2013 21:47:32 +0000 (23:47 +0200)
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

src/main.cpp
src/platformsettings.cpp
src/platformsettings.h
src/quillitem.cpp
src/quillitem.h

index e49d80c..21f782b 100644 (file)
 #include "qt_private/qdeclarativedebughelper_p.h"
 #endif /* QMLJSDEBUGGER */
 
-static void initQuill(PlatformSettings *settings) {
-  QList<QPair<QString, QSize> > 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());
index 23dbcd2..2cce9ba 100644 (file)
@@ -41,10 +41,12 @@ PlatformSettings::~PlatformSettings() {
 
 }
 
-QList<QPair<QString, QSize> > PlatformSettings::previewLevels() {
-  return QList<QPair<QString, QSize> >() <<
-    qMakePair<QString, QSize>(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() {
index 81ba127..8c71d28 100644 (file)
@@ -31,7 +31,8 @@ public:
   PlatformSettings();
   ~PlatformSettings();
 
-  QList<QPair<QString, QSize> > previewLevels();
+  QSize previewSize();
+  QString thumbnailFlavorName();
 
   QString thumbnailExtension();
   QColor backgroundRenderingColor();
index 9d42659..1577ab1 100644 (file)
@@ -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();
+}
index 4ad3049..3b6dd86 100644 (file)
@@ -25,6 +25,9 @@
 
 #include <QDeclarativeItem>
 
+#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();