[gnumeric] Fix cursor position inside a cell edited in a zoomed sheet. [#641709]



commit d0784545421633067f59fe4cf93fcabf69057a71
Author: Jean Brefort <jean brefort normalesup org>
Date:   Mon Feb 7 11:18:16 2011 +0100

    Fix cursor position inside a cell edited in a zoomed sheet. [#641709]

 ChangeLog       |    5 +++++
 NEWS            |    3 +++
 src/item-edit.c |   15 +++++++++++----
 3 files changed, 19 insertions(+), 4 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 0a69180..7520d09 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-02-07  Jean Brefort  <jean brefort normalesup org>
+
+	* src/item-edit.c (item_edit_button_pressed), (item_edit_motion): fix
+	cursor position inside a cell edited in a zoomed sheet. [#641709]
+
 2011-02-06  Jean Brefort  <jean brefort normalesup org>
 
 	* libspreadsheet.pc.in: removed libglade-2.0 from requirements.
diff --git a/NEWS b/NEWS
index bd7a954..9d2e881 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,9 @@ Gnumeric 1.10.14
 Andreas:
 	* Fix width of translated lists in various dialogs [#641626]
 
+Jean:
+	* Fix cursor position inside a cell edited in a zoomed sheet. [#641709]
+
 Morten:
 	* Import wide sc files.  [#641581]
 
diff --git a/src/item-edit.c b/src/item-edit.c
index 4d23c35..af58fe8 100644
--- a/src/item-edit.c
+++ b/src/item-edit.c
@@ -241,9 +241,13 @@ item_edit_button_pressed (GocItem *item, int button, double x, double y)
 		y = y - item->y0;
 		if (dir == PANGO_DIRECTION_RTL) {
 			pango_layout_get_pixel_extents (ie->layout, NULL, &pos);
-			x -=  item->x1 - item->x0 - pos.width
-				- 2 * GNM_COL_MARGIN / goc_canvas_get_pixels_per_unit (item->canvas);
+			x -=  item->x1 - item->x0 - (pos.width
+				+ 2 * GNM_COL_MARGIN) / goc_canvas_get_pixels_per_unit (item->canvas);
 		}
+		/* the layout might be zoomed, we need to adjust x and y accordingly */
+		x *= goc_canvas_get_pixels_per_unit (item->canvas);
+		y *= goc_canvas_get_pixels_per_unit (item->canvas);
+
 		if (pango_layout_xy_to_index (ie->layout,
 					      x * PANGO_SCALE, y * PANGO_SCALE,
 					      &target_index, &trailing)) {
@@ -291,9 +295,12 @@ item_edit_motion (GocItem *item, double x, double y)
 		y = y - item->y0;
 		if (dir == PANGO_DIRECTION_RTL) {
 			pango_layout_get_pixel_extents (ie->layout, NULL, &pos);
-			x -=  item->x1 - item->x0 - pos.width
-				- 2 * GNM_COL_MARGIN / goc_canvas_get_pixels_per_unit (item->canvas);
+			x -=  item->x1 - item->x0 - (pos.width
+				+ 2 * GNM_COL_MARGIN) / goc_canvas_get_pixels_per_unit (item->canvas);
 		}
+		/* the layout might be zoomed, we need to adjust x and y accordingly */
+		x *= goc_canvas_get_pixels_per_unit (item->canvas);
+		y *= goc_canvas_get_pixels_per_unit (item->canvas);
 
 		if (pango_layout_xy_to_index (ie->layout,
 					      x * PANGO_SCALE, y * PANGO_SCALE,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]