Files
qtmultimedia/src/imports/multimedia/qdeclarativecamerafocus.cpp
Michael Goddard 6931cbb35a Fix a number of other qdoc issues.
* Several places needed the forward class declaration hack
* Missing/wrong minor version numbers on imports
* A few typos
* Any number of attempts to work around qdoc
* A few missing docs
* Tweaked soundeffect docs

Change-Id: I3c2ab998a11cbb0956712e0423e01fdb70f5bfff
Reviewed-by: Peter Yard <peter.yard@nokia.com>
Reviewed-by: Angus Cummings <angus.cummings@nokia.com>
Reviewed-by: Jonas Rabbe <jonas.rabbe@gmail.com>
2012-06-15 08:49:29 +02:00

310 lines
8.8 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.0
\brief An interface for focus related camera settings.
\ingroup multimedia_qml
\ingroup camera_qml
CameraFocus is part of the \b{QtMultimedia 5.0} module.
This type allows control over manual and automatic
focus settings, including information about any parts of the
camera frame that are selected for autofocusing.
It should not be constructed separately, instead the
\c focus property of a \l Camera should be used.
\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 relative to top-left corner
}
}
VideoOutput {
source: camera
anchors.fill: parent
}
}
\endqml
*/
/*!
\class QDeclarativeCameraFocus
\internal
\brief An 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
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
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"