diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/api_canvas.h')
-rw-r--r-- | Src/Wasabi/api/wnd/api_canvas.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/api_canvas.h b/Src/Wasabi/api/wnd/api_canvas.h new file mode 100644 index 00000000..513d6c47 --- /dev/null +++ b/Src/Wasabi/api/wnd/api_canvas.h @@ -0,0 +1,163 @@ +#ifndef __WASABI_API_CANVAS_H +#define __WASABI_API_CANVAS_H + +#include <bfc/dispatch.h> +#include <bfc/platform/platform.h> +#include <api/service/svcs/svc_font.h> // for STDFONT_* stuff. should make a std_font thingy later +#include <bfc/std.h> // 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)); +} +#endif |