From ac0ec69545eba03b2aa93b9179a6dcdbcd94a50a Mon Sep 17 00:00:00 2001 From: H.G.Muller Date: Thu, 6 Aug 2015 19:41:28 +0200 Subject: [PATCH] Take account of glyph size when positioning inscriptions We calculate the position of the inscription from its pango extents. --- draw.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/draw.c b/draw.c index 30d9add..40a4393 100644 --- a/draw.c +++ b/draw.c @@ -746,17 +746,19 @@ DrawUnicode (cairo_surface_t *canvas, char *string, int x, int y, char id, int f int s = 1 - 2*flip; PangoLayout *layout; PangoFontDescription *desc; + PangoRectangle r; char fontName[MSG_SIZ]; cr = cairo_create (canvas); - cairo_translate(cr, x + s*squareSize/6 + (1-s)*squareSize/2, y + s*squareSize/5 + (1-s)*squareSize/2); - if(s < 0) cairo_rotate(cr, G_PI); layout = pango_cairo_create_layout(cr); pango_layout_set_text(layout, string, -1); snprintf(fontName, MSG_SIZ, "Sans Bold %dpx", 2*squareSize/3); desc = pango_font_description_from_string(fontName); pango_layout_set_font_description(layout, desc); pango_font_description_free(desc); + pango_layout_get_pixel_extents(layout, NULL, &r); + cairo_translate(cr, x + squareSize/2 - s*r.width/2, y + (8+s)*squareSize/16 - s*r.height/2); + if(s < 0) cairo_rotate(cr, G_PI); cairo_set_source_rgb(cr, (id == '+' ? 1.0 : 0.0), 0.0, 0.0); pango_cairo_update_layout(cr, layout); pango_cairo_show_layout(cr, layout); -- 1.7.0.4