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 */