URI: 
       tAdd line breaking to pango text backend - ltk - Socket-based GUI for X11 (WIP)
  HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit d02e1da3846868b392d6af9451d160c0fc07b2eb
   DIR parent f1e4126fb66f7b15d1a0ed50a4b5da72e8224fb4
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Wed,  3 Mar 2021 16:46:40 +0100
       
       Add line breaking to pango text backend
       
       Diffstat:
         M src/text_pango.c                    |      38 ++++++++++++++++----------------
         M src/text_stb.c                      |       2 ++
       
       2 files changed, 21 insertions(+), 19 deletions(-)
       ---
   DIR diff --git a/src/text_pango.c b/src/text_pango.c
       t@@ -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 *
       t@@ -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;
        }
   DIR diff --git a/src/text_stb.c b/src/text_stb.c
       t@@ -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);
        }