aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2012-12-08 00:29:22 +0100
committerThomas White <taw@bitwiz.org.uk>2012-12-08 00:29:22 +0100
commit89c4584751f46751ad354161fc42989c371bab42 (patch)
tree3f99ae9872024d3cc3d356a0bb3dbaadf468bb4a
parentd625f947719e1cf9f57b26229de011561cd29024 (diff)
Add letter spacing
-rw-r--r--src/render.c19
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);