ltkx

GUI toolkit for X11 (WIP)
git clone git://lumidify.org/ltkx.git
Log | Files | Refs | README | LICENSE

commit ffa1263fd4b66ae32adb6a2fd0274f226022d9f8
parent 528b74094b0aa1d585efe5ad28903758d467e8a6
Author: lumidify <nobody@lumidify.org>
Date:   Sun, 17 May 2020 15:16:33 +0200

Fix kerning issue

Diffstat:
Mtext_buffer.c | 17++++++-----------
Mtext_edit.c | 2+-
2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/text_buffer.c b/text_buffer.c @@ -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; @@ -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]; @@ -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; } @@ -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; @@ -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; @@ -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; } diff --git a/text_edit.c b/text_edit.c @@ -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;