X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Fbbox.c;h=f46b60decb03f6d342812f0f1beb0084f539dadf;hb=0784a8a882e7b98299fb6a90f0f9a7ebb322562b;hp=15c9e512ee3363b31cfd44b91ffd58b522d4aab6;hpb=07e6625d8b3f4acd6a488208feaccbbe8a71c724;p=swftools.git diff --git a/lib/devices/bbox.c b/lib/devices/bbox.c index 15c9e51..f46b60d 100644 --- a/lib/devices/bbox.c +++ b/lib/devices/bbox.c @@ -21,8 +21,11 @@ #include #include #include +#ifndef WIN32 #include +#endif #include +#include #include "../types.h" #include "../mem.h" #include "../gfxdevice.h" @@ -30,11 +33,16 @@ typedef struct _internal { gfxbbox_t bbox; + int do_graphics; + int do_text; } internal_t; void measuregfxline(internal_t*i, gfxline_t*line) { gfxbbox_t b = gfxline_getbbox(line); + if(b.xmin==0 && b.ymin==0 && b.xmax==0 && b.ymax==0) { + return; + } i->bbox = gfxbbox_expand_to_point(i->bbox, b.xmin, b.ymin); i->bbox = gfxbbox_expand_to_point(i->bbox, b.xmax, b.ymax); } @@ -42,6 +50,13 @@ void measuregfxline(internal_t*i, gfxline_t*line) int bbox_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; + if(!strcmp(key, "graphics")) { + i->do_graphics = atoi(value); + return 1; + } else if(!strcmp(key, "text")) { + i->do_text = atoi(value); + return 1; + } return 0; } @@ -67,25 +82,29 @@ void bbox_endclip(gfxdevice_t*dev) void bbox_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; - measuregfxline(i, line); + if(i->do_graphics) + measuregfxline(i, line); } void bbox_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; - measuregfxline(i, line); + if(i->do_graphics) + measuregfxline(i, line); } void bbox_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; - measuregfxline(i, line); + if(i->do_graphics) + measuregfxline(i, line); } void bbox_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; - measuregfxline(i, line); + if(i->do_graphics) + measuregfxline(i, line); } void bbox_addfont(gfxdevice_t*dev, gfxfont_t*font) @@ -96,15 +115,19 @@ void bbox_addfont(gfxdevice_t*dev, gfxfont_t*font) void bbox_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; + if(!font) + return; - gfxglyph_t*glyph = &font->glyphs[glyphnr]; - gfxline_t*line2 = gfxline_clone(glyph->line); - gfxline_transform(line2, matrix); - measuregfxline(i, line2); - gfxline_free(line2); + if(i->do_text) { + gfxglyph_t*glyph = &font->glyphs[glyphnr]; + gfxline_t*line2 = gfxline_clone(glyph->line); + gfxline_transform(line2, matrix); + measuregfxline(i, line2); + gfxline_free(line2); + } } -void bbox_drawlink(gfxdevice_t*dev, gfxline_t*line, char*action) +void bbox_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action) { internal_t*i = (internal_t*)dev->internal; } @@ -148,5 +171,8 @@ void gfxdevice_bbox_init(gfxdevice_t*dev) dev->drawlink = bbox_drawlink; dev->endpage = bbox_endpage; dev->finish = bbox_finish; + + i->do_graphics = 1; + i->do_text = 1; }