summaryrefslogtreecommitdiffstats
path: root/src/imports/studio3d/q3dsstudio3ditem.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-02-07 12:20:32 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-02-08 09:24:56 +0000
commit9dd64ef2b09f13e8c63b3016ac314eeb63e43d35 (patch)
tree3d2457b5ee45533e1d9c44c65e2126d1f26d61dd /src/imports/studio3d/q3dsstudio3ditem.cpp
parentec78d0df4fa72ac4f964cb289b2d1234a6108e02 (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.cpp80
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