Files
qtmultimedia/src/imports/multimedia/qdeclarativecamerafocus.cpp
Michael Goddard 8484b0ff9c Fix a number of doc errors and warnings.
* Document a few missing classes/functions/methods
* Fix a number of QML snippets that wouldn't work as standalone snippets
* Add files to .pro so they show up in Creator..

Still the mysterious lack of controls dir documentation persists :/

Change-Id: I57162371a4d966e4db5bdb1b71d1baf9c0ca57c3
Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
2012-04-11 03:31:52 +02:00

312 lines
9.0 KiB
C++

/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** 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
\inqmlmodule QtMultimedia 5
\brief The CameraFocus element provides interface for focus related camera settings.
\ingroup multimedia_qml
\ingroup camera_qml
This element is part of the \b{QtMultimedia 5.0} module.
The CameraFocus element allows control over manual and automatic
focus settings, including information about any parts of the
camera frame that are selected for autofocusing.
It is not constructed separately but is provided by the
\l Camera element's \c focus property.
\qml
import QtQuick 2.0
import QtMultimedia 5.0
Item {
width: 640
height: 360
Camera {
id: camera
focus {
focusMode: Camera.FocusMacro
focusPointMode: Camera.FocusPointCustom
customFocusPoint: Qt.point(0.2, 0.2) //focus to top-left corner
}
}
VideoOutput {
source: camera
anchors.fill: parent
}
}
\endqml
*/
/*!
\class QDeclarativeCameraFocus
\internal
\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 QtMultimedia5::Camera::FocusMode 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.
In automatic focusing modes, the \l focusPointMode property
and \l focusZones property provide information and control
over how automatic focusing is performed.
*/
QDeclarativeCamera::FocusMode QDeclarativeCameraFocus::focusMode() const
{
return QDeclarativeCamera::FocusMode(int(m_focus->focusMode()));
}
/*!
\qmlmethod bool QtMultimedia5::CameraFocus::isFocusModeSupported(mode) const
\fn QDeclarativeCameraFocus::isFocusModeSupported(QDeclarativeCamera::FocusMode mode) const
Returns true if the supplied \a mode is a supported focus mode, and
false otherwise.
*/
bool QDeclarativeCameraFocus::isFocusModeSupported(QDeclarativeCamera::FocusMode mode) const
{
return m_focus->isFocusModeSupported(QCameraFocus::FocusModes(int(mode)));
}
void QDeclarativeCameraFocus::setFocusMode(QDeclarativeCamera::FocusMode mode)
{
m_focus->setFocusMode(QCameraFocus::FocusModes(int(mode)));
}
/*!
\qmlproperty QtMultimedia5::CameraFocus::FocusPointMode CameraFocus::focusPointMode
\property QDeclarativeCameraFocus::focusPointMode
The current camera focus point mode. This is used in automatic
focusing modes to determine what to focus on.
If the current focus point mode is \c Camera.FocusPointCustom, the
\l customFocusPoint property allows you to specify which part of
the frame to focus on.
*/
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());
}
}
/*!
\qmlmethod bool QtMultimedia5::CameraFocus::isFocusPointModeSupported(mode) const
\fn QDeclarativeCameraFocus::isFocusPointModeSupported(QDeclarativeCamera::FocusPointMode mode) const
Returns true if the supplied \a mode is a supported focus point mode, and
false otherwise.
*/
bool QDeclarativeCameraFocus::isFocusPointModeSupported(QDeclarativeCamera::FocusPointMode mode) const
{
return m_focus->isFocusPointModeSupported(QCameraFocus::FocusPointMode(mode));
}
/*!
\qmlproperty QPointF QtMultimedia5::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 QtMultimedia5::CameraFocus::focusZones
\property QDeclarativeCameraFocus::focusZones
List of current camera focus zones,
each including \c area specified in the same coordinates as \l customFocusPoint
and zone \c status as one of the following values:
\table
\header \li Value \li Description
\row \li Camera.FocusAreaUnused \li This focus point area is currently unused in autofocusing.
\row \li Camera.FocusAreaSelected \li This focus point area is used in autofocusing, but is not in focus.
\row \li Camera.FocusAreaFocused \li This focus point is used in autofocusing, and is in focus.
\endtable
\qml
VideoOutput {
id: viewfinder
source: camera
//display focus areas on camera viewfinder:
Repeater {
model: camera.focus.focusZones
Rectangle {
border {
width: 2
color: status == Camera.FocusAreaFocused ? "green" : "white"
}
color: "transparent"
// Map from the relative, normalized frame coordinates
property variant mappedRect: viewfinder.mapNormalizedRectToItem(area);
x: mappedRect.x
y: mappedRect.y
width: mappedRect.width
height: mappedRect.height
}
}
}
\endqml
*/
QAbstractListModel *QDeclarativeCameraFocus::focusZones() const
{
return m_focusZones;
}
/*! \internal */
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"