From 8e37d96bf70f59e062f7b703c328a00f663021b0 Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Thu, 8 May 2014 14:55:50 +0300 Subject: [PATCH] editor: Fix cursor positioning with pointer and touch The calculation off the vertical offset between the widget coordinates and where the text was rendered was wrong. It was using the constant for horizontal offset for that too. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=78411 --- clients/editor.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/clients/editor.c b/clients/editor.c index 3b00833eb..f3f61419c 100644 --- a/clients/editor.c +++ b/clients/editor.c @@ -1011,7 +1011,17 @@ text_entry_draw_cursor(struct text_entry *entry, cairo_t *cr) cairo_stroke(cr); } -static const int text_offset_left = 10; +static int +text_offset_left(struct rectangle *allocation) +{ + return 10; +} + +static int +text_offset_top(struct rectangle *allocation) +{ + return allocation->height / 2; +} static void text_entry_redraw_handler(struct widget *widget, void *data) @@ -1048,7 +1058,9 @@ text_entry_redraw_handler(struct widget *widget, void *data) cairo_set_source_rgba(cr, 0, 0, 0, 1); - cairo_translate(cr, text_offset_left, allocation.height / 2); + cairo_translate(cr, + text_offset_left(&allocation), + text_offset_top(&allocation)); if (!entry->layout) entry->layout = pango_cairo_create_layout(cr); @@ -1075,6 +1087,7 @@ text_entry_motion_handler(struct widget *widget, { struct text_entry *entry = data; struct rectangle allocation; + int tx, ty; if (!entry->button_pressed) { return CURSOR_IBEAM; @@ -1082,10 +1095,10 @@ text_entry_motion_handler(struct widget *widget, widget_get_allocation(entry->widget, &allocation); - text_entry_set_cursor_position(entry, - x - allocation.x - text_offset_left, - y - allocation.y - text_offset_left, - false); + tx = x - allocation.x - text_offset_left(&allocation); + ty = y - allocation.y - text_offset_top(&allocation); + + text_entry_set_cursor_position(entry, tx, ty, false); return CURSOR_IBEAM; } @@ -1105,8 +1118,8 @@ text_entry_button_handler(struct widget *widget, widget_get_allocation(entry->widget, &allocation); input_get_position(input, &x, &y); - x -= allocation.x + text_offset_left; - y -= allocation.y + text_offset_left; + x -= allocation.x + text_offset_left(&allocation); + y -= allocation.y + text_offset_top(&allocation); editor = window_get_user_data(entry->window); @@ -1149,8 +1162,8 @@ text_entry_touch_handler(struct widget *widget, struct input *input, widget_get_allocation(entry->widget, &allocation); - x = tx - (allocation.x + text_offset_left); - y = ty - (allocation.y + text_offset_left); + x = tx - (allocation.x + text_offset_left(&allocation)); + y = ty - (allocation.y + text_offset_top(&allocation)); editor = window_get_user_data(entry->window); text_entry_activate(entry, seat);