1 /*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15 */
16
17 #include "kis_modify_transform_mask_command.h"
18 #include "kundo2command.h"
19 #include "kis_types.h"
20 #include "kis_recalculate_transform_mask_job.h"
21 #include "kis_transform_mask.h"
22 #include "kis_transform_mask_params_interface.h"
23 #include "tool_transform_args.h"
24 #include "kis_scalar_keyframe_channel.h"
25 #include "kis_transform_args_keyframe_channel.h"
26 #include "kis_animated_transform_parameters.h"
27
KisModifyTransformMaskCommand(KisTransformMaskSP mask,KisTransformMaskParamsInterfaceSP params)28 KisModifyTransformMaskCommand::KisModifyTransformMaskCommand(KisTransformMaskSP mask, KisTransformMaskParamsInterfaceSP params)
29 : m_mask(mask),
30 m_params(params),
31 m_oldParams(m_mask->transformParams())
32 {
33 m_wasHidden = m_oldParams->isHidden();
34
35 auto *animatedParameters = dynamic_cast<KisAnimatedTransformMaskParameters*>(m_oldParams.data());
36 if (animatedParameters) {
37 int time = m_mask->parent()->original()->defaultBounds()->currentTime();
38 KisAnimatedTransformMaskParameters::addKeyframes(m_mask, time, params, this);
39 }
40 }
41
redo()42 void KisModifyTransformMaskCommand::redo() {
43 KisTransformMaskParamsInterfaceSP params;
44
45 auto *animatedParameters = dynamic_cast<KisAnimatedTransformMaskParameters*>(m_oldParams.data());
46 if (animatedParameters) {
47 params = m_oldParams;
48 animatedParameters->setHidden(m_params->isHidden());
49 KUndo2Command::redo();
50 } else {
51 params = m_params;
52 }
53
54 m_mask->setTransformParams(params);
55 m_mask->threadSafeForceStaticImageUpdate();
56 }
57
undo()58 void KisModifyTransformMaskCommand::undo() {
59 auto *animatedParameters = dynamic_cast<KisAnimatedTransformMaskParameters*>(m_oldParams.data());
60
61 if (animatedParameters) {
62 animatedParameters->setHidden(m_wasHidden);
63 KUndo2Command::undo();
64 }
65
66 m_mask->setTransformParams(m_oldParams);
67 m_mask->threadSafeForceStaticImageUpdate();
68 }
69