#include "precomp.h" #include "grad.h" #include #include #ifndef _WASABIRUNTIME BEGIN_SERVICES(GradientGen_Svc); DECLARE_SERVICETSINGLE(svc_imageGenerator, GradientImage); END_SERVICES(GradientGen_Svc, _GradientGen_Svc); #ifdef _X86_ extern "C" { int _link_GradientGen_Svc; } #else extern "C" { int __link_GradientGen_Svc; } #endif #endif int GradientImage::testDesc(const wchar_t *desc) { return !_wcsicmp(desc, L"$gradient"); } ARGB32 *GradientImage::genImage(const wchar_t *desc, int *has_alpha, int *w, int *h, ifc_xmlreaderparams *params) { int _w = params->getItemValueInt(L"w",1); if (_w == 0) _w = 1; int _h = params->getItemValueInt(L"h",1); if (_h == 0) _h = 1; if (_w <= 0 || _h <= 0) return NULL; #ifdef WASABI_COMPILE_MEMMGR ARGB32 *ret = (ARGB32*)WASABI_API_MEMMGR->sysMalloc(_w * _h * sizeof(ARGB32)); #else ARGB32 *ret = (ARGB32*)MALLOC(_w * _h * sizeof(ARGB32)); #endif setX1((float)WTOF(params->getItemValue(L"gradient_x1"))); setY1((float)WTOF(params->getItemValue(L"gradient_y1"))); setX2((float)WTOF(params->getItemValue(L"gradient_x2"))); setY2((float)WTOF(params->getItemValue(L"gradient_y2"))); setPoints(params->getItemValue(L"points")); setMode(params->getItemValue(L"mode")); setReverseColors(TRUE); // cuz we're imggen setAntialias(params->getItemValueInt(L"antialias")); renderGradient(ret, _w, _h); *w = _w; *h = _h; *has_alpha = 1; // will be optimized anyway return ret; }