1 // Aseprite
2 // Copyright (c) 2001-2018  David Capello
3 //
4 // This program is distributed under the terms of
5 // the End-User License Agreement for Aseprite.
6 
7 #ifndef APP_DOC_EVENT_H_INCLUDED
8 #define APP_DOC_EVENT_H_INCLUDED
9 #pragma once
10 
11 #include "gfx/region.h"
12 #include "doc/frame.h"
13 
14 namespace doc {
15   class Cel;
16   class FrameTag;
17   class Image;
18   class Layer;
19   class LayerImage;
20   class Sprite;
21 }
22 
23 namespace app {
24   class Doc;
25 
26   using namespace doc;
27 
28   class DocEvent {
29   public:
DocEvent(Doc * document)30     DocEvent(Doc* document)
31       : m_document(document)
32       , m_sprite(NULL)
33       , m_layer(NULL)
34       , m_cel(NULL)
35       , m_image(NULL)
36       , m_imageIndex(-1)
37       , m_frame(0)
38       , m_targetLayer(NULL)
39       , m_targetFrame(0) {
40     }
41 
42     // Source of the event.
document()43     Doc* document() const { return m_document; }
sprite()44     Sprite* sprite() const { return m_sprite; }
layer()45     Layer* layer() const { return m_layer; }
cel()46     Cel* cel() const { return m_cel; }
image()47     Image* image() const { return m_image; }
imageIndex()48     int imageIndex() const { return m_imageIndex; }
frame()49     frame_t frame() const { return m_frame; }
frameTag()50     FrameTag* frameTag() const { return m_frameTag; }
region()51     const gfx::Region& region() const { return m_region; }
52 
sprite(Sprite * sprite)53     void sprite(Sprite* sprite) { m_sprite = sprite; }
layer(Layer * layer)54     void layer(Layer* layer) { m_layer = layer; }
cel(Cel * cel)55     void cel(Cel* cel) { m_cel = cel; }
image(Image * image)56     void image(Image* image) { m_image = image; }
imageIndex(int imageIndex)57     void imageIndex(int imageIndex) { m_imageIndex = imageIndex; }
frame(frame_t frame)58     void frame(frame_t frame) { m_frame = frame; }
frameTag(FrameTag * frameTag)59     void frameTag(FrameTag* frameTag) { m_frameTag = frameTag; }
region(const gfx::Region & rgn)60     void region(const gfx::Region& rgn) { m_region = rgn; }
61 
62     // Destination of the operation.
targetLayer()63     Layer* targetLayer() const { return m_targetLayer; }
targetFrame()64     frame_t targetFrame() const { return m_targetFrame; }
65 
targetLayer(Layer * layer)66     void targetLayer(Layer* layer) { m_targetLayer = layer; }
targetFrame(frame_t frame)67     void targetFrame(frame_t frame) { m_targetFrame = frame; }
68 
69   private:
70     Doc* m_document;
71     Sprite* m_sprite;
72     Layer* m_layer;
73     Cel* m_cel;
74     Image* m_image;
75     int m_imageIndex;
76     frame_t m_frame;
77     FrameTag* m_frameTag;
78     gfx::Region m_region;
79 
80     // For copy/move commands, the m_layer/m_frame are source of the
81     // operation, and these are the destination of the operation.
82     Layer* m_targetLayer;
83     frame_t m_targetFrame;
84   };
85 
86 } // namespace app
87 
88 #endif
89