X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswfshape.c;h=3c6c4b6562a9df1bafc473fa29545010978f8c75;hb=ec646624d627bef5c3d538be9e3b6dcad65bbf2e;hp=1bc84c22c97211cf9b8d86a0de1cb8aad0468ea2;hpb=6fb490b06a074e4cceb2999e188f0ac70bfac1c5;p=swftools.git diff --git a/lib/modules/swfshape.c b/lib/modules/swfshape.c index 1bc84c2..3c6c4b6 100644 --- a/lib/modules/swfshape.c +++ b/lib/modules/swfshape.c @@ -297,6 +297,10 @@ int swf_ShapeAddFillStyle(SHAPE * s,U8 type,MATRIX * m,RGBA * color,U16 id_bitma return (++s->fillstyle.n); } +int swf_ShapeAddFillStyle2(SHAPE * s,FILLSTYLE*fs) +{ + return swf_ShapeAddFillStyle(s, fs->type, &fs->m, &fs->color, fs->id_bitmap, &fs->gradient); +} int swf_ShapeAddSolidFillStyle(SHAPE * s,RGBA * color) { return swf_ShapeAddFillStyle(s,FILL_SOLID,NULL,color,0,0); @@ -661,6 +665,35 @@ void swf_Shape2Free(SHAPE2 * s) rfx_free(s->bbox); } +SHAPE2* swf_Shape2Clone(SHAPE2 * s) +{ + SHAPELINE*line = s->lines; + SHAPELINE*prev = 0; + SHAPE2*s2 = rfx_alloc(sizeof(SHAPE2)); + memcpy(s2,s,sizeof(SHAPE2)); + s2->linestyles = rfx_alloc(sizeof(LINESTYLE)*s->numlinestyles); + memcpy(s2->linestyles, s->linestyles, sizeof(LINESTYLE)*s->numlinestyles); + s2->fillstyles = rfx_alloc(sizeof(FILLSTYLE)*s->numfillstyles); + memcpy(s2->fillstyles, s->fillstyles, sizeof(FILLSTYLE)*s->numfillstyles); + + while(line) { + SHAPELINE*line2 = rfx_alloc(sizeof(SHAPELINE)); + memcpy(line2, line, sizeof(SHAPELINE)); + line2->next = 0; + if(prev) + prev->next = line2; + else + s2->lines = line2; + prev = line2; + line = line->next; + } + if(s->bbox) { + s2->bbox = rfx_alloc(sizeof(SRECT)); + memcpy(s2->bbox, s->bbox, sizeof(SRECT)); + } + return s2; +} + SHAPE2* swf_ShapeToShape2(SHAPE*shape) { SHAPE2*shape2 = (SHAPE2*)rfx_calloc(sizeof(SHAPE2)); @@ -883,6 +916,7 @@ void swf_ParseDefineShape(TAG*tag, SHAPE2*shape) else { fprintf(stderr, "parseDefineShape must be called with a shape tag"); } + swf_SetTagPos(tag, 0); id = swf_GetU16(tag); //id memset(shape, 0, sizeof(SHAPE2));