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_