61 lines
1.5 KiB
C++
61 lines
1.5 KiB
C++
|
#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;
|
||
|
}
|