X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Fbbox.c;fp=lib%2Fdevices%2Fbbox.c;h=15c9e512ee3363b31cfd44b91ffd58b522d4aab6;hb=07e6625d8b3f4acd6a488208feaccbbe8a71c724;hp=0000000000000000000000000000000000000000;hpb=e04ea2c4d776fe9190252a8fd2a3ba41fb57dc92;p=swftools.git diff --git a/lib/devices/bbox.c b/lib/devices/bbox.c new file mode 100644 index 0000000..15c9e51 --- /dev/null +++ b/lib/devices/bbox.c @@ -0,0 +1,152 @@ +/* bbox.c + + Part of the swftools package. + + Copyright (c) 2006 Matthias Kramm + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include +#include +#include +#include +#include +#include "../types.h" +#include "../mem.h" +#include "../gfxdevice.h" +#include "../gfxtools.h" + +typedef struct _internal { + gfxbbox_t bbox; +} internal_t; + +void measuregfxline(internal_t*i, gfxline_t*line) +{ + gfxbbox_t b = gfxline_getbbox(line); + i->bbox = gfxbbox_expand_to_point(i->bbox, b.xmin, b.ymin); + i->bbox = gfxbbox_expand_to_point(i->bbox, b.xmax, b.ymax); +} + +int bbox_setparameter(gfxdevice_t*dev, const char*key, const char*value) +{ + internal_t*i = (internal_t*)dev->internal; + return 0; +} + +void bbox_startpage(gfxdevice_t*dev, int width, int height) +{ + internal_t*i = (internal_t*)dev->internal; + i->bbox.xmin = 0; + i->bbox.ymin = 0; + i->bbox.xmax = 0; + i->bbox.ymax = 0; +} + +void bbox_startclip(gfxdevice_t*dev, gfxline_t*line) +{ + internal_t*i = (internal_t*)dev->internal; +} + +void bbox_endclip(gfxdevice_t*dev) +{ + internal_t*i = (internal_t*)dev->internal; +} + +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); +} + +void bbox_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) +{ + internal_t*i = (internal_t*)dev->internal; + 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); +} + +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); +} + +void bbox_addfont(gfxdevice_t*dev, gfxfont_t*font) +{ + internal_t*i = (internal_t*)dev->internal; +} + +void bbox_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) +{ + internal_t*i = (internal_t*)dev->internal; + + 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) +{ + internal_t*i = (internal_t*)dev->internal; +} + +void bbox_endpage(gfxdevice_t*dev) +{ + internal_t*i = (internal_t*)dev->internal; +} + +gfxresult_t* bbox_finish(gfxdevice_t*dev) +{ + free(dev->internal);dev->internal = 0; + return 0; +} + +gfxbbox_t gfxdevice_bbox_getbbox(gfxdevice_t*dev) +{ + internal_t*i = (internal_t*)dev->internal; + return i->bbox; +} + +void gfxdevice_bbox_init(gfxdevice_t*dev) +{ + internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); + memset(dev, 0, sizeof(gfxdevice_t)); + + dev->name = "bbox"; + + dev->internal = i; + + dev->setparameter = bbox_setparameter; + dev->startpage = bbox_startpage; + dev->startclip = bbox_startclip; + dev->endclip = bbox_endclip; + dev->stroke = bbox_stroke; + dev->fill = bbox_fill; + dev->fillbitmap = bbox_fillbitmap; + dev->fillgradient = bbox_fillgradient; + dev->addfont = bbox_addfont; + dev->drawchar = bbox_drawchar; + dev->drawlink = bbox_drawlink; + dev->endpage = bbox_endpage; + dev->finish = bbox_finish; +} +