File indexing completed on 2024-05-19 04:26:38
0001 /* 0002 * SPDX-FileCopyrightText: 2007 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #ifndef _KIS_TRANSFORM_MASK_ 0007 #define _KIS_TRANSFORM_MASK_ 0008 0009 #include <QScopedPointer> 0010 0011 #include "kis_types.h" 0012 #include "kis_effect_mask.h" 0013 #include "KisDelayedUpdateNodeInterface.h" 0014 0015 class KisTransformMaskTestingInterface; 0016 0017 /** 0018 Transform a layer according to a matrix transform 0019 */ 0020 0021 class KRITAIMAGE_EXPORT KisTransformMask : public KisEffectMask, public KisDelayedUpdateNodeInterface 0022 { 0023 Q_OBJECT 0024 0025 public: 0026 0027 /** 0028 * Create an empty transform mask. 0029 */ 0030 KisTransformMask(KisImageWSP image, const QString &name); 0031 0032 ~KisTransformMask() override; 0033 0034 QIcon icon() const override; 0035 0036 KisNodeSP clone() const override { 0037 return KisNodeSP(new KisTransformMask(*this)); 0038 } 0039 0040 KisPaintDeviceSP paintDevice() const override; 0041 0042 bool accept(KisNodeVisitor &v) override; 0043 void accept(KisProcessingVisitor &visitor, KisUndoAdapter *undoAdapter) override; 0044 0045 KisTransformMask(const KisTransformMask& rhs); 0046 0047 QRect decorateRect(KisPaintDeviceSP &src, 0048 KisPaintDeviceSP &dst, 0049 const QRect & rc, 0050 PositionToFilthy maskPos) const override; 0051 0052 QRect changeRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const override; 0053 QRect needRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const override; 0054 0055 QRect extent() const override; 0056 QRect exactBounds() const override; 0057 QRect sourceDataBounds() const; 0058 0059 void setImage(KisImageWSP image) override; 0060 0061 void setTransformParamsWithUndo(KisTransformMaskParamsInterfaceSP params, KUndo2Command *parentCommand); 0062 void setTransformParams(KisTransformMaskParamsInterfaceSP params); 0063 KisTransformMaskParamsInterfaceSP transformParams() const; 0064 0065 bool staticImageCacheIsValid() const; 0066 void recalculateStaticImage(); 0067 KisPaintDeviceSP buildPreviewDevice(); 0068 KisPaintDeviceSP buildSourcePreviewDevice(); 0069 0070 /** 0071 * Transform Tool may override mask's device for the sake of 0072 * in-stack preview 0073 */ 0074 void overrideStaticCacheDevice(KisPaintDeviceSP device); 0075 0076 qint32 x() const override; 0077 qint32 y() const override; 0078 0079 void setX(qint32 x) override; 0080 void setY(qint32 y) override; 0081 0082 void forceUpdateTimedNode() override; 0083 bool hasPendingTimedUpdates() const override; 0084 0085 void threadSafeForceStaticImageUpdate(const QRect &extraUpdateRect); 0086 void threadSafeForceStaticImageUpdate(); 0087 0088 void syncLodCache() override; 0089 0090 KisPaintDeviceList getLodCapableDevices() const override; 0091 0092 void setTestingInterface(KisTransformMaskTestingInterface *interface); 0093 KisTransformMaskTestingInterface* testingInterface() const; 0094 0095 protected: 0096 KisKeyframeChannel *requestKeyframeChannel(const QString &id) override; 0097 bool supportsKeyframeChannel(const QString &id) override; 0098 0099 Q_SIGNALS: 0100 void sigInternalForceStaticImageUpdate(); 0101 0102 private Q_SLOTS: 0103 void slotDelayedStaticUpdate(); 0104 void slotInternalForceStaticImageUpdate(); 0105 0106 private: 0107 void startAsyncRegenerationJob(); 0108 void forceStartAsyncRegenerationJob(); 0109 0110 private: 0111 struct Private; 0112 const QScopedPointer<Private> m_d; 0113 }; 0114 0115 #endif //_KIS_TRANSFORM_MASK_