diff options
Diffstat (limited to 'Src/Wasabi/api/imgldr/api_imgldr.h')
-rw-r--r-- | Src/Wasabi/api/imgldr/api_imgldr.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/Src/Wasabi/api/imgldr/api_imgldr.h b/Src/Wasabi/api/imgldr/api_imgldr.h new file mode 100644 index 00000000..55e19bec --- /dev/null +++ b/Src/Wasabi/api/imgldr/api_imgldr.h @@ -0,0 +1,98 @@ +#ifndef __API_IMGLOADER_H +#define __API_IMGLOADER_H + +#include <wasabicfg.h> +#include <bfc/dispatch.h> + +class RegionServer; +class api_region; + +class imgldr_api : public Dispatchable +{ +public: + ARGB32 *imgldr_makeBmp(const wchar_t *filename, int *has_alpha, int *w, int *h); + ARGB32 *imgldr_makeBmp(OSMODULEHANDLE hInst, int id, int *has_alpha, int *w, int *h, const wchar_t *colorgroup = NULL); + void imgldr_releaseBmp(ARGB32 *bmpbits); + ARGB32 *imgldr_requestSkinBitmap(const wchar_t *file, int *has_alpha, int *x, int *y, int *subw, int *subh, int *w, int *h, int cached); + RegionServer *imgldr_requestSkinRegion(const wchar_t *id); + void imgldr_cacheSkinRegion(const wchar_t *id, api_region *r); + void imgldr_releaseSkinBitmap(ARGB32 *bmpbits); + + DISPATCH_CODES + { + IMGLDR_API_MAKEBMP = 0, + IMGLDR_API_MAKEBMP2 = 10, + IMGLDR_API_RELEASEBMP = 20, + IMGLDR_API_REQUESTSKINBITMAP = 30, + IMGLDR_API_REQUESTSKINREGION = 40, + IMGLDR_API_CACHESKINREGION = 50, + IMGLDR_API_RELEASESKINBITMAP = 60, + }; +}; + +inline ARGB32 *imgldr_api::imgldr_makeBmp(const wchar_t *filename, int *has_alpha, int *w, int *h) +{ + return _call(IMGLDR_API_MAKEBMP, (ARGB32 *)NULL, filename, has_alpha, w, h); +} + +inline ARGB32 *imgldr_api::imgldr_makeBmp(OSMODULEHANDLE hInst, int id, int *has_alpha, int *w, int *h, const wchar_t *colorgroup) +{ + return _call(IMGLDR_API_MAKEBMP2, (ARGB32 *)NULL, hInst, id, has_alpha, w, h, colorgroup); +} + +inline void imgldr_api::imgldr_releaseBmp(ARGB32 *bmpbits) +{ + _voidcall(IMGLDR_API_RELEASEBMP, bmpbits); +} + +#ifdef WASABI_COMPILE_SKIN + +inline ARGB32 *imgldr_api::imgldr_requestSkinBitmap(const wchar_t *file, int *has_alpha, int *x, int *y, int *subw, int *subh, int *w, int *h, int cached) +{ + return _call(IMGLDR_API_REQUESTSKINBITMAP, (ARGB32 *)NULL, file, has_alpha, x, y, subw, subh, w, h, cached); +} + +inline RegionServer *imgldr_api::imgldr_requestSkinRegion(const wchar_t *id) +{ + return _call(IMGLDR_API_REQUESTSKINREGION, (RegionServer *)NULL, id); +} + +inline void imgldr_api::imgldr_cacheSkinRegion(const wchar_t *id, api_region *r) +{ + _voidcall(IMGLDR_API_CACHESKINREGION, id, r); +} + +inline void imgldr_api::imgldr_releaseSkinBitmap(ARGB32 *bmpbits) +{ + _voidcall(IMGLDR_API_RELEASESKINBITMAP, bmpbits); +} + +#endif //WASABI_COMPILE_SKIN + +class imgldr_apiI : public imgldr_api +{ +public: + virtual ARGB32 *imgldr_makeBmp(const wchar_t *filename, int *has_alpha, int *w, int *h) = 0; +#ifdef _WIN32 + virtual ARGB32 *imgldr_makeBmp2(OSMODULEHANDLE hInst, int id, int *has_alpha, int *w, int *h, const wchar_t *colorgroup = NULL) = 0; +#endif + virtual void imgldr_releaseBmp(ARGB32 *bmpbits) = 0; +#ifdef WASABI_COMPILE_SKIN + virtual ARGB32 *imgldr_requestSkinBitmap(const wchar_t *file, int *has_alpha, int *x, int *y, int *subw, int *subh, int *w, int *h, int cached) = 0; + virtual RegionServer *imgldr_requestSkinRegion(const wchar_t *id) = 0; + virtual void imgldr_cacheSkinRegion(const wchar_t *id, api_region *r) = 0; + virtual void imgldr_releaseSkinBitmap(ARGB32 *bmpbits) = 0; +#endif //WASABI_COMPILE_SKIN + +protected: + RECVS_DISPATCH; +}; + +// {703ECC7C-B3D8-4e1e-B8B5-A7563D9D6F30} +static const GUID imgLdrApiServiceGuid = + { 0x703ecc7c, 0xb3d8, 0x4e1e, { 0xb8, 0xb5, 0xa7, 0x56, 0x3d, 0x9d, 0x6f, 0x30 } }; + +extern imgldr_api *imgLoaderApi; + + +#endif |