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);
15 qCritical() << "Failed to create a viewfinder renderer";
19 renderer->resize(q_ptr->size());
20 QObject::connect(renderer, SIGNAL(updateRequested()), q_ptr, SLOT(updateRequested()));
30 QtCamViewfinderRenderer *renderer;
33 QtCamGraphicsViewfinder *q_ptr;
36 QtCamGraphicsViewfinder::QtCamGraphicsViewfinder(QtCamConfig *config, QGraphicsItem *parent) :
37 QGraphicsWidget(parent), d_ptr(new QtCamGraphicsViewfinderPrivate) {
44 QtCamGraphicsViewfinder::~QtCamGraphicsViewfinder() {
45 delete d_ptr; d_ptr = 0;
48 GstElement *QtCamGraphicsViewfinder::sinkElement() {
49 d_ptr->ensureBackend();
51 if (!d_ptr->renderer) {
55 return d_ptr->renderer->sinkElement();
58 bool QtCamGraphicsViewfinder::setDevice(QtCamDevice *device) {
59 if (device && d_ptr->dev == device) {
64 qWarning() << "QtCamGraphicsViewfinder: viewfinder cannot be replaced.";
69 qWarning() << "QtCamGraphicsViewfinder: viewfinder cannot be unset.";
73 // This is to break the loop.
75 if (!device->setViewfinder(this)) {
80 d_ptr->resetBackend();
85 void QtCamGraphicsViewfinder::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
90 painter->fillRect(boundingRect(), Qt::black);
92 if (!d_ptr->renderer) {
96 d_ptr->renderer->paint(painter);
99 void QtCamGraphicsViewfinder::resizeEvent(QGraphicsSceneResizeEvent *event) {
100 QGraphicsWidget::resizeEvent(event);
102 if (!d_ptr->renderer) {
106 d_ptr->renderer->resize(event->newSize());
109 void QtCamGraphicsViewfinder::updateRequested() {
113 void QtCamGraphicsViewfinder::stop() {
114 d_ptr->resetBackend();