mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-08 12:28:04 +02:00
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
This commit is contained in:
parent
f9a2626cb1
commit
8e37d96bf7
1 changed files with 23 additions and 10 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue