diff options
3 files changed, 20 insertions, 13 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp index 8348cbecb0..8fbbbc48cf 100644 --- a/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp +++ b/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp @@ -128,15 +128,16 @@ static void writeSharedMemory(SharedMemory *sharedMemory, const QImage &image) { sharedMemory->lock(); - qint32 headerData[5]; + qint32 headerData[6]; headerData[0] = qint32(image.sizeInBytes()); headerData[1] = image.bytesPerLine(); headerData[2] = image.size().width(); headerData[3] = image.size().height(); headerData[4] = image.format(); + headerData[5] = image.devicePixelRatio() * 100; - std::memcpy(sharedMemory->data(), headerData, 20); - std::memcpy(reinterpret_cast<char*>(sharedMemory->data()) + 20, image.constBits(), image.sizeInBytes()); + std::memcpy(sharedMemory->data(), headerData, 24); + std::memcpy(reinterpret_cast<char*>(sharedMemory->data()) + 24, image.constBits(), image.sizeInBytes()); sharedMemory->unlock(); } @@ -146,12 +147,13 @@ static void writeStream(QDataStream &out, const QImage &image) out << image.size(); out << qint32(image.format()); out << qint32(image.sizeInBytes()); + out << qint32(image.devicePixelRatio() * 100); out.writeRawData(reinterpret_cast<const char*>(image.constBits()), image.sizeInBytes()); } QDataStream &operator<<(QDataStream &out, const ImageContainer &container) { - const int extraDataSize = 20; + const int extraDataSize = 24; static const bool dontUseSharedMemory = qEnvironmentVariableIsSet("DESIGNER_DONT_USE_SHARED_MEMORY"); out << container.instanceId(); @@ -183,24 +185,26 @@ static void readSharedMemory(qint32 key, ImageContainer &container) bool canAttach = sharedMemory.attach(QSharedMemory::ReadOnly); - if (canAttach && sharedMemory.size() >= 20) + if (canAttach && sharedMemory.size() >= 24) { sharedMemory.lock(); - qint32 headerData[5]; - std::memcpy(headerData, sharedMemory.constData(), 20); + qint32 headerData[6]; + std::memcpy(headerData, sharedMemory.constData(), 24); qint32 byteCount = headerData[0]; // qint32 bytesPerLine = headerData[1]; qint32 imageWidth = headerData[2]; qint32 imageHeight = headerData[3]; qint32 imageFormat = headerData[4]; + qreal pixelRatio = headerData[5] / 100.0; QImage image = QImage(imageWidth, imageHeight, QImage::Format(imageFormat)); + image.setDevicePixelRatio(pixelRatio); if (image.isNull()) qDebug() << Q_FUNC_INFO << "Not able to create image:" << imageWidth << imageHeight << imageFormat; else - std::memcpy(image.bits(), reinterpret_cast<const qint32*>(sharedMemory.constData()) + 5, byteCount); + std::memcpy(image.bits(), reinterpret_cast<const qint32*>(sharedMemory.constData()) + 6, byteCount); container.setImage(image); @@ -215,6 +219,7 @@ static void readStream(QDataStream &in, ImageContainer &container) qint32 bytesPerLine; QSize imageSize; qint32 imageFormat; + qint32 pixelRatio; in >> bytesPerLine; in >> imageSize; @@ -224,6 +229,7 @@ static void readStream(QDataStream &in, ImageContainer &container) QImage image = QImage(imageSize, QImage::Format(imageFormat)); in.readRawData(reinterpret_cast<char*>(image.bits()), byteCount); + image.setDevicePixelRatio(pixelRatio / 100.0); container.setImage(image); } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index bc91a47505..b400d8c2d2 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -428,12 +428,14 @@ QImage QuickItemNodeInstance::renderImage() const nodeInstanceServer()->quickView()->afterRendering(); } + renderImage.setDevicePixelRatio(devicePixelRatio); #else renderImage = nodeInstanceServer()->quickView()->grabWindow(); + renderImage = renderImage.copy(renderBoundingRect.toRect()); + /* When grabbing an offscren window the device pixel ratio is 1 */ + renderImage.setDevicePixelRatio(1); #endif - renderImage.setDevicePixelRatio(devicePixelRatio); - return renderImage; } @@ -462,6 +464,7 @@ QImage QuickItemNodeInstance::renderPreviewImage(const QSize &previewImageSize) } #else image = nodeInstanceServer()->quickView()->grabWindow(); + image = image.copy(previewItemBoundingRect.toRect()); #endif image = image.scaledToWidth(size.width()); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp index b74179fdef..91bb2c3071 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp @@ -473,9 +473,7 @@ QPixmap NodeInstance::blurredRenderPixmap() const void NodeInstance::setRenderPixmap(const QImage &image) { d->renderPixmap = QPixmap::fromImage(image); -#ifndef QMLDESIGNER_TEST - d->renderPixmap.setDevicePixelRatio(QmlDesignerPlugin::formEditorDevicePixelRatio()); -#endif + d->blurredRenderPixmap = QPixmap(); } |