From 554f0b9909c276a7c3a1b1be6e58398ccaaa2ba7 Mon Sep 17 00:00:00 2001 From: Aaron Seigo Date: Wed, 7 Nov 2012 12:43:11 +0100 Subject: [PATCH] ensure margins update in all cases setElementPrefix does not trigger repaintNeeded() from the svg object; repaintNeeded() is for internal changes. if you change the svg from your own application code, the app code needs to react to those changes in its own time and way. so margins was never seeing that it was getting changed when setElementPrefix was called -> pixel imperfections in layouts. --- declarativeimports/core/framesvgitem.cpp | 15 ++++++++++++--- declarativeimports/core/framesvgitem.h | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/declarativeimports/core/framesvgitem.cpp b/declarativeimports/core/framesvgitem.cpp index a42d6719d..7c9ed4839 100644 --- a/declarativeimports/core/framesvgitem.cpp +++ b/declarativeimports/core/framesvgitem.cpp @@ -31,7 +31,8 @@ FrameSvgItemMargins::FrameSvgItemMargins(Plasma::FrameSvg *frameSvg, QObject *pa : QObject(parent), m_frameSvg(frameSvg) { - connect(m_frameSvg, SIGNAL(repaintNeeded()), this, SIGNAL(marginsChanged())); + kDebug() << "margins at: " << left() << top() << right() << bottom(); + connect(m_frameSvg, SIGNAL(repaintNeeded()), this, SLOT(update())); } qreal FrameSvgItemMargins::left() const @@ -54,6 +55,11 @@ qreal FrameSvgItemMargins::bottom() const return m_frameSvg->marginSize(BottomMargin); } +void FrameSvgItemMargins::update() +{ + emit marginsChanged(); +} + FrameSvgItem::FrameSvgItem(QDeclarativeItem *parent) : QDeclarativeItem(parent) { @@ -70,8 +76,9 @@ FrameSvgItem::~FrameSvgItem() void FrameSvgItem::setImagePath(const QString &path) { - if (m_frameSvg->imagePath() == path) + if (m_frameSvg->imagePath() == path) { return; + } m_frameSvg->setImagePath(path); m_frameSvg->setElementPrefix(m_prefix); @@ -88,13 +95,15 @@ QString FrameSvgItem::imagePath() const void FrameSvgItem::setPrefix(const QString &prefix) { - if (m_prefix == prefix) + if (m_prefix == prefix) { return; + } m_frameSvg->setElementPrefix(prefix); m_prefix = prefix; emit prefixChanged(); + m_margins->update(); update(); } diff --git a/declarativeimports/core/framesvgitem.h b/declarativeimports/core/framesvgitem.h index 8182e3446..f313f1072 100644 --- a/declarativeimports/core/framesvgitem.h +++ b/declarativeimports/core/framesvgitem.h @@ -59,6 +59,9 @@ public: qreal right() const; qreal bottom() const; +public Q_SLOTS: + void update(); + Q_SIGNALS: void marginsChanged();