URI: 
       tFix kerning issue - ltkx - GUI toolkit for X11 (WIP)
  HTML git clone git://lumidify.org/ltkx.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit ffa1263fd4b66ae32adb6a2fd0274f226022d9f8
   DIR parent 528b74094b0aa1d585efe5ad28903758d467e8a6
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Sun, 17 May 2020 15:16:33 +0200
       
       Fix kerning issue
       
       Diffstat:
         M text_buffer.c                       |      17 ++++++-----------
         M text_edit.c                         |       2 +-
       
       2 files changed, 7 insertions(+), 12 deletions(-)
       ---
   DIR diff --git a/text_buffer.c b/text_buffer.c
       t@@ -71,10 +71,6 @@ ltk_text_line_wrap(struct ltk_text_line *tl, int max_width) {
                int cur_start = 0;
                /* FIXME: also calculate max height of each line */
                while (cur) {
       -                printf("%d  %d\n", cur->len, cur->num_glyphs);
       -                if (cur->len == 1) {
       -                        printf("%d\n", tl->log_buf->buf[cur->glyphs[0].cluster]);
       -                }
                        if (sl->w + cur->w <= max_width) {
                                sl->w += cur->w;
                                sl->len += cur->len;
       t@@ -82,7 +78,7 @@ ltk_text_line_wrap(struct ltk_text_line *tl, int max_width) {
                                continue;
                        }
                        if (cur->dir == HB_DIRECTION_RTL) {
       -                        cur_start = cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].info->w;
       +                        cur_start = cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].x_advance;
                                int i = cur->len - 1;
                                while (i >= 0) {
                                        glyph = &cur->glyphs[i];
       t@@ -167,7 +163,7 @@ ltk_text_line_wrap(struct ltk_text_line *tl, int max_width) {
        
                                }
                                if (sl->run == cur)
       -                                sl->w = cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].info->w - last_linebreak;
       +                                sl->w = cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].x_advance - last_linebreak;
                                else
                                        sl->w += cur->w;
                        }
       t@@ -232,7 +228,6 @@ ltk_render_text_line_new(
        {
                LtkGlyph *glyph;
                int par_is_rtl = tl->dir == HB_DIRECTION_RTL;
       -        /* FIXME: can't soft_lines just be a normal array instead of pointer array? */
                struct ltk_array_line *soft_lines = ltk_text_line_wrap(tl, max_width);
        
                XWindowAttributes attrs;
       t@@ -252,7 +247,7 @@ ltk_render_text_line_new(
                                   as the actual x_abs of the bordering glyph */
                                if (cur->dir == HB_DIRECTION_RTL) {
                                        start_index = cur == sl->run ? sl->glyph_index : cur->len - 1;
       -                                int local_border = cur->glyphs[start_index].x_abs + cur->glyphs[start_index].info->w;
       +                                int local_border = cur->glyphs[start_index].x_abs + cur->glyphs[start_index].x_advance;
                                        int end_index;
                                        if (start_index + 1 < sl->len - cur_len) {
                                                end_index = 0;
       t@@ -286,16 +281,16 @@ ltk_render_text_line_new(
                                                cur_len++;
                                                int x;
                                                if (par_is_rtl) {
       -                                                x = cur_border - (cur->glyphs[end_index].x_abs + cur->glyphs[end_index].info->w - cur->glyphs[i].x_abs);
       +                                                x = cur_border - (cur->glyphs[end_index].x_abs + cur->glyphs[end_index].x_advance - cur->glyphs[i].x_abs);
                                                } else {
                                                        x = cur_border + (cur->glyphs[i].x_abs - local_border);
                                                }
                                                ltk_draw_glyph(&cur->glyphs[i], sl->img, x, cur->glyphs[i].y_abs, fg);
                                        }
                                        if (par_is_rtl)
       -                                        cur_border -= cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].info->w - local_border;
       +                                        cur_border -= cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].x_advance - local_border;
                                        else
       -                                        cur_border += cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].info->w - local_border;
       +                                        cur_border += cur->glyphs[cur->len - 1].x_abs + cur->glyphs[cur->len - 1].x_advance - local_border;
                                }
                                cur = par_is_rtl ? cur->last : cur->next;
                        }
   DIR diff --git a/text_edit.c b/text_edit.c
       t@@ -46,7 +46,7 @@ ltk_draw_text_edit(LtkTextEdit *te) {
                LtkWindow *window = te->widget.window;
                if (!te->soft_lines)
                        te->soft_lines = ltk_render_text_line_new(te->tl, rect.w, ltk_global->display, window->xwindow, window->gc, ltk_global->colormap, fg, bg);
       -        XSetForeground(ltk_global->display, window->gc, fg.pixel);
       +        XSetForeground(ltk_global->display, window->gc, bg.pixel);
                XFillRectangle(ltk_global->display, window->xwindow, window->gc, rect.x, rect.y, rect.w, rect.h);
                for (int i = 0; i < te->soft_lines->len; i++) {
                        XImage *img = te->soft_lines->buf[i]->img;