diff options
author | Ali Kianian <[email protected]> | 2024-06-06 17:35:25 +0300 |
---|---|---|
committer | Ali Kianian <[email protected]> | 2024-06-07 09:23:29 +0000 |
commit | 1e3f8afdce3771504b1b8f2e3572fb9f8fa916b6 (patch) | |
tree | 4d64587c429d3d730166e8a41d2110ce0eadf282 /src/libs/qmlpuppetcommunication | |
parent | 79e6c6809b820b6b4f55f4e6d1d1bc085ba13cb5 (diff) |
QmlDesigner: Get the material image based on request id
A request id is used for comparing requests instead of image sizes
Returned image sizes was not always the same as requested ones because
of pixelRateRatio.
Fixes: QDS-12961
Change-Id: I2f0ed7ea00047f296872a02958322f3448984f09
Reviewed-by: Mahmoud Badri <[email protected]>
Reviewed-by: Miikka Heikkinen <[email protected]>
Diffstat (limited to 'src/libs/qmlpuppetcommunication')
4 files changed, 53 insertions, 17 deletions
diff --git a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp index 0b8a17a31fa..758509d603d 100644 --- a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp +++ b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.cpp @@ -10,13 +10,17 @@ namespace QmlDesigner { RequestModelNodePreviewImageCommand::RequestModelNodePreviewImageCommand() = default; -RequestModelNodePreviewImageCommand::RequestModelNodePreviewImageCommand(qint32 id, const QSize &size, - const QString &componentPath, - qint32 renderItemId) +RequestModelNodePreviewImageCommand::RequestModelNodePreviewImageCommand( + qint32 id, + const QSize &size, + const QString &componentPath, + qint32 renderItemId, + const QByteArray &requestId) : m_instanceId(id) , m_size(size) , m_componentPath(componentPath) , m_renderItemId(renderItemId) + , m_requestId(requestId) { } @@ -40,12 +44,18 @@ qint32 RequestModelNodePreviewImageCommand::renderItemId() const return m_renderItemId; } +QByteArray RequestModelNodePreviewImageCommand::requestId() const +{ + return m_requestId; +} + QDataStream &operator<<(QDataStream &out, const RequestModelNodePreviewImageCommand &command) { out << int(command.instanceId()); out << command.size(); out << command.componentPath(); out << command.renderItemId(); + out << command.requestId(); return out; } @@ -56,6 +66,7 @@ QDataStream &operator>>(QDataStream &in, RequestModelNodePreviewImageCommand &co in >> command.m_size; in >> command.m_componentPath; in >> command.m_renderItemId; + in >> command.m_requestId; return in; } @@ -65,7 +76,8 @@ QDebug operator <<(QDebug debug, const RequestModelNodePreviewImageCommand &comm << "instanceId: " << command.instanceId() << ", " << "size: " << command.size() << ", " << "componentPath: " << command.componentPath() << ", " - << "renderItemId: " << command.renderItemId() << ")"; + << "renderItemId: " << command.renderItemId() << ", " + << "requestId: " << command.requestId() << ")"; } } // namespace QmlDesigner diff --git a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h index 414b8f6cc9d..33a1c97866b 100644 --- a/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h +++ b/src/libs/qmlpuppetcommunication/commands/requestmodelnodepreviewimagecommand.h @@ -18,38 +18,46 @@ class RequestModelNodePreviewImageCommand public: RequestModelNodePreviewImageCommand(); - explicit RequestModelNodePreviewImageCommand(qint32 id, const QSize &size, - const QString &componentPath, qint32 renderItemId); + explicit RequestModelNodePreviewImageCommand( + qint32 id, + const QSize &size, + const QString &componentPath, + qint32 renderItemId, + const QByteArray &requestId = {}); qint32 instanceId() const; QSize size() const; QString componentPath() const; qint32 renderItemId() const; + QByteArray requestId() const; private: qint32 m_instanceId; QSize m_size; QString m_componentPath; qint32 m_renderItemId; + QByteArray m_requestId; }; inline bool operator==(const RequestModelNodePreviewImageCommand &first, const RequestModelNodePreviewImageCommand &second) { - return first.instanceId() == second.instanceId() - && first.size() == second.size() - && first.componentPath() == second.componentPath() - && first.renderItemId() == second.renderItemId(); + return first.instanceId() == second.instanceId() && first.size() == second.size() + && first.componentPath() == second.componentPath() + && first.renderItemId() == second.renderItemId() + && first.requestId() == second.requestId(); } inline size_t qHash(const RequestModelNodePreviewImageCommand &key, size_t seed = 0) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) return ::qHash(key.instanceId(), seed) - ^ ::qHash(std::make_pair(key.size().width(), key.size().height()), seed) - ^ ::qHash(key.componentPath(), seed) ^ ::qHash(key.renderItemId(), seed); + ^ ::qHash(std::make_pair(key.size().width(), key.size().height()), seed) + ^ ::qHash(key.componentPath(), seed) ^ ::qHash(key.renderItemId(), seed) + ^ ::qHash(key.requestId(), seed); #else - return qHashMulti(seed, key.instanceId(), key.size(), key.componentPath(), key.renderItemId()); + return qHashMulti( + seed, key.instanceId(), key.size(), key.componentPath(), key.renderItemId(), key.requestId()); #endif } diff --git a/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp b/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp index 7747a9d1188..5cfeb2967bc 100644 --- a/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp +++ b/src/libs/qmlpuppetcommunication/container/imagecontainer.cpp @@ -56,6 +56,11 @@ QRectF ImageContainer::rect() const return m_rect; } +QByteArray ImageContainer::requestId() const +{ + return m_requestId; +} + void ImageContainer::setImage(const QImage &image) { QTC_ASSERT(m_image.isNull(), /**/); @@ -68,6 +73,11 @@ void ImageContainer::setRect(const QRectF &rectangle) m_rect = rectangle; } +void ImageContainer::setRequestId(const QByteArray &newRequestId) +{ + m_requestId = newRequestId; +} + void ImageContainer::removeSharedMemorys(const QVector<qint32> &keyNumberVector) { for (qint32 keyNumber : keyNumberVector) { @@ -151,6 +161,7 @@ QDataStream &operator<<(QDataStream &out, const ImageContainer &container) out << container.instanceId(); out << container.keyNumber(); out << container.rect(); + out << container.requestId(); const QImage image = container.image(); @@ -236,6 +247,7 @@ QDataStream &operator>>(QDataStream &in, ImageContainer &container) in >> container.m_instanceId; in >> container.m_keyNumber; in >> container.m_rect; + in >> container.m_requestId; in >> sharedMemoryIsUsed; if (sharedMemoryIsUsed) { @@ -259,10 +271,11 @@ bool operator <(const ImageContainer &first, const ImageContainer &second) QDebug operator <<(QDebug debug, const ImageContainer &container) { - return debug.nospace() << "ImageContainer(" - << "instanceId: " << container.instanceId() << ", " - << "size: " << container.image().size() << ")"; + debug.nospace() << "ImageContainer(" + << "instanceId: " << container.instanceId() << ", "; + if (!container.requestId().isEmpty()) + debug << "requestId: " << container.requestId() << ", "; + return debug << "size: " << container.image().size() << ")"; } - } // namespace QmlDesigner diff --git a/src/libs/qmlpuppetcommunication/container/imagecontainer.h b/src/libs/qmlpuppetcommunication/container/imagecontainer.h index cc028d45c0f..214cf0f18f7 100644 --- a/src/libs/qmlpuppetcommunication/container/imagecontainer.h +++ b/src/libs/qmlpuppetcommunication/container/imagecontainer.h @@ -23,9 +23,11 @@ public: QImage image() const; qint32 keyNumber() const; QRectF rect() const; + QByteArray requestId() const; void setImage(const QImage &image); void setRect(const QRectF &rectangle); + void setRequestId(const QByteArray &newRequestId); static void removeSharedMemorys(const QVector<qint32> &keyNumberVector); @@ -34,6 +36,7 @@ private: qint32 m_instanceId; qint32 m_keyNumber; QRectF m_rect; + QByteArray m_requestId; }; QDataStream &operator<<(QDataStream &out, const ImageContainer &container); |