1// Aseprite
2// Copyright (C) 2020 Igara Studio S.A.
3// Copyright (C) 2001-2016 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/extra_cel.h"
13
14#include "doc/sprite.h"
15
16namespace app {
17
18ExtraCel::ExtraCel()
19 : m_type(render::ExtraType::NONE)
20 , m_blendMode(doc::BlendMode::NORMAL)
21{
22}
23
24void ExtraCel::create(const TilemapMode tilemapMode,
25 doc::Sprite* sprite,
26 const gfx::Rect& bounds,
27 const gfx::Size& imageSize,
28 const doc::frame_t frame,
29 const int opacity)
30{
31 ASSERT(sprite);
32
33 doc::PixelFormat pixelFormat;
34 if (tilemapMode == TilemapMode::Tiles)
35 pixelFormat = doc::IMAGE_TILEMAP;
36 else
37 pixelFormat = sprite->pixelFormat();
38
39 if (!m_image ||
40 m_image->pixelFormat() != pixelFormat ||
41 m_image->width() != imageSize.w ||
42 m_image->height() != imageSize.h) {
43 if (!m_imageBuffer)
44 m_imageBuffer.reset(new doc::ImageBuffer(1));
45 doc::Image* newImage = doc::Image::create(pixelFormat,
46 imageSize.w, imageSize.h,
47 m_imageBuffer);
48 m_image.reset(newImage);
49 }
50
51 if (!m_cel) {
52 // Ignored fields for this cel (frame, and image index)
53 m_cel.reset(new doc::Cel(doc::frame_t(0), doc::ImageRef(nullptr)));
54 }
55
56 m_cel->setBounds(bounds);
57 m_cel->setOpacity(opacity);
58 m_cel->setFrame(frame);
59}
60
61void ExtraCel::reset()
62{
63 m_type = render::ExtraType::NONE;
64 m_image.reset();
65 m_cel.reset();
66}
67
68} // namespace app
69