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