X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftools.c;h=37c8e8b2b11b362df2575420eed90f4f1f2a9b47;hb=e9dc83904a5df2c24cc62004be16cecdaea83797;hp=163d85574288b1f057e69379d0920bf22180d83a;hpb=c4865209253f1606b0d4985e8fa6e4e33eaf1b8c;p=swftools.git diff --git a/lib/modules/swftools.c b/lib/modules/swftools.c index 163d855..37c8e8b 100644 --- a/lib/modules/swftools.c +++ b/lib/modules/swftools.c @@ -26,8 +26,11 @@ #define S64 long long SFIXED RFXSWF_SP(SFIXED a1,SFIXED a2,SFIXED b1,SFIXED b2) { S64 a; - a = (S64)a1*(S64)b1+(S64)a2*(S64)b2; - return (SFIXED)(a>>16); + a = ((S64)a1*(S64)b1+(S64)a2*(S64)b2)>>16; + SFIXED result = (SFIXED)(a); + if(a!=result) + fprintf(stderr, "Warning: overflow in matrix multiplication"); + return result; } SFIXED RFXSWF_QFIX(int zaehler,int nenner) // bildet Quotient von zwei INTs in SFIXED { S64 z = zaehler<<16; @@ -42,8 +45,8 @@ MATRIX * swf_MatrixJoin(MATRIX * d,MATRIX * s1,MATRIX * s2) if (!s1) return (s2)?(MATRIX *)memcpy(d,s2,sizeof(MATRIX)):NULL; if (!s2) return (MATRIX *)memcpy(d,s1,sizeof(MATRIX)); - d->tx = RFXSWF_SP(s1->sx,s1->r1,s2->tx,s2->ty); - d->ty = RFXSWF_SP(s1->r0,s1->sy,s2->tx,s2->ty); + d->tx = s1->tx + RFXSWF_SP(s1->sx,s1->r1,s2->tx,s2->ty); + d->ty = s1->ty + RFXSWF_SP(s1->r0,s1->sy,s2->tx,s2->ty); d->sx = RFXSWF_SP(s1->sx,s1->r1,s2->sx,s2->r0); d->r0 = RFXSWF_SP(s1->r0,s1->sy,s2->sx,s2->r0); @@ -920,6 +923,15 @@ U8 swf_isTextTag(TAG*tag) return 0; } +U8 swf_isFontTag(TAG*tag) +{ + if(tag->id == ST_DEFINEFONT || + tag->id == ST_DEFINEFONT2 || + tag->id == ST_DEFINEFONTINFO) + return 1; + return 0; +} + U8 swf_isImageTag(TAG*tag) { if(tag->id == ST_DEFINEBITSJPEG ||