X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdevices%2Frender.c;h=88e33ae9cba93a98dfc8ad83635e0932729306e8;hb=0784a8a882e7b98299fb6a90f0f9a7ebb322562b;hp=1d6e80ec37cd0637abd28ea018030b496180007d;hpb=a6c987152623f74912763bb88b323445ba3bd4f8;p=swftools.git diff --git a/lib/devices/render.c b/lib/devices/render.c index 1d6e80e..88e33ae 100644 --- a/lib/devices/render.c +++ b/lib/devices/render.c @@ -24,11 +24,11 @@ #include #include "../gfxdevice.h" #include "../gfxtools.h" -#include "../png.h" #include "../mem.h" - -typedef unsigned int U32; -typedef unsigned char U8; +#define PNG_INLINE_EXPORTS +#include "../types.h" +#include "../png.c" +#include "render.h" typedef gfxcolor_t RGBA; @@ -273,13 +273,13 @@ static void fill_line_solid(RGBA*line, U32*z, int y, int x1, int x2, RGBA col) col.r = (col.r*col.a)>>8; col.g = (col.g*col.a)>>8; col.b = (col.b*col.a)>>8; - col.a = 255; do { if(z[bitpos]&bit) { line[x].r = ((line[x].r*ainv)>>8)+col.r; line[x].g = ((line[x].g*ainv)>>8)+col.g; line[x].b = ((line[x].b*ainv)>>8)+col.b; - line[x].a = 255; + //line[x].a = 255; + line[x].a = ((line[x].a*ainv)>>8)+col.a; } bit <<= 1; if(!bit) { @@ -466,8 +466,8 @@ void newclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; - clipbuffer_t*c = rfx_calloc(sizeof(clipbuffer_t)); - c->data = rfx_calloc(sizeof(U32) * i->bitwidth * i->height2); + clipbuffer_t*c = (clipbuffer_t*)rfx_calloc(sizeof(clipbuffer_t)); + c->data = (U32*)rfx_calloc(sizeof(U32) * i->bitwidth * i->height2); c->next = i->clipbuf; i->clipbuf = c; if(c->next) @@ -502,8 +502,6 @@ void render_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxc }*/ while(line) { - int x1,y1,x2,y2,x3,y3; - if(line->type == gfx_moveTo) { } else if(line->type == gfx_lineTo) { double x1=x*i->zoom,y1=y*i->zoom; @@ -511,14 +509,14 @@ void render_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxc add_solidline(dev, x1, y1, x3, y3, width * i->multiply); fill_solid(dev, color); } else if(line->type == gfx_splineTo) { - int c,t,parts,qparts; + int t,parts; double xx,yy; double x1=x*i->zoom,y1=y*i->zoom; double x2=line->sx*i->zoom,y2=line->sy*i->zoom; double x3=line->x*i->zoom,y3=line->y*i->zoom; - c = abs(x3-2*x2+x1) + abs(y3-2*y2+y1); + double c = abs(x3-2*x2+x1) + abs(y3-2*y2+y1); xx=x1; yy=y1; @@ -649,6 +647,8 @@ void render_addfont(struct _gfxdevice*dev, gfxfont_t*font) void render_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; + if(!font) + return; /* align characters to whole pixels */ matrix->tx = (int)(matrix->tx * i->antialize) / i->antialize; @@ -668,7 +668,7 @@ void render_result_write(gfxresult_t*r, int filedesc) { internal_result_t*i= (internal_result_t*)r->internal; } -int render_result_save(gfxresult_t*r, char*filename) +int render_result_save(gfxresult_t*r, const char*filename) { internal_result_t*i= (internal_result_t*)r->internal; if(!i) { @@ -719,7 +719,7 @@ char*gfximage_asXPM(gfximage_t*img, int depth) *p = 0; return p; } -void*render_result_get(gfxresult_t*r, char*name) +void*render_result_get(gfxresult_t*r, const char*name) { internal_result_t*i= (internal_result_t*)r->internal; if(!strncmp(name,"xpm",3)) { @@ -813,7 +813,7 @@ void render_startpage(struct _gfxdevice*dev, int width, int height) static void store_image(internal_t*i, internal_result_t*ir) { - ir->img.data = malloc(i->width*i->height*sizeof(RGBA)); + ir->img.data = (gfxcolor_t*)malloc(i->width*i->height*sizeof(gfxcolor_t)); ir->img.width = i->width; ir->img.height = i->height; @@ -906,7 +906,7 @@ void render_endpage(struct _gfxdevice*dev) i->height2 = 0; } -void render_drawlink(struct _gfxdevice*dev, gfxline_t*line, char*action) +void render_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action) { /* not supported for this output device */ } @@ -914,7 +914,6 @@ void render_drawlink(struct _gfxdevice*dev, gfxline_t*line, char*action) void gfxdevice_render_init(gfxdevice_t*dev) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); - int y; memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "render";