aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2021-06-29 16:10:01 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2021-06-29 14:28:24 +0000
commit64d274454e6494bc498b7b8ec95facb88496e31c (patch)
treea63166c97004ae9d296fb3de7cfff71b451beb4e
parent89ab11d53978b3693999d437d1baf08835f08dcb (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.cpp38
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.h5
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;