diff options
Diffstat (limited to 'Src/tataki/bitmap/autobitmap.h')
-rw-r--r-- | Src/tataki/bitmap/autobitmap.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/Src/tataki/bitmap/autobitmap.h b/Src/tataki/bitmap/autobitmap.h new file mode 100644 index 00000000..c1303b3c --- /dev/null +++ b/Src/tataki/bitmap/autobitmap.h @@ -0,0 +1,106 @@ +#ifndef _AUTOBITMAP_H +#define _AUTOBITMAP_H + +#include "bitmap.h" +#include <api/syscb/callbacks/syscb.h> +#include <api/syscb/callbacks/skincb.h> +#include <tataki/export.h> + +#ifdef DROP_BITMAP_ON_IDLE +#include <api/timer/timerclient.h> +#define DROP_BITMAP_ANCESTOR , public TimerClientDI +#else +#define DROP_BITMAP_ANCESTOR +#endif + + +class TATAKIAPI AutoSkinBitmap : public SysCallback DROP_BITMAP_ANCESTOR { +public: + AutoSkinBitmap(const wchar_t *_name=NULL); + virtual ~AutoSkinBitmap(); + + const wchar_t *setBitmap(const wchar_t *_name=NULL); + int setBitmap(int _id=0); + + // call this when you get freeResources called on you + // doesn't hurt to call as much as you want + void reset(); + void reload() { getBitmap(); } // force a reload + + // this loads the bitmap if necessary + SkinBitmap *getBitmap(); + operator SkinBitmap *() { return getBitmap(); } + + const wchar_t *operator =(const wchar_t *_name) { return setBitmap(_name); } + int operator =(int _id) { return setBitmap(_id); } + + const wchar_t *getBitmapName(); + + void setHInstanceBitmapColorGroup(const wchar_t *_colorgroup); + + enum + { + RESAMPLING_MODE_NONE = 0, + RESAMPLING_MODE_SUPERSAMPLING = 1, + }; + + void setResamplingMode(int mode); + int getResamplingMode(); + + // feel free to add more methods here to help make using this class + // transparent... + int getWidth() { return getBitmap()->getWidth(); }; + int getHeight() { return getBitmap()->getHeight(); }; + void stretchToRectAlpha(ifc_canvas *canvas, RECT *r, int alpha=255) { + getBitmap()->stretchToRectAlpha(canvas, r, alpha); + } + void stretchToRectAlpha(ifc_canvas *canvas, RECT *r, RECT *dest, int alpha=255) { + getBitmap()->stretchToRectAlpha(canvas, r, dest, alpha); + } + void stretchToRect(ifc_canvas *canvas, RECT *r) { + getBitmap()->stretchToRect(canvas, r); + } + void blitAlpha(ifc_canvas *canvas, int x, int y, int alpha=255) { + getBitmap()->blitAlpha(canvas, x, y, alpha); + } + +#ifdef _WIN32 + void setHInstance(HINSTANCE hinstance); // use this if you use autoskinbitmap and resource in a wac +#endif +#ifdef DROP_BITMAP_ON_IDLE + virtual void timerclient_timerCallback(int id); +#endif + +protected: + FOURCC getEventType() { return SysCallback::SKINCB; } + int notify(int msg, intptr_t param1 = 0, intptr_t param2 = 0) + { + if (msg == SkinCallback::RESET) + return skincb_onReset(); + else + return 0; + } + + int skincb_onReset(); +#ifdef DROP_BITMAP_ON_IDLE + virtual void tryUnload(); +#endif + +private: + int use; + int id; + wchar_t *name; + wchar_t *colorgroup; + SkinBitmap *bitmap; + int resamplingMode; +#ifdef _WIN32 + HINSTANCE myInstance; +#endif +#ifdef DROP_BITMAP_ON_IDLE + uint32_t lastuse; +#endif +protected: + RECVS_DISPATCH; +}; + +#endif |