File indexing completed on 2024-05-12 15:58:45
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 /** 0016 Transform a layer according to a matrix transform 0017 */ 0018 0019 class KRITAIMAGE_EXPORT KisTransformMask : public KisEffectMask, public KisDelayedUpdateNodeInterface 0020 { 0021 Q_OBJECT 0022 0023 public: 0024 0025 /** 0026 * Create an empty transform mask. 0027 */ 0028 KisTransformMask(KisImageWSP image, const QString &name); 0029 0030 ~KisTransformMask() override; 0031 0032 QIcon icon() const override; 0033 0034 KisNodeSP clone() const override { 0035 return KisNodeSP(new KisTransformMask(*this)); 0036 } 0037 0038 KisPaintDeviceSP paintDevice() const override; 0039 0040 bool accept(KisNodeVisitor &v) override; 0041 void accept(KisProcessingVisitor &visitor, KisUndoAdapter *undoAdapter) override; 0042 0043 KisTransformMask(const KisTransformMask& rhs); 0044 0045 QRect decorateRect(KisPaintDeviceSP &src, 0046 KisPaintDeviceSP &dst, 0047 const QRect & rc, 0048 PositionToFilthy maskPos) const override; 0049 0050 QRect changeRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const override; 0051 QRect needRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const override; 0052 0053 QRect extent() const override; 0054 QRect exactBounds() const override; 0055 QRect sourceDataBounds() const; 0056 0057 void setTransformParams(KisTransformMaskParamsInterfaceSP params); 0058 KisTransformMaskParamsInterfaceSP transformParams() const; 0059 0060 void recaclulateStaticImage(); 0061 KisPaintDeviceSP buildPreviewDevice(); 0062 KisPaintDeviceSP buildSourcePreviewDevice(); 0063 0064 /** 0065 * Transform Tool may override mask's device for the sake of 0066 * in-stack preview 0067 */ 0068 void overrideStaticCacheDevice(KisPaintDeviceSP device); 0069 0070 qint32 x() const override; 0071 qint32 y() const override; 0072 0073 void setX(qint32 x) override; 0074 void setY(qint32 y) override; 0075 0076 void forceUpdateTimedNode() override; 0077 bool hasPendingTimedUpdates() const override; 0078 0079 void threadSafeForceStaticImageUpdate(); 0080 0081 void syncLodCache() override; 0082 0083 KisPaintDeviceList getLodCapableDevices() const override; 0084 0085 protected: 0086 KisKeyframeChannel *requestKeyframeChannel(const QString &id) override; 0087 bool supportsKeyframeChannel(const QString &id) override; 0088 0089 Q_SIGNALS: 0090 void sigInternalForceStaticImageUpdate(); 0091 0092 private Q_SLOTS: 0093 void slotDelayedStaticUpdate(); 0094 0095 void slotInternalForceStaticImageUpdate(); 0096 0097 private: 0098 struct Private; 0099 const QScopedPointer<Private> m_d; 0100 }; 0101 0102 #endif //_KIS_TRANSFORM_MASK_