1 #include "qtcamgraphicsviewfinder.h"
2 #include "qtcamconfig.h"
3 #include "qtcamdevice.h"
5 #include "qtcamviewfinderrenderer.h"
7 #include <QGraphicsSceneResizeEvent>
9 class QtCamGraphicsViewfinderPrivate {
11 void ensureBackend() {
13 renderer = QtCamViewfinderRenderer::create(conf, q_ptr);
14 renderer->resize(q_ptr->size());
15 QObject::connect(renderer, SIGNAL(updateRequested()), q_ptr, SLOT(updateRequested()));
25 QtCamViewfinderRenderer *renderer;
28 QtCamGraphicsViewfinder *q_ptr;
31 QtCamGraphicsViewfinder::QtCamGraphicsViewfinder(QtCamConfig *config, QGraphicsItem *parent) :
32 QGraphicsWidget(parent), d_ptr(new QtCamGraphicsViewfinderPrivate) {
39 QtCamGraphicsViewfinder::~QtCamGraphicsViewfinder() {
40 delete d_ptr; d_ptr = 0;
43 GstElement *QtCamGraphicsViewfinder::sinkElement() {
44 d_ptr->ensureBackend();
46 return d_ptr->renderer->sinkElement();
49 bool QtCamGraphicsViewfinder::setDevice(QtCamDevice *device) {
50 if (device && d_ptr->dev == device) {
55 qWarning() << "QtCamGraphicsViewfinder: viewfinder cannot be replaced.";
60 qWarning() << "QtCamGraphicsViewfinder: viewfinder cannot be unset.";
64 // This is to break the loop.
66 if (!device->setViewfinder(this)) {
71 d_ptr->resetBackend();
76 void QtCamGraphicsViewfinder::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
81 painter->fillRect(boundingRect(), Qt::black);
83 if (!d_ptr->renderer) {
87 d_ptr->renderer->paint(painter);
90 void QtCamGraphicsViewfinder::resizeEvent(QGraphicsSceneResizeEvent *event) {
91 QGraphicsWidget::resizeEvent(event);
93 if (!d_ptr->renderer) {
97 d_ptr->renderer->resize(event->newSize());
100 void QtCamGraphicsViewfinder::updateRequested() {