📄 qsvgiohandler.cpp
字号:
/******************************************************************************** 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.**** 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("<svg");}QByteArray QSvgIOHandler::name() const{ return "svg";}bool QSvgIOHandler::read(QImage *image){ if (d->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("<svg");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -