diff options
Diffstat (limited to 'src/plugins/qmldesigner')
12 files changed, 62 insertions, 86 deletions
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp index 8b0a2cda8a..390eca6365 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp @@ -50,31 +50,17 @@ namespace QmlDesigner { -namespace { -ProjectExplorer::Target *activeTarget(ProjectExplorer::Project *project) -{ - if (project) - return project->activeTarget(); - - return {}; -} -} // namespace - -class ImageCacheData +class AssetsLibraryView::ImageCacheData { public: Sqlite::Database database{Utils::PathString{ - Core::ICore::cacheResourcePath("imagecache-v2.db").toString()}, + Core::ICore::cacheResourcePath("fontimagecache.db").toString()}, Sqlite::JournalMode::Wal, Sqlite::LockingMode::Normal}; ImageCacheStorage<Sqlite::Database> storage{database}; - ImageCacheConnectionManager connectionManager; - ImageCacheCollector collector{connectionManager}; ImageCacheFontCollector fontCollector; - ImageCacheGenerator generator{collector, storage}; ImageCacheGenerator fontGenerator{fontCollector, storage}; TimeStampProvider timeStampProvider; - AsynchronousImageCache cache{storage, generator, timeStampProvider}; AsynchronousImageCache asynchronousFontImageCache{storage, fontGenerator, timeStampProvider}; SynchronousImageCache synchronousFontImageCache{storage, timeStampProvider, fontCollector}; }; @@ -94,9 +80,8 @@ bool AssetsLibraryView::hasWidget() const WidgetInfo AssetsLibraryView::widgetInfo() { if (m_widget.isNull()) { - m_widget = new AssetsLibraryWidget{imageCacheData()->cache, - imageCacheData()->asynchronousFontImageCache, - imageCacheData()->synchronousFontImageCache}; + m_widget = new AssetsLibraryWidget{imageCacheData()->asynchronousFontImageCache, + imageCacheData()->synchronousFontImageCache}; } return createWidgetInfo(m_widget.data(), @@ -133,49 +118,18 @@ void AssetsLibraryView::setResourcePath(const QString &resourcePath) m_lastResourcePath = resourcePath; if (m_widget.isNull()) { - m_widget = new AssetsLibraryWidget{m_imageCacheData->cache, - m_imageCacheData->asynchronousFontImageCache, - m_imageCacheData->synchronousFontImageCache}; + m_widget = new AssetsLibraryWidget{imageCacheData()->asynchronousFontImageCache, + imageCacheData()->synchronousFontImageCache}; } m_widget->setResourcePath(resourcePath); } -ImageCacheData *AssetsLibraryView::imageCacheData() +AssetsLibraryView::ImageCacheData *AssetsLibraryView::imageCacheData() { - std::call_once(imageCacheFlag, [this]() { - m_imageCacheData = std::make_unique<ImageCacheData>(); - auto setTargetInImageCache = - [imageCacheData = m_imageCacheData.get()](ProjectExplorer::Target *target) { - if (target == imageCacheData->collector.target()) - return; - - if (target) - imageCacheData->cache.clean(); - - imageCacheData->collector.setTarget(target); - }; - - if (auto project = ProjectExplorer::SessionManager::startupProject(); project) { - m_imageCacheData->collector.setTarget(project->activeTarget()); - connect(project, - &ProjectExplorer::Project::activeTargetChanged, - this, - setTargetInImageCache); - } - connect(ProjectExplorer::SessionManager::instance(), - &ProjectExplorer::SessionManager::startupProjectChanged, - this, - [=](ProjectExplorer::Project *project) { - setTargetInImageCache(activeTarget(project)); - }); - }); + std::call_once(imageCacheFlag, + [this]() { m_imageCacheData = std::make_unique<ImageCacheData>(); }); return m_imageCacheData.get(); } -AsynchronousImageCache &AssetsLibraryView::imageCache() -{ - return imageCacheData()->cache; -} - } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h index ae623a183b..743d0bb30e 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h @@ -34,7 +34,6 @@ namespace QmlDesigner { class AssetsLibraryWidget; -class ImageCacheData; class AsynchronousImageCache; class AssetsLibraryView : public AbstractView @@ -54,9 +53,8 @@ public: void setResourcePath(const QString &resourcePath); - AsynchronousImageCache &imageCache(); - private: + class ImageCacheData; ImageCacheData *imageCacheData(); std::once_flag imageCacheFlag; diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp index 1b6c4f64fb..162fadcf78 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp @@ -110,16 +110,14 @@ bool AssetsLibraryWidget::eventFilter(QObject *obj, QEvent *event) return QObject::eventFilter(obj, event); } -AssetsLibraryWidget::AssetsLibraryWidget(AsynchronousImageCache &imageCache, - AsynchronousImageCache &asynchronousFontImageCache, - SynchronousImageCache &synchronousFontImageCache) +AssetsLibraryWidget::AssetsLibraryWidget(AsynchronousImageCache &asynchronousFontImageCache, + SynchronousImageCache &synchronousFontImageCache) : m_itemIconSize(24, 24) , m_fontImageCache(synchronousFontImageCache) , m_assetsIconProvider(new AssetsLibraryIconProvider(synchronousFontImageCache)) , m_fileSystemWatcher(new Utils::FileSystemWatcher(this)) , m_assetsModel(new AssetsLibraryModel(m_fileSystemWatcher, this)) , m_assetsWidget(new QQuickWidget(this)) - , m_imageCache{imageCache} { m_assetCompressionTimer.setInterval(200); m_assetCompressionTimer.setSingleShot(true); diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h index abf91c3a8c..3128b823b3 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h @@ -60,8 +60,7 @@ class AssetsLibraryWidget : public QFrame Q_OBJECT public: - AssetsLibraryWidget(AsynchronousImageCache &imageCache, - AsynchronousImageCache &asynchronousFontImageCache, + AssetsLibraryWidget(AsynchronousImageCache &asynchronousFontImageCache, SynchronousImageCache &synchronousFontImageCache); ~AssetsLibraryWidget(); @@ -110,7 +109,6 @@ private: std::unique_ptr<PreviewTooltipBackend> m_fontPreviewTooltipBackend; QShortcut *m_qmlSourceUpdateShortcut = nullptr; - AsynchronousImageCache &m_imageCache; QPointer<Model> m_model; QStringList m_assetsToDrag; bool m_updateRetry = false; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 6596a10b4a..9267e36793 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -62,7 +62,7 @@ ProjectExplorer::Target *activeTarget(ProjectExplorer::Project *project) } } // namespace -class ImageCacheData +class ItemLibraryView::ImageCacheData { public: Sqlite::Database database{Utils::PathString{ @@ -71,7 +71,7 @@ public: Sqlite::LockingMode::Normal}; ImageCacheStorage<Sqlite::Database> storage{database}; ImageCacheConnectionManager connectionManager; - ImageCacheCollector collector{connectionManager}; + ImageCacheCollector collector{connectionManager, QSize{300, 300}, QSize{600, 600}}; ImageCacheFontCollector fontCollector; ImageCacheGenerator generator{collector, storage}; ImageCacheGenerator fontGenerator{fontCollector, storage}; @@ -182,7 +182,7 @@ void ItemLibraryView::usedImportsChanged(const QList<Import> &usedImports) m_widget->updateUsedImports(usedImports); } -ImageCacheData *ItemLibraryView::imageCacheData() +ItemLibraryView::ImageCacheData *ItemLibraryView::imageCacheData() { std::call_once(imageCacheFlag, [this]() { m_imageCacheData = std::make_unique<ImageCacheData>(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h index 8d85383d5d..b7b91eaf3f 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h @@ -34,7 +34,6 @@ namespace QmlDesigner { class ItemLibraryWidget; -class ImageCacheData; class AsynchronousImageCache; class ItemLibraryView : public AbstractView @@ -65,6 +64,7 @@ protected: void updateImports(); private: + class ImageCacheData; ImageCacheData *imageCacheData(); std::once_flag imageCacheFlag; diff --git a/src/plugins/qmldesigner/components/previewtooltip/previewimagetooltip.cpp b/src/plugins/qmldesigner/components/previewtooltip/previewimagetooltip.cpp index 3b70d79fd1..1e418642f2 100644 --- a/src/plugins/qmldesigner/components/previewtooltip/previewimagetooltip.cpp +++ b/src/plugins/qmldesigner/components/previewtooltip/previewimagetooltip.cpp @@ -68,7 +68,8 @@ void PreviewImageTooltip::setImage(const QImage &image, bool scale) if (scale) { m_ui->imageLabel->setPixmap(pm.scaled(m_ui->imageLabel->width(), m_ui->imageLabel->height(), - Qt::KeepAspectRatio)); + Qt::KeepAspectRatio, + Qt::SmoothTransformation)); } else { m_ui->imageLabel->setPixmap(pm); } diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp index f5164a9721..530724315a 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp @@ -61,8 +61,12 @@ QString fileToString(const QString &filename) } // namespace ImageCacheCollector::ImageCacheCollector(ImageCacheConnectionManager &connectionManager, + QSize captureImageMinimumSize, + QSize captureImageMaximumSize, ImageCacheCollectorNullImageHandling nullImageHandling) : m_connectionManager{connectionManager} + , captureImageMinimumSize{captureImageMinimumSize} + , captureImageMaximumSize{captureImageMaximumSize} , nullImageHandling{nullImageHandling} {} @@ -76,6 +80,8 @@ void ImageCacheCollector::start(Utils::SmallStringView name, { RewriterView rewriterView{RewriterView::Amend, nullptr}; NodeInstanceView nodeInstanceView{m_connectionManager}; + nodeInstanceView.setCaptureImageMinimumAndMaximumSize(captureImageMinimumSize, + captureImageMaximumSize); const QString filePath{name}; std::unique_ptr<Model> model{QmlDesigner::Model::create("QtQuick/Item", 2, 1)}; @@ -107,7 +113,10 @@ void ImageCacheCollector::start(Utils::SmallStringView name, || !image.isNull()) { QSize smallImageSize = image.size().scaled(QSize{96, 96}.boundedTo(image.size()), Qt::KeepAspectRatio); - QImage smallImage = image.isNull() ? QImage{} : image.scaled(smallImageSize); + QImage smallImage = image.isNull() ? QImage{} + : image.scaled(smallImageSize, + Qt::IgnoreAspectRatio, + Qt::SmoothTransformation); captureCallback(image, smallImage); } }; diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h index 2e2803114a..465e2d4d3f 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h @@ -51,6 +51,8 @@ class ImageCacheCollector final : public ImageCacheCollectorInterface { public: ImageCacheCollector(ImageCacheConnectionManager &connectionManager, + QSize captureImageMinimumSize, + QSize captureImageMaximumSize, ImageCacheCollectorNullImageHandling nullImageHandling = {}); ~ImageCacheCollector(); @@ -75,6 +77,8 @@ public: private: ImageCacheConnectionManager &m_connectionManager; QPointer<ProjectExplorer::Target> m_target; + QSize captureImageMinimumSize; + QSize captureImageMaximumSize; ImageCacheCollectorNullImageHandling nullImageHandling{}; }; diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 3281026f52..62efb225d4 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -161,6 +161,13 @@ public: m_crashCallback = std::move(crashCallback); } + void setCaptureImageMinimumAndMaximumSize(QSize captureImageMinimumSize, + QSize captureImageMaximumSize) + { + m_captureImageMinimumSize = captureImageMinimumSize; + m_captureImageMaximumSize = captureImageMaximumSize; + } + void startNanotrace(); void endNanotrace(); @@ -293,6 +300,8 @@ private: QHash<QString, QStringList> m_qsbPathToFilterMap; int m_remainingQsbTargets = 0; QTimer m_rotBlockTimer; + QSize m_captureImageMinimumSize{150, 150}; + QSize m_captureImageMaximumSize{1000, 1000}; }; } // namespace ProxyNodeInstanceView diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 018ef55659..8dbe236ca0 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1138,24 +1138,27 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand() if (stateNode.isValid() && stateNode.metaInfo().isSubclassOf("QtQuick.State", 1, 0)) stateInstanceId = stateNode.internalId(); - return CreateSceneCommand(instanceContainerList, - reparentContainerList, - idContainerList, - valueContainerList, - bindingContainerList, - auxiliaryContainerVector, - importVector, - mockupTypesVector, - model()->fileUrl(), + return CreateSceneCommand( + instanceContainerList, + reparentContainerList, + idContainerList, + valueContainerList, + bindingContainerList, + auxiliaryContainerVector, + importVector, + mockupTypesVector, + model()->fileUrl(), #ifndef QMLDESIGNER_TEST - QUrl::fromLocalFile(QmlDesigner::DocumentManager::currentResourcePath() - .toFileInfo().absoluteFilePath()), + QUrl::fromLocalFile( + QmlDesigner::DocumentManager::currentResourcePath().toFileInfo().absoluteFilePath()), #else - QUrl::fromLocalFile(QFileInfo(model()->fileUrl().toLocalFile()).absolutePath()), + QUrl::fromLocalFile(QFileInfo(model()->fileUrl().toLocalFile()).absolutePath()), #endif - m_edit3DToolStates[model()->fileUrl()], - lastUsedLanguage, - stateInstanceId); + m_edit3DToolStates[model()->fileUrl()], + lastUsedLanguage, + m_captureImageMinimumSize, + m_captureImageMaximumSize, + stateInstanceId); } ClearSceneCommand NodeInstanceView::createClearSceneCommand() const diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp index e9de2cb251..538c3939f2 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp @@ -108,6 +108,8 @@ public: {} ImageCacheConnectionManager connectionManager; ImageCacheCollector collector{connectionManager, + QSize{300, 300}, + QSize{1000, 1000}, ImageCacheCollectorNullImageHandling::DontCaptureNullImage}; TimeStampProvider timeStampProvider; AsynchronousImageFactory factory; |