plasma-framework/declarativeimports/core/framesvgitem.cpp
Aaron Seigo 554f0b9909 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.
2012-11-07 12:43:11 +01:00

157 lines
3.5 KiB
C++

/*
* Copyright 2010 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "framesvgitem.h"
#include <QPainter>
#include "kdebug.h"
namespace Plasma
{
FrameSvgItemMargins::FrameSvgItemMargins(Plasma::FrameSvg *frameSvg, QObject *parent)
: QObject(parent),
m_frameSvg(frameSvg)
{
kDebug() << "margins at: " << left() << top() << right() << bottom();
connect(m_frameSvg, SIGNAL(repaintNeeded()), this, SLOT(update()));
}
qreal FrameSvgItemMargins::left() const
{
return m_frameSvg->marginSize(LeftMargin);
}
qreal FrameSvgItemMargins::top() const
{
return m_frameSvg->marginSize(TopMargin);
}
qreal FrameSvgItemMargins::right() const
{
return m_frameSvg->marginSize(RightMargin);
}
qreal FrameSvgItemMargins::bottom() const
{
return m_frameSvg->marginSize(BottomMargin);
}
void FrameSvgItemMargins::update()
{
emit marginsChanged();
}
FrameSvgItem::FrameSvgItem(QDeclarativeItem *parent)
: QDeclarativeItem(parent)
{
m_frameSvg = new Plasma::FrameSvg(this);
m_margins = new FrameSvgItemMargins(m_frameSvg, this);
setFlag(QGraphicsItem::ItemHasNoContents, false);
connect(m_frameSvg, SIGNAL(repaintNeeded()), this, SLOT(doUpdate()));
}
FrameSvgItem::~FrameSvgItem()
{
}
void FrameSvgItem::setImagePath(const QString &path)
{
if (m_frameSvg->imagePath() == path) {
return;
}
m_frameSvg->setImagePath(path);
m_frameSvg->setElementPrefix(m_prefix);
emit imagePathChanged();
update();
}
QString FrameSvgItem::imagePath() const
{
return m_frameSvg->imagePath();
}
void FrameSvgItem::setPrefix(const QString &prefix)
{
if (m_prefix == prefix) {
return;
}
m_frameSvg->setElementPrefix(prefix);
m_prefix = prefix;
emit prefixChanged();
m_margins->update();
update();
}
QString FrameSvgItem::prefix() const
{
return m_prefix;
}
FrameSvgItemMargins *FrameSvgItem::margins() const
{
return m_margins;
}
void FrameSvgItem::setEnabledBorders(const Plasma::FrameSvg::EnabledBorders borders)
{
if (m_frameSvg->enabledBorders() == borders)
return;
m_frameSvg->setEnabledBorders(borders);
emit enabledBordersChanged();
}
Plasma::FrameSvg::EnabledBorders FrameSvgItem::enabledBorders() const
{
return m_frameSvg->enabledBorders();
}
void FrameSvgItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
m_frameSvg->paintFrame(painter);
}
void FrameSvgItem::geometryChanged(const QRectF &newGeometry,
const QRectF &oldGeometry)
{
m_frameSvg->resizeFrame(newGeometry.size());
QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
}
void FrameSvgItem::doUpdate()
{
update();
}
} // Plasma namespace
#include "framesvgitem.moc"