tag->pos = 0;
switch(tag->id)
{
- case ST_DEFINEBUTTONCXFORM: {
+ case ST_DEFINEBUTTONSOUND: {
int t;
callback(tag, tag->pos + base, callback_data);
for(t=0;t<4;t++) {
}
}
} break;
- case ST_DEFINEBUTTONSOUND:
+ case ST_DEFINEBUTTONCXFORM:
callback(tag, tag->pos + base, callback_data); //button id
break;
advancebits = swf_GetU8(tag); //advancebits
while(1) {
U16 flags;
+ int t;
swf_ResetReadBits(tag);
flags = swf_GetBits(tag, 8);
if(!flags) break;
- if(flags & 128) // text style record
- {
+
+ swf_ResetReadBits(tag);
+ if(flags & 8) { // hasfont
+ callback(tag, tag->pos + base, callback_data);
+ id = swf_GetU16(tag);
+ }
+ if(flags & 4) { // hascolor
+ if(num==1) swf_GetRGB(tag, NULL);
+ else swf_GetRGBA(tag, NULL);
+ }
+ if(flags & 2) { //has x offset
swf_ResetReadBits(tag);
- if(flags & 8) { // hasfont
- callback(tag, tag->pos + base, callback_data);
- id = swf_GetU16(tag);
- }
- if(flags & 4) { // hascolor
- if(num==1) swf_GetRGB(tag, NULL);
- else swf_GetRGBA(tag, NULL);
- }
- if(flags & 2) { //has x offset
- swf_ResetReadBits(tag);
- swf_GetU16(tag);
- }
- if(flags & 1) { //has y offset
- swf_ResetReadBits(tag);
- swf_GetU16(tag);
- }
- if(flags & 8) { //has height
- swf_ResetReadBits(tag);
- swf_GetU16(tag);
- }
- } else { // glyph record
- int t;
+ swf_GetU16(tag);
+ }
+ if(flags & 1) { //has y offset
swf_ResetReadBits(tag);
- for(t=0;t<flags;t++) {
- swf_GetBits(tag, glyphbits);
- swf_GetBits(tag, advancebits);
- }
+ swf_GetU16(tag);
+ }
+ if(flags & 8) { //has height
+ swf_ResetReadBits(tag);
+ swf_GetU16(tag);
+ }
+
+ flags = swf_GetBits(tag, 8);
+ if(!flags) break;
+ swf_ResetReadBits(tag);
+ for(t=0;t<flags;t++) {
+ swf_GetBits(tag, glyphbits);
+ swf_GetBits(tag, advancebits);
}
}
break;
/* TODO * clip depths
* sprites
*/
+ if(tag->id == ST_PLACEOBJECT2) {
+ SWFPLACEOBJECT obj;
+ swf_GetPlaceObject(tag, &obj);
+ if(obj.clipdepth) {
+ int newdepth = obj.clipdepth+nr;
+ if(newdepth>65535) {
+ fprintf(stderr, "Couldn't relocate depths: too large values\n");
+ newdepth = 65535;
+ }
+ obj.clipdepth = newdepth;
+ swf_ResetTag(tag, ST_PLACEOBJECT2);
+ swf_SetPlaceObject(tag, &obj);
+ }
+ swf_PlaceObjectFree(&obj);
+ }
+
int depth = swf_GetDepth(tag);
if(depth>=0) {
int newdepth = depth+nr;