X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fdevices%2Fswf.c;h=126d53bbfe5c74be358ca95e7c44daa75f6b4d9b;hp=4d8bbeaf08722bb7e07aed3e6ee8ce9c97ffbbf6;hb=3bb13bf276c06169f1ed0c03a8e253b2e30d1a0c;hpb=25efc6d493c8a52a501db8ca2fea30439ad1cfee diff --git a/lib/devices/swf.c b/lib/devices/swf.c index 4d8bbea..126d53b 100644 --- a/lib/devices/swf.c +++ b/lib/devices/swf.c @@ -77,6 +77,7 @@ typedef struct _swfoutput_internal double config_ppmsubpixels; double config_jpegsubpixels; char hasbuttons; + int config_dots; int config_simpleviewer; int config_opennewwindow; int config_ignoredraworder; @@ -98,6 +99,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 +238,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; @@ -244,6 +247,7 @@ static swfoutput_internal* init_internal_struct() i->config_drawonlyshapes=0; i->config_jpegquality=85; i->config_storeallcharacters=0; + i->config_dots=1; i->config_enablezlib=0; i->config_insertstoptag=0; i->config_flashversion=6; @@ -384,10 +388,16 @@ static void linetoxy(gfxdevice_t*dev, TAG*tag, plotxy_t p0) swf_ShapeSetLine (tag, i->shape, rx,ry); addPointToBBox(dev, i->swflastx,i->swflasty); addPointToBBox(dev, px,py); - }/* else if(!i->fill) { + } /* this is a nice idea, but doesn't work with current flash + players (the pixel will be invisible if they're not + precisely on a pixel boundary) + Besides, we should only do this if this lineto itself + is again followed by a "move". + else if(!i->fill && i->config_dots) { // treat lines of length 0 as plots, making them // at least 1 twip wide so Flash will display them - plot(dev, i->swflastx, i->swflasty, tag); + //plot(dev, i->swflastx, i->swflasty, tag); + swf_ShapeSetLine (tag, i->shape, rx+1,ry); }*/ i->shapeisempty = 0; @@ -1559,6 +1569,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); @@ -1931,6 +1944,8 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) i->config_enablezlib = atoi(value); } else if(!strcmp(name, "bboxvars")) { i->config_bboxvars = atoi(value); + } else if(!strcmp(name, "dots")) { + i->config_dots = atoi(value); } else if(!strcmp(name, "frameresets")) { i->config_frameresets = atoi(value); } else if(!strcmp(name, "showclipshapes")) { @@ -1977,6 +1992,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")) { @@ -2020,6 +2037,7 @@ int swf_setparameter(gfxdevice_t*dev, const char*name, const char*value) printf("storeallcharacters don't reduce the fonts to used characters in the output file\n"); printf("enablezlib switch on zlib compression (also done if flashversion>=7)\n"); printf("bboxvars store the bounding box of the SWF file in actionscript variables\n"); + printf("dots Take care to handle dots correctly\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"); @@ -2034,6 +2052,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; } @@ -2475,12 +2494,14 @@ static void swf_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcol /* TODO: * split line into segments, and perform this check for all segments */ - if(i->config_disable_polygon_conversion || type>=5 || + if(i->config_disable_polygon_conversion || /*type>=5 ||*/ (!has_dots && (width <= i->config_caplinewidth || (cap_style == gfx_capRound && joint_style == gfx_joinRound) - || (cap_style == gfx_capRound && type<=2)))) {} else + || (cap_style == gfx_capRound && type<=2)))) { + // ... + } else { /* convert line to polygon */ msg(" draw as polygon, type=%d dots=%d", type, has_dots); if(has_dots) @@ -2844,11 +2865,10 @@ static void swf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t* } if(i->config_drawonlyshapes) { - gfxglyph_t*glyph = &font->glyphs[glyphnr]; - gfxline_t*line2 = gfxline_clone(glyph->line); + gfxglyph_t*g = &font->glyphs[glyph]; + gfxline_t*line2 = gfxline_clone(g->line); gfxline_transform(line2, matrix); - draw_line(dev, line2); - fill_solid(dev, color); + dev->fill(dev, line2, color); gfxline_free(line2); return; }