X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftools.c;h=37c8e8b2b11b362df2575420eed90f4f1f2a9b47;hb=e9dc83904a5df2c24cc62004be16cecdaea83797;hp=58962e1e6ff8746e3d79d6f13b2bf2c3fa9ac15c;hpb=c134f47d8a8d3437b14d2aed283821635d013e05;p=swftools.git diff --git a/lib/modules/swftools.c b/lib/modules/swftools.c index 58962e1..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);