From ee7c0f96f3bc1eca68dd4c17dfb0c4b3a404fce4 Mon Sep 17 00:00:00 2001 From: kramm Date: Wed, 1 Sep 2004 17:55:03 +0000 Subject: [PATCH] implemented shape handling. --- src/swfdump.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 6 deletions(-) diff --git a/src/swfdump.c b/src/swfdump.c index 0f36c20..0d4babc 100644 --- a/src/swfdump.c +++ b/src/swfdump.c @@ -571,14 +571,84 @@ void handlePlaceObject(TAG*tag, char*prefix) handlePlaceObject2(tag2, prefix); } -void handleShape(TAG*tag, char*prefix) +char stylebuf[256]; +char* fillstyle2str(FILLSTYLE*style) { - /*TODO*/ return; + switch(style->type) { + case 0x00: + sprintf(stylebuf, "SOLID %02x%02x%02x%02x", style->color.r, style->color.g, style->color.b, style->color.a); + break; + case 0x10: case 0x12: + sprintf(stylebuf, "GRADIENT (%d steps)", style->gradient.num); + break; + case 0x40: case 0x41: + /* TODO: display information about that bitmap */ + sprintf(stylebuf, "BITMAP %d", style->id_bitmap); + break; + default: + sprintf(stylebuf, "UNKNOWN[%02x]",style->type); + } + return stylebuf; +} +char* linestyle2str(LINESTYLE*style) +{ + sprintf(stylebuf, "%.2f %02x%02x%02x%02x", style->width/20.0, style->color.r, style->color.g, style->color.b, style->color.a); + return stylebuf; +} +void handleShape(TAG*tag, char*prefix) +{ SHAPE2 shape; - tag->len = 0; + tag->pos = 0; tag->readBit = 0; swf_ParseDefineShape(tag, &shape); + SHAPELINE*line; + + int t; + int max = shape.numlinestyles > shape.numfillstyles?shape.numlinestyles:shape.numfillstyles; + + if(max) printf("%s | fillstyles(%02d) linestyles(%02d)\n", + prefix, + shape.numfillstyles, + shape.numlinestyles + ); + else printf("%s | (Neither line nor fill styles)\n", prefix); + + for(t=0;tfillstyle0, + line->fillstyle1, + line->linestyle); + if(line->type == moveTo) { + printf("moveTo %.2f %.2f\n", line->x/20.0, line->y/20.0); + } else if(line->type == lineTo) { + printf("lineTo %.2f %.2f\n", line->x/20.0, line->y/20.0); + } else if(line->type == splineTo) { + printf("splineTo (%.2f %.2f) %.2f %.2f\n", + line->sx/20.0, line->sy/20.0, + line->x/20.0, line->y/20.0 + ); + } + line = line->next; + } + printf("%s |\n", prefix); } void fontcallback1(U16 id,U8 * name) @@ -745,9 +815,9 @@ int main (int argc,char ** argv) if(html) { char*fileversions[] = {"","1,0,0,0", "2,0,0,0","3,0,0,0","4,0,0,0", - "5,0,0,0","6,0,23,0","7,0,0,0","8,0,0,0"}; - if(swf.fileVersion>8) { - fprintf(stderr, "Fileversion>8\n"); + "5,0,0,0","6,0,23,0","7,0,0,0","8,0,0,0","9,0,0,0"}; + if(swf.fileVersion>9) { + fprintf(stderr, "Fileversion>9\n"); exit(1); } printf("id == ST_PROTECT) { if(tag->len>0) { printf(" %s\n", swf_GetString(tag)); + } else { + printf("\n"); } } else if(tag->id == ST_DEFINEBITSLOSSLESS || -- 1.7.10.4