diff options
author | Mike Krus <mike.krus@kdab.com> | 2020-06-25 16:02:02 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2020-07-01 16:59:16 +0100 |
commit | 253013fd76d1caf89d2fd7a3f6334a1eae7f75ba (patch) | |
tree | 13d5eeaf970b98e3dec1ac2f50cc17568590c7c1 /src/core | |
parent | 7d836129bc3fa502e3480c47ba04608c8e8ca708 (diff) |
Input Aspect: Dispatch events directly
Rather than accumulating events during a frame, they are now directly
delivered to the device handlers synchronously.
This removes the need to use jobs for updating the nodes.
Updating axis and logical devices remains done using jobs at every
frame.
Change-Id: I2853a72cfe68201d8a6eb44d37bc64c9f50efd4f
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/services/qeventfilterservice.cpp | 23 | ||||
-rw-r--r-- | src/core/services/qeventfilterservice_p.h | 3 |
2 files changed, 17 insertions, 9 deletions
diff --git a/src/core/services/qeventfilterservice.cpp b/src/core/services/qeventfilterservice.cpp index 036bcd7b4..2a6425fdd 100644 --- a/src/core/services/qeventfilterservice.cpp +++ b/src/core/services/qeventfilterservice.cpp @@ -40,6 +40,7 @@ #include "qeventfilterservice_p.h" #include <QtCore/QObject> +#include <QtGui/QHoverEvent> #include <Qt3DCore/private/qabstractserviceprovider_p.h> @@ -108,8 +109,13 @@ public: } } - QScopedPointer<InternalEventListener> m_eventDispatcher; + std::unique_ptr<InternalEventListener> m_eventDispatcher; std::vector<FilterPriorityPair> m_eventFilters; + std::vector<std::pair<QObject*, QMouseEvent>> m_pendingMouseEvents; + std::vector<std::pair<QObject*, QKeyEvent>> m_pendingKeyEvents; +#if QT_CONFIG(wheelevent) + std::vector<std::pair<QObject*, QWheelEvent>> m_pendingWheelEvents; +#endif }; /* !\internal @@ -141,15 +147,15 @@ void QEventFilterService::initialize(QObject *eventSource) d->m_eventDispatcher.reset(); } else { d->m_eventDispatcher.reset(new InternalEventListener(d)); - eventSource->installEventFilter(d->m_eventDispatcher.data()); + eventSource->installEventFilter(d->m_eventDispatcher.get()); } } void QEventFilterService::shutdown(QObject *eventSource) { Q_D(QEventFilterService); - if (eventSource && d->m_eventDispatcher.data()) - eventSource->removeEventFilter(d->m_eventDispatcher.data()); + if (eventSource && d->m_eventDispatcher.get()) + eventSource->removeEventFilter(d->m_eventDispatcher.get()); } void QEventFilterService::registerEventFilter(QObject *eventFilter, int priority) @@ -164,11 +170,11 @@ void QEventFilterService::unregisterEventFilter(QObject *eventFilter) d->unregisterEventFilter(eventFilter); } -namespace{ +namespace { InternalEventListener::InternalEventListener(QEventFilterServicePrivate *filterService, QObject *parent) - : QObject(parent), - m_filterService(filterService) + : QObject(parent) + , m_filterService(filterService) { } @@ -181,7 +187,8 @@ bool InternalEventListener::eventFilter(QObject *obj, QEvent *e) } return false; } -} + +} // namespace } // Qt3DCore diff --git a/src/core/services/qeventfilterservice_p.h b/src/core/services/qeventfilterservice_p.h index 7efe51df4..5667d1012 100644 --- a/src/core/services/qeventfilterservice_p.h +++ b/src/core/services/qeventfilterservice_p.h @@ -52,9 +52,10 @@ // #include <Qt3DCore/qt3dcore_global.h> - #include <Qt3DCore/private/qservicelocator_p.h> +#include <vector> + QT_BEGIN_NAMESPACE namespace Qt3DCore { |