File indexing completed on 2024-05-12 15:58:37

0001 /*
0002  *  SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_PROCESSING_VISITOR_H
0008 #define __KIS_PROCESSING_VISITOR_H
0009 
0010 #include "kritaimage_export.h"
0011 #include "kis_shared.h"
0012 
0013 #include <QMutex>
0014 
0015 class KisNode;
0016 class KoUpdater;
0017 class KoProgressUpdater;
0018 class KisUndoAdapter;
0019 class KisPaintLayer;
0020 class KisGroupLayer;
0021 class KisAdjustmentLayer;
0022 class KisExternalLayer;
0023 class KisCloneLayer;
0024 class KisFilterMask;
0025 class KisTransformMask;
0026 class KisTransparencyMask;
0027 class KisSelectionMask;
0028 class KisGeneratorLayer;
0029 class KisColorizeMask;
0030 class KUndo2Command;
0031 
0032 /**
0033  * A visitor that processes a single layer; it does not recurse into the
0034  * layer's children. Classes inheriting KisProcessingVisitor must not
0035  * emit signals or ask the image to update the projection.
0036  */
0037 class KRITAIMAGE_EXPORT KisProcessingVisitor : public KisShared
0038 {
0039 public:
0040     virtual ~KisProcessingVisitor();
0041 
0042     virtual void visit(KisNode *node, KisUndoAdapter *undoAdapter) = 0;
0043     virtual void visit(KisPaintLayer *layer, KisUndoAdapter *undoAdapter) = 0;
0044     virtual void visit(KisGroupLayer *layer, KisUndoAdapter *undoAdapter) = 0;
0045     virtual void visit(KisAdjustmentLayer *layer, KisUndoAdapter *undoAdapter) = 0;
0046     virtual void visit(KisExternalLayer *layer, KisUndoAdapter *undoAdapter) = 0;
0047     virtual void visit(KisGeneratorLayer *layer, KisUndoAdapter *undoAdapter) = 0;
0048     virtual void visit(KisCloneLayer *layer, KisUndoAdapter *undoAdapter) = 0;
0049     virtual void visit(KisFilterMask *mask, KisUndoAdapter *undoAdapter) = 0;
0050     virtual void visit(KisTransformMask *mask, KisUndoAdapter *undoAdapter) = 0;
0051     virtual void visit(KisTransparencyMask *mask, KisUndoAdapter *undoAdapter) = 0;
0052     virtual void visit(KisColorizeMask *mask, KisUndoAdapter *undoAdapter) = 0;
0053     virtual void visit(KisSelectionMask *mask, KisUndoAdapter *undoAdapter) = 0;
0054 
0055     /**
0056      * Create a command that initializes the processing visitor before running
0057      * on all the layers. The command is executed sequentially, non-exclusively
0058      * on the image by applicator.
0059      */
0060     virtual KUndo2Command* createInitCommand();
0061 
0062 public:
0063     class KRITAIMAGE_EXPORT ProgressHelper {
0064     public:
0065         ProgressHelper(const KisNode *node);
0066         ~ProgressHelper();
0067 
0068         KoUpdater* updater() const;
0069     private:
0070         KoProgressUpdater *m_progressUpdater;
0071     };
0072 };
0073 
0074 #endif /* __KIS_PROCESSING_VISITOR_H */