diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2021-06-29 16:10:01 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2021-06-29 14:28:24 +0000 |
commit | 64d274454e6494bc498b7b8ec95facb88496e31c (patch) | |
tree | a63166c97004ae9d296fb3de7cfff71b451beb4e | |
parent | 89ab11d53978b3693999d437d1baf08835f08dcb (diff) |
QmlPuppet: Fix imported 3D asset library icon generation
Recent changes to custom geometry handling now require that the
zoom process in icon creation does each focus step asynchronously,
so that selection box geometry has a chance to update between frames.
Fixes: QDS-4652
Change-Id: If92bf580a556a68c10d3af1406c2eabef530254a
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp | 38 | ||||
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h | 5 |
2 files changed, 31 insertions, 12 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp index 82af9150d3..2dd653273c 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp @@ -135,7 +135,7 @@ void IconRenderer::setupRender() resizeContent(m_size); if (!initRhi()) QTimer::singleShot(0, qGuiApp, &QGuiApplication::quit); - QTimer::singleShot(0, this, &IconRenderer::createIcon); + QTimer::singleShot(0, this, &IconRenderer::startCreateIcon); } else { QTimer::singleShot(0, qGuiApp, &QGuiApplication::quit); } @@ -144,25 +144,41 @@ void IconRenderer::setupRender() } } -void IconRenderer::createIcon() +void IconRenderer::startCreateIcon() { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) m_designerSupport.refFromEffectItem(m_containerItem, false); #endif QQuickDesignerSupportItems::disableNativeTextRendering(m_containerItem); + + if (m_is3D) + QTimer::singleShot(0, this, &IconRenderer::focusCamera); + else + QTimer::singleShot(0, this, &IconRenderer::finishCreateIcon); +} + +void IconRenderer::focusCamera() +{ #ifdef QUICK3D_MODULE - if (m_is3D) { - // Render once to make sure scene is up to date before we set up the selection box - render({}); + if (m_focusStep >= 10) { + QTimer::singleShot(0, this, &IconRenderer::finishCreateIcon); + return; + } + + render({}); + + if (m_focusStep == 0) { QMetaObject::invokeMethod(m_containerItem, "setSceneToBox"); - int tries = 0; - while (tries < 10) { - ++tries; - render({}); - QMetaObject::invokeMethod(m_containerItem, "fitAndHideBox"); - } + } else if (m_focusStep > 1 && m_focusStep < 10) { + QMetaObject::invokeMethod(m_containerItem, "fitAndHideBox"); } + ++m_focusStep; + QTimer::singleShot(0, this, &IconRenderer::focusCamera); #endif +} + +void IconRenderer::finishCreateIcon() +{ QFileInfo fi(m_filePath); // Render regular size image diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h index 6f5e36720d..6488024930 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h @@ -53,7 +53,9 @@ public: void setupRender(); private: - void createIcon(); + void startCreateIcon(); + void focusCamera(); + void finishCreateIcon(); void render(const QString &fileName); void resizeContent(int dimensions); bool initRhi(); @@ -66,6 +68,7 @@ private: QQuickItem *m_containerItem = nullptr; DesignerSupport m_designerSupport; bool m_is3D = false; + int m_focusStep = 0; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QQuickRenderControl *m_renderControl = nullptr; QRhi *m_rhi = nullptr; |