diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-02-07 12:20:32 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-02-08 09:24:56 +0000 |
commit | 9dd64ef2b09f13e8c63b3016ac314eeb63e43d35 (patch) | |
tree | 3d2457b5ee45533e1d9c44c65e2126d1f26d61dd /src/imports/studio3d/q3dsstudio3ditem.cpp | |
parent | ec78d0df4fa72ac4f964cb289b2d1234a6108e02 (diff) |
Add basic public API structure
Say hello to Q3DSPresentation / Presentation in QML. While the internals
are quite different from 3DS1, we can now start providing an API very
close to the old runtime.
Change-Id: I425bd869fbe00b8af7b5166fdab17f4d91a7764b
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/imports/studio3d/q3dsstudio3ditem.cpp')
-rw-r--r-- | src/imports/studio3d/q3dsstudio3ditem.cpp | 80 |
1 files changed, 73 insertions, 7 deletions
diff --git a/src/imports/studio3d/q3dsstudio3ditem.cpp b/src/imports/studio3d/q3dsstudio3ditem.cpp index 398de1a..d6a21fe 100644 --- a/src/imports/studio3d/q3dsstudio3ditem.cpp +++ b/src/imports/studio3d/q3dsstudio3ditem.cpp @@ -30,6 +30,7 @@ #include "q3dsstudio3ditem_p.h" #include "q3dsstudio3drenderer_p.h" #include "q3dsstudio3dnode_p.h" +#include "q3dspresentationitem_p.h" #include <QSGNode> #include <QLoggingCategory> #include <QThread> @@ -62,27 +63,48 @@ Q3DSStudio3DItem::~Q3DSStudio3DItem() { } -QUrl Q3DSStudio3DItem::source() const +Q3DSPresentationItem *Q3DSStudio3DItem::presentation() const { - return m_source; + return m_presentation; } -void Q3DSStudio3DItem::setSource(const QUrl &newSource) +void Q3DSStudio3DItem::componentComplete() { - if (m_source == newSource) + const auto childObjs = children(); + for (QObject *child : childObjs) { + if (Q3DSPresentationItem *presentation = qobject_cast<Q3DSPresentationItem *>(child)) { + if (m_presentation) + qWarning("Studio3D: Duplicate Presentation"); + else + m_presentation = presentation; + } + } + + if (!m_presentation) + m_presentation = new Q3DSPresentationItem(this); + + Q3DSPresentationPrivate::get(m_presentation)->setController(this); + + QQuickItem::componentComplete(); +} + +void Q3DSStudio3DItem::handlePresentationSource(const QUrl &source) +{ + if (source == m_source) return; + m_source = source; + if (!m_source.isEmpty()) releaseEngineAndRenderer(); - m_source = newSource; - emit sourceChanged(); + m_source = source; if (window()) // else defer to itemChange() createEngine(); } -void Q3DSStudio3DItem::reload() +void Q3DSStudio3DItem::handlePresentationReload() { if (m_source.isEmpty()) return; @@ -93,6 +115,50 @@ void Q3DSStudio3DItem::reload() createEngine(); } +void Q3DSStudio3DItem::handlePresentationKeyPressEvent(QKeyEvent *e) +{ + if (m_engine) + m_engine->handleKeyPressEvent(e); +} + +void Q3DSStudio3DItem::handlePresentationKeyReleaseEvent(QKeyEvent *e) +{ + if (m_engine) + m_engine->handleKeyReleaseEvent(e); +} + +void Q3DSStudio3DItem::handlePresentationMousePressEvent(QMouseEvent *e) +{ + if (m_engine) + m_engine->handleMousePressEvent(e); +} + +void Q3DSStudio3DItem::handlePresentationMouseMoveEvent(QMouseEvent *e) +{ + if (m_engine) + m_engine->handleMouseMoveEvent(e); +} + +void Q3DSStudio3DItem::handlePresentationMouseReleaseEvent(QMouseEvent *e) +{ + if (m_engine) + m_engine->handleMouseReleaseEvent(e); +} + +void Q3DSStudio3DItem::handlePresentationMouseDoubleClickEvent(QMouseEvent *e) +{ + if (m_engine) + m_engine->handleMouseDoubleClickEvent(e); +} + +#if QT_CONFIG(wheelevent) +void Q3DSStudio3DItem::handlePresentationWheelEvent(QWheelEvent *e) +{ + if (m_engine) + m_engine->handleWheelEvent(e); +} +#endif + void Q3DSStudio3DItem::createEngine() { // note: cannot have an engine without the source set |