+#include <stdlib.h>
+#include <stdio.h>
+#include "../rfxswf.h"
+
char* filtername[] = {"dropshadow","blur","glow","bevel","gradientglow","convolution","colormatrix","gradientbevel", 0};
void swf_SetFilter(TAG*tag, FILTER*filter)
swf_SetFixed(tag, f->blury);
U8 flags = f->passes << 3;
swf_SetU8(tag, flags);
+ } else if(filter->type == FILTERTYPE_GLOW) {
+ FILTER_GLOW*f = (FILTER_GLOW*)filter;
} else if(filter->type == FILTERTYPE_DROPSHADOW) {
FILTER_DROPSHADOW*f = (FILTER_DROPSHADOW*)filter;
swf_SetRGBA(tag, &f->color);
U8 type = swf_GetU8(tag);
FILTER*filter;
if(type == FILTERTYPE_BLUR) {
- FILTER_BLUR* f = rfx_calloc(sizeof(FILTER_BLUR));
+ FILTER_BLUR* f = (FILTER_BLUR*)rfx_calloc(sizeof(FILTER_BLUR));
f->type = type;
f->blurx = swf_GetFixed(tag);
f->blury = swf_GetFixed(tag);
U8 flags = swf_GetU8(tag);
f->passes = (flags&15)<<3;
return (FILTER*)f;
+ } else if(type == FILTERTYPE_GLOW) {
+ FILTER_GLOW* f = (FILTER_GLOW*)rfx_calloc(sizeof(FILTER_GLOW));
+ f->type = type;
+ swf_GetRGBA(tag, &f->rgba);
+ f->blurx = swf_GetFixed(tag);
+ f->blury = swf_GetFixed(tag);
+ f->strength = swf_GetFixed8(tag);
+ U8 flags = swf_GetU8(tag);
+ f->passes = flags&31;
+ f->innerglow = (flags>>7)&1;
+ f->knockout = (flags>>6)&1;
+ f->composite = (flags>>5)&1;
+ return (FILTER*)f;
} else if(type == FILTERTYPE_GRADIENTGLOW) {
- FILTER_GRADIENTGLOW* f = rfx_calloc(sizeof(FILTER_GRADIENTGLOW));
+ FILTER_GRADIENTGLOW* f = (FILTER_GRADIENTGLOW*)rfx_calloc(sizeof(FILTER_GRADIENTGLOW));
f->type = type;
- f->gradient = rfx_calloc(sizeof(GRADIENT));
+ f->gradient = (GRADIENT*)rfx_calloc(sizeof(GRADIENT));
f->gradient->num = swf_GetU8(tag);
- f->gradient->rgba = rfx_calloc(sizeof(RGBA)*f->gradient->num);
- f->gradient->ratios = rfx_calloc(sizeof(U8)*f->gradient->num);
+ f->gradient->rgba = (RGBA*)rfx_calloc(sizeof(RGBA)*f->gradient->num);
+ f->gradient->ratios = (U8*)rfx_calloc(sizeof(U8)*f->gradient->num);
int s;
for(s=0;s<f->gradient->num;s++)
swf_GetRGBA(tag, &f->gradient->rgba[s]);
f->ontop = (flags>>4)&1;
return (FILTER*)f;
} else if(type == FILTERTYPE_DROPSHADOW) {
- FILTER_DROPSHADOW* f = rfx_calloc(sizeof(FILTER_DROPSHADOW));
+ FILTER_DROPSHADOW* f = (FILTER_DROPSHADOW*)rfx_calloc(sizeof(FILTER_DROPSHADOW));
f->type = type;
swf_GetRGBA(tag, &f->color);
f->blurx = swf_GetFixed(tag);
f->composite = (flags>>5)&1;
return (FILTER*)f;
} else if(type == FILTERTYPE_BEVEL) {
- FILTER_BEVEL* f = rfx_calloc(sizeof(FILTER_BEVEL));
+ FILTER_BEVEL* f = (FILTER_BEVEL*)rfx_calloc(sizeof(FILTER_BEVEL));
f->type = type;
swf_GetRGBA(tag, &f->shadow);
swf_GetRGBA(tag, &f->highlight);
{
FILTER*f = 0;
if(type == FILTERTYPE_BLUR)
- f = rfx_calloc(sizeof(FILTER_BLUR));
+ f = (FILTER*)rfx_calloc(sizeof(FILTER_BLUR));
else if(type == FILTERTYPE_GRADIENTGLOW)
- f = rfx_calloc(sizeof(FILTER_GRADIENTGLOW));
+ f = (FILTER*)rfx_calloc(sizeof(FILTER_GRADIENTGLOW));
else if(type == FILTERTYPE_DROPSHADOW)
- f = rfx_calloc(sizeof(FILTER_DROPSHADOW));
+ f = (FILTER*)rfx_calloc(sizeof(FILTER_DROPSHADOW));
else if(type == FILTERTYPE_BEVEL)
- f = rfx_calloc(sizeof(FILTER_BEVEL));
+ f = (FILTER*)rfx_calloc(sizeof(FILTER_BEVEL));
else
fprintf(stderr, "Creation of filter type %02x not supported yet\n", type);
if(f)
f->type = type;
return f;
}
+
+void swf_DeleteFilter(FILTER*f)
+{
+ //FIXME
+ free(f);
+}