X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Fswf.c;h=205163f370b622733b10f945a0dfc271d01a3499;hb=0784a8a882e7b98299fb6a90f0f9a7ebb322562b;hp=cf9b6553f32a8b5ea0bcb0b6c1d17d0ec7dbd02a;hpb=793ca69db1040ab60dd2c3aa1870452cef6ef150;p=swftools.git diff --git a/lib/devices/swf.c b/lib/devices/swf.c index cf9b655..205163f 100644 --- a/lib/devices/swf.c +++ b/lib/devices/swf.c @@ -23,19 +23,26 @@ #include #include "../../config.h" #include +#ifdef HAVE_UNISTD_H #include +#endif +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_ASSERT_H #include #else #define assert(a) #endif #include +#include "../mem.h" #include "../log.h" #include "../rfxswf.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "../art/libart.h" -#include "artsutils.c" +#include "swf.h" +#include "artsutils.h" #define CHARDATAMAX 8192 #define CHARMIDX 0 @@ -853,7 +860,7 @@ void swf_endframe(gfxdevice_t*dev) if(!i->pagefinished) endpage(dev); - if(i->config_insertstoptag) { + if( (i->swf->fileVersion <= 8) && (i->config_insertstoptag) ) { ActionTAG*atag=0; atag = action_Stop(atag); atag = action_End(atag); @@ -929,7 +936,6 @@ void gfxdevice_swf_init(gfxdevice_t* dev) swfoutput_internal*i = (swfoutput_internal*)dev->internal; i->dev = dev; - SRECT r; RGBA rgb; msg(" initializing swf output\n", i->max_x,i->max_y); @@ -1174,7 +1180,6 @@ void wipeSWF(SWF*swf) } } - void swfoutput_finalize(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; @@ -1216,7 +1221,7 @@ void swfoutput_finalize(gfxdevice_t*dev) } endpage(dev); - fontlist_t *tmp,*iterator = i->fontlist; + fontlist_t *iterator = i->fontlist; while(iterator) { TAG*mtag = i->swf->firstTag; if(iterator->swffont) { @@ -1225,7 +1230,7 @@ void swfoutput_finalize(gfxdevice_t*dev) swf_FontReduce(iterator->swffont); } int used = iterator->swffont->use && iterator->swffont->use->used_glyphs; - if(i->config_storeallcharacters || used) { + if(used) { mtag = swf_InsertTag(mtag, ST_DEFINEFONT2); swf_FontSetDefine2(mtag, iterator->swffont); } @@ -1251,6 +1256,10 @@ void swfoutput_finalize(gfxdevice_t*dev) i->swf->compressed = 1; } + /* Initialize AVM2 if it is a Flash9 file */ + if(i->config_flashversion>=9 && i->config_insertstoptag) { + AVM2_InsertStops(i->swf); + } // if(i->config_reordertags) // swf_Optimize(i->swf); } @@ -1592,12 +1601,10 @@ static void drawlink(gfxdevice_t*dev, ActionTAG*actions1, ActionTAG*actions2, gf SRECT r; int lsid=0; int fsid; - plotxy_t p1,p2,p3,p4; int myshapeid; int myshapeid2; double posx = 0; double posy = 0; - int t; int buttonid = getNewID(dev); gfxbbox_t bbox = gfxline_getbbox(points); @@ -1853,6 +1860,32 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) i->config_linkcolor.b, i->config_linkcolor.a); + } else if(!strcmp(name, "help")) { + printf("\nSWF layer options:\n"); + printf("jpegdpi= resolution adjustment for jpeg images\n"); + printf("jpegsubpixels= resolution adjustment for jpeg images (same as jpegdpi, but in pixels)\n"); + printf("ppmdpi= resolution adjustment for lossless images\n"); + printf("ppmsubpixels= shortcut for setting both jpegsubpixels and ppmsubpixels\n"); + printf("drawonlyshapes convert everything to shapes (currently broken)\n"); + printf("ignoredraworder allow to perform a few optimizations for creating smaller SWFs\n"); + printf("linksopennewwindow make links open a new browser window\n"); + printf("linktarget target window name of new links\n"); + printf("linkcolor==7)\n"); + printf("bboxvars store the bounding box of the SWF file in actionscript variables\n"); + printf("reordertags=0/1 (default: 1) perform some tag optimizations\n"); + printf("internallinkfunction= when the user clicks a internal link (to a different page) in the converted file, this actionscript function is called\n"); + printf("externallinkfunction= when the user clicks an external link (e.g. http://www.foo.bar/) on the converted file, this actionscript function is called\n"); + printf("disable_polygon_conversion never convert strokes to polygons (will remove capstyles and joint styles)\n"); + printf("caplinewidth= the minimum thichness a line needs to have so that capstyles become visible (and are converted)\n"); + printf("insertstop put an ActionScript \"STOP\" tag in every frame\n"); + printf("protect add a \"protect\" tag to the file, to prevent loading in the Flash editor\n"); + printf("flashversion= the SWF fileversion (6)\n"); + printf("minlinewidth= convert horizontal/vertical boxes smaller than this width to lines (0.05) \n"); + printf("animate insert a showframe tag after each placeobject (animate draw order of PDF files)\n"); + printf("jpegquality= set compression quality of jpeg images\n"); } else { return 0; } @@ -2017,8 +2050,6 @@ static void swf_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxm double fy = (double)img->height / (double)newheight; MATRIX m; - float m00,m10,tx; - float m01,m11,ty; m.sx = (int)(65536*20*matrix->m00*fx); m.r1 = (int)(65536*20*matrix->m10*fy); m.r0 = (int)(65536*20*matrix->m01*fx); m.sy = (int)(65536*20*matrix->m11*fy); m.tx = (int)(matrix->tx*20);