File indexing completed on 2024-05-12 15:56:09
0001 /* 0002 * SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KIS_ABR_TRANSLATOR_H 0008 #define KIS_ABR_TRANSLATOR_H 0009 0010 0011 #include <QString> 0012 #include <QDomDocument> 0013 const QString ABR_PRESET_START = "START"; 0014 0015 const QString ABR_OBJECT = "Objc"; 0016 const QString ABR_PRESET_NAME = "Nm "; 0017 const QString ABR_BRUSH_DIAMETER = "Dmtr"; 0018 const QString ABR_BRUSH_HARDNESS = "Hrdn"; 0019 const QString ABR_BRUSH_ANGLE = "Angl"; 0020 const QString ABR_BRUSH_ROUNDNESS = "Rndn"; 0021 const QString ABR_BRUSH_SPACING = "Spcn"; 0022 const QString ABR_BRUSH_INTR = "Intr"; 0023 const QString ABR_FLIP_X = "flipX"; 0024 const QString ABR_FLIP_Y = "flipY"; 0025 const QString ABR_USE_TIP_DYNAMICS = "useTipDynamics"; 0026 const QString ABR_TIP_DYNAMICS_MINUMUM_DIAMETER = "minimumDiameter"; 0027 const QString ABR_TIP_DYNAMICS_MINUMUM_ROUNDNESS = "minimumRoundness"; 0028 const QString ABR_TIP_DYNAMICS_TILT_SCALE = "tiltScale"; 0029 const QString ABR_SZVR = "szVr"; // size variance? 0030 const QString ABR_DYNAMICS_FADE_STEP = "fStp"; 0031 const QString ABR_DYNAMICS_JITTER = "jitter"; 0032 const QString ABR_ANGLE_DYNAMICS = "angleDynamics"; 0033 const QString ABR_CONTROL = "bVTy"; // control of the attribute 0034 const QString ABR_ROUNDNESS_DYNAMICS = "roundnessDynamics"; 0035 const QString ABR_USE_SCATTER = "useScatter"; 0036 const QString ABR_DUAL_BRUSH = "dualBrush"; 0037 const QString ABR_USE_DUAL_BRUSH = "useDualBrush"; 0038 const QString ABR_BRUSH_GROUP = "brushGroup"; 0039 const QString ABR_USE_BRUSH_GROUP = "useBrushGroup"; 0040 const QString ABR_USE_TEXTURE = "useTexture"; 0041 const QString ABR_USE_PAINT_DYNAMICS = "usePaintDynamics"; 0042 const QString ABR_USE_COLOR_DYNAMICS = "useColorDynamics"; 0043 const QString ABR_WET_EDGES = "Wtdg"; 0044 const QString ABR_NOISE = "Nose"; 0045 const QString ABR_AIRBRUSH = "Rpt "; // repeat 0046 0047 // TODO: if string comparisons would be slow, convert it to enum 0048 enum enumObjectTypes {BRUSH_PRESET, BRUSH, SIZE_VARIANCE, ANGLE_DYNAMICS, ROUNDNESS_DYNAMICS, DUAL_BRUSH, COUNT_DYNAMICS, SCATTER_DYNAMICS, BRUSH_GROUP}; 0049 const QString OBJECT_NAME_BRUSH_PRESET = ""; 0050 const QString OBJECT_NAME_BRUSH = "Brsh"; 0051 const QString OBJECT_NAME_SIZE_VARIANCE = "szVr"; 0052 const QString OBJECT_NAME_ANGLE_DYNAMICS = "angleDynamics"; 0053 const QString OBJECT_NAME_ROUNDNESS_DYNAMICS = "roundnessDynamics"; 0054 const QString OBJECT_NAME_DUAL_BRUSH = "dualBrush"; 0055 const QString OBJECT_NAME_COUNT_DYNAMICS = "countDynamics"; 0056 const QString OBJECT_NAME_SCATTER_DYNAMICS = "scatterDynamics"; 0057 const QString OBJECT_NAME_BRUSH_GROUP = "brushGroup"; 0058 const QString OBJECT_NAME_FLOW_JITTER = "prVr"; 0059 const QString OBJECT_NAME_OPACITY_VARIANCE = "opVr"; 0060 0061 const QString BRUSH_TYPE_COMPUTED = "computedBrush"; 0062 const QString BRUSH_TYPE_SAMPLED = "sampledBrush"; 0063 0064 enum enumAbrControllers { OFF, FADE, PEN_PRESSURE, PEN_TILT, STYLUS_WHEEL, ROTATION, INITIAL_DIRECTION, DIRECTION}; 0065 0066 0067 class AbrBrushProperties 0068 { 0069 public: 0070 void toXML(QDomDocument& , QDomElement&) const; 0071 void setupProperty(const QString &attributeName, const QString &type, const QString &value); 0072 void reset(); 0073 private: 0074 double m_diameter; 0075 double m_hardness; 0076 double m_angle; 0077 double m_roundness; 0078 double m_spacing; 0079 bool m_intr; 0080 bool m_flipX; 0081 bool m_flipY; 0082 0083 QString m_brushType; 0084 }; 0085 0086 0087 class AbrGroupProperties 0088 { 0089 public: 0090 void setupProperty(const QString &attributeName, const QString &type, const QString &value); 0091 0092 enumAbrControllers m_bVTy; 0093 int m_fadeStep; 0094 double m_sizeJitter; 0095 }; 0096 0097 #include <QHash> 0098 0099 class AbrTipDynamicsProperties 0100 { 0101 public: 0102 AbrTipDynamicsProperties(); 0103 void toXML(QDomDocument& , QDomElement&) const; 0104 void setupProperty(const QString &attributeName, const QString &type, const QString &value); 0105 void reset() { 0106 m_groupType.clear(); 0107 } 0108 private: 0109 bool m_useTipDynamics; 0110 bool m_flipX; 0111 bool m_flipY; 0112 double m_minumumDiameter; 0113 double m_minumumRoundness; 0114 double m_tiltScale; 0115 0116 AbrGroupProperties m_sizeVarianceProperties; 0117 AbrGroupProperties m_angleProperties; 0118 AbrGroupProperties m_RoundnessProperties; 0119 0120 QString m_groupType; 0121 0122 QHash<QString, AbrGroupProperties*> m_groups; 0123 }; 0124 0125 0126 class AbrDualBrushProperties 0127 { 0128 public: 0129 bool useDualBrush; 0130 void toXML(QDomDocument& , QDomElement&) const; 0131 }; 0132 0133 class AbrBrushGroupProperties 0134 { 0135 public: 0136 bool useBrushGroup; 0137 bool useTexture; 0138 bool usePaintDynamics; 0139 bool useColorDynamics; 0140 bool wetEdges; 0141 bool noise; 0142 bool repeat; 0143 void toXML(QDomDocument& , QDomElement&) const; 0144 }; 0145 0146 class KisAbrTranslator 0147 { 0148 public: 0149 KisAbrTranslator(); 0150 ~KisAbrTranslator(); 0151 0152 0153 void addEntry(const QString &attributeName, const QString &type, const QString &value); 0154 0155 QString toString(); 0156 void finishPreset(); 0157 void clean(); 0158 0159 private: 0160 void init(); 0161 void setupObjectType(const QString &type); 0162 void setupBrush(const QString &attributeName, const QString &type, const QString &value); 0163 private: 0164 QDomDocument m_doc; 0165 QDomElement m_root; 0166 QString m_currentObjectName; 0167 AbrBrushProperties m_abrBrushProperties; 0168 AbrTipDynamicsProperties m_abrTipDynamics; 0169 }; 0170 0171 #endif