X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fswfoutput.cc;h=b0315465c2a6408db60784827d1e125f3a41def7;hb=a6f065c537b2d44ca561f05752af27fe6c81dacc;hp=74c982dc1b1fd81bc939137e8d8361c92bbd4da2;hpb=0e916263b32f4920c2f5581caa77985bf1992081;p=swftools.git diff --git a/pdf2swf/swfoutput.cc b/pdf2swf/swfoutput.cc index 74c982d..b031546 100644 --- a/pdf2swf/swfoutput.cc +++ b/pdf2swf/swfoutput.cc @@ -154,9 +154,15 @@ void spline(TAG*tag,plotxy p0,plotxy p1,plotxy p2,plotxy p3,struct swfmatrix*m) } } +void resetdrawer() +{ + swflastx = 0; + swflasty = 0; +} + /* draw a T1 outline. These are generated by pdf2swf and by t1lib. (representing characters) */ -void drawpath(TAG*tag, T1_OUTLINE*outline, struct swfmatrix*m) +void drawpath(TAG*tag, T1_OUTLINE*outline, struct swfmatrix*m, int log) { if(tag->id != ST_DEFINEFONT && tag->id != ST_DEFINESHAPE && @@ -166,8 +172,6 @@ void drawpath(TAG*tag, T1_OUTLINE*outline, struct swfmatrix*m) logf(" internal error: drawpath needs a shape tag, not %d\n",tag->id); exit(1); } - int log = 0; - double x=0,y=0; double lastx=0,lasty=0; double firstx=0,firsty=0; @@ -467,7 +471,7 @@ void drawchar(struct swfoutput*obj, SWFFont*font, char*character, int charnr, sw int lf = fill; fill = 1; - drawpath(tag, outline, &m2); + drawpath(tag, outline, &m2, 0); fill = lf; } } @@ -492,7 +496,7 @@ void swfoutput_drawpath(swfoutput*output, T1_OUTLINE*outline, lastwasfill = 1; } - drawpath(tag, outline,m); + drawpath(tag, outline,m, 0); } /* SWFFont: copy all t1 font outlines to a local @@ -606,7 +610,7 @@ SWFFont::~SWFFont() logf(" Font %s has %d used characters",fontid, usednum); TAG*ftag = swf_InsertTag(swf.firstTag,ST_DEFINEFONT); swf_SetU16(ftag, this->swfid); - int initpos = swf_GetDataSize(ftag); + int initpos = swf_GetTagLen(ftag); swfmatrix m; m.m11 = m.m22 = 1; m.m21 = m.m12 = 0; @@ -615,12 +619,14 @@ SWFFont::~SWFFont() for(t=0;tdata[ptr[t]] = swf_GetDataSize(ftag)-initpos; + *(U16*)&ftag->data[ptr[t]] = + SWAP16(swf_GetTagLen(ftag)-initpos); + swflastx=0; swflasty=0; swf_SetU8(ftag,0x10); //0 fill bits, 0 linestyle bits @@ -631,7 +637,7 @@ SWFFont::~SWFFont() int lastfill = fill; fill = 1; storefont = 1; - drawpath(ftag, outline[swfcharid2char[t]],&m); + drawpath(ftag, outline[swfcharid2char[t]],&m, 0); storefont = 0; fill = lastfill; swf_ShapeSetEnd(ftag); @@ -692,6 +698,17 @@ T1_OUTLINE*SWFFont::getOutline(char*name) return 0; } +int SWFFont::getWidth(char*name) +{ + int t; + for(t=0;tcharnum;t++) { + if(!strcmp(this->charname[t],name)) { + return this->width[t]; + } + } + return 0; +} + int SWFFont::getSWFCharID(char*name, int charnr) { int t; @@ -1295,15 +1312,21 @@ int swfoutput_drawimagejpeg(struct swfoutput*obj, char*filename, int sizex,int s double x3,double y3, double x4,double y4) { + TAG*oldtag; if(shapeid>=0) endshape(); if(textid>=0) endtext(); int bitid = ++currentswfid; + oldtag = tag; tag = swf_InsertTag(tag,ST_DEFINEBITSJPEG2); swf_SetU16(tag, bitid); - swf_SetJPEGBits(tag, filename, jpegquality); + if(swf_SetJPEGBits(tag, filename, jpegquality)<0) { + swf_DeleteTag(tag); + tag = oldtag; + return -1; + } drawimage(obj, bitid, sizex, sizey, x1,y1,x2,y2,x3,y3,x4,y4); return bitid; @@ -1315,15 +1338,21 @@ int swfoutput_drawimagelossless(struct swfoutput*obj, RGBA*mem, int sizex,int si double x3,double y3, double x4,double y4) { + TAG*oldtag; if(shapeid>=0) endshape(); if(textid>=0) endtext(); int bitid = ++currentswfid; + oldtag = tag; tag = swf_InsertTag(tag,ST_DEFINEBITSLOSSLESS); swf_SetU16(tag, bitid); - swf_SetLosslessBits(tag,sizex,sizey,mem, BMF_32BIT); + if(swf_SetLosslessBits(tag,sizex,sizey,mem, BMF_32BIT)<0) { + swf_DeleteTag(tag); + tag = oldtag; + return -1; + } drawimage(obj, bitid, sizex, sizey, x1,y1,x2,y2,x3,y3,x4,y4); return bitid; @@ -1335,15 +1364,21 @@ int swfoutput_drawimagelossless256(struct swfoutput*obj, U8*mem, RGBA*pal, int s double x3,double y3, double x4,double y4) { + TAG*oldtag; if(shapeid>=0) endshape(); if(textid>=0) endtext(); int bitid = ++currentswfid; + oldtag = tag; tag = swf_InsertTag(tag,ST_DEFINEBITSLOSSLESS2); swf_SetU16(tag, bitid); - swf_SetLosslessBitsIndexed(tag,sizex,sizey,mem, pal, 256); + if(swf_SetLosslessBitsIndexed(tag,sizex,sizey,mem, pal, 256)<0) { + swf_DeleteTag(tag); + tag = oldtag; + return -1; + } drawimage(obj, bitid, sizex, sizey, x1,y1,x2,y2,x3,y3,x4,y4); return bitid; @@ -1355,6 +1390,7 @@ void swfoutput_drawimageagain(struct swfoutput*obj, int id, int sizex,int sizey, double x3,double y3, double x4,double y4) { + if(id<0) return; if(shapeid>=0) endshape(); if(textid>=0)