plasma-framework/private/svg_p.h
Aaron J. Seigo fdd473d31d * this introduces a Theme object used by Svg to cache the rendering of svg's asking to be colorized, but which are not part of the theme. this requires an independent cache and set of color files, therefore a second Theme object. SvgPrivate::actualTheme() is thus overridden by SvgPrivate::cacheAndColorsTheme() whenever caching or colors are used.
* consolidate the signal/slot connections in SvgPrivate::checkColorHints, and now the check is consistent on all paths (previously, it wasn't!)
* missing (and possible cause of cache key ambiguity) separator in CACHE_ID_WITH_SIZE

svn path=/trunk/KDE/kdelibs/; revision=1203346
2010-12-03 17:10:13 +00:00

123 lines
3.3 KiB
C++

/*
* Copyright 2006-2010 Aaron Seigo <aseigo@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.
*/
#ifndef PLASMA_SVG_P_H
#define PLASMA_SVG_P_H
#include <QHash>
#include <QSharedData>
#include <QSvgRenderer>
#include "ksharedptr.h"
namespace Plasma
{
class Svg;
class SharedSvgRenderer : public QSvgRenderer, public QSharedData
{
public:
typedef KSharedPtr<SharedSvgRenderer> Ptr;
SharedSvgRenderer(QObject *parent = 0);
SharedSvgRenderer(
const QString &filename,
const QString &styleSheet,
QHash<QString, QSize> &elementsWithSizeHints,
QObject *parent = 0);
SharedSvgRenderer(
const QByteArray &contents,
const QString &styleSheet,
QHash<QString, QSize> &elementsWithSizeHints,
QObject *parent = 0);
private:
bool load(
const QByteArray &contents,
const QString &styleSheet,
QHash<QString, QSize> &elementsWithSizeHints);
};
class SvgPrivate
{
public:
SvgPrivate(Svg *svg);
~SvgPrivate();
//This function is meant for the rects cache
QString cacheId(const QString &elementId);
//This function is meant for the pixmap cache
QString cachePath(const QString &path, const QSize &size);
bool setImagePath(const QString &imagePath);
Theme *actualTheme();
Theme *cacheAndColorsTheme();
QPixmap findInCache(const QString &elementId, const QSizeF &s = QSizeF());
void createRenderer();
void eraseRenderer();
QRectF elementRect(const QString &elementId);
QRectF findAndCacheElementRect(const QString &elementId);
QMatrix matrixForElement(const QString &elementId);
void checkColorHints();
//Folowing two are utility functions to snap rendered elements to the pixel grid
//to and from are always 0 <= val <= 1
qreal closestDistance(qreal to, qreal from);
QRectF makeUniform(const QRectF &orig, const QRectF &dst);
//Slots
void themeChanged();
void colorsChanged();
static QHash<QString, SharedSvgRenderer::Ptr> s_renderers;
static QWeakPointer<Theme> s_systemColorsCache;
Svg *q;
QWeakPointer<Theme> theme;
QHash<QString, QRectF> localRectCache;
QHash<QString, QSize> elementsWithSizeHints;
SharedSvgRenderer::Ptr renderer;
QString themePath;
QString path;
QSizeF size;
QSizeF naturalSize;
QChar styleCrc;
unsigned int lastModified;
bool multipleImages : 1;
bool themed : 1;
bool applyColors : 1;
bool usesColors : 1;
bool cacheRendering : 1;
bool themeFailed : 1;
};
}
#endif