1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the QtGui module of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** Commercial License Usage
10
** Licensees holding valid commercial Qt licenses may use this file in
11
** accordance with the commercial license agreement provided with the
12
** Software or, alternatively, in accordance with the terms contained in
13
** a written agreement between you and Digia. For licensing terms and
14
** conditions see http://qt.digia.com/licensing. For further information
15
** use the contact form at http://qt.digia.com/contact-us.
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 2.1 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 2.1 requirements
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25
** In addition, as a special exception, Digia gives you certain additional
26
** rights. These rights are described in the Digia Qt LGPL Exception
27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29
** GNU General Public License Usage
30
** Alternatively, this file may be used under the terms of the GNU
31
** General Public License version 3.0 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file. Please review the following information to
34
** ensure the GNU General Public License version 3.0 requirements will be
35
** met: http://www.gnu.org/copyleft/gpl.html.
40
****************************************************************************/
42
#ifndef QGESTUREMANAGER_P_H
43
#define QGESTUREMANAGER_P_H
49
// This file is not part of the Qt API. It exists for the convenience
50
// of other Qt classes. This header file may change from version to
51
// version without notice, or even be removed.
57
#include "qbasictimer.h"
58
#include "private/qwidget_p.h"
59
#include "qgesturerecognizer.h"
61
#ifndef QT_NO_GESTURES
66
class QGraphicsObject;
67
class QGestureManager : public QObject
71
QGestureManager(QObject *parent);
74
Qt::GestureType registerGestureRecognizer(QGestureRecognizer *recognizer);
75
void unregisterGestureRecognizer(Qt::GestureType type);
77
bool filterEvent(QWidget *receiver, QEvent *event);
78
bool filterEvent(QObject *receiver, QEvent *event);
79
#ifndef QT_NO_GRAPHICSVIEW
80
bool filterEvent(QGraphicsObject *receiver, QEvent *event);
81
#endif //QT_NO_GRAPHICSVIEW
83
static QGestureManager* instance(); // declared in qapplication.cpp
85
void cleanupCachedGestures(QObject *target, Qt::GestureType type);
87
void recycle(QGesture *gesture);
90
bool filterEventThroughContexts(const QMultiMap<QObject *, Qt::GestureType> &contexts,
94
QMultiMap<Qt::GestureType, QGestureRecognizer *> m_recognizers;
96
QSet<QGesture *> m_activeGestures;
97
QSet<QGesture *> m_maybeGestures;
102
MaybeGesture // this means timers are up and waiting for some
103
// more events, and input events are handled by
104
// gesture recognizer explicitly
110
Qt::GestureType gesture;
112
ObjectGesture(QObject *o, const Qt::GestureType &g) : object(o), gesture(g) { }
113
inline bool operator<(const ObjectGesture &rhs) const
115
if (object < rhs.object)
117
if (object == rhs.object)
118
return gesture < rhs.gesture;
123
QMap<ObjectGesture, QList<QGesture *> > m_objectGestures;
124
QHash<QGesture *, QGestureRecognizer *> m_gestureToRecognizer;
125
QHash<QGesture *, QObject *> m_gestureOwners;
127
QHash<QGesture *, QWidget *> m_gestureTargets;
129
int m_lastCustomGestureId;
131
QHash<QGestureRecognizer *, QSet<QGesture *> > m_obsoleteGestures;
132
QHash<QGesture *, QGestureRecognizer *> m_deletedRecognizers;
133
QSet<QGesture *> m_gesturesToDelete;
134
void cleanupGesturesForRemovedRecognizer(QGesture *gesture);
136
QGesture *getState(QObject *widget, QGestureRecognizer *recognizer,
137
Qt::GestureType gesture);
138
void deliverEvents(const QSet<QGesture *> &gestures,
139
QSet<QGesture *> *undeliveredGestures);
140
void getGestureTargets(const QSet<QGesture*> &gestures,
141
QHash<QWidget *, QList<QGesture *> > *conflicts,
142
QHash<QWidget *, QList<QGesture *> > *normal);
144
void cancelGesturesForChildren(QGesture *originatingGesture);
149
#endif // QT_NO_GESTURES
151
#endif // QGESTUREMANAGER_P_H