* Svg::pixmap
* ++apidox * clean up SvgPrivate::findInCache a bit svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=862695
This commit is contained in:
parent
1f7f9b95ed
commit
e99497b67f
37
svg.cpp
37
svg.cpp
@ -119,9 +119,8 @@ class SvgPrivate
|
||||
ids.clear();
|
||||
}
|
||||
|
||||
void findInCache(QPixmap& p, const QString& elementId, const QPainter *itemPainter, const QSizeF &s = QSizeF())
|
||||
QPixmap findInCache(const QString &elementId, const QSizeF &s = QSizeF())
|
||||
{
|
||||
Q_UNUSED( itemPainter );
|
||||
createRenderer();
|
||||
|
||||
QSize size;
|
||||
@ -132,8 +131,7 @@ class SvgPrivate
|
||||
}
|
||||
|
||||
if (!size.isValid()) {
|
||||
p = QPixmap();
|
||||
return;
|
||||
return QPixmap();
|
||||
}
|
||||
|
||||
QString id = QString::fromLatin1("%3_%2_%1_").arg(size.width())
|
||||
@ -149,9 +147,11 @@ class SvgPrivate
|
||||
ids.append(id);
|
||||
}
|
||||
|
||||
QPixmap p;
|
||||
|
||||
if (QPixmapCache::find(id, p)) {
|
||||
//kDebug() << "found cached version of " << id;
|
||||
return;
|
||||
return p;
|
||||
} else {
|
||||
//kDebug() << "didn't find cached version of " << id << ", so re-rendering";
|
||||
}
|
||||
@ -182,6 +182,8 @@ class SvgPrivate
|
||||
if (!QPixmapCache::insert(id, p)) {
|
||||
//kDebug() << "pixmap cache is too small for inserting" << id << "of size" << s;
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void createRenderer()
|
||||
@ -317,15 +319,19 @@ Svg::~Svg()
|
||||
delete d;
|
||||
}
|
||||
|
||||
QPixmap Svg::pixmap(const QString &elementID)
|
||||
{
|
||||
if (elementID.isNull()) {
|
||||
return d->findInCache(elementID, size());
|
||||
} else {
|
||||
return d->findInCache(elementID);
|
||||
}
|
||||
}
|
||||
|
||||
void Svg::paint(QPainter* painter, const QPointF& point, const QString& elementID)
|
||||
{
|
||||
QPixmap pix;
|
||||
|
||||
if (elementID.isNull()) {
|
||||
d->findInCache(pix, elementID, painter, size());
|
||||
} else {
|
||||
d->findInCache(pix, elementID, painter);
|
||||
}
|
||||
QPixmap pix(elementID.isNull() ? d->findInCache(elementID, size()) :
|
||||
d->findInCache(elementID));
|
||||
|
||||
if (pix.isNull()) {
|
||||
return;
|
||||
@ -341,8 +347,7 @@ void Svg::paint(QPainter* painter, int x, int y, const QString& elementID)
|
||||
|
||||
void Svg::paint(QPainter* painter, const QRectF& rect, const QString& elementID)
|
||||
{
|
||||
QPixmap pix;
|
||||
d->findInCache(pix, elementID, painter, rect.size());
|
||||
QPixmap pix(d->findInCache(elementID, rect.size()));
|
||||
painter->drawPixmap(rect, pix, QRectF(QPointF(0,0), pix.size()));
|
||||
}
|
||||
|
||||
@ -386,6 +391,9 @@ bool Svg::hasElement(const QString& elementId) const
|
||||
|
||||
QString Svg::elementAtPoint(const QPoint &point) const
|
||||
{
|
||||
return QString();
|
||||
/*
|
||||
FIXME: implement when Qt can support us!
|
||||
d->createRenderer();
|
||||
QSizeF naturalSize = d->renderer->defaultSize();
|
||||
qreal dx = d->size.width() / naturalSize.width();
|
||||
@ -393,6 +401,7 @@ QString Svg::elementAtPoint(const QPoint &point) const
|
||||
//kDebug() << point << "is really" << QPoint(point.x() *dx, naturalSize.height() - point.y() * dy);
|
||||
|
||||
return QString(); // d->renderer->elementAtPoint(QPoint(point.x() *dx, naturalSize.height() - point.y() * dy));
|
||||
*/
|
||||
}
|
||||
|
||||
bool Svg::isValid() const
|
||||
|
35
svg.h
35
svg.h
@ -21,6 +21,7 @@
|
||||
#define PLASMA_SVG_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtGui/QPixmap>
|
||||
|
||||
#include <plasma/plasma_export.h>
|
||||
|
||||
@ -78,33 +79,47 @@ class PLASMA_EXPORT Svg : public QObject
|
||||
~Svg();
|
||||
|
||||
|
||||
/**
|
||||
* Returns a pixmap of the SVG represented by this object.
|
||||
*
|
||||
* @arg elelementId the ID string of the element to render, or an empty
|
||||
* string for the whole SVG (the default)
|
||||
* @return a QPixmap of the rendered SVG
|
||||
*/
|
||||
Q_INVOKABLE QPixmap pixmap(const QString &elementID = QString());
|
||||
|
||||
/**
|
||||
* Paints the SVG represented by this object
|
||||
* @arg painter the QPainter to use
|
||||
* @arg point the position to start drawing; the entire svg will be
|
||||
* drawn starting at this point.
|
||||
* @arg elelementId the ID string of the element to render, or an empty
|
||||
* string for the whole SVG (the default)
|
||||
*/
|
||||
Q_INVOKABLE void paint(QPainter* painter, const QPointF& point,
|
||||
const QString& elementID = QString());
|
||||
Q_INVOKABLE void paint(QPainter *painter, const QPointF &point,
|
||||
const QString &elementID = QString());
|
||||
|
||||
/**
|
||||
* Paints the SVG represented by this object
|
||||
* @arg painter the QPainter to use
|
||||
* @arg x the horizontal coordinate to start painting from
|
||||
* @arg y the vertical coordinate to start painting from
|
||||
* @arg elelementId the ID string of the element to render, or an empty
|
||||
* string for the whole SVG (the default)
|
||||
*/
|
||||
Q_INVOKABLE void paint(QPainter* painter, int x, int y,
|
||||
const QString& elementID = QString());
|
||||
Q_INVOKABLE void paint(QPainter *painter, int x, int y,
|
||||
const QString &elementID = QString());
|
||||
|
||||
/**
|
||||
* Paints the SVG represented by this object
|
||||
* @arg painter the QPainter to use
|
||||
* @arg rect the rect to draw into; if small than the current size
|
||||
* of the
|
||||
* drawn starting at this point.
|
||||
* @arg rect the rect to draw into; if smaller than the current size
|
||||
* the drawing is starting at this point.
|
||||
* @arg elelementId the ID string of the element to render, or an empty
|
||||
* string for the whole SVG (the default)
|
||||
*/
|
||||
Q_INVOKABLE void paint(QPainter* painter, const QRectF& rect,
|
||||
const QString& elementID = QString());
|
||||
Q_INVOKABLE void paint(QPainter *painter, const QRectF &rect,
|
||||
const QString &elementID = QString());
|
||||
|
||||
/**
|
||||
* Currently set size of the SVG
|
||||
@ -118,7 +133,7 @@ class PLASMA_EXPORT Svg : public QObject
|
||||
* @arg width the new width
|
||||
* @arg height the new height
|
||||
**/
|
||||
Q_INVOKABLE void resize( qreal width, qreal height );
|
||||
Q_INVOKABLE void resize(qreal width, qreal height);
|
||||
|
||||
/**
|
||||
* Resizes the rendered image. Rendering will actually take place on
|
||||
|
Loading…
Reference in New Issue
Block a user