diff --git a/src/declarativeimports/core/framesvgitem.h b/src/declarativeimports/core/framesvgitem.h --- a/src/declarativeimports/core/framesvgitem.h +++ b/src/declarativeimports/core/framesvgitem.h @@ -119,8 +119,12 @@ * prefix for the 9 piece svg, like "pushed" or "normal" for the button * see http://techbase.kde.org/Development/Tutorials/Plasma/ThemeDetails * for a list of paths and prefixes + * It can also be an array of strings, specifying a fallback chain in case + * the first element isn't found in the theme, eg ["toolbutton-normal", "normal"] + * so it's easy to keep backwards compatibility with old themes + * (Note: fallback chain is supported only @since 5.32) */ - Q_PROPERTY(QString prefix READ prefix WRITE setPrefix NOTIFY prefixChanged) + Q_PROPERTY(QVariant prefix READ prefix WRITE setPrefix NOTIFY prefixChanged) /** * The margins of the frame, read only @@ -185,8 +189,8 @@ void setImagePath(const QString &path); QString imagePath() const; - void setPrefix(const QString &prefix); - QString prefix() const; + void setPrefix(const QVariant &prefix); + QVariant prefix() const; void setEnabledBorders(const Plasma::FrameSvg::EnabledBorders borders); Plasma::FrameSvg::EnabledBorders enabledBorders() const; @@ -234,10 +238,12 @@ void updateDevicePixelRatio(); private: + void applyPrefixes(); + Plasma::FrameSvg *m_frameSvg; FrameSvgItemMargins *m_margins; FrameSvgItemMargins *m_fixedMargins; - QString m_prefix; + QStringList m_prefixes; bool m_textureChanged; bool m_sizeChanged; bool m_fastPath; 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 @@ -281,7 +281,6 @@ updateDevicePixelRatio(); m_frameSvg->setImagePath(path); - m_frameSvg->setElementPrefix(m_prefix); if (implicitWidth() <= 0) { setImplicitWidth(m_frameSvg->marginSize(Plasma::Types::LeftMargin) + m_frameSvg->marginSize(Plasma::Types::RightMargin)); @@ -296,6 +295,8 @@ m_fixedMargins->update(); if (isComponentComplete()) { + applyPrefixes(); + m_frameSvg->resizeFrame(QSizeF(width(), height())); m_textureChanged = true; update(); @@ -307,14 +308,22 @@ return m_frameSvg->imagePath(); } -void FrameSvgItem::setPrefix(const QString &prefix) +void FrameSvgItem::setPrefix(const QVariant &prefixes) { - if (m_prefix == prefix) { + QStringList prefixList; + //is this a simple string? + if (prefixes.canConvert()) { + prefixList << prefixes.toString(); + } else if (prefixes.canConvert()) { + prefixList = prefixes.toStringList(); + } + + if (m_prefixes == prefixList) { return; } - m_frameSvg->setElementPrefix(prefix); - m_prefix = prefix; + m_prefixes = prefixList; + applyPrefixes(); if (implicitWidth() <= 0) { setImplicitWidth(m_frameSvg->marginSize(Plasma::Types::LeftMargin) + m_frameSvg->marginSize(Plasma::Types::RightMargin)); @@ -335,9 +344,9 @@ } } -QString FrameSvgItem::prefix() const +QVariant FrameSvgItem::prefix() const { - return m_prefix; + return m_prefixes; } FrameSvgItemMargins *FrameSvgItem::margins() const @@ -416,6 +425,9 @@ void FrameSvgItem::doUpdate() { + //if the theme changed, the available prefix may have changed as well + applyPrefixes(); + if (implicitWidth() <= 0) { setImplicitWidth(m_frameSvg->marginSize(Plasma::Types::LeftMargin) + m_frameSvg->marginSize(Plasma::Types::RightMargin)); } @@ -445,7 +457,7 @@ QSGNode *FrameSvgItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) { if (!window() || !m_frameSvg || - (!m_frameSvg->hasElementPrefix(m_frameSvg->actualPrefix()) && !m_frameSvg->hasElementPrefix(m_prefix))) { + (!m_frameSvg->hasElementPrefix(m_frameSvg->actualPrefix()) && !m_frameSvg->hasElementPrefix(m_frameSvg->prefix()))) { delete oldNode; return nullptr; } @@ -542,5 +554,26 @@ m_textureChanged = true; } +void FrameSvgItem::applyPrefixes() +{ + if (m_prefixes.isEmpty() || m_frameSvg->imagePath().isEmpty()) { + return; + } + + bool found = false; + for (const QString &prefix : m_prefixes) { + if (m_frameSvg->hasElementPrefix(prefix)) { + m_frameSvg->setElementPrefix(prefix); + found = true; + break; + } + } + if (!found) { + qWarning() << "The image" << m_frameSvg->imagePath() << "doesn't contain any of the prefixes" << m_prefixes; + //this setElementPrefix is done to keep the same behavior as before, when it was a simple string + m_frameSvg->setElementPrefix(m_prefixes.last()); + } +} + } // Plasma namespace diff --git a/src/declarativeimports/plasmastyle/ToolButtonStyle.qml b/src/declarativeimports/plasmastyle/ToolButtonStyle.qml --- a/src/declarativeimports/plasmastyle/ToolButtonStyle.qml +++ b/src/declarativeimports/plasmastyle/ToolButtonStyle.qml @@ -231,7 +231,7 @@ id: surfaceNormal anchors.fill: parent imagePath: "widgets/button" - prefix: "normal" + prefix: style.flat ? ["toolbutton-hover", "normal"] : "normal" enabledBorders: { if (style.flat || !control.parent || @@ -288,7 +288,7 @@ id: surfacePressed anchors.fill: parent imagePath: "widgets/button" - prefix: "pressed" + prefix: style.flat ? ["toolbutton-pressed", "pressed"] : "pressed" enabledBorders: surfaceNormal.enabledBorders opacity: 0 } diff --git a/src/desktoptheme/breeze/widgets/button.svgz b/src/desktoptheme/breeze/widgets/button.svgz index 61a23f51357bf3fd099d1cd11ae54c3a131eb623..1824911638a8f8188e35fadabc1640ff17a27c20 GIT binary patch literal 7038 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%0DG3~MP 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 Q&+NZ{0S!`A!F