keep advances positive when transforming a font
authorMatthias Kramm <kramm@quiss.org>
Tue, 9 Mar 2010 22:38:31 +0000 (14:38 -0800)
committerMatthias Kramm <kramm@quiss.org>
Tue, 9 Mar 2010 22:38:31 +0000 (14:38 -0800)
lib/filters/remove_font_transforms.c

index b57306b..16d02ad 100644 (file)
@@ -203,17 +203,20 @@ static gfxresult_t* pass1_finish(gfxfilter_t*f, gfxdevice_t*out)
            gfxline_t*line = font->glyphs[t].line;
            gfxbbox_t b = gfxline_getbbox(line);
            total = gfxbbox_expand_to_bbox(total, b);
            gfxline_t*line = font->glyphs[t].line;
            gfxbbox_t b = gfxline_getbbox(line);
            total = gfxbbox_expand_to_bbox(total, b);
-           font->glyphs[t].advance = b.xmax;
+           if(b.xmax > 0)
+               font->glyphs[t].advance = b.xmax;
        }
        if(count) 
            average_xmax /= count;
 
        fd->dx = -total.xmin;
        fd->dy = 0;
        }
        if(count) 
            average_xmax /= count;
 
        fd->dx = -total.xmin;
        fd->dy = 0;
+
+       double adx = fd->dx>0?fd->dx:0;
        
        for(t=0;t<count;t++) {
            gfxline_t*line = font->glyphs[t].line;
        
        for(t=0;t<count;t++) {
            gfxline_t*line = font->glyphs[t].line;
-           font->glyphs[t].advance += fd->dx;
+           font->glyphs[t].advance += adx;
            while(line) {
                line->x += fd->dx;
                line->y += fd->dy;
            while(line) {
                line->x += fd->dx;
                line->y += fd->dy;