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.
---
 clients/editor.c | 33 +++++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/clients/editor.c b/clients/editor.c
index 3b00833..f3f6141 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);
-- 
1.8.3.2

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to