#ifndef NULLSOFT_TATAKI_IFC_CANVAS_H #define NULLSOFT_TATAKI_IFC_CANVAS_H #include #include #include // for STDFONT_* stuff. should make a std_font thingy later #include // for WASABI_DEFAULT_FONTNAMEW namespace Wasabi { // benski> move this to std_font later struct FontInfo { FontInfo() { // defaults face = WASABI_DEFAULT_FONTNAMEW; pointSize = 12; bold = 0; opaque = false; underline = false; italic = false; alignFlags = STDFONT_LEFT; antialias = 1; bgColor = RGBA(255, 255, 255, 255); color = RGBA(0, 0, 0, 0); } const wchar_t *face; unsigned int pointSize; int bold; // bold level bool opaque; bool underline; bool italic; int alignFlags; int antialias; // anti-alias level ARGB32 color; ARGB32 bgColor; }; } class ifc_window; // abstract base class: safe to use in API class NOVTABLE ifc_canvas : public Dispatchable { protected: ifc_canvas() {} // protect constructor ~ifc_canvas() {} public: DISPATCH_CODES { GETHDC = 100, GETROOTWND = 200, GETBITS = 300, GETOFFSETS = 400, ISFIXEDCOORDS = 500, GETDIM = 600, GETTEXTFONT = 700, GETTEXTSIZE = 710, GETTEXTBOLD = 720, GETTEXTOPAQUE = 730, GETTEXTALIGN = 740, GETTEXTCOLOR = 750, GETTEXTBKCOLOR = 760, GETTEXTAA = 770, GETTEXTUNDERLINE = 780, GETTEXTITALIC = 790, GETCLIPBOX = 800, }; public: HDC getHDC(); ifc_window *getRootWnd(); void *getBits(); void getOffsets(int *x, int *y); bool isFixedCoords(); //FG> allows onPaint to handle double buffers as well as normal DCs bool getDim(int *w, int *h = NULL, int *p = NULL); // w & h in pixels, pitch in bytes. 0 on success. int getClipBox(RECT *r); // returns 0 if no clipping region const wchar_t *getTextFont(); int getTextSize(); int getTextBold(); int getTextAntialias(); int getTextOpaque(); int getTextUnderline(); int getTextItalic(); int getTextAlign(); ARGB32 getTextColor(); ARGB32 getTextBkColor(); }; inline HDC ifc_canvas::getHDC() { return _call(ifc_canvas::GETHDC, (HDC)0); } inline ifc_window *ifc_canvas::getRootWnd() { return _call(ifc_canvas::GETROOTWND, (ifc_window*)0); } inline void *ifc_canvas::getBits() { return _call(ifc_canvas::GETBITS, (void *)0); } inline void ifc_canvas::getOffsets(int *x, int *y) { _voidcall(ifc_canvas::GETOFFSETS, x, y); } inline bool ifc_canvas::isFixedCoords() { //FG> allows onPaint to handle double buffers as well as normal DCs return _call(ifc_canvas::ISFIXEDCOORDS, false); } inline bool ifc_canvas::getDim(int *w, int *h, int *p) { // w & h in pixels, pitch in bytes. 0 on success. return _call(ifc_canvas::GETDIM, false, w, h, p); } inline int ifc_canvas::getClipBox(RECT *r) { // returns 0 if no clipping region return _call(ifc_canvas::GETCLIPBOX, 0, r); } inline const wchar_t *ifc_canvas::getTextFont() { return _call(ifc_canvas::GETTEXTFONT, L""); } inline int ifc_canvas::getTextSize() { return _call(ifc_canvas::GETTEXTSIZE, -1); } inline int ifc_canvas::getTextBold() { return _call(ifc_canvas::GETTEXTBOLD, 0); } inline int ifc_canvas::getTextAntialias() { return _call(ifc_canvas::GETTEXTAA, 0); } inline int ifc_canvas::getTextOpaque() { return _call(ifc_canvas::GETTEXTOPAQUE, 0); } inline int ifc_canvas::getTextUnderline() { return _call(ifc_canvas::GETTEXTUNDERLINE, 0); } inline int ifc_canvas::getTextItalic() { return _call(ifc_canvas::GETTEXTITALIC, 0); } inline int ifc_canvas::getTextAlign() { return _call(ifc_canvas::GETTEXTALIGN, -1); } inline ARGB32 ifc_canvas::getTextColor() { return _call(ifc_canvas::GETTEXTCOLOR, RGB(0, 0, 0)); } inline ARGB32 ifc_canvas::getTextBkColor() { return _call(ifc_canvas::GETTEXTBKCOLOR, RGB(255, 255, 255)); } typedef ifc_canvas api_canvas; #endif