aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-06-20 01:00:05 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-06-20 01:00:05 +0200
commitacbc9a3984a5c729c6731f73431aae6d802aa78a (patch)
tree11580451e6478254d0c38a41f6670ea40c7a68a7 /src/quick/scenegraph
parent8068e7b98cde09565efe27585b84e120f9c5ea99 (diff)
parent4050d0eddd33c9a77d4ffe285e137280ec5dd5fe (diff)
Merge "Merge remote-tracking branch 'origin/5.13' into dev"
Diffstat (limited to 'src/quick/scenegraph')
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer.cpp7
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer_p.h3
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp2
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp3
-rw-r--r--src/quick/scenegraph/util/qsgdefaultimagenode.cpp4
-rw-r--r--src/quick/scenegraph/util/qsgdefaultimagenode_p.h1
6 files changed, 14 insertions, 6 deletions
diff --git a/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer.cpp b/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer.cpp
index d715d900ba..ca620965a8 100644
--- a/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer.cpp
+++ b/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer.cpp
@@ -233,12 +233,13 @@ void QSGAbstractSoftwareRenderer::setBackgroundColor(const QColor &color)
renderableNode(m_background)->markMaterialDirty();
}
-void QSGAbstractSoftwareRenderer::setBackgroundRect(const QRect &rect)
+void QSGAbstractSoftwareRenderer::setBackgroundRect(const QRect &rect, qreal devicePixelRatio)
{
- if (m_background->rect().toRect() == rect)
+ if (m_background->rect().toRect() == rect && m_devicePixelRatio == devicePixelRatio)
return;
m_background->setRect(rect);
- renderableNode(m_background)->markGeometryDirty();
+ m_devicePixelRatio = devicePixelRatio;
+ renderableNode(m_background)->markGeometryDirty();
// Invalidate the whole scene when the background is resized
markDirty();
}
diff --git a/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer_p.h b/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer_p.h
index 6780aac17e..e1b477ab97 100644
--- a/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer_p.h
+++ b/src/quick/scenegraph/adaptations/software/qsgabstractsoftwarerenderer_p.h
@@ -82,7 +82,7 @@ protected:
QRegion optimizeRenderList();
void setBackgroundColor(const QColor &color);
- void setBackgroundRect(const QRect &rect);
+ void setBackgroundRect(const QRect &rect, qreal devicePixelRatio);
QColor backgroundColor();
QRect backgroundRect();
// only known after calling optimizeRenderList()
@@ -103,6 +103,7 @@ private:
QRegion m_dirtyRegion;
QRegion m_obscuredRegion;
+ qreal m_devicePixelRatio = 1;
bool m_isOpaque = false;
QSGSoftwareRenderableNodeUpdater *m_nodeUpdater;
diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp
index bb4afc8301..4a6d73ec59 100644
--- a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp
+++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp
@@ -79,7 +79,7 @@ void QSGSoftwarePixmapRenderer::render(QPaintDevice *target)
QElapsedTimer renderTimer;
// Setup background item
- setBackgroundRect(m_projectionRect.normalized());
+ setBackgroundRect(m_projectionRect.normalized(), qreal(1));
setBackgroundColor(clearColor());
renderTimer.start();
diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp
index e9ed52d428..df129cbfee 100644
--- a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp
+++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp
@@ -114,7 +114,8 @@ void QSGSoftwareRenderer::render()
setBackgroundColor(clearColor());
setBackgroundRect(QRect(0, 0,
m_paintDevice->width() / m_paintDevice->devicePixelRatioF(),
- m_paintDevice->height() / m_paintDevice->devicePixelRatioF()));
+ m_paintDevice->height() / m_paintDevice->devicePixelRatioF()),
+ m_paintDevice->devicePixelRatioF());
// Build Renderlist
// The renderlist is created by visiting each node in the tree and when a
diff --git a/src/quick/scenegraph/util/qsgdefaultimagenode.cpp b/src/quick/scenegraph/util/qsgdefaultimagenode.cpp
index 7186ee4265..48ec8f01d3 100644
--- a/src/quick/scenegraph/util/qsgdefaultimagenode.cpp
+++ b/src/quick/scenegraph/util/qsgdefaultimagenode.cpp
@@ -156,6 +156,10 @@ void QSGDefaultImageNode::setTexture(QSGTexture *texture)
m_isAtlasTexture = texture->isAtlasTexture();
if (wasAtlas || m_isAtlasTexture)
dirty |= DirtyGeometry;
+ // The geometry has also changed if the texture size changed.
+ if (m_textureSize != texture->textureSize())
+ dirty |= DirtyGeometry;
+ m_textureSize = texture->textureSize();
markDirty(dirty);
}
diff --git a/src/quick/scenegraph/util/qsgdefaultimagenode_p.h b/src/quick/scenegraph/util/qsgdefaultimagenode_p.h
index cb23e759d3..7b26daf541 100644
--- a/src/quick/scenegraph/util/qsgdefaultimagenode_p.h
+++ b/src/quick/scenegraph/util/qsgdefaultimagenode_p.h
@@ -95,6 +95,7 @@ private:
QSGTextureMaterial m_material;
QRectF m_rect;
QRectF m_sourceRect;
+ QSize m_textureSize;
TextureCoordinatesTransformMode m_texCoordMode;
uint m_isAtlasTexture : 1;
uint m_ownsTexture : 1;