qdeclarativecamerafocus.cpp 7.07 KiB
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
** $QT_END_LICENSE$
****************************************************************************/
#include "qdeclarativecamera_p.h"
#include "qdeclarativecamerafocus_p.h"
QT_BEGIN_NAMESPACE
/*!
    \qmlclass CameraFocus QDeclarativeCameraFocus
    \since 5.0
    \brief The CameraFocus element provides interface for focus related camera settings.
    \ingroup qml-multimedia
    This element is part of the \bold{QtMultimedia 5.0} module.
    It should not be constructed separately but provided by Camera.focus.
    \qml
    import QtQuick 2.0
    import QtMultimedia 5.0
    Camera {
        id: camera
        focus {
            focusMode: Camera.FocusMacro
            focusPointMode: Camera.FocusPointCustom
            customFocusPoint: Qt.point(0.2, 0.2) //focus to top-left corner
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
\endqml */ /*! \class QDeclarativeCameraFocus \brief The CameraFocus element provides interface for focus related camera settings. */ /*! Construct a declarative camera focus object using \a parent object. */ QDeclarativeCameraFocus::QDeclarativeCameraFocus(QCamera *camera, QObject *parent) : QObject(parent) { m_focus = camera->focus(); m_focusZones = new FocusZonesModel(this); updateFocusZones(); connect(m_focus, SIGNAL(focusZonesChanged()), SLOT(updateFocusZones())); } QDeclarativeCameraFocus::~QDeclarativeCameraFocus() { } /*! \qmlproperty Camera::FocusModes CameraFocus::focusMode \property QDeclarativeCameraFocus::focusMode The current camera focus mode. It's possible to combine multiple Camera::FocusMode values, for example Camera.FocusMacro + Camera.FocusContinuous. */ QDeclarativeCamera::FocusModes QDeclarativeCameraFocus::focusMode() const { return QDeclarativeCamera::FocusModes(m_focus->focusMode()); } bool QDeclarativeCameraFocus::isFocusModeSupported(QDeclarativeCamera::FocusModes mode) const { return m_focus->isFocusModeSupported(QCameraFocus::FocusMode(int(mode))); } void QDeclarativeCameraFocus::setFocusMode(QDeclarativeCamera::FocusModes mode) { m_focus->setFocusMode(QCameraFocus::FocusMode(int(mode))); } /*! \qmlproperty CameraFocus::FocusPointMode CameraFocus::focusPointMode \property QDeclarativeCameraFocus::focusPointMode The current camera focus point mode. */ QDeclarativeCamera::FocusPointMode QDeclarativeCameraFocus::focusPointMode() const { return QDeclarativeCamera::FocusPointMode(m_focus->focusPointMode()); } void QDeclarativeCameraFocus::setFocusPointMode(QDeclarativeCamera::FocusPointMode mode) { if (mode != focusPointMode()) { m_focus->setFocusPointMode(QCameraFocus::FocusPointMode(mode)); emit focusPointModeChanged(focusPointMode()); } }
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
bool QDeclarativeCameraFocus::isFocusPointModeSupported(QDeclarativeCamera::FocusPointMode mode) const { return m_focus->isFocusPointModeSupported(QCameraFocus::FocusPointMode(mode)); } /*! \qmlproperty QPointF CameraFocus::customFocusPoint \property QDeclarativeCameraFocus::customFocusPoint Position of custom focus point, in relative frame coordinates: QPointF(0,0) points to the left top frame point, QPointF(0.5,0.5) points to the frame center. Custom focus point is used only in FocusPointCustom focus mode. */ QPointF QDeclarativeCameraFocus::customFocusPoint() const { return m_focus->customFocusPoint(); } void QDeclarativeCameraFocus::setCustomFocusPoint(const QPointF &point) { if (point != customFocusPoint()) { m_focus->setCustomFocusPoint(point); emit customFocusPointChanged(customFocusPoint()); } } /*! \qmlproperty QPointF CameraFocus::focusZones \property QDeclarativeCameraFocus::focusZones List of current camera focus zones, each including area specified in the same coordinates as \l customFocusPoint and zone status. \qml VideoOutput { id: viewfinder source: camera //display focus areas on camera viewfinder: Repeater { model: camera.focus.focusZones Rectangle { border { width: 2 color: status == CameraFocus.Focused ? "green" : "white" } color: "transparent" x: area.x * viewfinder.width y: area.y * viewfinder.height width: area.width * viewfinder.width height: area.height * viewfinder.height } } } \endqml */ QAbstractListModel *QDeclarativeCameraFocus::focusZones() const { return m_focusZones; } /*! \internal */
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
void QDeclarativeCameraFocus::updateFocusZones() { m_focusZones->setFocusZones(m_focus->focusZones()); } FocusZonesModel::FocusZonesModel(QObject *parent) :QAbstractListModel(parent) { QHash<int, QByteArray> roles; roles[StatusRole] = "status"; roles[AreaRole] = "area"; setRoleNames(roles); } int FocusZonesModel::rowCount(const QModelIndex &parent) const { if (parent == QModelIndex()) return m_focusZones.count(); return 0; } QVariant FocusZonesModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() > m_focusZones.count()) return QVariant(); QCameraFocusZone zone = m_focusZones.value(index.row()); if (role == StatusRole) return zone.status(); if (role == AreaRole) return zone.area(); return QVariant(); } void FocusZonesModel::setFocusZones(const QCameraFocusZoneList &zones) { beginResetModel(); m_focusZones = zones; endResetModel(); } QT_END_NAMESPACE #include "moc_qdeclarativecamerafocus_p.cpp"