X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswffilter.c;h=02ef5dbdcfc15624bf7e57003afaa2edacc98576;hb=879d0eec420fe0fd5ddcd56c8fe62b82a6744edd;hp=4a47474b73bdd3a0e0aab892107a18f74e327472;hpb=a1955cb141dd5c7caca94304480c335593804f29;p=swftools.git diff --git a/lib/modules/swffilter.c b/lib/modules/swffilter.c index 4a47474..02ef5db 100644 --- a/lib/modules/swffilter.c +++ b/lib/modules/swffilter.c @@ -1,3 +1,7 @@ +#include +#include +#include "../rfxswf.h" + char* filtername[] = {"dropshadow","blur","glow","bevel","gradientglow","convolution","colormatrix","gradientbevel", 0}; void swf_SetFilter(TAG*tag, FILTER*filter) @@ -9,6 +13,8 @@ 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); @@ -56,20 +62,33 @@ FILTER*swf_GetFilter(TAG*tag) 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;sgradient->num;s++) swf_GetRGBA(tag, &f->gradient->rgba[s]); @@ -89,7 +108,7 @@ FILTER*swf_GetFilter(TAG*tag) 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); @@ -104,7 +123,7 @@ FILTER*swf_GetFilter(TAG*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); @@ -130,16 +149,22 @@ FILTER*swf_NewFilter(U8 type) { 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); +}