diff --git a/src/declarativeimports/core/framesvgitem.cpp b/src/declarativeimports/core/framesvgitem.cpp --- a/src/declarativeimports/core/framesvgitem.cpp +++ b/src/declarativeimports/core/framesvgitem.cpp @@ -646,10 +646,7 @@ //(it needs to be integer to have lines contained inside a svg piece to keep being pixel aligned) const auto newDevicePixelRation = qMax(1.0, floor(window() ? window()->devicePixelRatio() : qApp->devicePixelRatio())); - if (newDevicePixelRation != m_frameSvg->devicePixelRatio()) { - m_frameSvg->setDevicePixelRatio(qMax(1.0, newDevicePixelRation)); - m_textureChanged = true; - } + m_frameSvg->setDevicePixelRatio(qMax(1.0, newDevicePixelRation)); } void FrameSvgItem::applyPrefixes() diff --git a/src/plasma/svg.cpp b/src/plasma/svg.cpp --- a/src/plasma/svg.cpp +++ b/src/plasma/svg.cpp @@ -259,7 +259,6 @@ naturalSize = rect.size(); } else { createRenderer(); - naturalSize = renderer->defaultSize() * scaleFactor; //qCDebug(LOG_PLASMA) << "natural size for" << path << "from renderer is" << naturalSize; cacheAndColorsTheme()->insertIntoRectsCache(path, QStringLiteral("_Natural_%1").arg(scaleFactor), QRectF(QPointF(0, 0), naturalSize)); //qCDebug(LOG_PLASMA) << "natural size for" << path << "from cache is" << naturalSize; @@ -488,10 +487,12 @@ if (size == QSizeF()) { size = renderer->defaultSize(); } + naturalSize = renderer->defaultSize() * scaleFactor; } void SvgPrivate::eraseRenderer() { + qDebug() << "had renderer" << renderer << path; if (renderer && renderer->ref.load() == 2) { // this and the cache reference it s_renderers.erase(s_renderers.find(styleCrc + path)); @@ -560,13 +561,15 @@ QRectF elementRect = renderer->elementExists(elementId) ? renderer->matrixForElement(elementId).map(renderer->boundsOnElement(elementId)).boundingRect() : QRectF(); - naturalSize = renderer->defaultSize() * scaleFactor; - qreal dx = size.width() / renderer->defaultSize().width(); - qreal dy = size.height() / renderer->defaultSize().height(); + const QSizeF defaultSize = naturalSize / scaleFactor; + if (size != defaultSize) { + qreal dx = size.width() / defaultSize.width(); + qreal dy = size.height() / defaultSize.height(); - elementRect = QRectF(elementRect.x() * dx, elementRect.y() * dy, - elementRect.width() * dx, elementRect.height() * dy); + elementRect = QRectF(elementRect.x() * dx, elementRect.y() * dy, + elementRect.width() * dx, elementRect.height() * dy); + } cacheAndColorsTheme()->insertIntoRectsCache(path, id, elementRect); localRectCache.insert(id, elementRect); @@ -749,7 +752,6 @@ d->naturalSize = rect.size(); } else { d->createRenderer(); - d->naturalSize = d->renderer->defaultSize() * d->scaleFactor; } d->size = d->naturalSize;