Move qt_cam_copy_register to QtCamera
[harmattan/cameraplus] / lib / qtcamscene.cpp
index 333697c..b1d575e 100644 (file)
@@ -1,3 +1,23 @@
+/*!
+ * This file is part of CameraPlus.
+ *
+ * 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
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
 #include "qtcamscene.h"
 #include "qtcamcapability_p.h"
 
@@ -31,5 +51,23 @@ QtCamScene::SceneMode QtCamScene::value() {
 }
 
 bool QtCamScene::setValue(const QtCamScene::SceneMode& mode) {
-  return d_ptr->setIntValue(mode);
+  SceneMode old = value();
+
+  // Scene mode is always forced in order to reset the other capabilities.
+  bool ret = d_ptr->setIntValue(mode, true);
+
+  if (!ret) {
+    return ret;
+  }
+
+  if (!d_ptr->dev || !d_ptr->dev->activeMode() || old == mode) {
+    return ret;
+  }
+
+  if (old == Night || mode == Night) {
+    // We must ask the mode to reset the settings to use night mode resolution if needed.
+    d_ptr->dev->activeMode()->applySettings();
+  }
+
+  return ret;
 }