Generate proper thumbnails for portrait images.
[harmattan/cameraplus] / src / main.cpp
index 45c96bd..21f782b 100644 (file)
@@ -1,7 +1,7 @@
 /*!
  * This file is part of CameraPlus.
  *
- * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -26,8 +26,6 @@
 #include <QGLWidget>
 #include <QuillFile>
 
-#include "imports/plugin.h"
-
 #include "settings.h"
 #include "filenaming.h"
 #include "quillitem.h"
 #include "batteryinfo.h"
 #include "gridlines.h"
 #include "deviceinfo.h"
+#include "devicekeys.h"
+#include "platformsettings.h"
 
 #ifdef QMLJSDEBUGGER
 #include "qt_private/qdeclarativedebughelper_p.h"
 #endif /* QMLJSDEBUGGER */
 
-static void initQuill() {
-  // TODO: All these are hardcoded.
-  Quill::setPreviewLevelCount(1);
-  Quill::setPreviewSize(0, QSize(854, 480));
-  Quill::setMinimumPreviewSize(0, QSize(854, 480));
-  Quill::setThumbnailExtension("jpeg");
-  Quill::setThumbnailFlavorName(0, "screen");
-  Quill::setBackgroundRenderingColor(Qt::black);
-  QString tempPath(QDir::homePath() +  QDir::separator() + ".config" +
-                  QDir::separator() + "quill" + QDir::separator() + "tmp");
+QSize portraitSize(const QSize& size) {
+  return size.width() > size.height() ? QSize(size.height(), size.width()) : size;
+}
+
+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());
+  Quill::setDBusThumbnailingEnabled(settings->isDBusThumbnailingEnabled());
+  Quill::setThumbnailCreationEnabled(settings->isThumbnailCreationEnabled());
+
+  QString tempPath = settings->temporaryFilePath();
   QDir().mkpath(tempPath);
   Quill::setTemporaryFilePath(tempPath);
-  Quill::setDBusThumbnailingEnabled(true);
-  Quill::setThumbnailCreationEnabled(true);
 }
 
 Q_DECL_EXPORT int main(int argc, char *argv[]) {
@@ -76,15 +95,18 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) {
   QDeclarativeDebugHelper::enableDebugging();
 #endif /* QMLJSDEBUGGER */
 
-  // Let's initialize Quill:
-  initQuill();
-
   QDeclarativeView view;
+  view.setAttribute(Qt::WA_NoSystemBackground);
   view.setViewport(new QGLWidget);
   view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
   view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
+  view.viewport()->setAttribute(Qt::WA_NoSystemBackground);
+
+  PlatformSettings platformSettings;
+
+  // Let's initialize Quill:
+  initQuill(&platformSettings);
 
-  Plugin::registerTypes(view.engine());
   qmlRegisterType<Settings>("CameraPlus", 1, 0, "Settings");
   qmlRegisterType<FileNaming>("CameraPlus", 1, 0, "FileNaming");
   qmlRegisterType<QuillItem>("CameraPlus", 1, 0, "QuillItem");
@@ -104,6 +126,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) {
   qmlRegisterType<BatteryInfo>("CameraPlus", 1, 0, "BatteryInfo");
   qmlRegisterType<GridLines>("CameraPlus", 1, 0, "GridLines");
   qmlRegisterType<DeviceInfo>("CameraPlus", 1, 0, "DeviceInfo");
+  qmlRegisterType<DeviceKeys>("CameraPlus", 1, 0, "DeviceKeys");
 
   view.setSource(QUrl("qrc:/qml/main.qml"));