Re: [PATCH weston] editor: Fix cursor positioning with pointer and touch

2014-05-09 Thread Kristian Høgsberg
On Thu, May 08, 2014 at 02:55:50PM +0300, Ander Conselvan de Oliveira wrote:
 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(-)

That fixes it here, thanks.  I added

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=78411

to the commit message.

Kristian

 
 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
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH weston] editor: Fix cursor positioning with pointer and touch

2014-05-08 Thread Ander Conselvan de Oliveira
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