X-Git-Url: http://cgit.sxemacs.org/?p=harmattan%2Fcameraplus;a=blobdiff_plain;f=lib%2Fqtcamgraphicsviewfinder.cpp;h=6ace1933315b61b19723da009dc5697fa69c669a;hp=f701fb4fe43aec3fd38050c8649c37946640ef16;hb=f16f2d7afbd39e1adeb193031b3be10279e3cb85;hpb=9765fcd8853e1346e2f202c6472d8ca41eb89bf1 diff --git a/lib/qtcamgraphicsviewfinder.cpp b/lib/qtcamgraphicsviewfinder.cpp index f701fb4..6ace193 100644 --- a/lib/qtcamgraphicsviewfinder.cpp +++ b/lib/qtcamgraphicsviewfinder.cpp @@ -1,7 +1,7 @@ /*! * This file is part of CameraPlus. * - * Copyright (C) 2012 Mohammed Sameer + * Copyright (C) 2012-2013 Mohammed Sameer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,6 +25,7 @@ #include "qtcamviewfinderrenderer.h" #include #include +#include class QtCamGraphicsViewfinderPrivate { public: @@ -38,6 +39,8 @@ public: renderer->resize(q_ptr->size()); QObject::connect(renderer, SIGNAL(updateRequested()), q_ptr, SLOT(updateRequested())); + QObject::connect(renderer, SIGNAL(renderAreaChanged()), q_ptr, SIGNAL(renderAreaChanged())); + QObject::connect(renderer, SIGNAL(videoResolutionChanged()), q_ptr, SIGNAL(videoResolutionChanged())); } } @@ -51,6 +54,7 @@ public: QtCamConfig *conf; QtCamDevice *dev; QtCamGraphicsViewfinder *q_ptr; + bool enabled; }; QtCamGraphicsViewfinder::QtCamGraphicsViewfinder(QtCamConfig *config, QGraphicsItem *parent) : @@ -59,6 +63,7 @@ QtCamGraphicsViewfinder::QtCamGraphicsViewfinder(QtCamConfig *config, QGraphicsI d_ptr->dev = 0; d_ptr->renderer = 0; d_ptr->q_ptr = this; + d_ptr->enabled = true; } QtCamGraphicsViewfinder::~QtCamGraphicsViewfinder() { @@ -76,33 +81,6 @@ GstElement *QtCamGraphicsViewfinder::sinkElement() { return d_ptr->renderer->sinkElement(); } -bool QtCamGraphicsViewfinder::setDevice(QtCamDevice *device) { - if (device && d_ptr->dev == device) { - return true; - } - - if (d_ptr->dev) { - qWarning() << "QtCamGraphicsViewfinder: viewfinder cannot be replaced."; - return false; - } - - if (!device) { - qWarning() << "QtCamGraphicsViewfinder: viewfinder cannot be unset."; - return false; - } - - // This is to break the loop. - d_ptr->dev = device; - if (!device->setViewfinder(this)) { - d_ptr->dev = 0; - return false; - } - - d_ptr->resetBackend(); - - return true; -} - void QtCamGraphicsViewfinder::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(widget); @@ -110,11 +88,21 @@ void QtCamGraphicsViewfinder::paint(QPainter *painter, const QStyleOptionGraphic painter->fillRect(boundingRect(), Qt::black); - if (!d_ptr->renderer) { + if (!d_ptr->renderer || !d_ptr->enabled) { return; } - d_ptr->renderer->paint(painter); + bool needsNativePainting = d_ptr->renderer->needsNativePainting(); + + if (needsNativePainting) { + painter->beginNativePainting(); + } + + d_ptr->renderer->paint(QMatrix4x4(painter->combinedTransform()), painter->viewport()); + + if (needsNativePainting) { + painter->endNativePainting(); + } } void QtCamGraphicsViewfinder::resizeEvent(QGraphicsSceneResizeEvent *event) { @@ -128,9 +116,41 @@ void QtCamGraphicsViewfinder::resizeEvent(QGraphicsSceneResizeEvent *event) { } void QtCamGraphicsViewfinder::updateRequested() { - update(); + if (d_ptr->enabled) { + update(); + } } void QtCamGraphicsViewfinder::stop() { d_ptr->resetBackend(); + + setRenderingEnabled(true); +} + +QRectF QtCamGraphicsViewfinder::renderArea() const { + if (!d_ptr->renderer) { + return QRectF(); + } + + return d_ptr->renderer->renderArea(); +} + +QSizeF QtCamGraphicsViewfinder::videoResolution() const { + if (!d_ptr->renderer) { + return QSizeF(); + } + + return d_ptr->renderer->videoResolution(); +} + +bool QtCamGraphicsViewfinder::isRenderingEnabled() const { + return d_ptr->enabled; +} + +void QtCamGraphicsViewfinder::setRenderingEnabled(bool enabled) { + if (d_ptr->enabled != enabled) { + d_ptr->enabled = enabled; + + emit renderingEnabledChanged(); + } }