File indexing completed on 2024-05-12 15:56:12
0001 /* 0002 * SPDX-FileCopyrightText: 2010 Cyrille Berger <cberger@cberger.net> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_svg_brush.h" 0008 0009 #include <QDomElement> 0010 #include <QFileInfo> 0011 #include <QPainter> 0012 #include <QImageReader> 0013 #include <QSvgRenderer> 0014 0015 KisSvgBrush::KisSvgBrush(const QString& filename) 0016 : KisScalingSizeBrush(filename) 0017 { 0018 setBrushType(INVALID); 0019 setSpacing(0.25); 0020 } 0021 0022 KisSvgBrush::KisSvgBrush(const KisSvgBrush& rhs) 0023 : KisScalingSizeBrush(rhs) 0024 , m_svg(rhs.m_svg) 0025 { 0026 } 0027 0028 KoResourceSP KisSvgBrush::clone() const 0029 { 0030 return KoResourceSP(new KisSvgBrush(*this)); 0031 } 0032 0033 bool KisSvgBrush::loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) 0034 { 0035 Q_UNUSED(resourcesInterface); 0036 0037 m_svg = dev->readAll(); 0038 0039 QSvgRenderer renderer(m_svg); 0040 0041 QRect box = renderer.viewBox(); 0042 if (box.isEmpty()) return false; 0043 0044 QImage image_(1000, (1000 * box.height()) / box.width(), QImage::Format_ARGB32); 0045 { 0046 QPainter p(&image_); 0047 p.fillRect(0, 0, image_.width(), image_.height(), Qt::white); 0048 renderer.render(&p); 0049 } 0050 0051 QVector<QRgb> table; 0052 for (int i = 0; i < 256; ++i) table.push_back(qRgb(i, i, i)); 0053 image_ = image_.convertToFormat(QImage::Format_Indexed8, table); 0054 0055 setBrushTipImage(image_); 0056 0057 setValid(true); 0058 0059 setBrushType(MASK); 0060 0061 setWidth(brushTipImage().width()); 0062 setHeight(brushTipImage().height()); 0063 0064 QFileInfo fi(filename()); 0065 setName(fi.completeBaseName()); 0066 0067 return !brushTipImage().isNull() && valid(); 0068 } 0069 0070 bool KisSvgBrush::saveToDevice(QIODevice *dev) const 0071 { 0072 return dev->write(m_svg.constData(), m_svg.size()) == m_svg.size(); 0073 } 0074 0075 QString KisSvgBrush::defaultFileExtension() const 0076 { 0077 return QString(".svg"); 0078 } 0079 0080 void KisSvgBrush::toXML(QDomDocument& d, QDomElement& e) const 0081 { 0082 predefinedBrushToXML("svg_brush", e); 0083 KisBrush::toXML(d, e); 0084 }