From c825bd7509490f523ae9eb4ec52762ab9c8f24b0 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Fri, 21 Feb 2014 16:27:00 +0100 Subject: [PATCH] Update SVG outside paint loop --- src/declarativeimports/core/svgitem.cpp | 20 ++++++++++++++++---- src/declarativeimports/core/svgitem.h | 3 +++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/declarativeimports/core/svgitem.cpp b/src/declarativeimports/core/svgitem.cpp index a6a8e381c..d51cb66c1 100644 --- a/src/declarativeimports/core/svgitem.cpp +++ b/src/declarativeimports/core/svgitem.cpp @@ -22,7 +22,7 @@ #include #include #include - +#include #include "QDebug" #include "plasma/svg.h" @@ -71,6 +71,9 @@ void SvgItem::setElementId(const QString &elementID) } m_elementID = elementID; + if (m_svg) { + m_svg.data()->setContainsMultipleImages(!m_elementID.isEmpty()); + } emit elementIdChanged(); emit naturalSizeChanged(); @@ -101,12 +104,16 @@ void SvgItem::setSvg(Plasma::Svg *svg) disconnect(m_svg.data(), 0, this, 0); } m_svg = svg; + m_svg.data()->setContainsMultipleImages(!m_elementID.isEmpty()); + m_svg.data()->resize(width(), height()); + if (svg) { connect(svg, SIGNAL(repaintNeeded()), this, SLOT(updateNeeded())); connect(svg, SIGNAL(repaintNeeded()), this, SIGNAL(naturalSizeChanged())); connect(svg, SIGNAL(sizeChanged()), this, SIGNAL(naturalSizeChanged())); } + if (implicitWidth() <= 0) { setImplicitWidth(naturalSize().width()); } @@ -157,9 +164,6 @@ QSGNode *SvgItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *updateP //updating the material if (m_textureChanged || textureNode->texture()->textureSize() != QSize(width(), height())) { - m_svg.data()->resize(width(), height()); - m_svg.data()->setContainsMultipleImages(!m_elementID.isEmpty()); - const QImage image = m_svg.data()->image(m_elementID); QSGTexture *texture = window()->createTextureFromImage(image); textureNode->setTexture(texture); @@ -214,6 +218,14 @@ qreal SvgItem::implicitHeight() const return QQuickItem::implicitHeight(); } +void SvgItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) +{ + if (m_svg) { + m_svg.data()->resize(newGeometry.width(), newGeometry.height()); + } + QQuickItem::geometryChanged(newGeometry, oldGeometry); +} + } // Plasma namespace #include "svgitem.moc" diff --git a/src/declarativeimports/core/svgitem.h b/src/declarativeimports/core/svgitem.h index 77ed7ea40..085768344 100644 --- a/src/declarativeimports/core/svgitem.h +++ b/src/declarativeimports/core/svgitem.h @@ -98,6 +98,9 @@ Q_SIGNALS: void implicitWidthChanged(); void implicitHeightChanged(); +protected: + void geometryChanged(const QRectF & newGeometry, const QRectF & oldGeometry); + protected Q_SLOTS: void updateNeeded();