forked from qt-creator/qt-creator
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:
@@ -199,24 +199,17 @@ 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));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
originalPixmap.load(imageSource);
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user