1 // Aseprite
2 // Copyright (C) 2001-2015  David Capello
3 //
4 // This program is distributed under the terms of
5 // the End-User License Agreement for Aseprite.
6 
7 #ifdef HAVE_CONFIG_H
8 #include "config.h"
9 #endif
10 
11 #include "app/cmd/set_mask.h"
12 
13 #include "app/doc.h"
14 #include "doc/mask.h"
15 
16 namespace app {
17 namespace cmd {
18 
SetMask(Doc * doc,Mask * newMask)19 SetMask::SetMask(Doc* doc, Mask* newMask)
20   : WithDocument(doc)
21   , m_oldMask(doc->isMaskVisible() ? new Mask(*doc->mask()): nullptr)
22   , m_newMask(newMask && !newMask->isEmpty() ? new Mask(*newMask): nullptr)
23 {
24 }
25 
setNewMask(Mask * newMask)26 void SetMask::setNewMask(Mask* newMask)
27 {
28   m_newMask.reset(newMask ? new Mask(*newMask): nullptr);
29   setMask(m_newMask);
30 }
31 
onExecute()32 void SetMask::onExecute()
33 {
34   setMask(m_newMask);
35 }
36 
onUndo()37 void SetMask::onUndo()
38 {
39   setMask(m_oldMask);
40 }
41 
onMemSize() const42 size_t SetMask::onMemSize() const
43 {
44   return sizeof(*this) +
45     (m_oldMask ? m_oldMask->getMemSize(): 0) +
46     (m_newMask ? m_newMask->getMemSize(): 0);
47 }
48 
setMask(Mask * mask)49 void SetMask::setMask(Mask* mask)
50 {
51   Doc* doc = document();
52 
53   if (mask) {
54     doc->setMask(mask);
55     doc->setMaskVisible(!mask->isEmpty());
56   }
57   else {
58     Mask empty;
59     doc->setMask(&empty);
60     doc->setMaskVisible(false);
61   }
62 }
63 
64 } // namespace cmd
65 } // namespace app
66