// Commit: f707672eb4c51ea82fbd98e1da16ece61a74c690 /**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtSG module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, 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. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QSGPINCHAREA_H #define QSGPINCHAREA_H #include "qsgitem.h" QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_MODULE(Declarative) class Q_AUTOTEST_EXPORT QSGPinch : public QObject { Q_OBJECT Q_ENUMS(Axis) Q_PROPERTY(QSGItem *target READ target WRITE setTarget RESET resetTarget) Q_PROPERTY(qreal minimumScale READ minimumScale WRITE setMinimumScale NOTIFY minimumScaleChanged) Q_PROPERTY(qreal maximumScale READ maximumScale WRITE setMaximumScale NOTIFY maximumScaleChanged) Q_PROPERTY(qreal minimumRotation READ minimumRotation WRITE setMinimumRotation NOTIFY minimumRotationChanged) Q_PROPERTY(qreal maximumRotation READ maximumRotation WRITE setMaximumRotation NOTIFY maximumRotationChanged) Q_PROPERTY(Axis dragAxis READ axis WRITE setAxis NOTIFY dragAxisChanged) Q_PROPERTY(qreal minimumX READ xmin WRITE setXmin NOTIFY minimumXChanged) Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged) Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged) Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged) Q_PROPERTY(bool active READ active NOTIFY activeChanged) public: QSGPinch(); QSGItem *target() const { return m_target; } void setTarget(QSGItem *target) { if (target == m_target) return; m_target = target; emit targetChanged(); } void resetTarget() { if (!m_target) return; m_target = 0; emit targetChanged(); } qreal minimumScale() const { return m_minScale; } void setMinimumScale(qreal s) { if (s == m_minScale) return; m_minScale = s; emit minimumScaleChanged(); } qreal maximumScale() const { return m_maxScale; } void setMaximumScale(qreal s) { if (s == m_maxScale) return; m_maxScale = s; emit maximumScaleChanged(); } qreal minimumRotation() const { return m_minRotation; } void setMinimumRotation(qreal r) { if (r == m_minRotation) return; m_minRotation = r; emit minimumRotationChanged(); } qreal maximumRotation() const { return m_maxRotation; } void setMaximumRotation(qreal r) { if (r == m_maxRotation) return; m_maxRotation = r; emit maximumRotationChanged(); } enum Axis { NoDrag=0x00, XAxis=0x01, YAxis=0x02, XandYAxis=0x03 }; Axis axis() const { return m_axis; } void setAxis(Axis a) { if (a == m_axis) return; m_axis = a; emit dragAxisChanged(); } qreal xmin() const { return m_xmin; } void setXmin(qreal x) { if (x == m_xmin) return; m_xmin = x; emit minimumXChanged(); } qreal xmax() const { return m_xmax; } void setXmax(qreal x) { if (x == m_xmax) return; m_xmax = x; emit maximumXChanged(); } qreal ymin() const { return m_ymin; } void setYmin(qreal y) { if (y == m_ymin) return; m_ymin = y; emit minimumYChanged(); } qreal ymax() const { return m_ymax; } void setYmax(qreal y) { if (y == m_ymax) return; m_ymax = y; emit maximumYChanged(); } bool active() const { return m_active; } void setActive(bool a) { if (a == m_active) return; m_active = a; emit activeChanged(); } signals: void targetChanged(); void minimumScaleChanged(); void maximumScaleChanged(); void minimumRotationChanged(); void maximumRotationChanged(); void dragAxisChanged(); void minimumXChanged(); void maximumXChanged(); void minimumYChanged(); void maximumYChanged(); void activeChanged(); private: QSGItem *m_target; qreal m_minScale; qreal m_maxScale; qreal m_minRotation; qreal m_maxRotation; Axis m_axis; qreal m_xmin; qreal m_xmax; qreal m_ymin; qreal m_ymax; bool m_active; }; class Q_AUTOTEST_EXPORT QSGPinchEvent : public QObject { Q_OBJECT Q_PROPERTY(QPointF center READ center) Q_PROPERTY(QPointF startCenter READ startCenter) Q_PROPERTY(QPointF previousCenter READ previousCenter) Q_PROPERTY(qreal scale READ scale) Q_PROPERTY(qreal previousScale READ previousScale) Q_PROPERTY(qreal angle READ angle) Q_PROPERTY(qreal previousAngle READ previousAngle) Q_PROPERTY(qreal rotation READ rotation) Q_PROPERTY(QPointF point1 READ point1) Q_PROPERTY(QPointF startPoint1 READ startPoint1) Q_PROPERTY(QPointF point2 READ point2) Q_PROPERTY(QPointF startPoint2 READ startPoint2) Q_PROPERTY(int pointCount READ pointCount) Q_PROPERTY(bool accepted READ accepted WRITE setAccepted) public: QSGPinchEvent(QPointF c, qreal s, qreal a, qreal r) : QObject(), m_center(c), m_scale(s), m_angle(a), m_rotation(r) , m_pointCount(0), m_accepted(true) {} QPointF center() const { return m_center; } QPointF startCenter() const { return m_startCenter; } void setStartCenter(QPointF c) { m_startCenter = c; } QPointF previousCenter() const { return m_lastCenter; } void setPreviousCenter(QPointF c) { m_lastCenter = c; } qreal scale() const { return m_scale; } qreal previousScale() const { return m_lastScale; } void setPreviousScale(qreal s) { m_lastScale = s; } qreal angle() const { return m_angle; } qreal previousAngle() const { return m_lastAngle; } void setPreviousAngle(qreal a) { m_lastAngle = a; } qreal rotation() const { return m_rotation; } QPointF point1() const { return m_point1; } void setPoint1(QPointF p) { m_point1 = p; } QPointF startPoint1() const { return m_startPoint1; } void setStartPoint1(QPointF p) { m_startPoint1 = p; } QPointF point2() const { return m_point2; } void setPoint2(QPointF p) { m_point2 = p; } QPointF startPoint2() const { return m_startPoint2; } void setStartPoint2(QPointF p) { m_startPoint2 = p; } int pointCount() const { return m_pointCount; } void setPointCount(int count) { m_pointCount = count; } bool accepted() const { return m_accepted; } void setAccepted(bool a) { m_accepted = a; } private: QPointF m_center; QPointF m_startCenter; QPointF m_lastCenter; qreal m_scale; qreal m_lastScale; qreal m_angle; qreal m_lastAngle; qreal m_rotation; QPointF m_point1; QPointF m_point2; QPointF m_startPoint1; QPointF m_startPoint2; int m_pointCount; bool m_accepted; }; class QSGMouseEvent; class QSGPinchAreaPrivate; class Q_AUTOTEST_EXPORT QSGPinchArea : public QSGItem { Q_OBJECT Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(QSGPinch *pinch READ pinch CONSTANT) public: QSGPinchArea(QSGItem *parent=0); ~QSGPinchArea(); bool isEnabled() const; void setEnabled(bool); QSGPinch *pinch(); Q_SIGNALS: void enabledChanged(); void pinchStarted(QSGPinchEvent *pinch); void pinchUpdated(QSGPinchEvent *pinch); void pinchFinished(QSGPinchEvent *pinch); protected: virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseUngrabEvent(); virtual bool sendMouseEvent(QGraphicsSceneMouseEvent *event); virtual bool childMouseEventFilter(QSGItem *i, QEvent *e); virtual void touchEvent(QTouchEvent *event); virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); virtual void itemChange(ItemChange change, const ItemChangeData& value); private: void updatePinch(); void handlePress(); void handleRelease(); private: Q_DISABLE_COPY(QSGPinchArea) Q_DECLARE_PRIVATE(QSGPinchArea) }; QT_END_NAMESPACE QML_DECLARE_TYPE(QSGPinch) QML_DECLARE_TYPE(QSGPinchEvent) QML_DECLARE_TYPE(QSGPinchArea) QT_END_HEADER #endif // QSGPINCHAREA_H