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 #ifndef KIS_ABR_BRUSH_COLLECTION_H
0009 #define KIS_ABR_BRUSH_COLLECTION_H
0010 
0011 #include <QImage>
0012 #include <QVector>
0013 #include <QDataStream>
0014 #include <QString>
0015 #include <kis_debug.h>
0016 
0017 #include <kis_scaling_size_brush.h>
0018 #include <kis_types.h>
0019 #include <kis_shared.h>
0020 #include <brushengine/kis_paint_information.h>
0021 #include <kis_abr_brush.h>
0022 
0023 
0024 class QString;
0025 class QIODevice;
0026 
0027 
0028 struct AbrInfo;
0029 
0030 /**
0031  * load a collection of brushes from an abr file
0032  */
0033 class BRUSH_EXPORT KisAbrBrushCollection
0034 {
0035 
0036 protected:
0037 
0038 public:
0039 
0040     /// Construct brush to load filename later as brush
0041     KisAbrBrushCollection(const QString& filename);
0042 
0043     ~KisAbrBrushCollection() {}
0044 
0045     bool load();
0046 
0047     bool loadFromDevice(QIODevice *dev);
0048 
0049     bool save();
0050 
0051     bool saveToDevice(QIODevice* dev) const;
0052 
0053     bool isLoaded() const;
0054 
0055     /**
0056      * @return a preview of the brush
0057      */
0058     QImage image() const;
0059 
0060     /**
0061      * @return default file extension for saving the brush
0062      */
0063     QString defaultFileExtension() const;
0064 
0065     QList<KisAbrBrushSP> brushes() const {
0066         return m_abrBrushes->values();
0067     }
0068 
0069     QSharedPointer<QMap<QString, KisAbrBrushSP>> brushesMap() const {
0070         return m_abrBrushes;
0071     }
0072 
0073     KisAbrBrushSP brushByName(QString name) const {
0074         if (m_abrBrushes->contains(name)) {
0075             return m_abrBrushes.data()->operator[](name);
0076         }
0077         return KisAbrBrushSP();
0078     }
0079 
0080     QDateTime lastModified() const {
0081         return m_lastModified;
0082     }
0083 
0084     QString filename() const {
0085         return m_filename;
0086     }
0087 
0088 protected:
0089     KisAbrBrushCollection(const KisAbrBrushCollection& rhs);
0090 
0091     void toXML(QDomDocument& d, QDomElement& e) const;
0092 
0093 private:
0094 
0095     qint32 abr_brush_load(QDataStream & abr, AbrInfo *abr_hdr, const QString filename, qint32 image_ID, qint32 id);
0096     qint32 abr_brush_load_v12(QDataStream & abr, AbrInfo *abr_hdr, const QString filename, qint32 image_ID, qint32 id);
0097     quint32 abr_brush_load_v6(QDataStream & abr, AbrInfo *abr_hdr, const QString filename, qint32 image_ID, qint32 id);
0098 
0099     bool m_isLoaded;
0100     QDateTime m_lastModified;
0101     QString m_filename;
0102     QSharedPointer<QMap<QString, KisAbrBrushSP>> m_abrBrushes;
0103 };
0104 
0105 typedef QSharedPointer<KisAbrBrushCollection> KisAbrBrushCollectionSP;
0106 
0107 #endif
0108