From 0e7a1e6650538f2a00070c3a334c56c9d48cfee8 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 7 May 2020 14:13:21 +0200 Subject: [PATCH] QmlDesigner: Preview size is now changeable You can now change the preview size with rootModelNode.setAuxiliaryData("previewSize@Internal", size); If size is null it will use the bounding box size. Change-Id: Icbe747ccc5a2e26e79783825d2ed94ecc640012b Reviewed-by: Michael Winkelmann Reviewed-by: Thomas Hartmann --- .../commands/changelanguagecommand.h | 3 -- .../changepreviewimagesizecommand.cpp | 44 ++++++++++++++++ .../commands/changepreviewimagesizecommand.h | 50 +++++++++++++++++++ .../qml/qmlpuppet/commands/commands.pri | 4 +- .../instances/nodeinstanceclientproxy.cpp | 37 ++++++++------ .../instances/nodeinstanceclientproxy.h | 2 + .../interfaces/nodeinstanceserverinterface.h | 2 + .../instances/nodeinstanceserver.cpp | 7 ++- .../qml2puppet/instances/nodeinstanceserver.h | 1 + .../qt5previewnodeinstanceserver.cpp | 18 +++++-- .../instances/qt5previewnodeinstanceserver.h | 2 + .../instances/nodeinstanceserverproxy.cpp | 31 +++++++----- .../instances/nodeinstanceserverproxy.h | 1 + .../instances/nodeinstanceview.cpp | 6 ++- 14 files changed, 169 insertions(+), 39 deletions(-) create mode 100644 share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.cpp create mode 100644 share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.h diff --git a/share/qtcreator/qml/qmlpuppet/commands/changelanguagecommand.h b/share/qtcreator/qml/qmlpuppet/commands/changelanguagecommand.h index 3e82fdc3c05..d3309c2f732 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/changelanguagecommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/changelanguagecommand.h @@ -32,9 +32,6 @@ namespace QmlDesigner { class ChangeLanguageCommand { -public: - friend QDataStream &operator>>(QDataStream &in, ChangeLanguageCommand &command); - public: ChangeLanguageCommand() = default; ChangeLanguageCommand(const QString &language) diff --git a/share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.cpp new file mode 100644 index 00000000000..6515ac8339f --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.cpp @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ +#include "changepreviewimagesizecommand.h" + +namespace QmlDesigner { + +QDataStream &operator<<(QDataStream &out, const ChangePreviewImageSizeCommand &command) +{ + return out << command.size; +} + +QDataStream &operator>>(QDataStream &in, ChangePreviewImageSizeCommand &command) +{ + return in >> command.size; +} + +QDebug operator<<(QDebug debug, const ChangePreviewImageSizeCommand &command) +{ + return debug.nospace() << "ChangePreviewImageSizeCommand(" << command.size << ")"; +} + +} // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.h b/share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.h new file mode 100644 index 00000000000..98e94e13ca1 --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/commands/changepreviewimagesizecommand.h @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ +#pragma once + +#include +#include + +namespace QmlDesigner { + +class ChangePreviewImageSizeCommand +{ +public: + ChangePreviewImageSizeCommand() = default; + ChangePreviewImageSizeCommand(const QSize &size) + : size(size) + {} + + friend QDataStream &operator<<(QDataStream &out, const ChangePreviewImageSizeCommand &command); + friend QDataStream &operator>>(QDataStream &in, ChangePreviewImageSizeCommand &command); + friend QDebug operator<<(QDebug debug, const ChangePreviewImageSizeCommand &command); + +public: + QSize size; +}; + +} // namespace QmlDesigner + +Q_DECLARE_METATYPE(QmlDesigner::ChangePreviewImageSizeCommand) diff --git a/share/qtcreator/qml/qmlpuppet/commands/commands.pri b/share/qtcreator/qml/qmlpuppet/commands/commands.pri index 008ea8ff09b..dd1ae9091e6 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/commands.pri +++ b/share/qtcreator/qml/qmlpuppet/commands/commands.pri @@ -1,6 +1,7 @@ INCLUDEPATH += $$PWD/ -HEADERS += $$PWD/synchronizecommand.h +HEADERS += $$PWD/synchronizecommand.h \ +HEADERS += $$PWD/changepreviewimagesizecommand.h HEADERS += $$PWD/changelanguagecommand.h HEADERS += $$PWD//debugoutputcommand.h HEADERS += $$PWD/endpuppetcommand.h @@ -34,6 +35,7 @@ HEADERS += $$PWD/inputeventcommand.h HEADERS += $$PWD/view3dactioncommand.h SOURCES += $$PWD/synchronizecommand.cpp +SOURCES += $$PWD/changepreviewimagesizecommand.cpp SOURCES += $$PWD/changelanguagecommand.cpp SOURCES += $$PWD/debugoutputcommand.cpp SOURCES += $$PWD/endpuppetcommand.cpp diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp index 98409b57f47..6e9893c95a5 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp +++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp @@ -40,39 +40,39 @@ #include "changefileurlcommand.h" #include "changeidscommand.h" #include "changelanguagecommand.h" +#include "changenodesourcecommand.h" +#include "changepreviewimagesizecommand.h" +#include "changeselectioncommand.h" #include "changestatecommand.h" #include "changevaluescommand.h" +#include "childrenchangedcommand.h" #include "clearscenecommand.h" #include "completecomponentcommand.h" +#include "componentcompletedcommand.h" #include "createinstancescommand.h" #include "createscenecommand.h" +#include "debugoutputcommand.h" +#include "endpuppetcommand.h" +#include "imagecontainer.h" +#include "informationchangedcommand.h" #include "inputeventcommand.h" #include "instancecontainer.h" +#include "pixmapchangedcommand.h" #include "propertyabstractcontainer.h" #include "propertybindingcontainer.h" #include "propertyvaluecontainer.h" +#include "puppetalivecommand.h" +#include "puppettocreatorcommand.h" #include "removeinstancescommand.h" #include "removepropertiescommand.h" #include "removesharedmemorycommand.h" #include "reparentinstancescommand.h" +#include "statepreviewimagechangedcommand.h" #include "synchronizecommand.h" #include "tokencommand.h" #include "update3dviewstatecommand.h" -#include "view3dactioncommand.h" - -#include "informationchangedcommand.h" -#include "pixmapchangedcommand.h" #include "valueschangedcommand.h" -#include "childrenchangedcommand.h" -#include "imagecontainer.h" -#include "statepreviewimagechangedcommand.h" -#include "componentcompletedcommand.h" -#include "changenodesourcecommand.h" -#include "endpuppetcommand.h" -#include "debugoutputcommand.h" -#include "puppetalivecommand.h" -#include "changeselectioncommand.h" -#include "puppettocreatorcommand.h" +#include "view3dactioncommand.h" namespace QmlDesigner { @@ -330,6 +330,11 @@ void NodeInstanceClientProxy::changeLanguage(const ChangeLanguageCommand &comman nodeInstanceServer()->changeLanguage(command); } +void NodeInstanceClientProxy::changePreviewImageSize(const ChangePreviewImageSizeCommand &command) +{ + nodeInstanceServer()->changePreviewImageSize(command); +} + void NodeInstanceClientProxy::readDataStream() { QList commandList; @@ -497,6 +502,8 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command) static const int inputEventCommandType = QMetaType::type("InputEventCommand"); static const int view3DActionCommandType = QMetaType::type("View3DActionCommand"); static const int changeLanguageCommand = QMetaType::type("ChangeLanguageCommand"); + static const int changePreviewImageSizeCommand = QMetaType::type( + "ChangePreviewImageSizeCommand"); const int commandType = command.userType(); @@ -548,6 +555,8 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command) changeSelection(changeSelectionCommand); } else if (command.userType() == changeLanguageCommand) { changeLanguage(command.value()); + } else if (command.userType() == changePreviewImageSizeCommand) { + changePreviewImageSize(command.value()); } else { Q_ASSERT(false); } diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h index 32b2d9f154e..e6f4b58df49 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h +++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h @@ -62,6 +62,7 @@ class PuppetToCreatorCommand; class InputEventCommand; class View3DActionCommand; class ChangeLanguageCommand; +class ChangePreviewImageSizeCommand; class NodeInstanceClientProxy : public QObject, public NodeInstanceClientInterface { @@ -118,6 +119,7 @@ protected: void inputEvent(const InputEventCommand &command); void view3DAction(const View3DActionCommand &command); void changeLanguage(const ChangeLanguageCommand &command); + void changePreviewImageSize(const ChangePreviewImageSizeCommand &command); protected slots: void readDataStream(); diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h index 59024100158..10c2d1fdbb5 100644 --- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h +++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h @@ -54,6 +54,7 @@ class ChangeSelectionCommand; class InputEventCommand; class View3DActionCommand; class ChangeLanguageCommand; +class ChangePreviewImageSizeCommand; class NodeInstanceServerInterface : public QObject { @@ -87,6 +88,7 @@ public: virtual void inputEvent(const InputEventCommand &command) = 0; virtual void view3DAction(const View3DActionCommand &command) = 0; virtual void changeLanguage(const ChangeLanguageCommand &command) = 0; + virtual void changePreviewImageSize(const ChangePreviewImageSizeCommand &command) = 0; virtual void benchmark(const QString &) {} diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index 51c26a5cd2a..0bfa289769d 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -1397,8 +1397,7 @@ void NodeInstanceServer::view3DAction(const View3DActionCommand &command) Q_UNUSED(command) } -void NodeInstanceServer::changeLanguage(const ChangeLanguageCommand &command) {} -} - - +void NodeInstanceServer::changeLanguage(const ChangeLanguageCommand &) {} +void NodeInstanceServer::changePreviewImageSize(const ChangePreviewImageSizeCommand &command) {} +} // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h index d8295814cf2..fe1d767c88a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h @@ -113,6 +113,7 @@ public: void inputEvent(const InputEventCommand &command) override; void view3DAction(const View3DActionCommand &command) override; void changeLanguage(const ChangeLanguageCommand &command) override; + void changePreviewImageSize(const ChangePreviewImageSizeCommand &command) override; ServerNodeInstance instanceForId(qint32 id) const; bool hasInstanceForId(qint32 id) const; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp index e3716d87877..758f7f0c8f9 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp @@ -25,10 +25,12 @@ #include "qt5previewnodeinstanceserver.h" -#include "nodeinstanceclientinterface.h" -#include "statepreviewimagechangedcommand.h" +#include "changepreviewimagesizecommand.h" #include "createscenecommand.h" +#include "nodeinstanceclientinterface.h" #include "removesharedmemorycommand.h" +#include "statepreviewimagechangedcommand.h" + #include #include #include @@ -100,7 +102,9 @@ QImage Qt5PreviewNodeInstanceServer::renderPreviewImage() QRectF boundingRect = rootNodeInstance().boundingRect(); QSize previewImageSize = boundingRect.size().toSize(); - previewImageSize.scale(QSize(160, 160), Qt::KeepAspectRatio); + + if (!m_previewSize.isNull()) + previewImageSize.scale(m_previewSize, Qt::KeepAspectRatio); QImage previewImage = rootNodeInstance().renderPreviewImage(previewImageSize); @@ -113,4 +117,12 @@ void QmlDesigner::Qt5PreviewNodeInstanceServer::removeSharedMemory(const QmlDesi ImageContainer::removeSharedMemorys(command.keyNumbers()); } +void Qt5PreviewNodeInstanceServer::changePreviewImageSize( + const ChangePreviewImageSizeCommand &command) +{ + m_previewSize = command.size; + + collectItemChangesAndSendChangeCommands(); +} + } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h index c47681ec213..182db45d405 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h @@ -38,6 +38,7 @@ public: void createScene(const CreateSceneCommand &command) override; void changeState(const ChangeStateCommand &command) override; void removeSharedMemory(const RemoveSharedMemoryCommand &command) override; + void changePreviewImageSize(const ChangePreviewImageSizeCommand &command) override; QImage renderPreviewImage(); @@ -47,6 +48,7 @@ protected: private: ServerNodeInstance m_currentState; + QSize m_previewSize{160, 160}; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index ad38bdbdbbc..8db9aa3a98e 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -33,32 +33,32 @@ #include #include #include +#include #include #include #include +#include #include #include +#include #include #include +#include +#include +#include #include +#include #include #include #include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include #include -#include +#include +#include #include -#include +#include +#include +#include +#include #include #include @@ -746,4 +746,9 @@ void NodeInstanceServerProxy::changeLanguage(const ChangeLanguageCommand &comman writeCommand(QVariant::fromValue(command)); } +void NodeInstanceServerProxy::changePreviewImageSize(const ChangePreviewImageSizeCommand &command) +{ + writeCommand(QVariant::fromValue(command)); +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h index 5d36175db36..4b0df0fd9aa 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h @@ -86,6 +86,7 @@ public: void inputEvent(const InputEventCommand &command) override; void view3DAction(const View3DActionCommand &command) override; void changeLanguage(const ChangeLanguageCommand &command) override; + void changePreviewImageSize(const ChangePreviewImageSizeCommand &command) override; protected: void writeCommand(const QVariant &command); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 270b67419a8..678bb1ea943 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -33,6 +33,7 @@ #include "changeidscommand.h" #include "changelanguagecommand.h" #include "changenodesourcecommand.h" +#include "changepreviewimagesizecommand.h" #include "changeselectioncommand.h" #include "changestatecommand.h" #include "changevaluescommand.h" @@ -67,6 +68,7 @@ #include "valueschangedcommand.h" #include "variantproperty.h" #include "view3dactioncommand.h" + #include #include #include @@ -537,8 +539,10 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, } } } - } else if (node.isRootNode() && name == "language") { + } else if (node.isRootNode() && name == "language@Internal") { nodeInstanceServer()->changeLanguage({value.toString()}); + } else if (node.isRootNode() && name == "previewSize@Internal") { + nodeInstanceServer()->changePreviewImageSize(value.toSize()); } }