1 // Aseprite 2 // Copyright (C) 2001-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_DOC_API_H_INCLUDED 8 #define APP_DOC_API_H_INCLUDED 9 #pragma once 10 11 #include "app/drop_frame_place.h" 12 #include "app/tags_handling.h" 13 #include "doc/algorithm/flip_type.h" 14 #include "doc/color.h" 15 #include "doc/frame.h" 16 #include "doc/image_ref.h" 17 #include "gfx/rect.h" 18 19 namespace doc { 20 class Cel; 21 class Image; 22 class Layer; 23 class LayerGroup; 24 class LayerImage; 25 class Mask; 26 class Palette; 27 class Sprite; 28 } 29 30 namespace app { 31 class Doc; 32 class Transaction; 33 34 using namespace doc; 35 36 // Old high-level API. The new way is to create Cmds and add them 37 // directly to the transaction. 38 // 39 // TODO refactor this class in several Cmd, don't make it bigger 40 class DocApi { 41 public: 42 DocApi(Doc* document, Transaction& transaction); 43 44 // Sprite API 45 void setSpriteSize(Sprite* sprite, int w, int h); 46 void setSpriteTransparentColor(Sprite* sprite, color_t maskColor); 47 void cropSprite(Sprite* sprite, const gfx::Rect& bounds); 48 void trimSprite(Sprite* sprite); 49 50 // Frames API 51 void addFrame(Sprite* sprite, frame_t newFrame); 52 void addEmptyFrame(Sprite* sprite, frame_t newFrame); 53 void addEmptyFramesTo(Sprite* sprite, frame_t newFrame); 54 void copyFrame(Sprite* sprite, 55 const frame_t fromFrame, 56 const frame_t newFrame, 57 const DropFramePlace dropFramePlace, 58 const TagsHandling tagsHandling); 59 void removeFrame(Sprite* sprite, frame_t frame); 60 void setTotalFrames(Sprite* sprite, frame_t frames); 61 void setFrameDuration(Sprite* sprite, frame_t frame, int msecs); 62 void setFrameRangeDuration(Sprite* sprite, frame_t from, frame_t to, int msecs); 63 void moveFrame(Sprite* sprite, 64 const frame_t frame, 65 frame_t targetFrame, 66 const DropFramePlace dropFramePlace, 67 const TagsHandling tagsHandling); 68 69 // Cels API 70 void addCel(LayerImage* layer, Cel* cel); 71 Cel* addCel(LayerImage* layer, frame_t frameNumber, const ImageRef& image); 72 void clearCel(LayerImage* layer, frame_t frame); 73 void clearCel(Cel* cel); 74 void setCelPosition(Sprite* sprite, Cel* cel, int x, int y); 75 void setCelOpacity(Sprite* sprite, Cel* cel, int newOpacity); 76 void moveCel( 77 LayerImage* srcLayer, frame_t srcFrame, 78 LayerImage* dstLayer, frame_t dstFrame); 79 void copyCel( 80 LayerImage* srcLayer, frame_t srcFrame, 81 LayerImage* dstLayer, frame_t dstFrame); 82 void copyCel( 83 LayerImage* srcLayer, frame_t srcFrame, 84 LayerImage* dstLayer, frame_t dstFrame, bool continuous); 85 void swapCel( 86 LayerImage* layer, frame_t frame1, frame_t frame2); 87 88 // Layers API 89 LayerImage* newLayer(LayerGroup* parent, const std::string& name); 90 LayerGroup* newGroup(LayerGroup* parent, const std::string& name); 91 void addLayer(LayerGroup* parent, Layer* newLayer, Layer* afterThis); 92 void removeLayer(Layer* layer); 93 void restackLayerAfter(Layer* layer, LayerGroup* parent, Layer* afterThis); 94 void restackLayerBefore(Layer* layer, LayerGroup* parent, Layer* beforeThis); 95 void backgroundFromLayer(Layer* layer); 96 void layerFromBackground(Layer* layer); 97 Layer* duplicateLayerAfter(Layer* sourceLayer, LayerGroup* parent, Layer* afterLayer); 98 Layer* duplicateLayerBefore(Layer* sourceLayer, LayerGroup* parent, Layer* beforeLayer); 99 100 // Images API 101 void replaceImage(Sprite* sprite, const ImageRef& oldImage, const ImageRef& newImage); 102 103 // Image API 104 void flipImage(Image* image, const gfx::Rect& bounds, doc::algorithm::FlipType flipType); 105 void flipImageWithMask(Layer* layer, Image* image, doc::algorithm::FlipType flipType); 106 107 // Mask API 108 void copyToCurrentMask(Mask* mask); 109 void setMaskPosition(int x, int y); 110 111 // Palette API 112 void setPalette(Sprite* sprite, frame_t frame, const Palette* newPalette); 113 114 private: 115 void setCelFramePosition(Cel* cel, frame_t frame); 116 void moveFrameLayer(Layer* layer, frame_t frame, frame_t beforeFrame); 117 void adjustFrameTags(Sprite* sprite, 118 const frame_t frame, 119 const frame_t delta, 120 const DropFramePlace dropFramePlace, 121 const TagsHandling tagsHandling); 122 123 Doc* m_document; 124 Transaction& m_transaction; 125 }; 126 127 } // namespace app 128 129 #endif 130