summaryrefslogtreecommitdiffstats
path: root/src/render/frontend
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2020-06-29 15:31:03 +0100
committerMike Krus <mike.krus@kdab.com>2020-06-30 17:27:15 +0100
commit644d060d9ad4366bc1a7e8635c13dbd713791870 (patch)
tree5ff58e31edb2495c3650f6c16a7bef94f5ed5d28 /src/render/frontend
parent4a2ca889fa67a364c83e83ab931d0df0d41188e6 (diff)
Render aspect: Dispatch events directly
Events now delivered directly to the input aspect which dispatches them appropriately. The picking job still accumulates events within a frame. However, this opens the door to synchronous picking and event propagation control later on. Change-Id: Ic525bdce4e3d30455558fce9e385331364e49026 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/frontend')
-rw-r--r--src/render/frontend/qrenderaspect.cpp31
-rw-r--r--src/render/frontend/qrenderaspect_p.h3
2 files changed, 27 insertions, 7 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index d22edafa7..c0db60eca 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -305,7 +305,7 @@ QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::SubmissionType submiss
, m_syncLoadingJobs(CreateSynchronizerJobPtr([] {}, Render::JobTypes::SyncLoadingJobs))
, m_pickBoundingVolumeJob(Render::PickBoundingVolumeJobPtr::create())
, m_rayCastingJob(Render::RayCastingJobPtr::create())
- , m_pickEventFilter(new Render::PickEventFilter())
+ , m_pickEventFilter(new Render::PickEventFilter(this))
, m_submissionType(submissionType)
{
m_instances.append(this);
@@ -900,10 +900,6 @@ QVector<QAspectJobPtr> QRenderAspectPrivate::createPreRendererJobs() const
if (!m_renderer)
return {};
- const auto frameMouseEvents = m_pickEventFilter->pendingMouseEvents();
- const auto frameKeyEvents = m_pickEventFilter->pendingKeyEvents();
- m_renderer->setPendingEvents(frameMouseEvents, frameKeyEvents);
-
auto jobs = m_renderer->preRenderingJobs();
// Set values on picking jobs
@@ -911,8 +907,6 @@ QVector<QAspectJobPtr> QRenderAspectPrivate::createPreRendererJobs() const
if (renderSetting != nullptr) {
m_pickBoundingVolumeJob->setRenderSettings(renderSetting);
m_pickBoundingVolumeJob->setFrameGraphRoot(m_renderer->frameGraphRoot());
- m_pickBoundingVolumeJob->setMouseEvents(frameMouseEvents);
- m_pickBoundingVolumeJob->setKeyEvents(frameKeyEvents);
m_rayCastingJob->setRenderSettings(renderSetting);
m_rayCastingJob->setFrameGraphRoot(m_renderer->frameGraphRoot());
@@ -955,6 +949,29 @@ Render::AbstractRenderer *QRenderAspectPrivate::loadRendererPlugin()
return nullptr;
}
+bool QRenderAspectPrivate::processMouseEvent(QObject *obj, QMouseEvent *event)
+{
+ Render::RenderSettings *renderSetting = m_renderer->settings();
+ if (!renderSetting)
+ return false;
+
+ if (m_renderer->processMouseEvent(obj, event))
+ return true;
+ m_pickBoundingVolumeJob->processMouseEvent(obj, event);
+
+ return false;
+}
+
+bool QRenderAspectPrivate::processKeyEvent(QObject *obj, QKeyEvent *event)
+{
+ Q_UNUSED(obj);
+
+ if (m_renderer->processKeyEvent(obj, event))
+ return true;
+
+ return false;
+}
+
void QRenderAspectPrivate::loadRenderPlugin(const QString &pluginName)
{
Q_Q(QRenderAspect);
diff --git a/src/render/frontend/qrenderaspect_p.h b/src/render/frontend/qrenderaspect_p.h
index f3c96455a..f4dcb7234 100644
--- a/src/render/frontend/qrenderaspect_p.h
+++ b/src/render/frontend/qrenderaspect_p.h
@@ -122,6 +122,9 @@ public:
QVector<Qt3DCore::QAspectJobPtr> createRenderBufferJobs() const;
Render::AbstractRenderer *loadRendererPlugin();
+ bool processMouseEvent(QObject *obj, QMouseEvent *event);
+ bool processKeyEvent(QObject *obj, QKeyEvent *event);
+
Render::NodeManagers *m_nodeManagers;
Render::AbstractRenderer *m_renderer;