ltk

Socket-based GUI for X11 (WIP)
git clone git://lumidify.org/ltk.git (fast, but not encrypted)
git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
Log | Files | Refs | README | LICENSE

commit d02e1da3846868b392d6af9451d160c0fc07b2eb
parent f1e4126fb66f7b15d1a0ed50a4b5da72e8224fb4
Author: lumidify <nobody@lumidify.org>
Date:   Wed,  3 Mar 2021 16:46:40 +0100

Add line breaking to pango text backend

Diffstat:
Msrc/text_pango.c | 38+++++++++++++++++++-------------------
Msrc/text_stb.c | 2++
2 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/src/text_pango.c b/src/text_pango.c @@ -72,9 +72,21 @@ ltk_cleanup_text(void) { void ltk_text_line_set_width(ltk_text_line *tl, int width) { - (void)tl; - (void)width; - /* TODO: Implement! */ + pango_layout_set_width(tl->layout, width * PANGO_SCALE); + pango_layout_get_size(tl->layout, &tl->w, &tl->h); + tl->w /= PANGO_SCALE; + tl->h /= PANGO_SCALE; + tl->w = tl->w == 0 ? 1 : tl->w; + tl->h = tl->h == 0 ? 1 : tl->h; + /* FIXME: make this nicer */ + if (tl->draw) { + XftDrawDestroy(tl->draw); + XFreePixmap(tm.dpy, tl->pixmap); + } + XWindowAttributes attrs; + XGetWindowAttributes(tm.dpy, tl->window, &attrs); + tl->pixmap = XCreatePixmap(tm.dpy, tl->window, tl->w, tl->h, attrs.depth); + tl->draw = XftDrawCreate(tm.dpy, tl->pixmap, DefaultVisual(tm.dpy, tm.screen), tm.cm); } ltk_text_line * @@ -86,27 +98,15 @@ ltk_text_line_create(Window window, uint16_t font_size, char *text, int width) { line->font_size = font_size; line->layout = pango_layout_new(tm.context); - if (width > 0) { - pango_layout_set_width(line->layout, width * PANGO_SCALE); - pango_layout_set_wrap(line->layout, PANGO_WRAP_WORD_CHAR); - } - PangoFontDescription *desc = pango_font_description_from_string(tm.default_font); pango_font_description_set_size(desc, font_size * PANGO_SCALE); pango_layout_set_font_description(line->layout, desc); pango_font_description_free(desc); - - pango_layout_set_text(line->layout, text, -1); - pango_layout_get_size(line->layout, &line->w, &line->h); - line->w /= PANGO_SCALE; - line->h /= PANGO_SCALE; - line->w = line->w == 0 ? 1 : line->w; - line->h = line->h == 0 ? 1 : line->h; - XWindowAttributes attrs; - XGetWindowAttributes(tm.dpy, window, &attrs); - line->pixmap = XCreatePixmap(tm.dpy, window, line->w, line->h, attrs.depth); - line->draw = XftDrawCreate(tm.dpy, line->pixmap, DefaultVisual(tm.dpy, tm.screen), tm.cm); line->window = window; + line->draw = NULL; + pango_layout_set_wrap(line->layout, PANGO_WRAP_WORD_CHAR); + pango_layout_set_text(line->layout, text, -1); + ltk_text_line_set_width(line, width); return line; } diff --git a/src/text_stb.c b/src/text_stb.c @@ -648,5 +648,7 @@ ltk_text_line_destroy(ltk_text_line *tl) { ltk_free(tl->text); /* FIXME: Reference count glyph infos */ ltk_free(tl->glyphs); + if (tl->line_indeces) + ltk_free(tl->line_indeces); ltk_free(tl); }