Reworked preview animation
[harmattan/cameraplus] / lib / qtcamviewfinderrenderer.cpp
1 /*!
2  * This file is part of CameraPlus.
3  *
4  * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20
21 #include "qtcamviewfinderrenderer.h"
22 #include "qtcamconfig.h"
23 #include <QMap>
24 #include <QDebug>
25
26 static QMap<QString, QMetaObject> _renderers;
27
28 QtCamViewfinderRenderer::QtCamViewfinderRenderer(QtCamConfig *config, QObject *parent) :
29   QObject(parent) {
30
31   Q_UNUSED(config);
32 }
33
34 QtCamViewfinderRenderer::~QtCamViewfinderRenderer() {
35
36 }
37
38 QtCamViewfinderRenderer *QtCamViewfinderRenderer::create(QtCamConfig *config, QObject *parent) {
39   QString key = config->viewfinderRenderer();
40   if (!_renderers.contains(key)) {
41     qCritical() << "Unknown renderer" << key;
42     return 0;
43   }
44
45   QObject *obj = _renderers[key].newInstance(Q_ARG(QtCamConfig *, config),
46                                              Q_ARG(QObject *, parent));
47
48   if (!obj) {
49     qCritical() << "Failed to create renderer" << key;
50     return 0;
51   }
52
53   return dynamic_cast<QtCamViewfinderRenderer *>(obj);
54 }
55
56 int QtCamViewfinderRenderer::registerRenderer(const QString& key, const QMetaObject& meta) {
57   _renderers[key] = meta;
58   return _renderers.size() - 1;
59 }