File indexing completed on 2024-05-12 15:56:08

0001 /*
0002  *  SPDX-FileCopyrightText: 2010 Boudewijn Rempt <boud@valdyas.org>
0003  *  SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0004  *  SPDX-FileCopyrightText: 2007 Eric Lamarque <eric.lamarque@free.fr>
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 #include "kis_abr_brush.h"
0009 #include "kis_abr_brush_collection.h"
0010 
0011 #include <QDomElement>
0012 #include <QFile>
0013 #include <QImage>
0014 #include <QPoint>
0015 #include <QByteArray>
0016 #include <QBuffer>
0017 #include <QCryptographicHash>
0018 
0019 #include <klocalizedstring.h>
0020 
0021 #include <KoColor.h>
0022 
0023 #include "kis_datamanager.h"
0024 #include "kis_paint_device.h"
0025 #include "kis_global.h"
0026 #include "kis_image.h"
0027 
0028 #define DEFAULT_SPACING 0.25
0029 
0030 KisAbrBrush::KisAbrBrush(const QString& filename, KisAbrBrushCollection *parent)
0031     : KisScalingSizeBrush(filename)
0032     , m_parent(parent)
0033 {
0034     setBrushType(INVALID);
0035     setSpacing(DEFAULT_SPACING);
0036 }
0037 
0038 KisAbrBrush::KisAbrBrush(const KisAbrBrush& rhs)
0039     : KisScalingSizeBrush(rhs)
0040     , m_parent(0)
0041 {
0042     // Warning! The brush became detached from the parent collection!
0043 }
0044 
0045 KisAbrBrush::KisAbrBrush(const KisAbrBrush& rhs, KisAbrBrushCollection *parent)
0046     : KisScalingSizeBrush(rhs)
0047     , m_parent(parent)
0048 {
0049 }
0050 
0051 KoResourceSP KisAbrBrush::clone() const
0052 {
0053     return KoResourceSP(new KisAbrBrush(*this));
0054 }
0055 
0056 bool KisAbrBrush::isSerializable() const
0057 {
0058     return false;
0059 }
0060 
0061 bool KisAbrBrush::loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface)
0062 {
0063     Q_UNUSED(dev);
0064     Q_UNUSED(resourcesInterface);
0065     return false;
0066 }
0067 
0068 bool KisAbrBrush::saveToDevice(QIODevice *dev) const
0069 {
0070     Q_UNUSED(dev);
0071     return false;
0072 }
0073 
0074 void KisAbrBrush::setBrushTipImage(const QImage& image)
0075 {
0076     setValid(true);
0077     setBrushType(MASK);
0078 
0079     KisBrush::setBrushTipImage(image);
0080 }
0081 
0082 void KisAbrBrush::toXML(QDomDocument& d, QDomElement& e) const
0083 {
0084     e.setAttribute("name", name()); // legacy
0085     predefinedBrushToXML("abr_brush", e);
0086     KisBrush::toXML(d, e);
0087 }
0088 
0089 QString KisAbrBrush::defaultFileExtension() const
0090 {
0091     return QString();
0092 }
0093 
0094 QImage KisAbrBrush::brushTipImage() const
0095 {
0096     if (KisBrush::brushTipImage().isNull() && m_parent) {
0097         m_parent->load();
0098     }
0099     return KisBrush::brushTipImage();
0100 }