1 // Aseprite Document IO Library
2 // Copyright (c) 2017 David Capello
3 //
4 // This file is released under the terms of the MIT license.
5 // Read LICENSE.txt for more information.
6 
7 #ifndef DIO_ASEPRITE_DECODER_H_INCLUDED
8 #define DIO_ASEPRITE_DECODER_H_INCLUDED
9 #pragma once
10 
11 #include "dio/decoder.h"
12 #include "doc/frame.h"
13 #include "doc/frame_tags.h"
14 #include "doc/layer_list.h"
15 #include "doc/pixel_format.h"
16 #include "doc/slices.h"
17 
18 #include <string>
19 
20 namespace doc {
21   class Cel;
22   class Layer;
23   class Layer;
24   class Mask;
25   class Palette;
26   class Sprite;
27   class UserData;
28 }
29 
30 namespace dio {
31 
32 struct AsepriteHeader;
33 struct AsepriteFrameHeader;
34 
35 class AsepriteDecoder : public Decoder {
36 public:
37   bool decode() override;
38 
39 private:
40   bool readHeader(AsepriteHeader* header);
41   void readFrameHeader(AsepriteFrameHeader* frame_header);
42   void readPadding(const int bytes);
43   std::string readString();
44   doc::Palette* readColorChunk(doc::Palette* prevPal, doc::frame_t frame);
45   doc::Palette* readColor2Chunk(doc::Palette* prevPal, doc::frame_t frame);
46   doc::Palette* readPaletteChunk(doc::Palette* prevPal, doc::frame_t frame);
47   doc::Layer* readLayerChunk(AsepriteHeader* header, doc::Sprite* sprite, doc::Layer** previous_layer, int* current_level);
48   doc::Cel* readCelChunk(doc::Sprite* sprite,
49                          doc::LayerList& allLayers,
50                          doc::frame_t frame,
51                          doc::PixelFormat pixelFormat,
52                          AsepriteHeader* header,
53                          size_t chunk_end);
54   void readCelExtraChunk(doc::Cel* cel);
55   doc::Mask* readMaskChunk();
56   void readFrameTagsChunk(doc::FrameTags* frameTags);
57   void readSlicesChunk(doc::Slices& slices);
58   doc::Slice* readSliceChunk(doc::Slices& slices);
59   void readUserDataChunk(doc::UserData* userData);
60 };
61 
62 } // namespace dio
63 
64 #endif
65