QmlDesigner: Cache last image in 3D view and add busy indicator

This patch caches the last image from a document/model.
The result ist that when reopening a file in the 3D editor
the user sees immediately something.
Since the view is not interactive, yet, we show a busy indicator
until the view is fully initialized.

Change-Id: I26c8b0ea69f98ceb41580624c51d48d1e633ab80
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Thomas Hartmann
2022-02-09 18:49:40 +01:00
parent 250f4fb72f
commit 52e3f2cd5f
5 changed files with 159 additions and 6 deletions

View File

@@ -110,6 +110,10 @@ void Edit3DView::renderImage3DChanged(const QImage &img)
// Notify puppet to resize if received image wasn't correct size
if (img.size() != canvasSize())
edit3DViewResized(canvasSize());
if (edit3DWidget()->canvas()->busyIndicator()->isVisible()) {
edit3DWidget()->canvas()->setOpacity(1.0);
edit3DWidget()->canvas()->busyIndicator()->hide();
}
}
void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
@@ -195,13 +199,19 @@ void Edit3DView::modelAttached(Model *model)
AbstractView::modelAttached(model);
checkImports();
auto cachedImage = m_canvasCache.take(model);
if (cachedImage) {
edit3DWidget()->canvas()->updateRenderImage(*cachedImage);
edit3DWidget()->canvas()->setOpacity(0.5);
}
edit3DWidget()->canvas()->busyIndicator()->show();
}
void Edit3DView::modelAboutToBeDetached(Model *model)
{
Q_UNUSED(model)
// Hide the canvas when model is detached (i.e. changing documents)
m_canvasCache.insert(model, edit3DWidget()->canvas()->renderImage());
edit3DWidget()->showCanvas(false);
AbstractView::modelAboutToBeDetached(model);