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#ifndef APP_CMD_REPLACE_IMAGE_H_INCLUDED
8#define APP_CMD_REPLACE_IMAGE_H_INCLUDED
9#pragma once
10
11#include "app/cmd.h"
12#include "app/cmd/with_sprite.h"
13#include "doc/image_ref.h"
14
15#include <sstream>
16
17namespace app {
18namespace cmd {
19 using namespace doc;
20
21 class ReplaceImage : public Cmd
22 , public WithSprite {
23 public:
24 ReplaceImage(Sprite* sprite, const ImageRef& oldImage, const ImageRef& newImage);
25
26 protected:
27 void onExecute() override;
28 void onUndo() override;
29 void onRedo() override;
30 size_t onMemSize() const override {
31 return sizeof(*this) +
32 (m_copy ? m_copy->getMemSize(): 0);
33 }
34
35 private:
36 void replaceImage(ObjectId oldId, const ImageRef& newImage);
37
38 ObjectId m_oldImageId;
39 ObjectId m_newImageId;
40
41 // Reference used only to keep the copy of the new image from the
42 // ReplaceImage() ctor until the ReplaceImage::onExecute() call.
43 // Then the reference is not used anymore.
44 ImageRef m_newImage;
45 ImageRef m_copy;
46 };
47
48} // namespace cmd
49} // namespace app
50
51#endif
52