X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Fswf.c;h=01bac6a521731bc71d42484d605aa03270f2f9c4;hb=1b790bfd12c24ff4bd68ce4305f99d979e1cfaea;hp=15e265e921be30f88fe991a0acf0cbdb9cf73783;hpb=8fc1927a31416db52cbb9b763f84911e259e89ea;p=swftools.git diff --git a/lib/devices/swf.c b/lib/devices/swf.c index 15e265e..01bac6a 100644 --- a/lib/devices/swf.c +++ b/lib/devices/swf.c @@ -98,6 +98,7 @@ typedef struct _swfoutput_internal int config_bboxvars; int config_disable_polygon_conversion; int config_normalize_polygon_positions; + char config_disablelinks; RGBA config_linkcolor; float config_minlinewidth; double config_caplinewidth; @@ -236,6 +237,7 @@ static swfoutput_internal* init_internal_struct() i->firstpage = 1; i->pagefinished = 1; + i->config_disablelinks=0; i->config_dumpfonts=0; i->config_ppmsubpixels=0; i->config_jpegsubpixels=0; @@ -1406,7 +1408,8 @@ void swfoutput_finalize(gfxdevice_t*dev) /* Add AVM2 actionscript */ if(i->config_flashversion>=9 && (i->config_insertstoptag || i->hasbuttons)) { - swf_AddButtonLinks(i->swf, i->config_insertstoptag); + swf_AddButtonLinks(i->swf, i->config_insertstoptag, + i->config_internallinkfunction||i->config_externallinkfunction); } // if(i->config_reordertags) // swf_Optimize(i->swf); @@ -1558,6 +1561,9 @@ void swf_drawlink(gfxdevice_t*dev, gfxline_t*points, const char*url) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; + if(i->config_disablelinks) + return; + if(!strncmp("http://pdf2swf:", url, 15)) { char*tmp = strdup(url); int l = strlen(tmp); @@ -1588,8 +1594,10 @@ void swfoutput_linktourl(gfxdevice_t*dev, const char*url, gfxline_t*points) endshape(dev); if(i->textid>=0) endtext(dev); + + /* TODO: escape special characters in url */ - if(i->config_externallinkfunction) { + if(i->config_externallinkfunction && i->config_flashversion<=8) { actions = action_PushString(actions, url); //parameter actions = action_PushInt(actions, 1); //number of parameters (1) actions = action_PushString(actions, i->config_externallinkfunction); //function name @@ -1616,7 +1624,7 @@ void swfoutput_linktopage(gfxdevice_t*dev, int page, gfxline_t*points) if(i->textid>=0) endtext(dev); - if(!i->config_internallinkfunction) { + if(!i->config_internallinkfunction || i->config_flashversion>=9) { actions = action_GotoFrame(actions, page-1); actions = action_End(actions); } else { @@ -1974,6 +1982,8 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) i->config_dumpfonts = atoi(value); } else if(!strcmp(name, "animate")) { i->config_animate = atoi(value); + } else if(!strcmp(name, "disablelinks")) { + i->config_disablelinks = atoi(value); } else if(!strcmp(name, "simpleviewer")) { i->config_simpleviewer = atoi(value); } else if(!strcmp(name, "next_bitmap_is_jpeg")) { @@ -2031,6 +2041,7 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) 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"); printf("splinequality= Set the quality of spline convertion to value (0-100, default: 100).\n"); + printf("disablelinks Disable links.\n"); } else { return 0; } @@ -2839,6 +2850,16 @@ static void swf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t* msg(" swf_drawchar called (glyph %d) without font", glyph); return; } + + if(i->config_drawonlyshapes) { + gfxglyph_t*g = &font->glyphs[glyph]; + gfxline_t*line2 = gfxline_clone(g->line); + gfxline_transform(line2, matrix); + dev->fill(dev, line2, color); + gfxline_free(line2); + return; + } + if(!i->swffont || !i->swffont->name || strcmp((char*)i->swffont->name,font->id)) // not equal to current font { /* TODO: remove the need for this (enhance getcharacterbbox so that it can cope