diff options
author | Thomas White <taw@bitwiz.org.uk> | 2012-12-08 00:29:22 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2012-12-08 00:29:22 +0100 |
commit | 89c4584751f46751ad354161fc42989c371bab42 (patch) | |
tree | 3f99ae9872024d3cc3d356a0bb3dbaadf468bb4a | |
parent | d625f947719e1cf9f57b26229de011561cd29024 (diff) |
Add letter spacing
-rw-r--r-- | src/render.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/render.c b/src/render.c index f9293ea..79fb4b4 100644 --- a/src/render.c +++ b/src/render.c @@ -46,6 +46,7 @@ struct renderstuff PangoContext *pc; PangoFontMap *fontmap; PangoFont *font; + PangoLogAttr *log_attrs; struct frame *fr; int width; }; @@ -72,6 +73,7 @@ static void render_segment(gpointer data, gpointer user_data) struct renderstuff *s = user_data; PangoItem *item = data; PangoGlyphString *glyphs; + PangoGlyphItem gitem; GdkColor col; glyphs = pango_glyph_string_new(); @@ -79,6 +81,12 @@ static void render_segment(gpointer data, gpointer user_data) pango_shape(s->fr->sc+item->offset, item->length, &item->analysis, glyphs); + gitem.item = item; + gitem.glyphs = glyphs; + pango_glyph_item_letter_space(&gitem, s->fr->sc+item->offset, + s->log_attrs+item->offset, + 5.0*PANGO_SCALE); + /* FIXME: Honour alpha as well */ gdk_color_parse("#000000", &col); gdk_cairo_set_source_color(s->cr, &col); @@ -97,6 +105,7 @@ int render_sc(struct frame *fr, cairo_t *cr, double max_w, double max_h) struct renderstuff s; GList *list; double w, h; + int len; if ( fr->sc == NULL ) return 0; @@ -118,6 +127,15 @@ int render_sc(struct frame *fr, cairo_t *cr, double max_w, double max_h) return 1; } + len = strlen(fr->sc); + s.log_attrs = calloc(len+1, sizeof(PangoLogAttr)); + if ( s.log_attrs == NULL ) { + fprintf(stderr, "Failed to allocate memory for log attrs\n"); + return 1; + } + pango_get_log_attrs(fr->sc, len, -1, + pango_language_get_default(), s.log_attrs, len+1); + /* Create glyph string */ list = pango_itemize(s.pc, fr->sc, 0, strlen(fr->sc), NULL, NULL); s.width = 0; @@ -152,6 +170,7 @@ int render_sc(struct frame *fr, cairo_t *cr, double max_w, double max_h) cairo_destroy(cr); g_list_free(list); pango_font_description_free(fontdesc); + free(s.log_attrs); g_object_unref(s.font); g_object_unref(s.pc); |