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

0001 /*
0002  *  SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_TRANSFORM_MASK_PARAMS_INTERFACE_H
0008 #define __KIS_TRANSFORM_MASK_PARAMS_INTERFACE_H
0009 
0010 #include "kritaimage_export.h"
0011 #include "kis_types.h"
0012 #include "kis_default_bounds_base.h"
0013 
0014 #include <QScopedPointer>
0015 
0016 
0017 class QTransform;
0018 class QDomElement;
0019 class KisKeyframeChannel;
0020 
0021 class KRITAIMAGE_EXPORT KisTransformMaskParamsInterface
0022 {
0023 public:
0024     virtual ~KisTransformMaskParamsInterface();
0025 
0026     virtual QTransform finalAffineTransform() const = 0;
0027     virtual bool isAffine() const = 0;
0028     virtual bool isHidden() const = 0;
0029 
0030     virtual void transformDevice(KisNodeSP node, KisPaintDeviceSP src, KisPaintDeviceSP dst) const = 0;
0031 
0032     virtual QString id() const = 0;
0033     virtual void toXML(QDomElement *e) const = 0;
0034 
0035     virtual void translateSrcAndDst(const QPointF &offset) = 0;
0036     virtual void transformSrcAndDst(const QTransform &t) = 0;
0037     virtual void translateDstSpace(const QPointF &offset) = 0;
0038 
0039     virtual QRect nonAffineChangeRect(const QRect &rc) = 0;
0040     virtual QRect nonAffineNeedRect(const QRect &rc, const QRect &srcBounds) = 0;
0041 
0042     virtual void clearChangedFlag() = 0;
0043     virtual bool hasChanged() const = 0;
0044 
0045     virtual KisTransformMaskParamsInterfaceSP clone() const = 0;
0046 };
0047 
0048 class KRITAIMAGE_EXPORT KisAnimatedTransformParamsInterface
0049 {
0050 public:
0051     virtual ~KisAnimatedTransformParamsInterface();
0052 
0053     virtual KisKeyframeChannel* requestKeyframeChannel(const QString &id, KisNodeWSP parent) = 0;
0054     virtual KisKeyframeChannel* getKeyframeChannel(const KoID& koid) const = 0;
0055     virtual void setKeyframeChannel(const QString &name, QSharedPointer<KisKeyframeChannel> kcsp) = 0;
0056     virtual QList<KisKeyframeChannel*> copyChannelsFrom(const KisAnimatedTransformParamsInterface* other) = 0;
0057 
0058     virtual void initializeKeyframes(KisTransformMaskSP mask, KisTransformMaskParamsInterfaceSP params, KUndo2Command* cmnd = nullptr) = 0;
0059     virtual void setKeyframeData(KisTransformMaskSP mask, KisTransformMaskParamsInterfaceSP params, KUndo2Command* cmnd = nullptr) = 0;
0060 };
0061 
0062 class QDomElement;
0063 
0064 class KRITAIMAGE_EXPORT KisDumbTransformMaskParams : public KisTransformMaskParamsInterface
0065 {
0066 public:
0067     KisDumbTransformMaskParams();
0068     KisDumbTransformMaskParams(const QTransform &transform);
0069     KisDumbTransformMaskParams(bool isHidden);
0070     ~KisDumbTransformMaskParams() override;
0071 
0072 
0073     QTransform finalAffineTransform() const override;
0074     bool isAffine() const override;
0075     bool isHidden() const override;
0076     void transformDevice(KisNodeSP node, KisPaintDeviceSP src, KisPaintDeviceSP dst) const override;
0077 
0078     QString id() const override;
0079     void toXML(QDomElement *e) const override;
0080     static KisTransformMaskParamsInterfaceSP fromXML(const QDomElement &e);
0081 
0082     void translateSrcAndDst(const QPointF &offset) override;
0083     void transformSrcAndDst(const QTransform &t) override;
0084     void translateDstSpace(const QPointF &offset) override;
0085 
0086     // for tesing purposes only
0087     QTransform testingGetTransform() const;
0088     void testingSetTransform(const QTransform &t);
0089 
0090     QRect nonAffineChangeRect(const QRect &rc) override;
0091     QRect nonAffineNeedRect(const QRect &rc, const QRect &srcBounds) override;
0092 
0093     bool isAnimated() const;
0094     KisKeyframeChannel *getKeyframeChannel(const QString &id, KisDefaultBoundsBaseSP defaultBounds);
0095     void clearChangedFlag() override;
0096     bool hasChanged() const override;
0097 
0098     KisTransformMaskParamsInterfaceSP clone() const override;
0099 
0100 private:
0101     struct Private;
0102     const QScopedPointer<Private> m_d;
0103 };
0104 
0105 #endif /* __KIS_TRANSFORM_MASK_PARAMS_INTERFACE_H */