Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAslLayerStyleSerializer Class Reference

#include <kis_asl_layer_style_serializer.h>

Public Member Functions

void assignAllLayerStylesToLayers (KisNodeSP root, const QString &storageLocation)
 
QDomDocument formPsdXmlDocument () const
 
QDomDocument formXmlDocument () const
 
QVector< KoAbstractGradientSPgradients () const
 
bool isInitialized ()
 
bool isValid ()
 
 KisAslLayerStyleSerializer ()
 
QHash< QString, KoPatternSPpatterns () const
 
void readFromDevice (QIODevice &device)
 
bool readFromFile (const QString &filename)
 
void readFromPSDXML (const QDomDocument &doc)
 
void registerPSDPattern (const QDomDocument &doc)
 
void saveToDevice (QIODevice &device)
 
bool saveToFile (const QString &filename)
 
void setStyles (const QVector< KisPSDLayerStyleSP > &styles)
 
QVector< KisPSDLayerStyleSPstyles () const
 
QHash< QString, KisPSDLayerStyleSPstylesHash ()
 
 ~KisAslLayerStyleSerializer ()
 

Static Public Member Functions

static QVector< KisPSDLayerStyleSPcollectAllLayerStyles (KisNodeSP root)
 
static QVector< KoResourceSPfetchEmbeddedResources (const KisPSDLayerStyle *style)
 

Private Member Functions

void assignGradientObject (KoAbstractGradientSP gradient, std::function< void(KoAbstractGradientSP)> setGradient)
 
void assignPatternObject (const QString &patternUuid, const QString &patternName, std::function< void(KoPatternSP)> setPattern)
 
void connectCatcherToStyle (KisPSDLayerStyle *style, const QString &prefix)
 
void newStyleStarted (bool isPsdStructure)
 
void registerPatternObject (const KoPatternSP pattern, const QString &patternUuid)
 

Static Private Member Functions

static QVector< KoPatternSPfetchAllPatterns (const KisPSDLayerStyle *style)
 

Private Attributes

KisAslCallbackObjectCatcher m_catcher
 
QVector< KoAbstractGradientSPm_gradientsStore
 
bool m_initialized {false}
 
bool m_isValid {true}
 
QSharedPointer< KisLocalStrokeResourcesm_localResourcesInterface
 
QHash< QString, KoPatternSPm_patternsStore
 
QHash< QString, KisPSDLayerStyleSPm_stylesHash
 
QVector< KisPSDLayerStyleSPm_stylesVector
 

Detailed Description

Definition at line 20 of file kis_asl_layer_style_serializer.h.

Constructor & Destructor Documentation

◆ KisAslLayerStyleSerializer()

KisAslLayerStyleSerializer::KisAslLayerStyleSerializer ( )

Definition at line 43 of file kis_asl_layer_style_serializer.cpp.

45{
46}
QSharedPointer< KisLocalStrokeResources > m_localResourcesInterface
a KisResourcesInterface-like resources storage for preloaded resources

◆ ~KisAslLayerStyleSerializer()

KisAslLayerStyleSerializer::~KisAslLayerStyleSerializer ( )

Definition at line 48 of file kis_asl_layer_style_serializer.cpp.

49{
50}

Member Function Documentation

◆ assignAllLayerStylesToLayers()

void KisAslLayerStyleSerializer::assignAllLayerStylesToLayers ( KisNodeSP root,
const QString & storageLocation )

Definition at line 1296 of file kis_asl_layer_style_serializer.cpp.

1297{
1299
1300 KisEmbeddedResourceStorageProxy resourcesProxy(storageLocation);
1301
1302 if (!storageLocation.isEmpty()) {
1303 Q_FOREACH(KoPatternSP pattern, patterns().values()) {
1304 resourcesProxy.addResource(pattern);
1305 }
1306 Q_FOREACH(KoAbstractGradientSP gradient, gradients()) {
1307 resourcesProxy.addResource(gradient);
1308 }
1309 }
1310
1311 Q_FOREACH (KisPSDLayerStyleSP style, m_stylesVector) {
1312 KisPSDLayerStyleSP newStyle = style->clone().dynamicCast<KisPSDLayerStyle>();
1313 newStyle->setResourcesInterface(resourcesProxy.detachedResourcesInterface());
1314 newStyle->setValid(true);
1315
1316 if (!storageLocation.isEmpty()) {
1317 resourcesProxy.addResource(newStyle);
1318 }
1319
1320 styles << newStyle;
1321 }
1322
1324 KisLayer* layer = qobject_cast<KisLayer*>(node.data());
1325
1326 if (layer && layer->layerStyle()) {
1327 QUuid uuid = layer->layerStyle()->uuid();
1328
1329 bool found = false;
1330
1331 Q_FOREACH (KisPSDLayerStyleSP style, styles) {
1332 if (style->uuid() == uuid) {
1333 layer->setLayerStyle(style->cloneWithResourcesSnapshot(style->resourcesInterface(), 0));
1334 found = true;
1335 break;
1336 }
1337 }
1338
1339 if (!found) {
1340 warnKrita << "WARNING: loading layer style for" << layer->name() << "failed! It requests inexistent style:" << uuid;
1341 }
1342 }
1343 });
1344}
QVector< KoAbstractGradientSP > gradients() const
QVector< KisPSDLayerStyleSP > styles() const
QVector< KisPSDLayerStyleSP > m_stylesVector
QHash< QString, KoPatternSP > patterns() const
#define warnKrita
Definition kis_debug.h:87
void recursiveApplyNodes(NodePointer node, Functor func)
QString name() const
KisPSDLayerStyleSP layerStyle
Definition kis_layer.cc:171
void setLayerStyle(KisPSDLayerStyleSP layerStyle)
Definition kis_layer.cc:254
The KisPSDLayerStyle class implements loading, saving and applying the PSD layer effects.

References KisEmbeddedResourceStorageProxy::addResource(), KisSharedPtr< T >::data(), KisEmbeddedResourceStorageProxy::detachedResourcesInterface(), gradients(), KisLayer::layerStyle, m_stylesVector, KisBaseNode::name(), patterns(), KisLayerUtils::recursiveApplyNodes(), KisLayer::setLayerStyle(), styles(), and warnKrita.

◆ assignGradientObject()

void KisAslLayerStyleSerializer::assignGradientObject ( KoAbstractGradientSP gradient,
std::function< void(KoAbstractGradientSP)> setGradient )
private

Definition at line 964 of file kis_asl_layer_style_serializer.cpp.

965{
966 m_gradientsStore.append(gradient);
967 m_localResourcesInterface->addResource(gradient);
968 setGradient(gradient);
969}
QVector< KoAbstractGradientSP > m_gradientsStore

References m_gradientsStore, and m_localResourcesInterface.

◆ assignPatternObject()

void KisAslLayerStyleSerializer::assignPatternObject ( const QString & patternUuid,
const QString & patternName,
std::function< void(KoPatternSP)> setPattern )
private

Definition at line 942 of file kis_asl_layer_style_serializer.cpp.

943{
944 Q_UNUSED(patternName);
945
946 KoPatternSP pattern;
947
948 if (!m_patternsStore.contains(patternUuid)) {
949 warnKrita << "WARNING: ASL style contains non-existent pattern reference! Searching for uuid: "
950 << patternUuid << " (name: " << patternName << ")";
951
952 QImage dumbImage(32, 32, QImage::Format_ARGB32);
953 dumbImage.fill(Qt::red);
954 KoPatternSP dumbPattern(new KoPattern(dumbImage, "invalid", ""));
955 registerPatternObject(dumbPattern, patternUuid + QString("_invalid"));
956 pattern = dumbPattern;
957 } else {
958 pattern = m_patternsStore[patternUuid];
959 }
960
961 setPattern(pattern);
962}
void registerPatternObject(const KoPatternSP pattern, const QString &patternUuid)
QHash< QString, KoPatternSP > m_patternsStore
Write API docs here.
Definition KoPattern.h:21

References m_patternsStore, registerPatternObject(), and warnKrita.

◆ collectAllLayerStyles()

QVector< KisPSDLayerStyleSP > KisAslLayerStyleSerializer::collectAllLayerStyles ( KisNodeSP root)
static

Definition at line 1276 of file kis_asl_layer_style_serializer.cpp.

1277{
1278 KisLayer* layer = qobject_cast<KisLayer*>(root.data());
1279 QVector<KisPSDLayerStyleSP> layerStyles;
1280
1281 if (layer && layer->layerStyle()) {
1282 KisPSDLayerStyleSP clone = layer->layerStyle()->clone().dynamicCast<KisPSDLayerStyle>();
1283 clone->setName(i18nc("Auto-generated layer style name for embedded styles (style itself)", "<%1> (embedded)", layer->name()));
1284 layerStyles << clone;
1285 }
1286
1287 KisNodeSP child = root->firstChild();
1288 while (child) {
1289 layerStyles += collectAllLayerStyles(child);
1290 child = child->nextSibling();
1291 }
1292
1293 return layerStyles;
1294}
static QVector< KisPSDLayerStyleSP > collectAllLayerStyles(KisNodeSP root)
KisNodeSP firstChild() const
Definition kis_node.cpp:361
KisNodeSP nextSibling() const
Definition kis_node.cpp:408

References collectAllLayerStyles(), KisSharedPtr< T >::data(), KisNode::firstChild(), KisLayer::layerStyle, KisBaseNode::name(), and KisNode::nextSibling().

◆ connectCatcherToStyle()

void KisAslLayerStyleSerializer::connectCatcherToStyle ( KisPSDLayerStyle * style,
const QString & prefix )
private

Definition at line 1003 of file kis_asl_layer_style_serializer.cpp.

1004{
1005 CONN_TEXT_RADDR("/null/Nm ", setName, style, KisPSDLayerStyle);
1006 CONN_TEXT_RADDR("/null/Idnt", setPsdUuid, style, KisPSDLayerStyle);
1007
1008 CONN_BOOL("/masterFXSwitch", setEnabled, style, KisPSDLayerStyle, prefix);
1009
1010 psd_layer_effects_drop_shadow *dropShadow = style->dropShadow();
1011
1012 CONN_COMPOSITE_OP("/DrSh/Md ", setBlendMode, dropShadow, psd_layer_effects_drop_shadow, prefix);
1013 CONN_COLOR("/DrSh/Clr ", setColor, dropShadow, psd_layer_effects_drop_shadow, prefix);
1014 CONN_UNITF("/DrSh/Opct", "#Prc", setOpacity, dropShadow, psd_layer_effects_drop_shadow, prefix);
1015 CONN_UNITF("/DrSh/lagl", "#Ang", setAngle, dropShadow, psd_layer_effects_drop_shadow, prefix);
1016 CONN_UNITF("/DrSh/Dstn", "#Pxl", setDistance, dropShadow, psd_layer_effects_drop_shadow, prefix);
1017 CONN_UNITF("/DrSh/Ckmt", "#Pxl", setSpread, dropShadow, psd_layer_effects_drop_shadow, prefix);
1018 CONN_UNITF("/DrSh/blur", "#Pxl", setSize, dropShadow, psd_layer_effects_drop_shadow, prefix);
1019 CONN_UNITF("/DrSh/Nose", "#Prc", setNoise, dropShadow, psd_layer_effects_drop_shadow, prefix);
1020 CONN_BOOL("/DrSh/enab", setEffectEnabled, dropShadow, psd_layer_effects_drop_shadow, prefix);
1021 CONN_BOOL("/DrSh/uglg", setUseGlobalLight, dropShadow, psd_layer_effects_drop_shadow, prefix);
1022 CONN_BOOL("/DrSh/AntA", setAntiAliased, dropShadow, psd_layer_effects_drop_shadow, prefix);
1023 CONN_BOOL("/DrSh/layerConceals", setKnocksOut, dropShadow, psd_layer_effects_drop_shadow, prefix);
1024 CONN_CURVE("/DrSh/TrnS", setContourLookupTable, dropShadow, psd_layer_effects_drop_shadow, prefix);
1025
1026 psd_layer_effects_inner_shadow *innerShadow = style->innerShadow();
1027
1028 CONN_COMPOSITE_OP("/IrSh/Md ", setBlendMode, innerShadow, psd_layer_effects_inner_shadow, prefix);
1029 CONN_COLOR("/IrSh/Clr ", setColor, innerShadow, psd_layer_effects_inner_shadow, prefix);
1030 CONN_UNITF("/IrSh/Opct", "#Prc", setOpacity, innerShadow, psd_layer_effects_inner_shadow, prefix);
1031 CONN_UNITF("/IrSh/lagl", "#Ang", setAngle, innerShadow, psd_layer_effects_inner_shadow, prefix);
1032 CONN_UNITF("/IrSh/Dstn", "#Pxl", setDistance, innerShadow, psd_layer_effects_inner_shadow, prefix);
1033 CONN_UNITF("/IrSh/Ckmt", "#Pxl", setSpread, innerShadow, psd_layer_effects_inner_shadow, prefix);
1034 CONN_UNITF("/IrSh/blur", "#Pxl", setSize, innerShadow, psd_layer_effects_inner_shadow, prefix);
1035 CONN_UNITF("/IrSh/Nose", "#Prc", setNoise, innerShadow, psd_layer_effects_inner_shadow, prefix);
1036 CONN_BOOL("/IrSh/enab", setEffectEnabled, innerShadow, psd_layer_effects_inner_shadow, prefix);
1037 CONN_BOOL("/IrSh/uglg", setUseGlobalLight, innerShadow, psd_layer_effects_inner_shadow, prefix);
1038 CONN_BOOL("/IrSh/AntA", setAntiAliased, innerShadow, psd_layer_effects_inner_shadow, prefix);
1039 CONN_CURVE("/IrSh/TrnS", setContourLookupTable, innerShadow, psd_layer_effects_inner_shadow, prefix);
1040
1041 psd_layer_effects_outer_glow *outerGlow = style->outerGlow();
1042
1043 CONN_COMPOSITE_OP("/OrGl/Md ", setBlendMode, outerGlow, psd_layer_effects_outer_glow, prefix);
1044 CONN_COLOR("/OrGl/Clr ", setColor, outerGlow, psd_layer_effects_outer_glow, prefix);
1045 CONN_UNITF("/OrGl/Opct", "#Prc", setOpacity, outerGlow, psd_layer_effects_outer_glow, prefix);
1046 CONN_UNITF("/OrGl/Ckmt", "#Pxl", setSpread, outerGlow, psd_layer_effects_outer_glow, prefix);
1047 CONN_UNITF("/OrGl/blur", "#Pxl", setSize, outerGlow, psd_layer_effects_outer_glow, prefix);
1048 CONN_UNITF("/OrGl/Nose", "#Prc", setNoise, outerGlow, psd_layer_effects_outer_glow, prefix);
1049 CONN_BOOL("/OrGl/enab", setEffectEnabled, outerGlow, psd_layer_effects_outer_glow, prefix);
1050 CONN_BOOL("/OrGl/AntA", setAntiAliased, outerGlow, psd_layer_effects_outer_glow, prefix);
1051 CONN_CURVE("/OrGl/TrnS", setContourLookupTable, outerGlow, psd_layer_effects_outer_glow, prefix);
1052
1053 QMap<QString, psd_technique_type> fillTechniqueMap;
1054 fillTechniqueMap.insert("PrBL", psd_technique_precise);
1055 fillTechniqueMap.insert("SfBL", psd_technique_softer);
1056 CONN_ENUM("/OrGl/GlwT", "BETE", setTechnique, fillTechniqueMap, psd_technique_type, outerGlow, psd_layer_effects_outer_glow, prefix);
1057
1058 CONN_GRADIENT("/OrGl/Grad", setGradient, outerGlow, psd_layer_effects_outer_glow, prefix);
1059
1060 CONN_UNITF("/OrGl/Inpr", "#Prc", setRange, outerGlow, psd_layer_effects_outer_glow, prefix);
1061 CONN_UNITF("/OrGl/ShdN", "#Prc", setJitter, outerGlow, psd_layer_effects_outer_glow, prefix);
1062
1063
1064 psd_layer_effects_inner_glow *innerGlow = style->innerGlow();
1065
1066 CONN_COMPOSITE_OP("/IrGl/Md ", setBlendMode, innerGlow, psd_layer_effects_inner_glow, prefix);
1067 CONN_COLOR("/IrGl/Clr ", setColor, innerGlow, psd_layer_effects_inner_glow, prefix);
1068 CONN_UNITF("/IrGl/Opct", "#Prc", setOpacity, innerGlow, psd_layer_effects_inner_glow, prefix);
1069 CONN_UNITF("/IrGl/Ckmt", "#Pxl", setSpread, innerGlow, psd_layer_effects_inner_glow, prefix);
1070 CONN_UNITF("/IrGl/blur", "#Pxl", setSize, innerGlow, psd_layer_effects_inner_glow, prefix);
1071 CONN_UNITF("/IrGl/Nose", "#Prc", setNoise, innerGlow, psd_layer_effects_inner_glow, prefix);
1072 CONN_BOOL("/IrGl/enab", setEffectEnabled, innerGlow, psd_layer_effects_inner_glow, prefix);
1073 CONN_BOOL("/IrGl/AntA", setAntiAliased, innerGlow, psd_layer_effects_inner_glow, prefix);
1074 CONN_CURVE("/IrGl/TrnS", setContourLookupTable, innerGlow, psd_layer_effects_inner_glow, prefix);
1075
1076 CONN_ENUM("/IrGl/GlwT", "BETE", setTechnique, fillTechniqueMap, psd_technique_type, innerGlow, psd_layer_effects_inner_glow, prefix);
1077
1078 CONN_GRADIENT("/IrGl/Grad", setGradient, innerGlow, psd_layer_effects_inner_glow, prefix);
1079
1080 CONN_UNITF("/IrGl/Inpr", "#Prc", setRange, innerGlow, psd_layer_effects_inner_glow, prefix);
1081 CONN_UNITF("/IrGl/ShdN", "#Prc", setJitter, innerGlow, psd_layer_effects_inner_glow, prefix);
1082
1083 QMap<QString, psd_glow_source> glowSourceMap;
1084 glowSourceMap.insert("SrcC", psd_glow_center);
1085 glowSourceMap.insert("SrcE", psd_glow_edge);
1086 CONN_ENUM("/IrGl/glwS", "IGSr", setSource, glowSourceMap, psd_glow_source, innerGlow, psd_layer_effects_inner_glow, prefix);
1087
1088
1089 psd_layer_effects_satin *satin = style->satin();
1090
1091 CONN_COMPOSITE_OP("/ChFX/Md ", setBlendMode, satin, psd_layer_effects_satin, prefix);
1092 CONN_COLOR("/ChFX/Clr ", setColor, satin, psd_layer_effects_satin, prefix);
1093
1094 CONN_UNITF("/ChFX/Opct", "#Prc", setOpacity, satin, psd_layer_effects_satin, prefix);
1095 CONN_UNITF("/ChFX/lagl", "#Ang", setAngle, satin, psd_layer_effects_satin, prefix);
1096 CONN_UNITF("/ChFX/Dstn", "#Pxl", setDistance, satin, psd_layer_effects_satin, prefix);
1097 CONN_UNITF("/ChFX/blur", "#Pxl", setSize, satin, psd_layer_effects_satin, prefix);
1098
1099 CONN_BOOL("/ChFX/enab", setEffectEnabled, satin, psd_layer_effects_satin, prefix);
1100 CONN_BOOL("/ChFX/AntA", setAntiAliased, satin, psd_layer_effects_satin, prefix);
1101 CONN_BOOL("/ChFX/Invr", setInvert, satin, psd_layer_effects_satin, prefix);
1102 CONN_CURVE("/ChFX/MpgS", setContourLookupTable, satin, psd_layer_effects_satin, prefix);
1103
1104 psd_layer_effects_color_overlay *colorOverlay = style->colorOverlay();
1105
1106 CONN_COMPOSITE_OP("/SoFi/Md ", setBlendMode, colorOverlay, psd_layer_effects_color_overlay, prefix);
1107 CONN_COLOR("/SoFi/Clr ", setColor, colorOverlay, psd_layer_effects_color_overlay, prefix);
1108 CONN_UNITF("/SoFi/Opct", "#Prc", setOpacity, colorOverlay, psd_layer_effects_color_overlay, prefix);
1109 CONN_BOOL("/SoFi/enab", setEffectEnabled, colorOverlay, psd_layer_effects_color_overlay, prefix);
1110
1111 psd_layer_effects_gradient_overlay *gradientOverlay = style->gradientOverlay();
1112
1113 CONN_COMPOSITE_OP("/GrFl/Md ", setBlendMode, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1114 CONN_UNITF("/GrFl/Opct", "#Prc", setOpacity, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1115 CONN_UNITF("/GrFl/Scl ", "#Prc", setScale, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1116 CONN_UNITF("/GrFl/Angl", "#Ang", setAngle, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1117 CONN_BOOL("/GrFl/enab", setEffectEnabled, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1118 CONN_BOOL("/GrFl/Dthr", setDither, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1119 CONN_BOOL("/GrFl/Rvrs", setReverse, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1120 CONN_BOOL("/GrFl/Algn", setAlignWithLayer, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1121 CONN_POINT("/GrFl/Ofst", setGradientOffset, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1122 CONN_GRADIENT("/GrFl/Grad", setGradient, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1123
1124
1125 QMap<QString, psd_gradient_style> gradientStyleMap;
1126 gradientStyleMap.insert("Lnr ", psd_gradient_style_linear);
1127 gradientStyleMap.insert("Rdl ", psd_gradient_style_radial);
1128 gradientStyleMap.insert("Angl", psd_gradient_style_angle);
1129 gradientStyleMap.insert("Rflc", psd_gradient_style_reflected);
1130 gradientStyleMap.insert("Dmnd", psd_gradient_style_diamond);
1131 CONN_ENUM("/GrFl/Type", "GrdT", setStyle, gradientStyleMap, psd_gradient_style, gradientOverlay, psd_layer_effects_gradient_overlay, prefix);
1132
1133 psd_layer_effects_pattern_overlay *patternOverlay = style->patternOverlay();
1134
1135 CONN_BOOL("/patternFill/enab", setEffectEnabled, patternOverlay, psd_layer_effects_pattern_overlay, prefix);
1136 CONN_COMPOSITE_OP("/patternFill/Md ", setBlendMode, patternOverlay, psd_layer_effects_pattern_overlay, prefix);
1137 CONN_UNITF("/patternFill/Opct", "#Prc", setOpacity, patternOverlay, psd_layer_effects_pattern_overlay, prefix);
1138 CONN_PATTERN("/patternFill/Ptrn", setPattern, patternOverlay, psd_layer_effects_pattern_overlay, prefix);
1139 CONN_UNITF("/patternFill/Scl ", "#Prc", setScale, patternOverlay, psd_layer_effects_pattern_overlay, prefix);
1140 CONN_BOOL("/patternFill/Algn", setAlignWithLayer, patternOverlay, psd_layer_effects_pattern_overlay, prefix);
1141 CONN_POINT("/patternFill/phase", setPatternPhase, patternOverlay, psd_layer_effects_pattern_overlay, prefix);
1142
1143 psd_layer_effects_stroke *stroke = style->stroke();
1144
1145 CONN_COMPOSITE_OP("/FrFX/Md ", setBlendMode, stroke, psd_layer_effects_stroke, prefix);
1146 CONN_BOOL("/FrFX/enab", setEffectEnabled, stroke, psd_layer_effects_stroke, prefix);
1147 CONN_UNITF("/FrFX/Opct", "#Prc", setOpacity, stroke, psd_layer_effects_stroke, prefix);
1148 CONN_UNITF("/FrFX/Sz ", "#Pxl", setSize, stroke, psd_layer_effects_stroke, prefix);
1149
1150 QMap<QString, psd_stroke_position> strokeStyleMap;
1151 strokeStyleMap.insert("OutF", psd_stroke_outside);
1152 strokeStyleMap.insert("InsF", psd_stroke_inside);
1153 strokeStyleMap.insert("CtrF", psd_stroke_center);
1154 CONN_ENUM("/FrFX/Styl", "FStl", setPosition, strokeStyleMap, psd_stroke_position, stroke, psd_layer_effects_stroke, prefix);
1155
1156 QMap<QString, psd_fill_type> strokeFillType;
1157 strokeFillType.insert("SClr", psd_fill_solid_color);
1158 strokeFillType.insert("GrFl", psd_fill_gradient);
1159 strokeFillType.insert("Ptrn", psd_fill_pattern);
1160 CONN_ENUM("/FrFX/PntT", "FrFl", setFillType, strokeFillType, psd_fill_type, stroke, psd_layer_effects_stroke, prefix);
1161
1162 // Color type
1163 CONN_COLOR("/FrFX/Clr ", setColor, stroke, psd_layer_effects_stroke, prefix);
1164
1165 // Gradient Type
1166 CONN_GRADIENT("/FrFX/Grad", setGradient, stroke, psd_layer_effects_stroke, prefix);
1167 CONN_UNITF("/FrFX/Angl", "#Ang", setAngle, stroke, psd_layer_effects_stroke, prefix);
1168 CONN_UNITF("/FrFX/Scl ", "#Prc", setScale, stroke, psd_layer_effects_stroke, prefix);
1169 CONN_ENUM("/FrFX/Type", "GrdT", setStyle, gradientStyleMap, psd_gradient_style, stroke, psd_layer_effects_stroke, prefix);
1170 CONN_BOOL("/FrFX/Rvrs", setReverse, stroke, psd_layer_effects_stroke, prefix);
1171 CONN_BOOL("/FrFX/Algn", setAlignWithLayer, stroke, psd_layer_effects_stroke, prefix);
1172 CONN_POINT("/FrFX/Ofst", setGradientOffset, stroke, psd_layer_effects_stroke, prefix);
1173 CONN_BOOL("/FrFX/Dthr", setDither, stroke, psd_layer_effects_stroke, prefix);
1174
1175 // Pattern type
1176
1177 CONN_PATTERN("/FrFX/Ptrn", setPattern, stroke, psd_layer_effects_stroke, prefix);
1178 CONN_BOOL("/FrFX/Lnkd", setAlignWithLayer, stroke, psd_layer_effects_stroke, prefix); // yes, we share the params...
1179 CONN_POINT("/FrFX/phase", setPatternPhase, stroke, psd_layer_effects_stroke, prefix);
1180
1181
1182 psd_layer_effects_bevel_emboss *bevelAndEmboss = style->bevelAndEmboss();
1183
1184 CONN_BOOL("/ebbl/enab", setEffectEnabled, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1185
1186 CONN_COMPOSITE_OP("/ebbl/hglM", setHighlightBlendMode, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1187 CONN_COLOR("/ebbl/hglC", setHighlightColor, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1188 CONN_UNITF("/ebbl/hglO", "#Prc", setHighlightOpacity, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1189
1190 CONN_COMPOSITE_OP("/ebbl/sdwM", setShadowBlendMode, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1191 CONN_COLOR("/ebbl/sdwC", setShadowColor, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1192 CONN_UNITF("/ebbl/sdwO", "#Prc", setShadowOpacity, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1193
1194 QMap<QString, psd_technique_type> bevelTechniqueMap;
1195 bevelTechniqueMap.insert("PrBL", psd_technique_precise);
1196 bevelTechniqueMap.insert("SfBL", psd_technique_softer);
1197 bevelTechniqueMap.insert("Slmt", psd_technique_slope_limit);
1198 CONN_ENUM("/ebbl/bvlT", "bvlT", setTechnique, bevelTechniqueMap, psd_technique_type, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1199
1200 QMap<QString, psd_bevel_style> bevelStyleMap;
1201 bevelStyleMap.insert("OtrB", psd_bevel_outer_bevel);
1202 bevelStyleMap.insert("InrB", psd_bevel_inner_bevel);
1203 bevelStyleMap.insert("Embs", psd_bevel_emboss);
1204 bevelStyleMap.insert("PlEb", psd_bevel_pillow_emboss);
1205 bevelStyleMap.insert("strokeEmboss", psd_bevel_stroke_emboss);
1206 CONN_ENUM("/ebbl/bvlS", "BESl", setStyle, bevelStyleMap, psd_bevel_style, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1207
1208 CONN_BOOL("/ebbl/uglg", setUseGlobalLight, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1209
1210 CONN_UNITF("/ebbl/lagl", "#Ang", setAngle, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1211 CONN_UNITF("/ebbl/Lald", "#Ang", setAltitude, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1212
1213 CONN_UNITF("/ebbl/srgR", "#Prc", setDepth, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1214
1215 CONN_UNITF("/ebbl/blur", "#Pxl", setSize, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1216
1217
1218 QMap<QString, psd_direction> bevelDirectionMap;
1219 bevelDirectionMap.insert("In ", psd_direction_up);
1220 bevelDirectionMap.insert("Out ", psd_direction_down);
1221 CONN_ENUM("/ebbl/bvlD", "BESs", setDirection, bevelDirectionMap, psd_direction, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1222
1223 CONN_CURVE("/ebbl/TrnS", setContourLookupTable, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1224
1225 CONN_BOOL("/ebbl/antialiasGloss", setGlossAntiAliased, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1226
1227 CONN_UNITF("/ebbl/Sftn", "#Pxl", setSoften, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1228
1229 // Use shape mode
1230
1231 CONN_BOOL("/ebbl/useShape", setContourEnabled, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1232 CONN_CURVE("/ebbl/MpgS", setGlossContourLookupTable, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1233 CONN_BOOL("/ebbl/AntA", setAntiAliased, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1234 CONN_UNITF("/ebbl/Inpr", "#Prc", setContourRange, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1235
1236 // Use texture mode
1237
1238 CONN_BOOL("/ebbl/useTexture", setTextureEnabled, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1239 CONN_BOOL("/ebbl/InvT", setTextureInvert, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1240 CONN_BOOL("/ebbl/Algn", setTextureAlignWithLayer, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1241 CONN_UNITF("/ebbl/Scl ", "#Prc", setTextureScale, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1242 CONN_UNITF("/ebbl/textureDepth ", "#Prc", setTextureDepth, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1243 CONN_PATTERN("/ebbl/Ptrn", setTexturePattern, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1244 CONN_POINT("/ebbl/phase", setTexturePhase, bevelAndEmboss, psd_layer_effects_bevel_emboss, prefix);
1245}
#define CONN_TEXT_RADDR(addr, method, object, type)
#define CONN_ENUM(addr, tag, method, map, mapped_type, object, type, prefix)
#define CONN_CURVE(addr, method, object, type, prefix)
#define CONN_COMPOSITE_OP(addr, method, object, type, prefix)
#define CONN_BOOL(addr, method, object, type, prefix)
#define CONN_UNITF(addr, unit, method, object, type, prefix)
#define CONN_GRADIENT(addr, method, object, type, prefix)
#define CONN_PATTERN(addr, method, object, type, prefix)
#define CONN_COLOR(addr, method, object, type, prefix)
#define CONN_POINT(addr, method, object, type, prefix)
psd_glow_source
Definition psd.h:129
@ psd_glow_edge
Definition psd.h:131
@ psd_glow_center
Definition psd.h:130
psd_direction
Definition psd.h:142
@ psd_direction_up
Definition psd.h:142
@ psd_direction_down
Definition psd.h:142
psd_gradient_style
Definition psd.h:101
@ psd_gradient_style_linear
Definition psd.h:102
@ psd_gradient_style_reflected
Definition psd.h:105
@ psd_gradient_style_angle
Definition psd.h:104
@ psd_gradient_style_radial
Definition psd.h:103
@ psd_gradient_style_diamond
Definition psd.h:106
psd_fill_type
Definition psd.h:123
@ psd_fill_solid_color
Definition psd.h:124
@ psd_fill_gradient
Definition psd.h:125
@ psd_fill_pattern
Definition psd.h:126
psd_technique_type
Definition psd.h:115
@ psd_technique_softer
Definition psd.h:116
@ psd_technique_precise
Definition psd.h:117
@ psd_technique_slope_limit
Definition psd.h:118
psd_bevel_style
Definition psd.h:134
@ psd_bevel_pillow_emboss
Definition psd.h:138
@ psd_bevel_inner_bevel
Definition psd.h:136
@ psd_bevel_stroke_emboss
Definition psd.h:139
@ psd_bevel_outer_bevel
Definition psd.h:135
@ psd_bevel_emboss
Definition psd.h:137
psd_stroke_position
Definition psd.h:121
@ psd_stroke_outside
Definition psd.h:121
@ psd_stroke_inside
Definition psd.h:121
@ psd_stroke_center
Definition psd.h:121
const psd_layer_effects_bevel_emboss * bevelAndEmboss() const
const psd_layer_effects_drop_shadow * dropShadow() const
const psd_layer_effects_color_overlay * colorOverlay() const
const psd_layer_effects_gradient_overlay * gradientOverlay() const
const psd_layer_effects_inner_glow * innerGlow() const
psd_layer_effects_stroke stroke
const psd_layer_effects_pattern_overlay * patternOverlay() const
const psd_layer_effects_inner_shadow * innerShadow() const
const psd_layer_effects_outer_glow * outerGlow() const
psd_layer_effects_satin satin

References KisPSDLayerStyle::bevelAndEmboss(), KisPSDLayerStyle::colorOverlay(), CONN_BOOL, CONN_COLOR, CONN_COMPOSITE_OP, CONN_CURVE, CONN_ENUM, CONN_GRADIENT, CONN_PATTERN, CONN_POINT, CONN_TEXT_RADDR, CONN_UNITF, KisPSDLayerStyle::dropShadow(), KisPSDLayerStyle::gradientOverlay(), KisPSDLayerStyle::innerGlow(), KisPSDLayerStyle::innerShadow(), KisPSDLayerStyle::outerGlow(), KisPSDLayerStyle::patternOverlay(), psd_bevel_emboss, psd_bevel_inner_bevel, psd_bevel_outer_bevel, psd_bevel_pillow_emboss, psd_bevel_stroke_emboss, psd_direction_down, psd_direction_up, psd_fill_gradient, psd_fill_pattern, psd_fill_solid_color, psd_glow_center, psd_glow_edge, psd_gradient_style_angle, psd_gradient_style_diamond, psd_gradient_style_linear, psd_gradient_style_radial, psd_gradient_style_reflected, psd_stroke_center, psd_stroke_inside, psd_stroke_outside, psd_technique_precise, psd_technique_slope_limit, psd_technique_softer, KisPSDLayerStyle::satin, and KisPSDLayerStyle::stroke.

◆ fetchAllPatterns()

QVector< KoPatternSP > KisAslLayerStyleSerializer::fetchAllPatterns ( const KisPSDLayerStyle * style)
staticprivate

Definition at line 263 of file kis_asl_layer_style_serializer.cpp.

264{
265 QVector <KoPatternSP> allPatterns;
266
267 if (style->patternOverlay()->effectEnabled()) {
268 allPatterns << style->patternOverlay()->pattern(style->resourcesInterface());
269 }
270
271 if (style->stroke()->effectEnabled() &&
272 style->stroke()->fillType() == psd_fill_pattern) {
273
274 allPatterns << style->stroke()->pattern(style->resourcesInterface());
275 }
276
277 if(style->bevelAndEmboss()->effectEnabled() &&
278 style->bevelAndEmboss()->textureEnabled()) {
279
280 allPatterns << style->bevelAndEmboss()->texturePattern(style->resourcesInterface());
281 }
282
283 KIS_SAFE_ASSERT_RECOVER(!allPatterns.contains(KoPatternSP()))
284 {
285 warnKrita << "WARNING: one or more patterns from the style is null";
286 allPatterns.removeAll(KoPatternSP());
287 }
288
289 return allPatterns;
290}
QSharedPointer< KoPattern > KoPatternSP
Definition KoPattern.h:16
bool effectEnabled() const
Definition psd.h:261
psd_fill_type fillType() const
Definition psd.h:341
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
KisResourcesInterfaceSP resourcesInterface
KoPatternSP texturePattern(KisResourcesInterfaceSP resourcesInterface) const
Definition psd.h:879
bool textureEnabled() const
Definition psd.h:866
KoPatternSP pattern(KisResourcesInterfaceSP resourcesInterface) const
Definition psd.h:1061

References KisPSDLayerStyle::bevelAndEmboss(), psd_layer_effects_shadow_base::effectEnabled(), psd_layer_effects_shadow_base::fillType(), KIS_SAFE_ASSERT_RECOVER, psd_layer_effects_overlay_base::pattern(), KisPSDLayerStyle::patternOverlay(), psd_fill_pattern, KisPSDLayerStyle::resourcesInterface, KisPSDLayerStyle::stroke, psd_layer_effects_bevel_emboss::textureEnabled(), psd_layer_effects_bevel_emboss::texturePattern(), and warnKrita.

◆ fetchEmbeddedResources()

QVector< KoResourceSP > KisAslLayerStyleSerializer::fetchEmbeddedResources ( const KisPSDLayerStyle * style)
static

Definition at line 750 of file kis_asl_layer_style_serializer.cpp.

751{
752 QVector<KoResourceSP> embeddedResources = implicitCastList<KoResourceSP>(fetchAllPatterns(style));
753
754 if (style->gradientOverlay()->effectEnabled()) {
755 embeddedResources << style->gradientOverlay()->gradient(style->resourcesInterface());
756 KIS_ASSERT(embeddedResources.last().data());
757 }
758
759 if (style->innerGlow()->effectEnabled() && style->innerGlow()->fillType() == psd_fill_gradient) {
760 embeddedResources << style->innerGlow()->gradient(style->resourcesInterface());
761 KIS_ASSERT(embeddedResources.last().data());
762 }
763
764 if (style->outerGlow()->effectEnabled() && style->outerGlow()->fillType() == psd_fill_gradient) {
765 embeddedResources << style->outerGlow()->gradient(style->resourcesInterface());
766 KIS_ASSERT(embeddedResources.last().data());
767 }
768
769 if (style->stroke()->effectEnabled() && style->stroke()->fillType() == psd_fill_gradient) {
770 embeddedResources << style->stroke()->gradient(style->resourcesInterface());
771 KIS_ASSERT(embeddedResources.last().data());
772 }
773
774 KIS_SAFE_ASSERT_RECOVER(!embeddedResources.contains(KoResourceSP()))
775 {
776 embeddedResources.removeAll(KoResourceSP());
777 }
778
779 return embeddedResources;
780}
static QVector< KoPatternSP > fetchAllPatterns(const KisPSDLayerStyle *style)
KoAbstractGradientSP gradient(KisResourcesInterfaceSP resourcesInterface) const
Definition psd.h:365
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
QSharedPointer< KoResource > KoResourceSP

References psd_layer_effects_shadow_base::effectEnabled(), fetchAllPatterns(), psd_layer_effects_shadow_base::fillType(), psd_layer_effects_shadow_base::gradient(), KisPSDLayerStyle::gradientOverlay(), KisPSDLayerStyle::innerGlow(), KIS_ASSERT, KIS_SAFE_ASSERT_RECOVER, KisPSDLayerStyle::outerGlow(), psd_fill_gradient, KisPSDLayerStyle::resourcesInterface, and KisPSDLayerStyle::stroke.

◆ formPsdXmlDocument()

QDomDocument KisAslLayerStyleSerializer::formPsdXmlDocument ( ) const

Definition at line 737 of file kis_asl_layer_style_serializer.cpp.

738{
739 QDomDocument doc = formXmlDocument();
740
741 QDomNode nullNode = findNodeByClassId("null", doc.documentElement());
742 QDomNode stylNode = findNodeByClassId("Styl", doc.documentElement());
743 QDomNode lefxNode = findNodeByClassId("Lefx", stylNode);
744
745 replaceAllChildren(lefxNode, nullNode);
746
747 return doc;
748}
void replaceAllChildren(QDomNode src, QDomNode dst)
QDomNode findNodeByClassId(const QString &classId, QDomNode parent)

References findNodeByClassId(), formXmlDocument(), and replaceAllChildren().

◆ formXmlDocument()

QDomDocument KisAslLayerStyleSerializer::formXmlDocument ( ) const

Definition at line 302 of file kis_asl_layer_style_serializer.cpp.

303{
304 KIS_ASSERT_RECOVER(!m_stylesVector.isEmpty()) { return QDomDocument(); }
305
306 QVector<KoPatternSP> allPatterns;
307
308 Q_FOREACH (KisPSDLayerStyleSP style, m_stylesVector) {
309 allPatterns += fetchAllPatterns(style.data());
310 }
311
312 QHash<KoPatternSP, QString> patternToUuidMap;
313
315
316 if (!allPatterns.isEmpty()) {
317 w.enterList(ResourceType::Patterns);
318
319 Q_FOREACH (KoPatternSP pattern, allPatterns) {
320 if (pattern) {
321 if (!patternToUuidMap.contains(pattern)) {
322 QString uuid = w.writePattern("", pattern);
323 patternToUuidMap.insert(pattern, uuid);
324 }
325 } else {
326 warnKrita << "WARNING: KisAslLayerStyleSerializer::saveToDevice: saved pattern is null!";
327 }
328 }
329
330 w.leaveList();
331 }
332
333 Q_FOREACH (KisPSDLayerStyleSP style, m_stylesVector) {
334
335 w.enterDescriptor("", "", "null");
336 w.writeText("Nm ", style->name());
337 w.writeText("Idnt", style->psdUuid());
338 w.leaveDescriptor();
339
340 w.enterDescriptor("", "", "Styl");
341
342 w.enterDescriptor("documentMode", "", "documentMode");
343 w.leaveDescriptor();
344
345 w.enterDescriptor("Lefx", "", "Lefx");
346
347 w.writeUnitFloat("Scl ", "#Prc", 100);
348 w.writeBoolean("masterFXSwitch", style->isEnabled());
349
350
351 // Drop Shadow
352 const psd_layer_effects_drop_shadow *dropShadow = style->dropShadow();
353 if (dropShadow->effectEnabled()) {
354 w.enterDescriptor("DrSh", "", "DrSh");
355
356 w.writeBoolean("enab", dropShadow->effectEnabled());
357 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(dropShadow->blendMode()));
358 w.writeColor("Clr ", dropShadow->color());
359
360 w.writeUnitFloat("Opct", "#Prc", dropShadow->opacity());
361 w.writeBoolean("uglg", dropShadow->useGlobalLight());
362 w.writeUnitFloat("lagl", "#Ang", dropShadow->angle());
363 w.writeUnitFloat("Dstn", "#Pxl", dropShadow->distance());
364 w.writeUnitFloat("Ckmt", "#Pxl", dropShadow->spread());
365 w.writeUnitFloat("blur", "#Pxl", dropShadow->size());
366 w.writeUnitFloat("Nose", "#Prc", dropShadow->noise());
367
368 w.writeBoolean("AntA", dropShadow->antiAliased());
369
370 // FIXME: save curves
371 w.writeCurve("TrnS",
372 "Linear",
373 QVector<QPointF>() << QPointF() << QPointF(255, 255));
374
375 w.writeBoolean("layerConceals", dropShadow->knocksOut());
376 w.leaveDescriptor();
377 }
378
379 // Inner Shadow
380 const psd_layer_effects_inner_shadow *innerShadow = style->innerShadow();
381 if (innerShadow->effectEnabled()) {
382 w.enterDescriptor("IrSh", "", "IrSh");
383
384 w.writeBoolean("enab", innerShadow->effectEnabled());
385 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(innerShadow->blendMode()));
386 w.writeColor("Clr ", innerShadow->color());
387
388 w.writeUnitFloat("Opct", "#Prc", innerShadow->opacity());
389 w.writeBoolean("uglg", innerShadow->useGlobalLight());
390 w.writeUnitFloat("lagl", "#Ang", innerShadow->angle());
391 w.writeUnitFloat("Dstn", "#Pxl", innerShadow->distance());
392 w.writeUnitFloat("Ckmt", "#Pxl", innerShadow->spread());
393 w.writeUnitFloat("blur", "#Pxl", innerShadow->size());
394 w.writeUnitFloat("Nose", "#Prc", innerShadow->noise());
395
396 w.writeBoolean("AntA", innerShadow->antiAliased());
397
398 // FIXME: save curves
399 w.writeCurve("TrnS",
400 "Linear",
401 QVector<QPointF>() << QPointF() << QPointF(255, 255));
402
403 w.leaveDescriptor();
404 }
405
406 // Outer Glow
407 const psd_layer_effects_outer_glow *outerGlow = style->outerGlow();
408 if (outerGlow->effectEnabled()) {
409 w.enterDescriptor("OrGl", "", "OrGl");
410
411 w.writeBoolean("enab", outerGlow->effectEnabled());
412 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(outerGlow->blendMode()));
413
414 if (outerGlow->fillType() == psd_fill_gradient && outerGlow->gradient(style->resourcesInterface())) {
415 KoSegmentGradient *segmentGradient = dynamic_cast<KoSegmentGradient*>(outerGlow->gradient(style->resourcesInterface()).data());
416 KoStopGradient *stopGradient = dynamic_cast<KoStopGradient*>(outerGlow->gradient(style->resourcesInterface()).data());
417
418 if (segmentGradient && segmentGradient->valid()) {
419 w.writeSegmentGradient("Grad", *segmentGradient);
420 } else if (stopGradient && stopGradient->valid()) {
421 w.writeStopGradient("Grad", *stopGradient);
422 } else {
423 warnKrita << "WARNING: OG: Unknown gradient type!";
424 w.writeColor("Clr ", outerGlow->color());
425 }
426
427 } else {
428 w.writeColor("Clr ", outerGlow->color());
429 }
430
431 w.writeUnitFloat("Opct", "#Prc", outerGlow->opacity());
432
433 w.writeEnum("GlwT", "BETE", techniqueToString(outerGlow->technique(), "BETE"));
434
435 w.writeUnitFloat("Ckmt", "#Pxl", outerGlow->spread());
436 w.writeUnitFloat("blur", "#Pxl", outerGlow->size());
437 w.writeUnitFloat("Nose", "#Prc", outerGlow->noise());
438
439 w.writeUnitFloat("ShdN", "#Prc", outerGlow->jitter());
440
441 w.writeBoolean("AntA", outerGlow->antiAliased());
442
443 // FIXME: save curves
444 w.writeCurve("TrnS",
445 "Linear",
446 QVector<QPointF>() << QPointF() << QPointF(255, 255));
447
448 w.writeUnitFloat("Inpr", "#Prc", outerGlow->range());
449
450 w.leaveDescriptor();
451 }
452
453 // Inner Glow
454 const psd_layer_effects_inner_glow *innerGlow = style->innerGlow();
455 if (innerGlow->effectEnabled()) {
456 w.enterDescriptor("IrGl", "", "IrGl");
457
458 w.writeBoolean("enab", innerGlow->effectEnabled());
459 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(innerGlow->blendMode()));
460
461 if (innerGlow->fillType() == psd_fill_gradient && innerGlow->gradient(style->resourcesInterface())) {
462 KoSegmentGradient *segmentGradient = dynamic_cast<KoSegmentGradient*>(innerGlow->gradient(style->resourcesInterface()).data());
463 KoStopGradient *stopGradient = dynamic_cast<KoStopGradient*>(innerGlow->gradient(style->resourcesInterface()).data());
464
465 if (segmentGradient && innerGlow->gradient(style->resourcesInterface())->valid()) {
466 w.writeSegmentGradient("Grad", *segmentGradient);
467 } else if (stopGradient && innerGlow->gradient(style->resourcesInterface())->valid()) {
468 w.writeStopGradient("Grad", *stopGradient);
469 } else {
470 warnKrita << "WARNING: IG: Unknown gradient type!";
471 w.writeColor("Clr ", innerGlow->color());
472 }
473
474 } else {
475 w.writeColor("Clr ", innerGlow->color());
476 }
477
478 w.writeUnitFloat("Opct", "#Prc", innerGlow->opacity());
479
480 w.writeEnum("GlwT", "BETE", techniqueToString(innerGlow->technique(), "BETE"));
481
482 w.writeUnitFloat("Ckmt", "#Pxl", innerGlow->spread());
483 w.writeUnitFloat("blur", "#Pxl", innerGlow->size());
484
485 // NOTE: order is swapped in ASL!
486 w.writeUnitFloat("ShdN", "#Prc", innerGlow->jitter());
487 w.writeUnitFloat("Nose", "#Prc", innerGlow->noise());
488
489 w.writeBoolean("AntA", innerGlow->antiAliased());
490
491 w.writeEnum("glwS", "IGSr", innerGlow->source() == psd_glow_center ? "SrcC" : "SrcE");
492
493 // FIXME: save curves
494 w.writeCurve("TrnS",
495 "Linear",
496 QVector<QPointF>() << QPointF() << QPointF(255, 255));
497
498 w.writeUnitFloat("Inpr", "#Prc", innerGlow->range());
499
500 w.leaveDescriptor();
501 }
502
503 // Bevel and Emboss
504 const psd_layer_effects_bevel_emboss *bevelAndEmboss = style->bevelAndEmboss();
505 if (bevelAndEmboss->effectEnabled()) {
506 w.enterDescriptor("ebbl", "", "ebbl");
507
508 w.writeBoolean("enab", bevelAndEmboss->effectEnabled());
509
510 w.writeEnum("hglM", "BlnM", compositeOpToBlendMode(bevelAndEmboss->highlightBlendMode()));
511 w.writeColor("hglC", bevelAndEmboss->highlightColor());
512 w.writeUnitFloat("hglO", "#Prc", bevelAndEmboss->highlightOpacity());
513
514 w.writeEnum("sdwM", "BlnM", compositeOpToBlendMode(bevelAndEmboss->shadowBlendMode()));
515 w.writeColor("sdwC", bevelAndEmboss->shadowColor());
516 w.writeUnitFloat("sdwO", "#Prc", bevelAndEmboss->shadowOpacity());
517
518 w.writeEnum("bvlT", "bvlT", techniqueToString(bevelAndEmboss->technique(), "bvlT"));
519 w.writeEnum("bvlS", "BESl", bevelStyleToString(bevelAndEmboss->style()));
520
521 w.writeBoolean("uglg", bevelAndEmboss->useGlobalLight());
522 w.writeUnitFloat("lagl", "#Ang", bevelAndEmboss->angle());
523 w.writeUnitFloat("Lald", "#Ang", bevelAndEmboss->altitude());
524
525 w.writeUnitFloat("srgR", "#Prc", bevelAndEmboss->depth());
526 w.writeUnitFloat("blur", "#Pxl", bevelAndEmboss->size());
527 w.writeEnum("bvlD", "BESs", bevelAndEmboss->direction() == psd_direction_up ? "In " : "Out ");
528
529 // FIXME: save curves
530 w.writeCurve("TrnS",
531 "Linear",
532 QVector<QPointF>() << QPointF() << QPointF(255, 255));
533
534 w.writeBoolean("antialiasGloss", bevelAndEmboss->glossAntiAliased());
535
536 w.writeUnitFloat("Sftn", "#Pxl", bevelAndEmboss->soften());
537
538 if (bevelAndEmboss->contourEnabled()) {
539 w.writeBoolean("useShape", bevelAndEmboss->contourEnabled());
540
541 // FIXME: save curves
542 w.writeCurve("MpgS",
543 "Linear",
544 QVector<QPointF>() << QPointF() << QPointF(255, 255));
545
546 w.writeBoolean("AntA", bevelAndEmboss->antiAliased());
547 w.writeUnitFloat("Inpr", "#Prc", bevelAndEmboss->contourRange());
548 }
549
550 w.writeBoolean("useTexture", bevelAndEmboss->textureEnabled());
551
552 if (bevelAndEmboss->textureEnabled()) {
553 w.writeBoolean("InvT", bevelAndEmboss->textureInvert());
554 w.writeBoolean("Algn", bevelAndEmboss->textureAlignWithLayer());
555 w.writeUnitFloat("Scl ", "#Prc", bevelAndEmboss->textureScale());
556 w.writeUnitFloat("textureDepth ", "#Prc", bevelAndEmboss->textureDepth());
557
558 KoPatternSP pattern = bevelAndEmboss->texturePattern(style->resourcesInterface());
559 w.writePatternRef("Ptrn", pattern, fetchPatternUuidSafe(pattern, patternToUuidMap));
560 w.writePhasePoint("phase", bevelAndEmboss->texturePhase());
561 }
562
563 w.leaveDescriptor();
564 }
565
566 // Satin
567 const psd_layer_effects_satin *satin = style->satin();
568 if (satin->effectEnabled()) {
569 w.enterDescriptor("ChFX", "", "ChFX");
570
571 w.writeBoolean("enab", satin->effectEnabled());
572 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(satin->blendMode()));
573 w.writeColor("Clr ", satin->color());
574
575 w.writeBoolean("AntA", satin->antiAliased());
576 w.writeBoolean("Invr", satin->invert());
577 w.writeUnitFloat("Opct", "#Prc", satin->opacity());
578 w.writeUnitFloat("lagl", "#Ang", satin->angle());
579 w.writeUnitFloat("Dstn", "#Pxl", satin->distance());
580 w.writeUnitFloat("blur", "#Pxl", satin->size());
581
582 // FIXME: save curves
583 w.writeCurve("MpgS",
584 "Linear",
585 QVector<QPointF>() << QPointF() << QPointF(255, 255));
586
587 w.leaveDescriptor();
588 }
589
590 const psd_layer_effects_color_overlay *colorOverlay = style->colorOverlay();
591 if (colorOverlay->effectEnabled()) {
592 w.enterDescriptor("SoFi", "", "SoFi");
593
594 w.writeBoolean("enab", colorOverlay->effectEnabled());
595 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(colorOverlay->blendMode()));
596 w.writeUnitFloat("Opct", "#Prc", colorOverlay->opacity());
597 w.writeColor("Clr ", colorOverlay->color());
598
599 w.leaveDescriptor();
600 }
601
602 // Gradient Overlay
603 const psd_layer_effects_gradient_overlay *gradientOverlay = style->gradientOverlay();
604 KoSegmentGradient *segmentGradient = dynamic_cast<KoSegmentGradient*>(gradientOverlay->gradient(style->resourcesInterface()).data());
605 KoStopGradient *stopGradient = dynamic_cast<KoStopGradient*>(gradientOverlay->gradient(style->resourcesInterface()).data());
606
607 if (gradientOverlay->effectEnabled() && ((segmentGradient && segmentGradient->valid()) || (stopGradient && stopGradient->valid()))) {
608 w.enterDescriptor("GrFl", "", "GrFl");
609
610 w.writeBoolean("enab", gradientOverlay->effectEnabled());
611 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(gradientOverlay->blendMode()));
612 w.writeUnitFloat("Opct", "#Prc", gradientOverlay->opacity());
613
614 if (segmentGradient && segmentGradient->valid()) {
615 w.writeSegmentGradient("Grad", *segmentGradient);
616 } else if (stopGradient && stopGradient->valid()) {
617 w.writeStopGradient("Grad", *stopGradient);
618 }
619
620 w.writeUnitFloat("Angl", "#Ang", gradientOverlay->angle());
621
622 w.writeEnum("Type", "GrdT", gradientTypeToString(gradientOverlay->style()));
623
624 w.writeBoolean("Rvrs", gradientOverlay->reverse());
625 w.writeBoolean("Algn", gradientOverlay->alignWithLayer());
626 w.writeUnitFloat("Scl ", "#Prc", gradientOverlay->scale());
627
628 w.writeOffsetPoint("Ofst", gradientOverlay->gradientOffset());
629
630 w.writeBoolean("Dthr", gradientOverlay->dither());
631
632 w.leaveDescriptor();
633 }
634
635 // Pattern Overlay
636 const psd_layer_effects_pattern_overlay *patternOverlay = style->patternOverlay();
637 if (patternOverlay->effectEnabled()) {
638 w.enterDescriptor("patternFill", "", "patternFill");
639
640 w.writeBoolean("enab", patternOverlay->effectEnabled());
641 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(patternOverlay->blendMode()));
642 w.writeUnitFloat("Opct", "#Prc", patternOverlay->opacity());
643
644 KoPatternSP pattern = patternOverlay->pattern(style->resourcesInterface());
645 w.writePatternRef("Ptrn", pattern, fetchPatternUuidSafe(pattern, patternToUuidMap));
646
647 w.writeUnitFloat("Scl ", "#Prc", patternOverlay->scale());
648 w.writeBoolean("Algn", patternOverlay->alignWithLayer());
649 w.writePhasePoint("phase", patternOverlay->patternPhase());
650
651 w.leaveDescriptor();
652 }
653
654 const psd_layer_effects_stroke *stroke = style->stroke();
655 if (stroke->effectEnabled()) {
656 w.enterDescriptor("FrFX", "", "FrFX");
657
658 w.writeBoolean("enab", stroke->effectEnabled());
659
660 w.writeEnum("Styl", "FStl", strokePositionToString(stroke->position()));
661 w.writeEnum("PntT", "FrFl", strokeFillTypeToString(stroke->fillType()));
662
663 w.writeEnum("Md ", "BlnM", compositeOpToBlendMode(stroke->blendMode()));
664 w.writeUnitFloat("Opct", "#Prc", stroke->opacity());
665
666 w.writeUnitFloat("Sz ", "#Pxl", stroke->size());
667
668 if (stroke->fillType() == psd_fill_solid_color) {
669 w.writeColor("Clr ", stroke->color());
670 }
671 else if (stroke->fillType() == psd_fill_gradient) {
672 KoSegmentGradient *segmentGradient = dynamic_cast<KoSegmentGradient*>(stroke->gradient(style->resourcesInterface()).data());
673 KoStopGradient *stopGradient = dynamic_cast<KoStopGradient*>(stroke->gradient(style->resourcesInterface()).data());
674
675 if (segmentGradient && segmentGradient->valid()) {
676 w.writeSegmentGradient("Grad", *segmentGradient);
677 } else if (stopGradient && stopGradient->valid()) {
678 w.writeStopGradient("Grad", *stopGradient);
679 } else {
680 warnKrita << "WARNING: Stroke: Unknown gradient type!";
681 w.writeColor("Clr ", stroke->color());
682 }
683
684 w.writeUnitFloat("Angl", "#Ang", stroke->angle());
685 w.writeEnum("Type", "GrdT", gradientTypeToString(stroke->style()));
686
687 w.writeBoolean("Rvrs", stroke->reverse());
688 w.writeUnitFloat("Scl ", "#Prc", stroke->scale());
689 w.writeBoolean("Algn", stroke->alignWithLayer());
690 w.writeOffsetPoint("Ofst", stroke->gradientOffset());
691
692 w.writeBoolean("Dthr", stroke->dither());
693
694 } else if (stroke->fillType() == psd_fill_pattern) {
695
696 KoPatternSP pattern = stroke->pattern(style->resourcesInterface());
697 w.writePatternRef("Ptrn", pattern, fetchPatternUuidSafe(pattern, patternToUuidMap));
698 w.writeUnitFloat("Scl ", "#Prc", stroke->scale());
699 w.writeBoolean("Lnkd", stroke->alignWithLayer());
700 w.writePhasePoint("phase", stroke->patternPhase());
701 }
702
703 w.leaveDescriptor();
704 }
705
706 w.leaveDescriptor();
707 w.leaveDescriptor();
708 }
709
710 return w.document();
711}
psd_glow_source source() const
Definition psd.h:606
qint32 opacity() const
Definition psd.h:281
qint32 range() const
Definition psd.h:351
qint32 distance() const
Definition psd.h:296
bool useGlobalLight() const
Definition psd.h:291
QString blendMode() const
Definition psd.h:266
bool knocksOut() const
Definition psd.h:326
qint32 spread() const
Definition psd.h:301
psd_technique_type technique() const
Definition psd.h:346
KoColor color() const
Definition psd.h:271
qint32 jitter() const
Definition psd.h:356
qint32 noise() const
Definition psd.h:321
qint32 angle() const
Definition psd.h:286
qint32 size() const
Definition psd.h:306
bool antiAliased() const
Definition psd.h:316
QString bevelStyleToString(psd_bevel_style style)
QString techniqueToString(psd_technique_type technique, const QString &typeId)
QString strokePositionToString(psd_stroke_position position)
QString gradientTypeToString(psd_gradient_style style)
QString fetchPatternUuidSafe(KoPatternSP pattern, QHash< KoPatternSP, QString > patternToUuid)
QString strokeFillTypeToString(psd_fill_type position)
QString compositeOpToBlendMode(const QString &compositeOp)
#define KIS_ASSERT_RECOVER(cond)
Definition kis_assert.h:55
const QString Patterns
QString shadowBlendMode() const
Definition psd.h:821
psd_technique_type technique() const
Definition psd.h:730
qint32 highlightOpacity() const
Definition psd.h:812
psd_bevel_style style() const
Definition psd.h:721
bool contourEnabled() const
Definition psd.h:848
psd_direction direction() const
Definition psd.h:748
bool glossAntiAliased() const
Definition psd.h:785
bool textureInvert() const
Definition psd.h:912
qint32 shadowOpacity() const
Definition psd.h:839
bool textureAlignWithLayer() const
Definition psd.h:921
QString highlightBlendMode() const
Definition psd.h:794
KoColor shadowColor() const
Definition psd.h:830
KoColor highlightColor() const
Definition psd.h:803
QPointF texturePhase() const
Definition psd.h:936
QPointF gradientOffset() const
Definition psd.h:1110
QPointF patternPhase() const
Definition psd.h:1129
bool alignWithLayer() const
Definition psd.h:1027
psd_gradient_style style() const
Definition psd.h:1042
bool invert() const
Definition psd.h:650
psd_stroke_position position() const
Definition psd.h:1280

References psd_layer_effects_overlay_base::alignWithLayer(), psd_layer_effects_bevel_emboss::altitude(), psd_layer_effects_shadow_base::angle(), psd_layer_effects_shadow_base::antiAliased(), bevelStyleToString(), psd_layer_effects_shadow_base::blendMode(), psd_layer_effects_shadow_base::color(), compositeOpToBlendMode(), psd_layer_effects_bevel_emboss::contourEnabled(), psd_layer_effects_bevel_emboss::contourRange(), psd_layer_effects_bevel_emboss::depth(), psd_layer_effects_bevel_emboss::direction(), psd_layer_effects_shadow_base::distance(), psd_layer_effects_overlay_base::dither(), psd_layer_effects_shadow_base::effectEnabled(), fetchAllPatterns(), fetchPatternUuidSafe(), psd_layer_effects_shadow_base::fillType(), psd_layer_effects_bevel_emboss::glossAntiAliased(), psd_layer_effects_shadow_base::gradient(), psd_layer_effects_overlay_base::gradientOffset(), gradientTypeToString(), psd_layer_effects_bevel_emboss::highlightBlendMode(), psd_layer_effects_bevel_emboss::highlightColor(), psd_layer_effects_bevel_emboss::highlightOpacity(), psd_layer_effects_satin::invert(), psd_layer_effects_shadow_base::jitter(), KIS_ASSERT_RECOVER, psd_layer_effects_shadow_base::knocksOut(), m_stylesVector, psd_layer_effects_shadow_base::noise(), psd_layer_effects_shadow_base::opacity(), psd_layer_effects_overlay_base::pattern(), psd_layer_effects_overlay_base::patternPhase(), ResourceType::Patterns, psd_layer_effects_stroke::position(), psd_direction_up, psd_fill_gradient, psd_fill_pattern, psd_fill_solid_color, psd_glow_center, psd_layer_effects_shadow_base::range(), psd_layer_effects_overlay_base::reverse(), psd_layer_effects_overlay_base::scale(), psd_layer_effects_bevel_emboss::shadowBlendMode(), psd_layer_effects_bevel_emboss::shadowColor(), psd_layer_effects_bevel_emboss::shadowOpacity(), psd_layer_effects_shadow_base::size(), psd_layer_effects_bevel_emboss::soften(), psd_layer_effects_inner_glow::source(), psd_layer_effects_shadow_base::spread(), strokeFillTypeToString(), strokePositionToString(), psd_layer_effects_bevel_emboss::style(), psd_layer_effects_overlay_base::style(), psd_layer_effects_shadow_base::technique(), psd_layer_effects_bevel_emboss::technique(), techniqueToString(), psd_layer_effects_bevel_emboss::textureAlignWithLayer(), psd_layer_effects_bevel_emboss::textureDepth(), psd_layer_effects_bevel_emboss::textureEnabled(), psd_layer_effects_bevel_emboss::textureInvert(), psd_layer_effects_bevel_emboss::texturePattern(), psd_layer_effects_bevel_emboss::texturePhase(), psd_layer_effects_bevel_emboss::textureScale(), psd_layer_effects_shadow_base::useGlobalLight(), KoResource::valid, and warnKrita.

◆ gradients()

QVector< KoAbstractGradientSP > KisAslLayerStyleSerializer::gradients ( ) const

Definition at line 71 of file kis_asl_layer_style_serializer.cpp.

72{
73 return m_gradientsStore;
74}

References m_gradientsStore.

◆ isInitialized()

bool KisAslLayerStyleSerializer::isInitialized ( )
inline

Definition at line 48 of file kis_asl_layer_style_serializer.h.

◆ isValid()

bool KisAslLayerStyleSerializer::isValid ( )
inline

◆ newStyleStarted()

void KisAslLayerStyleSerializer::newStyleStarted ( bool isPsdStructure)
private

Definition at line 1247 of file kis_asl_layer_style_serializer.cpp.

1248{
1250 KisPSDLayerStyleSP currentStyleSP = m_stylesVector.last();
1251 KisPSDLayerStyle *currentStyle = currentStyleSP.data();
1252
1253 psd_layer_effects_context *context = currentStyleSP->context();
1254 context->keep_original = 0;
1255
1256 QString prefix = isPsdStructure ? "/null" : "/Styl/Lefx";
1257 connectCatcherToStyle(currentStyle, prefix);
1258}
void connectCatcherToStyle(KisPSDLayerStyle *style, const QString &prefix)
QSharedPointer< T > toQShared(T *ptr)

References connectCatcherToStyle(), psd_layer_effects_context::keep_original, m_localResourcesInterface, m_stylesVector, and toQShared().

◆ patterns()

QHash< QString, KoPatternSP > KisAslLayerStyleSerializer::patterns ( ) const

Definition at line 66 of file kis_asl_layer_style_serializer.cpp.

67{
68 return m_patternsStore;
69}

References m_patternsStore.

◆ readFromDevice()

void KisAslLayerStyleSerializer::readFromDevice ( QIODevice & device)

Definition at line 1346 of file kis_asl_layer_style_serializer.cpp.

1347{
1348 m_catcher.subscribePattern("/patterns/KisPattern", std::bind(&KisAslLayerStyleSerializer::registerPatternObject, this, _1, _2));
1349 m_catcher.subscribePattern("/Patterns/KisPattern", std::bind(&KisAslLayerStyleSerializer::registerPatternObject, this, _1, _2));
1351
1352 KisAslReader reader;
1353 const QDomDocument doc = reader.readFile(device);
1354
1355 if (doc.isNull()) {
1356 m_initialized = false;
1357 return;
1358 }
1359
1360 //dbgKrita << ppVar(doc.toString());
1361
1362 //KisAslObjectCatcher c2;
1363 KisAslXmlParser parser;
1364 parser.parseXML(doc, m_catcher);
1365
1366 QMultiHash<QString, KisPSDLayerStyleSP> allStyles;
1367 QHash<QString, KisPSDLayerStyleSP> cleanedStyles;
1368
1369 for(const auto &style : m_stylesVector)
1370 allStyles.insert(style->psdUuid(), style);
1371
1372 // correct all the layer styles
1373 for (const auto &style : allStyles) {
1374 FillStylesCorrector::correct(style.data());
1375
1376 if (allStyles.count(style->psdUuid()) > 1) {
1377 const auto &existingStyle = cleanedStyles.find(style->psdUuid());
1378
1379 if (existingStyle != cleanedStyles.end()) {
1380 if (existingStyle.value()->name() != style->name()) {
1381 qWarning() << "Duplicated UUID" << style->psdUuid() << "for styles" << style->name() << "and"
1382 << existingStyle.value()->name();
1383 style->setMD5Sum("");
1384 style->setUuid(QUuid::createUuid());
1385 } else {
1386 qWarning() << "Duplicated style" << style->name();
1387 continue;
1388 }
1389 }
1390 }
1391
1392 style->setValid(!style->isEmpty());
1393
1394 style->setFilename(style->uuid().toString());
1395
1396 cleanedStyles.insert(style->psdUuid(), style);
1397 }
1398
1399 m_stylesVector = cleanedStyles.values().toVector();
1400
1401 m_initialized = true;
1402}
static void correct(KisPSDLayerStyle *style)
void subscribeNewStyleStarted(ASLCallbackNewStyle callback)
void subscribePattern(const QString &path, ASLCallbackPattern callback)
KisAslCallbackObjectCatcher m_catcher
QDomDocument readFile(QIODevice &device)
void parseXML(const QDomDocument &doc, KisAslObjectCatcher &catcher)

References FillStylesCorrector::correct(), m_catcher, m_initialized, m_stylesVector, newStyleStarted(), KisAslXmlParser::parseXML(), KisAslReader::readFile(), registerPatternObject(), KisAslCallbackObjectCatcher::subscribeNewStyleStarted(), and KisAslCallbackObjectCatcher::subscribePattern().

◆ readFromFile()

bool KisAslLayerStyleSerializer::readFromFile ( const QString & filename)

Definition at line 1260 of file kis_asl_layer_style_serializer.cpp.

1261{
1262 QFile file(filename);
1263 if (file.size() == 0) return false;
1264
1265 if (!file.open(QIODevice::ReadOnly)) {
1266 dbgKrita << "Can't open file " << filename;
1267 return false;
1268 }
1269
1270 readFromDevice(file);
1271 file.close();
1272
1273 return m_initialized;
1274}
#define dbgKrita
Definition kis_debug.h:45

References dbgKrita, m_initialized, and readFromDevice().

◆ readFromPSDXML()

void KisAslLayerStyleSerializer::readFromPSDXML ( const QDomDocument & doc)

Definition at line 1415 of file kis_asl_layer_style_serializer.cpp.

1416{
1417 // The caller prepares the document using the following code
1418 //
1419 // KisAslReader reader;
1420 // QDomDocument doc = reader.readLfx2PsdSection(device);
1421
1422 m_stylesVector.clear();
1423
1424 //m_catcher.subscribePattern("/Patterns/KisPattern", std::bind(&KisAslLayerStyleSerializer::registerPatternObject, this, _1));
1426
1427 //KisAslObjectCatcher c2;
1428 KisAslXmlParser parser;
1429 parser.parseXML(doc, m_catcher);
1430
1431 // correct all the layer styles
1432 Q_FOREACH (KisPSDLayerStyleSP style, m_stylesVector) {
1433 FillStylesCorrector::correct(style.data());
1434 }
1435}

References FillStylesCorrector::correct(), m_catcher, m_stylesVector, newStyleStarted(), KisAslXmlParser::parseXML(), and KisAslCallbackObjectCatcher::subscribeNewStyleStarted().

◆ registerPatternObject()

void KisAslLayerStyleSerializer::registerPatternObject ( const KoPatternSP pattern,
const QString & patternUuid )
private

Definition at line 926 of file kis_asl_layer_style_serializer.cpp.

926 {
927
928 if (!pattern) {
929 warnKrita << "WARNING: got an empty pattern:" << patternUuid;
930 return;
931 }
932
933 if (m_patternsStore.contains(patternUuid)) {
934 warnKrita << "WARNING: ASL style contains a duplicated pattern!" << ppVar(pattern->name()) << ppVar(m_patternsStore[patternUuid]->name());
935 } else {
936 pattern->setFilename(patternUuid + QString(".pat"));
937 m_patternsStore.insert(patternUuid, pattern);
938 m_localResourcesInterface->addResource(pattern);
939 }
940}
#define ppVar(var)
Definition kis_debug.h:155
const char * name(StandardAction id)

References m_localResourcesInterface, m_patternsStore, ppVar, and warnKrita.

◆ registerPSDPattern()

void KisAslLayerStyleSerializer::registerPSDPattern ( const QDomDocument & doc)

Definition at line 1404 of file kis_asl_layer_style_serializer.cpp.

1405{
1407 catcher.subscribePattern("/Patterns/KisPattern", std::bind(&KisAslLayerStyleSerializer::registerPatternObject, this, _1, _2));
1408 catcher.subscribePattern("/patterns/KisPattern", std::bind(&KisAslLayerStyleSerializer::registerPatternObject, this, _1, _2));
1409
1410 //KisAslObjectCatcher c2;
1411 KisAslXmlParser parser;
1412 parser.parseXML(doc, catcher);
1413}

References KisAslXmlParser::parseXML(), registerPatternObject(), and KisAslCallbackObjectCatcher::subscribePattern().

◆ saveToDevice()

void KisAslLayerStyleSerializer::saveToDevice ( QIODevice & device)

Definition at line 782 of file kis_asl_layer_style_serializer.cpp.

783{
784 QDomDocument doc = formXmlDocument();
785 KIS_ASSERT(!doc.isNull());
786
787 KisAslWriter writer;
788 writer.writeFile(device, doc);
789}
void writeFile(QIODevice &device, const QDomDocument &doc)

References formXmlDocument(), KIS_ASSERT, and KisAslWriter::writeFile().

◆ saveToFile()

bool KisAslLayerStyleSerializer::saveToFile ( const QString & filename)

Definition at line 791 of file kis_asl_layer_style_serializer.cpp.

792{
793 QFile file(filename);
794
795 if (!file.open(QIODevice::WriteOnly)) {
796 dbgKrita << "Can't open file " << filename;
797 return false;
798 }
799 saveToDevice(file);
800 file.close();
801
802 return true;
803}

References dbgKrita, and saveToDevice().

◆ setStyles()

void KisAslLayerStyleSerializer::setStyles ( const QVector< KisPSDLayerStyleSP > & styles)

Definition at line 57 of file kis_asl_layer_style_serializer.cpp.

58{
60 Q_FOREACH(const KisPSDLayerStyleSP style, styles) {
61 m_stylesHash.insert(style->psdUuid(), style);
62 }
63 m_initialized = true;
64}
QHash< QString, KisPSDLayerStyleSP > m_stylesHash

References m_initialized, m_stylesHash, m_stylesVector, and styles().

◆ styles()

QVector< KisPSDLayerStyleSP > KisAslLayerStyleSerializer::styles ( ) const

Definition at line 52 of file kis_asl_layer_style_serializer.cpp.

53{
54 return m_stylesVector;
55}

References m_stylesVector.

◆ stylesHash()

QHash< QString, KisPSDLayerStyleSP > KisAslLayerStyleSerializer::stylesHash ( )

Definition at line 76 of file kis_asl_layer_style_serializer.cpp.

77{
78 if (m_stylesHash.count() == 0 && m_stylesVector.count() != 0) {
79 // build the hash
80 Q_FOREACH(KisPSDLayerStyleSP style, m_stylesVector) {
81 m_stylesHash.insert(style->psdUuid(), style);
82 }
83 }
84 return m_stylesHash;
85}

References m_stylesHash, and m_stylesVector.

Member Data Documentation

◆ m_catcher

KisAslCallbackObjectCatcher KisAslLayerStyleSerializer::m_catcher
private

Definition at line 72 of file kis_asl_layer_style_serializer.h.

◆ m_gradientsStore

QVector<KoAbstractGradientSP> KisAslLayerStyleSerializer::m_gradientsStore
private

Definition at line 74 of file kis_asl_layer_style_serializer.h.

◆ m_initialized

bool KisAslLayerStyleSerializer::m_initialized {false}
private

Definition at line 76 of file kis_asl_layer_style_serializer.h.

76{false};

◆ m_isValid

bool KisAslLayerStyleSerializer::m_isValid {true}
private

Definition at line 77 of file kis_asl_layer_style_serializer.h.

77{true};

◆ m_localResourcesInterface

QSharedPointer<KisLocalStrokeResources> KisAslLayerStyleSerializer::m_localResourcesInterface
private

Definition at line 78 of file kis_asl_layer_style_serializer.h.

◆ m_patternsStore

QHash<QString, KoPatternSP> KisAslLayerStyleSerializer::m_patternsStore
private

Definition at line 70 of file kis_asl_layer_style_serializer.h.

◆ m_stylesHash

QHash<QString, KisPSDLayerStyleSP> KisAslLayerStyleSerializer::m_stylesHash
private

Definition at line 75 of file kis_asl_layer_style_serializer.h.

◆ m_stylesVector

QVector<KisPSDLayerStyleSP> KisAslLayerStyleSerializer::m_stylesVector
private

Definition at line 73 of file kis_asl_layer_style_serializer.h.


The documentation for this class was generated from the following files: