summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>2014-05-08 14:55:50 +0300
committerKristian Høgsberg <krh@bitplanet.net>2014-05-09 15:32:20 -0700
commit8e37d96bf70f59e062f7b703c328a00f663021b0 (patch)
tree98ad2a9257c167ae88b2186161cffa7cce9bd842
parentf9a2626cb1be298b297ed0e07b56e1a12335c2b5 (diff)
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
-rw-r--r--clients/editor.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/clients/editor.c b/clients/editor.c
index 3b00833e..f3f61419 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);