123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- /****************************************************************************
- **
- ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
- ** All rights reserved.
- ** Contact: Nokia Corporation (qt-info@nokia.com)
- **
- ** This file is part of the QtDeclarative 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 QDECLARATIVEPINCHAREA_H
- #define QDECLARATIVEPINCHAREA_H
- #include <QDeclarativeItem>
- #include <QTouchEvent>
- QT_BEGIN_HEADER
- QT_BEGIN_NAMESPACE
- QT_MODULE(Declarative)
- class QDeclarativePinch : public QObject
- {
- Q_OBJECT
- Q_ENUMS(Axis)
- Q_PROPERTY(QGraphicsObject *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:
- QDeclarativePinch();
- QGraphicsObject *target() const { return m_target; }
- void setTarget(QGraphicsObject *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:
- QGraphicsObject *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 QDeclarativePinchEvent : public QObject
- {
- Q_OBJECT
- Q_PROPERTY(QPointF center READ center)
- Q_PROPERTY(QPointF startCenter READ startCenter)
- Q_PROPERTY(QPointF lastCenter READ lastCenter)
- Q_PROPERTY(qreal scale READ scale)
- Q_PROPERTY(qreal lastScale READ lastScale)
- Q_PROPERTY(qreal angle READ angle)
- Q_PROPERTY(qreal lastAngle READ lastAngle)
- 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(bool accepted READ accepted WRITE setAccepted)
- public:
- QDeclarativePinchEvent()
- : QObject(), m_center(QPointF()), m_scale(0), m_angle(0), m_rotation(0) {}
- QDeclarativePinchEvent(QPointF c, qreal s, qreal a, qreal r)
- : QObject(), m_center(c), m_scale(s), m_angle(a), m_rotation(r) {}
- QPointF center() const { return m_center; }
- QPointF startCenter() const { return m_startCenter; }
- void setStartCenter(QPointF c) { m_startCenter = c; }
- QPointF lastCenter() const { return m_lastCenter; }
- void setLastCenter(QPointF c) { m_lastCenter = c; }
- qreal scale() const { return m_scale; }
- qreal lastScale() const { return m_lastScale; }
- void setLastScale(qreal s) { m_lastScale = s; }
- qreal angle() const { return m_angle; }
- qreal lastAngle() const { return m_lastAngle; }
- void setLastAngle(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; }
- 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;
- bool m_accepted;
- };
- class QDeclarativeMouseEvent;
- class QDeclarativePinchArea : public QDeclarativeItem
- {
- Q_OBJECT
- Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
- Q_PROPERTY(QDeclarativePinch *pinch READ pinch CONSTANT)
- public:
- QDeclarativePinchArea(QDeclarativeItem *parent=0);
- ~QDeclarativePinchArea();
- bool isEnabled() const;
- void setEnabled(bool);
- QDeclarativePinch *pinch();
- Q_SIGNALS:
- void enabledChanged();
- void pinchStarted(QDeclarativePinchEvent *pinch);
- void pinchChanged(QDeclarativePinchEvent *pinch);
- void pinchFinished(QDeclarativePinchEvent *pinch);
- protected:
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- bool sceneEvent(QEvent *);
- bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
- bool sceneEventFilter(QGraphicsItem *i, QEvent *e);
- bool event(QEvent *);
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
- virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value);
- private:
- void updatePinch();
- void handlePress();
- void handleRelease();
- private:
- Q_DISABLE_COPY(QDeclarativePinchArea)
- protected:
- bool absorb : 1;
- bool stealMouse : 1;
- bool inPinch : 1;
- bool pinchRejected : 1;
- QDeclarativePinch *pinch_;
- QPointF sceneStartPoint1;
- QPointF sceneStartPoint2;
- QPointF lastPoint1;
- QPointF lastPoint2;
- qreal pinchStartDist;
- qreal pinchStartScale;
- qreal pinchLastScale;
- qreal pinchStartRotation;
- qreal pinchStartAngle;
- qreal pinchLastAngle;
- QPointF sceneStartCenter;
- QPointF pinchStartCenter;
- QPointF sceneLastCenter;
- QPointF pinchStartPos;
- QList<QTouchEvent::TouchPoint> touchPoints;
- };
- QT_END_NAMESPACE
- QML_DECLARE_TYPE(QDeclarativePinch)
- QML_DECLARE_TYPE(QDeclarativePinchEvent)
- QML_DECLARE_TYPE(QDeclarativePinchArea)
- QT_END_HEADER
- #endif // QDECLARATIVEPINCHAREA_H
|