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