X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfbbox.c;h=138ad1ef3513ebcee1d7dd45f9317ffe73730736;hb=1bb328806bae46eaa54a793370ed3e71910482c6;hp=712c2d021d8696133e65ee98dad98eec3f0912b7;hpb=4164b567ec4ba94642687088ba796c8bddeb1b8e;p=swftools.git diff --git a/src/swfbbox.c b/src/swfbbox.c index 712c2d0..138ad1e 100644 --- a/src/swfbbox.c +++ b/src/swfbbox.c @@ -46,9 +46,9 @@ static struct options_t options[] = { {"e", "expand"}, {"O", "optimize"}, {"S", "swifty"}, +{"c", "clip"}, {"o", "output"}, {"v", "verbose"}, -{"c", "clip"}, {"V", "version"}, {0,0} }; @@ -89,7 +89,8 @@ int args_callback_option(char*name,char*val) return 0; } else if(!strcmp(name, "q")) { - verbose --; + if(verbose) + verbose --; return 0; } else if(!strcmp(name, "e")) { @@ -122,6 +123,7 @@ void args_callback_usage(char *name) printf("-e , --expand Write out a new file using the recalculated bounding box\n"); printf("-O , --optimize Recalculate bounding boxes\n"); printf("-S , --swifty Print out transformed bounding boxes\n"); + printf("-c , --clip Clip bounding boxes to movie size\n"); printf("-o , --output Set output filename to (for -O)\n"); printf("-v , --verbose Be more verbose\n"); printf("-V , --version Print program version and exit\n"); @@ -160,6 +162,8 @@ int hasid(TAG*tag) return 1; if(tag->id == ST_PLACEOBJECT2 && (tag->data[0] & 2)) return 1; + if(tag->id == ST_PLACEOBJECT3 && (tag->data[0] & 2)) + return 1; return 0; } @@ -169,6 +173,8 @@ int hasname(TAG*tag) return 0; if(tag->id == ST_PLACEOBJECT2 && (tag->data[0] & 0x20)) return 1; + if(tag->id == ST_PLACEOBJECT3 && (tag->data[0] & 0x20)) + return 1; return 0; } @@ -182,6 +188,12 @@ char* getname(TAG*tag) swf_GetPlaceObject(tag, &o); return o.name; } + if(tag->id == ST_PLACEOBJECT3 && (tag->data[0] & 0x20)) { + SWFPLACEOBJECT o; + tag->pos = 0;tag->readBit = 0; + swf_GetPlaceObject(tag, &o); + return o.name; + } return 0; } @@ -230,7 +242,7 @@ static placement_t* readPlacements(SWF*swf) placement_t* p = (placement_t*)rfx_calloc(sizeof(placement_t)*65536); TAG*tag = swf->firstTag; while(tag) { - if(tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { + if(swf_isPlaceTag(tag)) { SWFPLACEOBJECT*po = rfx_alloc(sizeof(SWFPLACEOBJECT)); int id; swf_GetPlaceObject(tag, po); @@ -292,8 +304,10 @@ static SRECT clipBBox(TAG*tag, SRECT mbbox, SRECT r) return r; } - printf("ID %d\n", id); - swf_DumpMatrix(stdout, &m); + if(verbose) { + printf("ID %d\n", id); + swf_DumpMatrix(stdout, &m); + } mbbox.xmin -= m.tx; mbbox.ymin -= m.ty; mbbox.xmax -= m.tx; @@ -302,25 +316,29 @@ static SRECT clipBBox(TAG*tag, SRECT mbbox, SRECT r) mbbox.xmax *= 65536.0/m.sx; mbbox.ymin *= 65536.0/m.sy; mbbox.ymax *= 65536.0/m.sy; - - printf("border: %f/%f/%f/%f - rect: %f/%f/%f/%f\n", - mbbox.xmin /20.0, - mbbox.ymin /20.0, - mbbox.xmax /20.0, - mbbox.ymax /20.0, - r.xmin /20.0, - r.ymin /20.0, - r.xmax /20.0, - r.ymax /20.0); + + if(verbose) { + printf("border: %f/%f/%f/%f - rect: %f/%f/%f/%f\n", + mbbox.xmin /20.0, + mbbox.ymin /20.0, + mbbox.xmax /20.0, + mbbox.ymax /20.0, + r.xmin /20.0, + r.ymin /20.0, + r.xmax /20.0, + r.ymax /20.0); + } r = swf_ClipRect(mbbox, r); - - printf("new rect: %f/%f/%f/%f\n", - r.xmin /20.0, - r.ymin /20.0, - r.xmax /20.0, - r.ymax /20.0); + + if(verbose) { + printf("new rect: %f/%f/%f/%f\n", + r.xmin /20.0, + r.ymin /20.0, + r.xmax /20.0, + r.ymax /20.0); + } return r; } @@ -397,7 +415,8 @@ static void swf_OptimizeBoundingBoxes(SWF*swf) while (tag) { if (tag->id == ST_DEFINESHAPE || tag->id == ST_DEFINESHAPE2 || - tag->id == ST_DEFINESHAPE3) { + tag->id == ST_DEFINESHAPE3 || + tag->id == ST_DEFINESHAPE4) { SHAPE2 s; if(verbose) printf("%s\n", swf_TagGetName(tag)); swf_ParseDefineShape(tag, &s); @@ -479,7 +498,7 @@ static void showSwiftyOutput(SWF*swf) if (tag->id == ST_SHOWFRAME) { printf("}\n{\n\t{frame %d}\n", frame++); } - if (tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { + if (swf_isPlaceTag(tag)) { if(hasid(tag)) { depth2id[swf_GetDepth(tag)] = swf_GetPlaceID(tag); } @@ -487,7 +506,7 @@ static void showSwiftyOutput(SWF*swf) depth2name[swf_GetDepth(tag)] = getname(tag); } } - if (tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { + if (swf_isPlaceTag(tag)) { MATRIX m = getmatrix(tag); U16 id = depth2id[swf_GetDepth(tag)]; char*name = depth2name[swf_GetDepth(tag)]; @@ -525,12 +544,12 @@ static SRECT getMovieClipBBox(TAG*tag) memset(&movieSize,0,sizeof(SRECT)); while (tag->id != ST_END) { - if (tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { + if (swf_isPlaceTag(tag)) { if(hasid(tag)) { depth2id[swf_GetDepth(tag)] = swf_GetPlaceID(tag); } } - if (tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { + if (swf_isPlaceTag(tag)) { MATRIX m = getmatrix(tag); U16 id = depth2id[swf_GetDepth(tag)]; SRECT bbox = bboxes[id];