diff options
Diffstat (limited to 'Src/Wasabi/api/imgldr/imggen/grad.cpp')
-rw-r--r-- | Src/Wasabi/api/imgldr/imggen/grad.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Src/Wasabi/api/imgldr/imggen/grad.cpp b/Src/Wasabi/api/imgldr/imggen/grad.cpp new file mode 100644 index 00000000..acec2eab --- /dev/null +++ b/Src/Wasabi/api/imgldr/imggen/grad.cpp @@ -0,0 +1,60 @@ +#include "precomp.h" + +#include "grad.h" + +#include <api/xml/xmlparams.h> +#include <api/memmgr/api_memmgr.h> +#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; +} |