X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Frrd_gfx.c;h=405291b345f3303a7c91790885c4ea07b81f6179;hb=01399dbbb2b67d6fbe8d22eac1a1482f8efee461;hp=715d8d2c30dc275ed45db9711d76d4ad72165859;hpb=a1fe8fd19bb4f558150e52c0624869667b739877;p=rrdtool.git diff --git a/src/rrd_gfx.c b/src/rrd_gfx.c index 715d8d2..405291b 100644 --- a/src/rrd_gfx.c +++ b/src/rrd_gfx.c @@ -15,6 +15,7 @@ #include #include #include FT_FREETYPE_H +#include #include "rrd_gfx.h" @@ -210,6 +211,10 @@ double gfx_get_text_width ( double start, char* font, double size, } error = FT_Load_Glyph( face, glyph_index, 0 ); + if ( error ) { + FT_Done_FreeType(library); + return -1; + } if (! previous) { text_width -= (double)slot->metrics.horiBearingX / 64.0; /* add just char width */ } @@ -218,6 +223,7 @@ double gfx_get_text_width ( double start, char* font, double size, text_width -= (double)slot->metrics.horiAdvance / 64.0; /* remove last step */ text_width += (double)slot->metrics.width / 64.0; /* add just char width */ text_width += (double)slot->metrics.horiBearingX / 64.0; /* add just char width */ + FT_Done_FreeType(library); return text_width; } @@ -289,14 +295,15 @@ int gfx_render_png (gfx_canvas_t *canvas, (char *)node->filename, 0, &face ); + if ( error ) break; use_kerning = FT_HAS_KERNING(face); - if ( error ) break; error = FT_Set_Char_Size(face, /* handle to face object */ (long)(node->size*64), (long)(node->size*64), (long)(100*zoom), (long)(100*zoom)); + if ( error ) break; pen_x = node->x * zoom; pen_y = node->y * zoom; slot = face->glyph; @@ -313,6 +320,7 @@ int gfx_render_png (gfx_canvas_t *canvas, } error = FT_Load_Glyph( face, glyph_index, 0 ); + if ( error ) break; if (previous == 0){ pen_x -= (double)slot->metrics.horiBearingX / 64.0; /* adjust pos for first char */ text_width -= (double)slot->metrics.horiBearingX / 64.0; /* add just char width */ @@ -352,6 +360,7 @@ int gfx_render_png (gfx_canvas_t *canvas, } error = FT_Load_Glyph( face, glyph_index, FT_LOAD_RENDER ); + if ( error ) break; gr = slot->bitmap.num_grays -1; for (iy=0; iy < slot->bitmap.rows; iy++){ long buf_y = iy+(pen_y+0.5)-slot->bitmap_top; @@ -380,6 +389,7 @@ int gfx_render_png (gfx_canvas_t *canvas, } gfx_save_png(buffer,fp , pys_width,pys_height,bytes_per_pixel); art_free(buffer); + FT_Done_FreeType( library ); return 0; }