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;