| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | #ifndef NULLSOFT_TATAKI_IFC_CANVAS_H#define NULLSOFT_TATAKI_IFC_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/wasabi_std.h> // for WASABI_DEFAULT_FONTNAMEWnamespace Wasabi{	// benski> move this to std_font laterstruct 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 APIclass 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
 |