QmlDesigner: Show preview for more image and picture types

BorderImage, SafeRendererImage, and SafeRendererPicture items now show
their images in navigator preview image tooltip.

Change-Id: I52c2f2ab87b3489fdfbbabe52737c5b97b0cf3fe
Fixes: QDS-2921
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2020-10-30 14:26:33 +02:00
parent 798e0e623f
commit b0984dada3
3 changed files with 28 additions and 12 deletions

View File

@@ -199,25 +199,18 @@ void DesignerActionManager::registerAddResourceHandler(const AddResourceHandler
m_addResourceHandler.append(handler);
}
QMultiHash<TypeName, ModelNodePreviewImageHandler> DesignerActionManager::modelNodePreviewHandlers() const
{
return m_modelNodePreviewImageHandlers;
}
void DesignerActionManager::registerModelNodePreviewHandler(const ModelNodePreviewImageHandler &handler)
{
m_modelNodePreviewImageHandlers.insert(handler.type, handler);
m_modelNodePreviewImageHandlers.append(handler);
}
bool DesignerActionManager::hasModelNodePreviewHandler(const ModelNode &node) const
{
const bool isComponent = node.isComponent();
for (const auto &handler : qAsConst(m_modelNodePreviewImageHandlers)) {
if ((isComponent || !handler.componentOnly) && node.isSubclassOf(handler.type)) {
ModelNodePreviewImageHandler subClassHandler = handler;
if ((isComponent || !handler.componentOnly) && node.isSubclassOf(handler.type))
return true;
}
}
return false;
}
@@ -1413,6 +1406,15 @@ void DesignerActionManager::createDefaultModelNodePreviewImageHandlers()
registerModelNodePreviewHandler(
ModelNodePreviewImageHandler("QtQuick.Image",
ModelNodeOperations::previewImageDataForImageNode));
registerModelNodePreviewHandler(
ModelNodePreviewImageHandler("QtQuick.BorderImage",
ModelNodeOperations::previewImageDataForImageNode));
registerModelNodePreviewHandler(
ModelNodePreviewImageHandler("Qt.SafeRenderer.SafeRendererImage",
ModelNodeOperations::previewImageDataForImageNode));
registerModelNodePreviewHandler(
ModelNodePreviewImageHandler("Qt.SafeRenderer.SafeRendererPicture",
ModelNodeOperations::previewImageDataForImageNode));
registerModelNodePreviewHandler(
ModelNodePreviewImageHandler("QtQuick3D.Texture",
ModelNodeOperations::previewImageDataForImageNode));

View File

@@ -127,7 +127,6 @@ public:
QList<AddResourceHandler> addResourceHandler() const;
void registerAddResourceHandler(const AddResourceHandler &handler);
QMultiHash<TypeName, ModelNodePreviewImageHandler> modelNodePreviewHandlers() const;
void registerModelNodePreviewHandler(const ModelNodePreviewImageHandler &handler);
bool hasModelNodePreviewHandler(const ModelNode &node) const;
ModelNodePreviewImageOperation modelNodePreviewOperation(const ModelNode &node) const;
@@ -139,7 +138,7 @@ private:
QList<QSharedPointer<ActionInterface> > m_designerActions;
DesignerActionManagerView *m_designerActionManagerView;
QList<AddResourceHandler> m_addResourceHandler;
QMultiHash<TypeName, ModelNodePreviewImageHandler> m_modelNodePreviewImageHandlers;
QList<ModelNodePreviewImageHandler> m_modelNodePreviewImageHandlers;
};
} //QmlDesigner

View File

@@ -98,6 +98,8 @@
#include <QUrl>
#include <QMultiHash>
#include <QTimerEvent>
#include <QPicture>
#include <QPainter>
enum {
debug = false
@@ -1636,7 +1638,20 @@ QVariant NodeInstanceView::previewImageDataForImageNode(const ModelNode &modelNo
if (reload) {
QPixmap originalPixmap;
if (modelNode.isSubclassOf("Qt.SafeRenderer.SafeRendererPicture")) {
QPicture picture;
picture.load(imageSource);
if (!picture.isNull()) {
QImage paintImage(picture.width(), picture.height(), QImage::Format_ARGB32);
paintImage.fill(Qt::transparent);
QPainter painter(&paintImage);
painter.drawPicture(0, 0, picture);
painter.end();
originalPixmap = QPixmap::fromImage(paintImage);
}
} else {
originalPixmap.load(imageSource);
}
if (!originalPixmap.isNull()) {
const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio;
imageData.pixmap = originalPixmap.scaled(dim, dim, Qt::KeepAspectRatio);