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

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_IMAGE_INTERFACES_H
0008 #define __KIS_IMAGE_INTERFACES_H
0009 
0010 #include "kis_types.h"
0011 #include <kritaimage_export.h>
0012 
0013 class QRect;
0014 class KisStrokeStrategy;
0015 class KisStrokeJobData;
0016 class KisPostExecutionUndoAdapter;
0017 
0018 
0019 class KRITAIMAGE_EXPORT KisStrokesFacade
0020 {
0021 public:
0022     virtual ~KisStrokesFacade();
0023     virtual KisStrokeId startStroke(KisStrokeStrategy *strokeStrategy) = 0;
0024     virtual void addJob(KisStrokeId id, KisStrokeJobData *data) = 0;
0025     virtual void endStroke(KisStrokeId id) = 0;
0026     virtual bool cancelStroke(KisStrokeId id) = 0;
0027 };
0028 
0029 class KRITAIMAGE_EXPORT KisUpdatesFacade
0030 {
0031 public:
0032     virtual ~KisUpdatesFacade();
0033 
0034     virtual void blockUpdates() = 0;
0035     virtual void unblockUpdates() = 0;
0036 
0037     virtual void disableUIUpdates() = 0;
0038     virtual QVector<QRect> enableUIUpdates() = 0;
0039 
0040     virtual bool hasUpdatesRunning() const = 0;
0041 
0042     virtual void notifyBatchUpdateStarted() = 0;
0043     virtual void notifyBatchUpdateEnded() = 0;
0044     virtual void notifyUIUpdateCompleted(const QRect &rc) = 0;
0045 
0046     virtual QRect bounds() const = 0;
0047 
0048     virtual void disableDirtyRequests() = 0;
0049     virtual void enableDirtyRequests() = 0;
0050 
0051     enum UpdateFlag {
0052         None = 0x0,
0053         NoFilthyUpdate = 0x1
0054     };
0055     Q_DECLARE_FLAGS(UpdateFlags, UpdateFlag)
0056 
0057     virtual void refreshGraphAsync(KisNodeSP root, UpdateFlags flags = None) = 0;
0058     virtual void refreshGraphAsync(KisNodeSP root, const QRect &rc, UpdateFlags flags = None) = 0;
0059     virtual void refreshGraphAsync(KisNodeSP root, const QRect &rc, const QRect &cropRect, UpdateFlags flags = None) = 0;
0060     virtual void refreshGraphAsync(KisNodeSP root, const QVector<QRect> &rc, const QRect &cropRect, UpdateFlags flags = None) = 0;
0061 
0062     virtual KisProjectionUpdatesFilterCookie addProjectionUpdatesFilter(KisProjectionUpdatesFilterSP filter) = 0;
0063     virtual KisProjectionUpdatesFilterSP removeProjectionUpdatesFilter(KisProjectionUpdatesFilterCookie cookie) = 0;
0064     virtual KisProjectionUpdatesFilterCookie currentProjectionUpdatesFilter() const = 0;
0065 
0066 };
0067 
0068 Q_DECLARE_OPERATORS_FOR_FLAGS(KisUpdatesFacade::UpdateFlags);
0069 
0070 class KRITAIMAGE_EXPORT KisProjectionUpdateListener
0071 {
0072 public:
0073     virtual ~KisProjectionUpdateListener();
0074     virtual void notifyProjectionUpdated(const QRect &rc) = 0;
0075 };
0076 
0077 class KRITAIMAGE_EXPORT KisStrokeUndoFacade
0078 {
0079 public:
0080     virtual ~KisStrokeUndoFacade();
0081     virtual KisPostExecutionUndoAdapter* postExecutionUndoAdapter() const = 0;
0082     virtual const KUndo2Command* lastExecutedCommand() const = 0;
0083 };
0084 
0085 #endif /* __KIS_IMAGE_INTERFACES_H */