diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/iconrenderer/iconrenderer.cpp index 82af9150d35..2dd653273cd 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({}); - QMetaObject::invokeMethod(m_containerItem, "setSceneToBox"); - int tries = 0; - while (tries < 10) { - ++tries; - render({}); - QMetaObject::invokeMethod(m_containerItem, "fitAndHideBox"); - } + if (m_focusStep >= 10) { + QTimer::singleShot(0, this, &IconRenderer::finishCreateIcon); + return; } + + render({}); + + if (m_focusStep == 0) { + QMetaObject::invokeMethod(m_containerItem, "setSceneToBox"); + } 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 6f5e36720d0..64880249305 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;