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)19SetMask::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)26void SetMask::setNewMask(Mask* newMask) 27 { 28 m_newMask.reset(newMask ? new Mask(*newMask): nullptr); 29 setMask(m_newMask); 30 } 31 onExecute()32void SetMask::onExecute() 33 { 34 setMask(m_newMask); 35 } 36 onUndo()37void SetMask::onUndo() 38 { 39 setMask(m_oldMask); 40 } 41 onMemSize() const42size_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)49void 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