Changelog for 0.0.8
[harmattan/cameraplus] / declarative / roi.cpp
index 65a9643..9a38dab 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
 
 #include "roi.h"
 #include "qtcamroi.h"
+#include "qtcamdevice.h"
+#include "qtcamviewfinder.h"
+
+class UnNormalizer {
+public:
+  void init(const QRectF& renderArea, bool normalize) {
+    m_area = renderArea;
+    m_normalize = normalize;
+  }
+
+  QRectF unNormalize(const QRectF& rect) {
+    if (m_normalize) {
+      return rect;
+    }
+
+    return QRectF(rect.x() * m_area.width(),
+                 rect.y() * m_area.height(),
+                 rect.width() * m_area.width(),
+                 rect.height() * m_area.height());
+  }
+
+  QVariantList unNormalize(const QList<QRectF>& rects) {
+    QVariantList vars;
+
+    foreach (const QRectF& rect, rects) {
+      vars.append(QVariant::fromValue(unNormalize(rect)));
+    }
+
+    return vars;
+  }
+
+private:
+  QRectF m_area;
+  bool m_normalize;
+};
 
 Roi::Roi(QtCamDevice *device, QObject *parent) :
   QObject(parent),
-  m_roi(new QtCamRoi(device)) {
+  m_roi(new QtCamRoi(device)),
+  m_normalize(true) {
 
   QObject::connect(m_roi,
                   SIGNAL(regionsOfInterestUpdated(const QList<QRectF>&, const QRectF&, const QList<QRectF>&)),
@@ -58,19 +94,24 @@ void Roi::resetRegionOfInterest() {
 void Roi::handleRegionsChanged(const QList<QRectF>& regions, const QRectF& primary,
                               const QList<QRectF>& rest) {
 
-  QVariantList regionsList = variantList(regions);
-  QVariantList restList = variantList(rest);
-  QVariant primaryRect = QVariant::fromValue(primary);
+  UnNormalizer n;
+
+  n.init(m_roi->device()->viewfinder()->renderArea(), m_normalize);
+
+  QVariantList regionsList = n.unNormalize(regions);
+  QVariantList restList = n.unNormalize(rest);
+  QVariant primaryRect = QVariant::fromValue(n.unNormalize(primary));
 
   emit regionsChanged(regionsList, primaryRect, restList);
 }
 
-QVariantList Roi::variantList(const QList<QRectF>& rects) {
-  QVariantList list;
+bool Roi::normalize() const {
+  return m_normalize;
+}
 
-  foreach(const QRectF& rect, rects) {
-    list.append(QVariant::fromValue(rect));
+void Roi::setNormalize(bool normalize) {
+  if (normalize != m_normalize) {
+    m_normalize = normalize;
+    emit normalizeChanged();
   }
-
-  return list;
 }