#ifndef _PL_PAINT_H_ #define _PL_PAINT_H_ #include "PipeLine.h" #include "GraphicHelper.h" #define ENABLE_WTEXT /* PLPaint Language: COLOR F/B,R,G,B,A FILL 0/1 PEN TYPE,WIDTH RECT LTX,LTY,RBX,RBY TEXT LTX,LTY,"STRING" */ enum PLPLCmd { PLPLC__FIRST, PLPLC_COLOR, PLPLC_FILL, PLPLC_PEN, PLPLC_RECT, PLPLC_TEXT, PLPLC_WTEXT, PLPLC__LAST }; union PLPLType { int val_i; float val_f; char val_s[20]; PLPLType() : val_i(0) {} PLPLType(int _val_i) : val_i(_val_i) {} PLPLType(float _val_f) : val_f(_val_f) {} PLPLType(const char* _val_s); PLPLType(const wchar_t* _val_s); }; typedef std::vector plplc_vec_t; typedef std::vector plplt_vec_t; struct PLPLContext { plplc_vec_t cmds; plplt_vec_t params; PLGH_Color_RGBA color_front; PLGH_Color_RGBA color_back; int fill; PLGH_Pen pen; void* cvxText1; void* cvxText2; PLPLContext() : cmds(), params(), color_front(), color_back(), fill(0), pen(0, 0), cvxText1(nullptr), cvxText2(nullptr) {} ~PLPLContext(); void clear(); }; struct PL_Paint_Config { bool copyData; PLPLContext* plplCtx; std::string fontPath; PL_Paint_Config() : copyData(false), plplCtx(nullptr), fontPath() { } }; class PL_Paint : public PipeLineElem { public: PL_Paint(); virtual ~PL_Paint(); virtual bool init(void* args); virtual void finit(); virtual bool pay(const PipeMaterial& pm); virtual bool gain(PipeMaterial& pm); private: static bool pay_breaker_MBFT(const PipeMaterial* pm, void* args); private: void* internal; }; PipeLineElem* create_PL_Paint(); #endif