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