1 // Aseprite
2 // Copyright (C) 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_UI_EDITOR_RENDER_H_INCLUDED
8 #define APP_UI_EDITOR_RENDER_H_INCLUDED
9 #pragma once
10 
11 #include "doc/blend_mode.h"
12 #include "doc/color.h"
13 #include "doc/frame.h"
14 #include "doc/image_buffer.h"
15 #include "doc/pixel_format.h"
16 #include "gfx/clip.h"
17 #include "gfx/point.h"
18 #include "render/extra_type.h"
19 #include "render/onionskin_options.h"
20 #include "render/projection.h"
21 
22 namespace doc {
23   class Cel;
24   class Image;
25   class Layer;
26   class Palette;
27   class Sprite;
28 }
29 
30 namespace render {
31   class Render;
32 }
33 
34 namespace app {
35   class Doc;
36 
37   class EditorRender {
38   public:
39     EditorRender();
40     ~EditorRender();
41 
42     void setRefLayersVisiblity(const bool visible);
43     void setNonactiveLayersOpacity(const int opacity);
44 
45     void setProjection(const render::Projection& projection);
46 
47     void setupBackground(Doc* doc, doc::PixelFormat pixelFormat);
48     void setTransparentBackground();
49 
50     void setSelectedLayer(const doc::Layer* layer);
51 
52     void setPreviewImage(const doc::Layer* layer,
53                          const doc::frame_t frame,
54                          const doc::Image* image,
55                          const gfx::Point& pos,
56                          const doc::BlendMode blendMode);
57     void removePreviewImage();
58 
59     void setExtraImage(
60       render::ExtraType type,
61       const doc::Cel* cel,
62       const doc::Image* image,
63       doc::BlendMode blendMode,
64       const doc::Layer* currentLayer,
65       doc::frame_t currentFrame);
66     void removeExtraImage();
67 
68     void setOnionskin(const render::OnionskinOptions& options);
69     void disableOnionskin();
70 
71     void renderSprite(
72       doc::Image* dstImage,
73       const doc::Sprite* sprite,
74       doc::frame_t frame);
75     void renderSprite(
76       doc::Image* dstImage,
77       const doc::Sprite* sprite,
78       doc::frame_t frame,
79       const gfx::ClipF& area);
80     void renderBackground(
81       doc::Image* image,
82       const gfx::Clip& area);
83     void renderImage(
84       doc::Image* dst_image,
85       const doc::Image* src_image,
86       const doc::Palette* pal,
87       const int x,
88       const int y,
89       const int opacity,
90       const doc::BlendMode blendMode);
91 
92     doc::ImageBufferPtr getRenderImageBuffer();
93 
94   private:
95     render::Render* m_render;
96   };
97 
98 } // namespace app
99 
100 #endif
101