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

#include <kis_open_raster_stack_save_visitor.h>

+ Inheritance diagram for KisOpenRasterStackSaveVisitor:

Classes

struct  Private
 

Public Member Functions

 KisOpenRasterStackSaveVisitor (KisOpenRasterSaveContext *, vKisNodeSP activeNodes)
 
bool visit (KisAdjustmentLayer *layer) override
 
virtual bool visit (KisAdjustmentLayer *layer)=0
 
bool visit (KisCloneLayer *) override
 
virtual bool visit (KisCloneLayer *layer)=0
 
bool visit (KisColorizeMask *) override
 
virtual bool visit (KisColorizeMask *mask)=0
 
bool visit (KisExternalLayer *) override
 
virtual bool visit (KisExternalLayer *layer)=0
 
bool visit (KisFilterMask *) override
 
virtual bool visit (KisFilterMask *mask)=0
 
bool visit (KisGeneratorLayer *layer) override
 
virtual bool visit (KisGeneratorLayer *layer)=0
 
bool visit (KisGroupLayer *layer) override
 
virtual bool visit (KisGroupLayer *layer)=0
 
bool visit (KisNode *) override
 
virtual bool visit (KisNode *node)=0
 
bool visit (KisPaintLayer *layer) override
 
virtual bool visit (KisPaintLayer *layer)=0
 
bool visit (KisSelectionMask *) override
 
virtual bool visit (KisSelectionMask *mask)=0
 
bool visit (KisTransformMask *) override
 
virtual bool visit (KisTransformMask *mask)=0
 
bool visit (KisTransparencyMask *) override
 
virtual bool visit (KisTransparencyMask *mask)=0
 
 ~KisOpenRasterStackSaveVisitor () override
 
- Public Member Functions inherited from KisNodeVisitor
 KisNodeVisitor ()
 
virtual ~KisNodeVisitor ()
 

Private Member Functions

bool saveLayer (KisLayer *layer)
 
void saveLayerInfo (QDomElement &elt, KisLayer *layer)
 

Private Attributes

Private *const d
 

Additional Inherited Members

- Protected Member Functions inherited from KisNodeVisitor
bool visitAll (KisNode *node, bool breakOnFail=false)
 
bool visitAllInverse (KisNode *node, bool breakOnFail=false)
 

Detailed Description

Definition at line 25 of file kis_open_raster_stack_save_visitor.h.

Constructor & Destructor Documentation

◆ KisOpenRasterStackSaveVisitor()

KisOpenRasterStackSaveVisitor::KisOpenRasterStackSaveVisitor ( KisOpenRasterSaveContext * saveContext,
vKisNodeSP activeNodes )

◆ ~KisOpenRasterStackSaveVisitor()

KisOpenRasterStackSaveVisitor::~KisOpenRasterStackSaveVisitor ( )
override

Definition at line 41 of file kis_open_raster_stack_save_visitor.cpp.

42{
43 delete d;
44}

References d.

Member Function Documentation

◆ saveLayer()

bool KisOpenRasterStackSaveVisitor::saveLayer ( KisLayer * layer)
private

Definition at line 177 of file kis_open_raster_stack_save_visitor.cpp.

178{
179 if (layer->isFakeNode()) {
180 // don't save grids, reference images layers etc.
181 return true;
182 }
183
184 // here we adjust the bounds to encompass the entire area of the layer, including transforms
185 QRect adjustedBounds = layer->exactBounds();
186
187 if (adjustedBounds.isEmpty()) {
188 // in case of an empty layer, artificially increase the size of the saved rectangle
189 // to just save an empty layer file
190 adjustedBounds.adjust(0, 0, 1, 1);
191 }
192
193 QString filename = d->saveContext->saveDeviceData(layer->projection(), layer->metaData(), adjustedBounds, layer->image()->xRes(), layer->image()->yRes());
194
195 QDomElement elt = d->layerStack.createElement("layer");
196 saveLayerInfo(elt, layer);
197 elt.setAttribute("src", filename);
198 d->currentElement.insertBefore(elt, QDomNode());
199
200 return true;
201}
double xRes() const
double yRes() const
QString saveDeviceData(KisPaintDeviceSP dev, KisMetaData::Store *metaData, const QRect &imageRect, qreal xRes, qreal yRes)
void saveLayerInfo(QDomElement &elt, KisLayer *layer)
KisImageWSP image
virtual bool isFakeNode() const
KisPaintDeviceSP projection() const override
Definition kis_layer.cc:820
KisMetaData::Store * metaData()
QRect exactBounds() const override

References KisOpenRasterStackSaveVisitor::Private::currentElement, d, KisLayer::exactBounds(), KisBaseNode::image, KisBaseNode::isFakeNode(), KisOpenRasterStackSaveVisitor::Private::layerStack, KisLayer::metaData(), KisLayer::projection(), KisOpenRasterStackSaveVisitor::Private::saveContext, KisOpenRasterSaveContext::saveDeviceData(), saveLayerInfo(), KisImage::xRes(), and KisImage::yRes().

◆ saveLayerInfo()

void KisOpenRasterStackSaveVisitor::saveLayerInfo ( QDomElement & elt,
KisLayer * layer )
private

Definition at line 46 of file kis_open_raster_stack_save_visitor.cpp.

47{
48 elt.setAttribute("name", layer->name());
49 elt.setAttribute("opacity", QString().setNum(layer->opacity() / 255.0));
50 elt.setAttribute("visibility", layer->visible() ? "visible" : "hidden");
51
52 if (layer->inherits("KisGroupLayer")) {
53 // Workaround for the issue regarding ora specification.
54 // MyPaint treats layer's x and y relative to the group's x and y
55 // while Gimp and Krita think those are absolute values.
56 // Hence we set x and y on group layers to always be 0.
57 elt.setAttribute("x", QString().setNum(0));
58 elt.setAttribute("y", QString().setNum(0));
59
60 } else {
61 elt.setAttribute("x", QString().setNum(layer->exactBounds().x()));
62 elt.setAttribute("y", QString().setNum(layer->exactBounds().y()));
63 }
64
65 if (layer->userLocked()) {
66 elt.setAttribute("edit-locked", "true");
67 }
68 if (d->activeNodes.contains(layer)) {
69 elt.setAttribute("selected", "true");
70 }
71 QString compop = layer->compositeOpId();
72 if (layer->compositeOpId() == COMPOSITE_CLEAR) compop = "svg:clear";
73 else if (layer->compositeOpId() == COMPOSITE_ERASE) compop = "svg:dst-out";
74 else if (layer->compositeOpId() == COMPOSITE_DESTINATION_ATOP) compop = "svg:dst-atop";
75 else if (layer->compositeOpId() == COMPOSITE_DESTINATION_IN) compop = "svg:dst-in";
76 else if (layer->compositeOpId() == COMPOSITE_ADD) compop = "svg:plus";
77 else if (layer->compositeOpId() == COMPOSITE_MULT) compop = "svg:multiply";
78 else if (layer->compositeOpId() == COMPOSITE_SCREEN) compop = "svg:screen";
79 else if (layer->compositeOpId() == COMPOSITE_OVERLAY) compop = "svg:overlay";
80 else if (layer->compositeOpId() == COMPOSITE_DARKEN) compop = "svg:darken";
81 else if (layer->compositeOpId() == COMPOSITE_LIGHTEN) compop = "svg:lighten";
82 else if (layer->compositeOpId() == COMPOSITE_DODGE) compop = "svg:color-dodge";
83 else if (layer->compositeOpId() == COMPOSITE_BURN) compop = "svg:color-burn";
84 else if (layer->compositeOpId() == COMPOSITE_HARD_LIGHT) compop = "svg:hard-light";
85 else if (layer->compositeOpId() == COMPOSITE_SOFT_LIGHT_SVG) compop = "svg:soft-light";
86 else if (layer->compositeOpId() == COMPOSITE_DIFF) compop = "svg:difference";
87 else if (layer->compositeOpId() == COMPOSITE_COLOR) compop = "svg:color";
88 else if (layer->compositeOpId() == COMPOSITE_LUMINIZE) compop = "svg:luminosity";
89 else if (layer->compositeOpId() == COMPOSITE_HUE) compop = "svg:hue";
90 else if (layer->compositeOpId() == COMPOSITE_SATURATION) compop = "svg:saturation";
91 else if (layer->compositeOpId() == COMPOSITE_OVER) compop = "svg:src-over";
92
93 //else if (layer->compositeOpId() == COMPOSITE_EXCLUSION) compop = "svg:exclusion";
94 else compop = "krita:" + layer->compositeOpId();
95
96 // Alpha preserve has a special case with the Normal blend mode, which is
97 // stored as src-atop for compatibility with previous Krita versions that
98 // don't understand the alpha-preserve property, as well as other programs
99 // like MyPaint that don't support alpha preserve on layers in general.
100 if(layer->alphaChannelDisabled()) {
101 if (layer->compositeOpId() == COMPOSITE_OVER) {
102 compop = "svg:src-atop";
103 } else {
104 elt.setAttribute("alpha-preserve", "true");
105 }
106 }
107
108 elt.setAttribute("composite-op", compop);
109}
const QString COMPOSITE_OVER
const QString COMPOSITE_DARKEN
const QString COMPOSITE_OVERLAY
const QString COMPOSITE_DODGE
const QString COMPOSITE_SOFT_LIGHT_SVG
const QString COMPOSITE_ADD
const QString COMPOSITE_LIGHTEN
const QString COMPOSITE_MULT
const QString COMPOSITE_SATURATION
const QString COMPOSITE_DESTINATION_ATOP
const QString COMPOSITE_CLEAR
const QString COMPOSITE_HARD_LIGHT
const QString COMPOSITE_SCREEN
const QString COMPOSITE_DIFF
const QString COMPOSITE_ERASE
const QString COMPOSITE_HUE
const QString COMPOSITE_BURN
const QString COMPOSITE_COLOR
const QString COMPOSITE_DESTINATION_IN
const QString COMPOSITE_LUMINIZE
const QString & compositeOpId() const
bool userLocked() const
QString name() const
quint8 opacity() const
virtual bool visible(bool recursive=false) const
bool alphaChannelDisabled() const
Definition kis_layer.cc:334

References KisOpenRasterStackSaveVisitor::Private::activeNodes, KisLayer::alphaChannelDisabled(), COMPOSITE_ADD, COMPOSITE_BURN, COMPOSITE_CLEAR, COMPOSITE_COLOR, COMPOSITE_DARKEN, COMPOSITE_DESTINATION_ATOP, COMPOSITE_DESTINATION_IN, COMPOSITE_DIFF, COMPOSITE_DODGE, COMPOSITE_ERASE, COMPOSITE_HARD_LIGHT, COMPOSITE_HUE, COMPOSITE_LIGHTEN, COMPOSITE_LUMINIZE, COMPOSITE_MULT, COMPOSITE_OVER, COMPOSITE_OVERLAY, COMPOSITE_SATURATION, COMPOSITE_SCREEN, COMPOSITE_SOFT_LIGHT_SVG, KisBaseNode::compositeOpId(), d, KisLayer::exactBounds(), KisBaseNode::name(), KisBaseNode::opacity(), KisBaseNode::userLocked(), and KisBaseNode::visible().

◆ visit() [1/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisAdjustmentLayer * layer)
overridevirtual

Implements KisNodeVisitor.

Definition at line 159 of file kis_open_raster_stack_save_visitor.cpp.

160{
161 QDomElement elt = d->layerStack.createElement("filter");
162 saveLayerInfo(elt, layer);
163 elt.setAttribute("type", "applications:krita:" + layer->filter()->name());
164 return true;
165}
virtual KisFilterConfigurationSP filter() const

References d, KisNodeFilterInterface::filter(), KisOpenRasterStackSaveVisitor::Private::layerStack, and saveLayerInfo().

◆ visit() [2/24]

virtual bool KisNodeVisitor::visit ( KisAdjustmentLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [3/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisCloneLayer * layer)
overridevirtual

Implements KisNodeVisitor.

Definition at line 167 of file kis_open_raster_stack_save_visitor.cpp.

168{
169 return saveLayer(layer);
170}

References saveLayer().

◆ visit() [4/24]

virtual bool KisNodeVisitor::visit ( KisCloneLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [5/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisColorizeMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 57 of file kis_open_raster_stack_save_visitor.h.

57 {
58 return true;
59 }

◆ visit() [6/24]

virtual bool KisNodeVisitor::visit ( KisColorizeMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [7/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisExternalLayer * layer)
overridevirtual

Implements KisNodeVisitor.

Definition at line 172 of file kis_open_raster_stack_save_visitor.cpp.

173{
174 return saveLayer(layer);
175}

References saveLayer().

◆ visit() [8/24]

virtual bool KisNodeVisitor::visit ( KisExternalLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [9/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisFilterMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 45 of file kis_open_raster_stack_save_visitor.h.

45 {
46 return true;
47 }

◆ visit() [10/24]

virtual bool KisNodeVisitor::visit ( KisFilterMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [11/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisGeneratorLayer * layer)
overridevirtual

Implements KisNodeVisitor.

Definition at line 116 of file kis_open_raster_stack_save_visitor.cpp.

117{
118 return saveLayer(layer);
119}

References saveLayer().

◆ visit() [12/24]

virtual bool KisNodeVisitor::visit ( KisGeneratorLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [13/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisGroupLayer * layer)
overridevirtual

Implements KisNodeVisitor.

Definition at line 121 of file kis_open_raster_stack_save_visitor.cpp.

122{
123 QDomElement previousElt = d->currentElement;
124
125 QDomElement elt = d->layerStack.createElement("stack");
126 d->currentElement = elt;
127 saveLayerInfo(elt, layer);
128 QString isolate = "isolate";
129 if (layer->passThroughMode()) {
130 isolate = "auto";
131 }
132 elt.setAttribute("isolation", isolate);
133 visitAll(layer);
134
135 if (!previousElt.isNull()) {
136 previousElt.insertBefore(elt, QDomNode());
137 d->currentElement = previousElt;
138 } else {
139 QDomElement imageElt = d->layerStack.createElement("image");
140 int width = layer->image()->width();
141 int height = layer->image()->height();
142 int xRes = (int)(qRound(layer->image()->xRes() * 72));
143 int yRes = (int)(qRound(layer->image()->yRes() * 72));
144
145 imageElt.setAttribute("version", "0.0.1");
146 imageElt.setAttribute("w", width);
147 imageElt.setAttribute("h", height);
148 imageElt.setAttribute("xres", xRes);
149 imageElt.setAttribute("yres", yRes);
150 imageElt.appendChild(elt);
151 d->layerStack.insertBefore(imageElt, QDomNode());
152 d->currentElement = QDomElement();
154 }
155
156 return true;
157}
qint32 width() const
qint32 height() const
bool visitAll(KisNode *node, bool breakOnFail=false)
void saveStack(const QDomDocument &doc)

References KisOpenRasterStackSaveVisitor::Private::currentElement, d, KisImage::height(), KisBaseNode::image, KisOpenRasterStackSaveVisitor::Private::layerStack, KisGroupLayer::passThroughMode, KisOpenRasterStackSaveVisitor::Private::saveContext, saveLayerInfo(), KisOpenRasterSaveContext::saveStack(), KisNodeVisitor::visitAll(), KisImage::width(), KisImage::xRes(), and KisImage::yRes().

◆ visit() [14/24]

virtual bool KisNodeVisitor::visit ( KisGroupLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [15/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisNode * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 39 of file kis_open_raster_stack_save_visitor.h.

39 {
40 return true;
41 }

◆ visit() [16/24]

virtual bool KisNodeVisitor::visit ( KisNode * node)
virtual

Implements KisNodeVisitor.

◆ visit() [17/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisPaintLayer * layer)
overridevirtual

Implements KisNodeVisitor.

Definition at line 111 of file kis_open_raster_stack_save_visitor.cpp.

112{
113 return saveLayer(layer);
114}

References saveLayer().

◆ visit() [18/24]

virtual bool KisNodeVisitor::visit ( KisPaintLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [19/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisSelectionMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 54 of file kis_open_raster_stack_save_visitor.h.

54 {
55 return true;
56 }

◆ visit() [20/24]

virtual bool KisNodeVisitor::visit ( KisSelectionMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [21/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisTransformMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 48 of file kis_open_raster_stack_save_visitor.h.

48 {
49 return true;
50 }

◆ visit() [22/24]

virtual bool KisNodeVisitor::visit ( KisTransformMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [23/24]

bool KisOpenRasterStackSaveVisitor::visit ( KisTransparencyMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 51 of file kis_open_raster_stack_save_visitor.h.

51 {
52 return true;
53 }

◆ visit() [24/24]

virtual bool KisNodeVisitor::visit ( KisTransparencyMask * mask)
virtual

Implements KisNodeVisitor.

Member Data Documentation

◆ d

Private* const KisOpenRasterStackSaveVisitor::d
private

Definition at line 67 of file kis_open_raster_stack_save_visitor.h.


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