X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fswfoutput.cc;h=52f64ffb93f7b9ebf63dc12b99b04d31862282f7;hb=16ad05687b928ff8071118d69dc0e2bf52c7872f;hp=1f21f72c4aca990050785a464fdd3ea819205702;hpb=4273d3b692fd941d3e63def5f04e1e7bd1ea02b8;p=swftools.git diff --git a/pdf2swf/swfoutput.cc b/pdf2swf/swfoutput.cc index 1f21f72..52f64ff 100644 --- a/pdf2swf/swfoutput.cc +++ b/pdf2swf/swfoutput.cc @@ -35,6 +35,7 @@ int ignoredraworder=0; int drawonlyshapes=0; int jpegquality=85; int storeallcharacters=0; +int enablezlib=0; static int flag_protected = 0; typedef unsigned char u8; @@ -489,10 +490,10 @@ void swfoutput_drawpath(swfoutput*output, T1_OUTLINE*outline, if(textid>=0) endtext(); - /* XXX the following is needed due to a bug in the SWF player. - Filled shapes consisting solely of curves don't get - filled correctly if they are in the same shape */ - if(shapeid>=0 && fill) { + /* Multiple polygons in one shape don't overlap correctly, + so we better start a new shape here if the polygon is filled + */ + if(shapeid>=0 && fill && !ignoredraworder) { endshape(); } @@ -1013,8 +1014,14 @@ void swfoutput_destroy(struct swfoutput* obj) tag = swf_InsertTag(tag,ST_END); - if FAILED(swf_WriteSWF(fi,&swf)) - logf(" WriteSWF() failed.\n"); + if(enablezlib) { + if FAILED(swf_WriteSWC(fi,&swf)) + logf(" WriteSWC() failed.\n"); + } else { + if FAILED(swf_WriteSWF(fi,&swf)) + logf(" WriteSWF() failed.\n"); + } + if(filename) close(fi); logf(" SWF written\n"); @@ -1196,6 +1203,8 @@ static void drawlink(struct swfoutput*obj, ActionTAG*actions1, ActionTAG*actions int myshapeid2; double xmin,ymin; double xmax=xmin=points[0].x,ymax=ymin=points[0].y; + double posx = 0; + double posy = 0; int t; int buttonid = ++currentswfid; for(t=1;t<4;t++) @@ -1205,8 +1214,18 @@ static void drawlink(struct swfoutput*obj, ActionTAG*actions1, ActionTAG*actions if(points[t].x=0) + endshape(); + if(textid>=0) + endtext(); + + int bitid = ++currentswfid; + oldtag = tag; + tag = swf_InsertTag(tag,ST_DEFINEBITSJPEG2); + swf_SetU16(tag, bitid); + swf_SetJPEGBits2(tag,sizex,sizey,mem,jpegquality); + drawimage(obj, bitid, sizex, sizey, x1,y1,x2,y2,x3,y3,x4,y4); + return bitid; +} + int swfoutput_drawimagelossless(struct swfoutput*obj, RGBA*mem, int sizex,int sizey, double x1,double y1, double x2,double y2, @@ -1435,11 +1487,29 @@ int swfoutput_drawimagelossless256(struct swfoutput*obj, U8*mem, RGBA*pal, int s double x4,double y4) { TAG*oldtag; + U8*mem2 = 0; if(shapeid>=0) endshape(); if(textid>=0) endtext(); + if(sizex&3) + { + /* SWF expects scanlines to be 4 byte aligned */ + printf("%d -> %d\n", sizex, BYTES_PER_SCANLINE(sizex)); + int x,y; + U8*ptr; + mem2 = (U8*)malloc(BYTES_PER_SCANLINE(sizex)*sizey); + ptr = mem2; + for(y=0;y