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 #ifdef HAVE_CONFIG_H
8 #include "config.h"
9 #endif
10
11 #include "app/ui/editor/editor_render.h"
12
13 #include "app/color_utils.h"
14 #include "app/pref/preferences.h"
15 #include "render/render.h"
16
17 namespace app {
18
19 static doc::ImageBufferPtr g_renderBuffer;
20
EditorRender()21 EditorRender::EditorRender()
22 : m_render(new render::Render)
23 {
24 }
25
~EditorRender()26 EditorRender::~EditorRender()
27 {
28 delete m_render;
29 }
30
setRefLayersVisiblity(const bool visible)31 void EditorRender::setRefLayersVisiblity(const bool visible)
32 {
33 m_render->setRefLayersVisiblity(visible);
34 }
35
setNonactiveLayersOpacity(const int opacity)36 void EditorRender::setNonactiveLayersOpacity(const int opacity)
37 {
38 m_render->setNonactiveLayersOpacity(opacity);
39 }
40
setProjection(const render::Projection & projection)41 void EditorRender::setProjection(const render::Projection& projection)
42 {
43 m_render->setProjection(projection);
44 }
45
setupBackground(Doc * doc,doc::PixelFormat pixelFormat)46 void EditorRender::setupBackground(Doc* doc, doc::PixelFormat pixelFormat)
47 {
48 DocumentPreferences& docPref = Preferences::instance().document(doc);
49 render::BgType bgType;
50
51 gfx::Size tile;
52 switch (docPref.bg.type()) {
53 case app::gen::BgType::CHECKED_16x16:
54 bgType = render::BgType::CHECKED;
55 tile = gfx::Size(16, 16);
56 break;
57 case app::gen::BgType::CHECKED_8x8:
58 bgType = render::BgType::CHECKED;
59 tile = gfx::Size(8, 8);
60 break;
61 case app::gen::BgType::CHECKED_4x4:
62 bgType = render::BgType::CHECKED;
63 tile = gfx::Size(4, 4);
64 break;
65 case app::gen::BgType::CHECKED_2x2:
66 bgType = render::BgType::CHECKED;
67 tile = gfx::Size(2, 2);
68 break;
69 case app::gen::BgType::CHECKED_1x1:
70 bgType = render::BgType::CHECKED;
71 tile = gfx::Size(1, 1);
72 break;
73 default:
74 bgType = render::BgType::TRANSPARENT;
75 break;
76 }
77
78 m_render->setBgType(bgType);
79 m_render->setBgZoom(docPref.bg.zoom());
80 m_render->setBgColor1(color_utils::color_for_image(docPref.bg.color1(), pixelFormat));
81 m_render->setBgColor2(color_utils::color_for_image(docPref.bg.color2(), pixelFormat));
82 m_render->setBgCheckedSize(tile);
83 }
84
setTransparentBackground()85 void EditorRender::setTransparentBackground()
86 {
87 m_render->setBgType(render::BgType::TRANSPARENT);
88 }
89
setSelectedLayer(const doc::Layer * layer)90 void EditorRender::setSelectedLayer(const doc::Layer* layer)
91 {
92 m_render->setSelectedLayer(layer);
93 }
94
setPreviewImage(const doc::Layer * layer,const doc::frame_t frame,const doc::Image * image,const gfx::Point & pos,const doc::BlendMode blendMode)95 void EditorRender::setPreviewImage(const doc::Layer* layer,
96 const doc::frame_t frame,
97 const doc::Image* image,
98 const gfx::Point& pos,
99 const doc::BlendMode blendMode)
100 {
101 m_render->setPreviewImage(layer, frame, image, pos, blendMode);
102 }
103
removePreviewImage()104 void EditorRender::removePreviewImage()
105 {
106 m_render->removePreviewImage();
107 }
108
setExtraImage(render::ExtraType type,const doc::Cel * cel,const doc::Image * image,doc::BlendMode blendMode,const doc::Layer * currentLayer,doc::frame_t currentFrame)109 void EditorRender::setExtraImage(
110 render::ExtraType type,
111 const doc::Cel* cel,
112 const doc::Image* image,
113 doc::BlendMode blendMode,
114 const doc::Layer* currentLayer,
115 doc::frame_t currentFrame)
116 {
117 m_render->setExtraImage(type, cel, image, blendMode,
118 currentLayer, currentFrame);
119 }
120
removeExtraImage()121 void EditorRender::removeExtraImage()
122 {
123 m_render->removeExtraImage();
124 }
125
setOnionskin(const render::OnionskinOptions & options)126 void EditorRender::setOnionskin(const render::OnionskinOptions& options)
127 {
128 m_render->setOnionskin(options);
129 }
130
disableOnionskin()131 void EditorRender::disableOnionskin()
132 {
133 m_render->disableOnionskin();
134 }
135
renderSprite(doc::Image * dstImage,const doc::Sprite * sprite,doc::frame_t frame)136 void EditorRender::renderSprite(
137 doc::Image* dstImage,
138 const doc::Sprite* sprite,
139 doc::frame_t frame)
140 {
141 m_render->renderSprite(dstImage, sprite, frame);
142 }
143
renderSprite(doc::Image * dstImage,const doc::Sprite * sprite,doc::frame_t frame,const gfx::ClipF & area)144 void EditorRender::renderSprite(
145 doc::Image* dstImage,
146 const doc::Sprite* sprite,
147 doc::frame_t frame,
148 const gfx::ClipF& area)
149 {
150 m_render->renderSprite(dstImage, sprite, frame, area);
151 }
152
renderBackground(doc::Image * image,const gfx::Clip & area)153 void EditorRender::renderBackground(
154 doc::Image* image,
155 const gfx::Clip& area)
156 {
157 m_render->renderBackground(image, area);
158 }
159
renderImage(doc::Image * dst_image,const doc::Image * src_image,const doc::Palette * pal,const int x,const int y,const int opacity,const doc::BlendMode blendMode)160 void EditorRender::renderImage(
161 doc::Image* dst_image,
162 const doc::Image* src_image,
163 const doc::Palette* pal,
164 const int x,
165 const int y,
166 const int opacity,
167 const doc::BlendMode blendMode)
168 {
169 m_render->renderImage(dst_image, src_image, pal,
170 x, y, opacity, blendMode);
171 }
172
getRenderImageBuffer()173 doc::ImageBufferPtr EditorRender::getRenderImageBuffer()
174 {
175 if (!g_renderBuffer)
176 g_renderBuffer.reset(new doc::ImageBuffer);
177 return g_renderBuffer;
178 }
179
180 } // namespace app
181