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

0001 /*
0002  *  SPDX-FileCopyrightText: 2020 Emmet O 'Neill <emmetoneill.pdx@gmail.com>
0003  *  SPDX-FileCopyrightText: 2020 Eoin O 'Neill <eoinoneill1991@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #ifndef KIS_KEYFRAME_COMMANDS_H
0009 #define KIS_KEYFRAME_COMMANDS_H
0010 
0011 #include "kis_keyframe_channel.h"
0012 #include "kundo2command.h"
0013 #include "kis_scalar_keyframe_channel.h"
0014 #include "kritaimage_export.h"
0015 
0016 
0017 class KisInsertKeyframeCommand : public KUndo2Command
0018 {
0019 public:
0020     KisInsertKeyframeCommand(KisKeyframeChannel *channel, int time, KisKeyframeSP keyframe, KUndo2Command *parentCmd);
0021 
0022     void redo() override;
0023     void undo() override;
0024 
0025 private:
0026     KisKeyframeChannel* m_channel;
0027     int m_time;
0028     KisKeyframeSP m_keyframe;
0029 
0030     KisKeyframeSP m_overwritten = nullptr;
0031 };
0032 
0033 
0034 class KisRemoveKeyframeCommand : public KUndo2Command
0035 {
0036 public:
0037     KisRemoveKeyframeCommand(KisKeyframeChannel *channel, int time, KUndo2Command* parentCmd);
0038 
0039     void redo() override;
0040     void undo() override;
0041 
0042 private:
0043     KisKeyframeChannel* m_channel;
0044     int m_time;
0045 
0046     KisKeyframeSP m_cached;
0047 };
0048 
0049 
0050 class KisScalarKeyframeUpdateCommand : public KUndo2Command
0051 {
0052 public:
0053     KisScalarKeyframeUpdateCommand(KisScalarKeyframe* keyframe,
0054                                    qreal value,
0055                                    KisScalarKeyframe::InterpolationMode interpolationMode,
0056                                    KisScalarKeyframe::TangentsMode tangentMode,
0057                                    QPointF tangentLeft,
0058                                    QPointF tangentRight,
0059                                    KUndo2Command *parentCmd);
0060 
0061     KisScalarKeyframeUpdateCommand(KisScalarKeyframe* keyframe,
0062                                    qreal value,
0063                                    KUndo2Command *parentCmd)
0064         : KisScalarKeyframeUpdateCommand(keyframe, value, keyframe->m_interpolationMode,
0065                                          keyframe->m_tangentsMode, keyframe->m_leftTangent,
0066                                          keyframe->m_rightTangent, parentCmd) {};
0067 
0068     KisScalarKeyframeUpdateCommand(KisScalarKeyframe* keyframe,
0069                                    KisScalarKeyframe::InterpolationMode interpMode,
0070                                    KUndo2Command *parentCmd)
0071         : KisScalarKeyframeUpdateCommand(keyframe, keyframe->m_value, interpMode,
0072                                          keyframe->m_tangentsMode, keyframe->m_leftTangent,
0073                                          keyframe->m_rightTangent, parentCmd) {};
0074 
0075     KisScalarKeyframeUpdateCommand(KisScalarKeyframe* keyframe,
0076                                    KisScalarKeyframe::TangentsMode tangentMode,
0077                                    KUndo2Command *parentCmd)
0078         : KisScalarKeyframeUpdateCommand(keyframe, keyframe->m_value, keyframe->m_interpolationMode,
0079                                          tangentMode, keyframe->m_leftTangent,
0080                                          keyframe->m_rightTangent, parentCmd) {};
0081 
0082     KisScalarKeyframeUpdateCommand(KisScalarKeyframe* keyframe,
0083                                    QPointF tangentLeft,
0084                                    QPointF tangentRight,
0085                                    KUndo2Command *parentCmd)
0086         : KisScalarKeyframeUpdateCommand(keyframe, keyframe->m_value, keyframe->m_interpolationMode,
0087                                          keyframe->m_tangentsMode, tangentLeft,
0088                                          tangentRight, parentCmd) {};
0089 
0090     void redo() override;
0091     void undo() override;
0092 
0093     template<typename T>
0094     using UndoStore = QPair<T, T>;
0095 
0096 private:
0097     KisScalarKeyframe* keyframe;
0098     UndoStore<qreal> cachedValue;
0099     UndoStore<KisScalarKeyframe::InterpolationMode> cachedInterpolationMode;
0100     UndoStore<KisScalarKeyframe::TangentsMode> cachedTangentsMode;
0101     UndoStore<QPointF> cachedTangentLeft;
0102     UndoStore<QPointF> cachedTangentRight;
0103 
0104 };
0105 
0106 
0107 #endif