#ifndef LOTPLAYER_H #define LOTPLAYER_H #include #include #ifdef _WIN32 # ifdef LOT_BUILD # ifdef DLL_EXPORT # define LOT_EXPORT __declspec(dllexport) # else # define LOT_EXPORT # endif # else # define LOT_EXPORT __declspec(dllimport) # endif #else # ifdef __GNUC__ # if __GNUC__ >= 4 # define LOT_EXPORT __attribute__ ((visibility("default"))) # else # define LOT_EXPORT # endif # else # define LOT_EXPORT # endif #endif class LOTPlayerPrivate; class LOTNode; struct LOT_EXPORT LOTBuffer { uint32_t *buffer; int width; int height; int bytesPerLine; bool clear; }; class LOT_EXPORT LOTPlayer { public: ~LOTPlayer(); LOTPlayer(); bool setFilePath(const char *filePath); float playTime() const; void setPos(float pos); float pos(); const std::vector& renderList() const; //TODO: Consider correct position... void setSize(int width, int height); void size(int &width, int &height) const; std::future render(float pos, LOTBuffer &buffer); bool renderSync(float pos, LOTBuffer &buffer); public: LOTPlayerPrivate *d; }; #define ChangeFlagNone 0x0000 #define ChangeFlagPath 0x0001 #define ChangeFlagPaint 0x0010 #define ChangeFlagAll (ChangeFlagPath & ChangeFlagPaint) class LOT_EXPORT LOTNode { public: struct PathData { const float *ptPtr; int ptCount; const char *elmPtr; int elmCount; }; struct Color { unsigned short r, g, b, a; }; enum BrushType { BrushSolid, BrushGradient }; enum FillRule { EvenOdd, Winding }; enum JoinStyle { MiterJoin, BevelJoin, RoundJoin }; enum CapStyle { FlatCap, SquareCap, RoundCap }; struct Stroke { bool enable; int width; CapStyle cap; JoinStyle join; int meterLimit; float *dashArray; int dashArraySize; }; struct Gradient { enum Type { Linear = 1, Radial = 2 }; Gradient::Type type; struct { float x, y; } start, end; struct { float x, y; } center, focal; float cradius; float fradius; }; ~LOTNode(); LOTNode(); public: int mFlag; LOTNode::BrushType mType; FillRule mFillRule; PathData mPath; Color mColor; Stroke mStroke; Gradient mGradient; }; #endif // LOTPLAYER_H