commit ffa1263fd4b66ae32adb6a2fd0274f226022d9f8
parent 528b74094b0aa1d585efe5ad28903758d467e8a6
Author: lumidify <nobody@lumidify.org>
Date:   Sun, 17 May 2020 15:16:33 +0200
Fix kerning issue
Diffstat:
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;