File indexing completed on 2024-06-09 04:27:49
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef _KIS_SPRITER_EXPORT_H_ 0008 #define _KIS_SPRITER_EXPORT_H_ 0009 0010 #include <QVariant> 0011 #include <QDomDocument> 0012 #include <QList> 0013 0014 #include <KisImportExportFilter.h> 0015 #include <kis_types.h> 0016 0017 struct SpriterFile { 0018 qreal id {0.0}; 0019 QString name; 0020 QString pathName; 0021 QString baseName; 0022 QString layerName; 0023 qreal width {0.0}; 0024 qreal height {0.0}; 0025 qreal x {0.0}; 0026 qreal y {0.0}; 0027 }; 0028 0029 struct Folder { 0030 qreal id {0.0}; 0031 QString name; 0032 QString pathName; 0033 QString baseName; 0034 QString groupName; 0035 QList<SpriterFile> files; 0036 }; 0037 0038 struct Bone { 0039 qreal id {0.0}; 0040 const Bone *parentBone {nullptr}; 0041 QString name; 0042 qreal x {0.0}; 0043 qreal y {0.0}; 0044 qreal width {0.0}; 0045 qreal height {0.0}; 0046 qreal localX {0.0}; 0047 qreal localY {0.0}; 0048 qreal localAngle {0.0}; 0049 qreal localScaleX {0.0}; 0050 qreal localScaleY {0.0}; 0051 qreal fixLocalX {0.0}; 0052 qreal fixLocalY {0.0}; 0053 qreal fixLocalAngle {0.0}; 0054 qreal fixLocalScaleX {0.0}; 0055 qreal fixLocalScaleY {0.0}; 0056 QList<Bone*> bones; 0057 0058 ~Bone() { 0059 qDeleteAll(bones); 0060 bones.clear(); 0061 } 0062 }; 0063 0064 struct SpriterSlot { 0065 QString name; 0066 bool defaultAttachmentFlag = false; 0067 }; 0068 0069 struct SpriterObject { 0070 qreal id {0.0}; 0071 qreal folderId {0.0}; 0072 qreal fileId {0.0}; 0073 Bone *bone {nullptr}; 0074 SpriterSlot *slot {nullptr}; 0075 qreal x {0.0}; 0076 qreal y {0.0}; 0077 qreal localX {0.0}; 0078 qreal localY {0.0}; 0079 qreal localAngle {0.0}; 0080 qreal localScaleX {0.0}; 0081 qreal localScaleY {0.0}; 0082 qreal fixLocalX {0.0}; 0083 qreal fixLocalY {0.0}; 0084 qreal fixLocalAngle {0.0}; 0085 qreal fixLocalScaleX {0.0}; 0086 qreal fixLocalScaleY {0.0}; 0087 0088 ~SpriterObject() { 0089 delete slot; 0090 } 0091 }; 0092 0093 class KisSpriterExport : public KisImportExportFilter 0094 { 0095 Q_OBJECT 0096 public: 0097 KisSpriterExport(QObject *parent, const QVariantList &); 0098 ~KisSpriterExport() override; 0099 bool supportsIO() const override { return false; } 0100 KisImportExportErrorCode convert(KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration = 0) override; 0101 void initializeCapabilities() override; 0102 private: 0103 0104 KisImportExportErrorCode savePaintDevice(KisPaintDeviceSP dev, const QString &fileName); 0105 KisImportExportErrorCode parseFolder(KisGroupLayerSP parentGroup, const QString &folderName, const QString &basePath, int *folderId = 0); 0106 Bone *parseBone(const Bone *parent, KisGroupLayerSP groupLayer); 0107 void fixBone(Bone *bone); 0108 void fillScml(QDomDocument &scml, const QString &entityName); 0109 void writeBoneRef(const Bone *bone, QDomElement &mainline, QDomDocument &scml); 0110 void writeBone(const Bone *bone, QDomElement &timeline, QDomDocument &scml); 0111 0112 KisImageSP m_image; 0113 qreal m_timelineid {0.0}; 0114 QList<Folder> m_folders; 0115 Bone *m_rootBone {nullptr}; 0116 QList<SpriterObject> m_objects; 0117 KisGroupLayerSP m_rootLayer; // Not the image's root later, but the one that is named "root" 0118 KisLayerSP m_boneLayer; 0119 0120 }; 0121 0122 #endif