/**************************************************************************** ** ** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. ** ** This file is part of the plugins of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://trolltech.com/products/qt/licenses/licensing/opensource/ ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview ** or contact the sales department at sales@trolltech.com. ** ** In addition, as a special exception, Trolltech gives you certain ** additional rights. These rights are described in the Trolltech GPL ** Exception version 1.0, which can be found at ** http://www.trolltech.com/products/qt/gplexception/ and in the file ** GPL_EXCEPTION.txt in this package. ** ** In addition, as a special exception, Trolltech, as the sole copyright ** holder for Qt Designer, grants users of the Qt/Eclipse Integration ** plug-in the right for the Qt/Eclipse Integration to link to ** functionality provided by Qt Designer and its related libraries. ** ** Trolltech reserves all rights not expressly granted herein. ** ** Trolltech ASA (c) 2007 ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include "qsvgiohandler.h" #include "qsvgrenderer.h" #include "qimage.h" #include "qpixmap.h" #include "qpainter.h" #include "qvariant.h" #include "qdebug.h" class QSvgIOHandlerPrivate { public: QSvgIOHandlerPrivate() : r(new QSvgRenderer()), loaded(false) {} ~QSvgIOHandlerPrivate() { delete r; } bool load(QIODevice *device); QSvgRenderer *r; QSize defaultSize; QSize currentSize; bool loaded; }; bool QSvgIOHandlerPrivate::load(QIODevice *device) { if (loaded) return true; if (r->load(device->readAll())) { defaultSize = QSize(r->viewBox().width(), r->viewBox().height()); if (currentSize.isEmpty()) currentSize = defaultSize; } loaded = r->isValid(); return loaded; } QSvgIOHandler::QSvgIOHandler() : d(new QSvgIOHandlerPrivate()) { } QSvgIOHandler::~QSvgIOHandler() { delete d; } bool QSvgIOHandler::canRead() const { QByteArray contents = device()->peek(80); return contents.contains("load(device())) { *image = QImage(d->currentSize, QImage::Format_ARGB32_Premultiplied); image->fill(0x00000000); QPainter p(image); d->r->render(&p); p.end(); return true; } return false; } QVariant QSvgIOHandler::option(ImageOption option) const { switch(option) { case Size: d->load(device()); return d->defaultSize; break; case ScaledSize: return d->currentSize; break; default: break; } return QVariant(); } void QSvgIOHandler::setOption(ImageOption option, const QVariant & value) { switch(option) { case Size: d->defaultSize = value.toSize(); d->currentSize = value.toSize(); break; case ScaledSize: d->currentSize = value.toSize(); break; default: break; } } bool QSvgIOHandler::supportsOption(ImageOption option) const { switch(option) { case Size: case ScaledSize: return true; default: break; } return false; } bool QSvgIOHandler::canRead(QIODevice *device) { QByteArray contents = device->peek(80); return contents.contains("