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