Change coordinate translation apis to take doubles
authorMatthias Clasen <mclasen@redhat.com>
Sun, 17 May 2020 21:08:01 +0000 (17:08 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 17 May 2020 21:17:31 +0000 (17:17 -0400)
Change gtk_widget_translate_coordinates and
gtk_native_get_surface_transform to operate
on doubles. Update all callers.

32 files changed:
gtk/gtkcellarea.c
gtk/gtkcoloreditor.c
gtk/gtkdragicon.c
gtk/gtkdragsource.c
gtk/gtkemojichooser.c
gtk/gtkentry.c
gtk/gtkfilechooserwidget.c
gtk/gtkimcontextwayland.c
gtk/gtkmain.c
gtk/gtknative.c
gtk/gtknative.h
gtk/gtkplacessidebar.c
gtk/gtkplacesview.c
gtk/gtkpopover.c
gtk/gtkrange.c
gtk/gtktexthandle.c
gtk/gtktextview.c
gtk/gtktooltip.c
gtk/gtktooltipwindow.c
gtk/gtkviewport.c
gtk/gtkwidget.c
gtk/gtkwidget.h
gtk/gtkwindow.c
gtk/gtkwindowhandle.c
gtk/inspector/focusoverlay.c
gtk/inspector/inspect-button.c
gtk/inspector/layoutoverlay.c
tests/testellipsise.c
tests/testlist3.c
tests/testoverlay.c
tests/testwidgettransforms.c
tests/testwindowdrag.c

index 3f743c84e7502370096bc63d35fcc8d5271241b3..1a6c29f636ee50df3e5198d5a1ce062aa706f0ff 100644 (file)
@@ -1043,7 +1043,7 @@ gtk_cell_area_real_event (GtkCellArea          *area,
           GtkCellRenderer *focus_renderer;
           GdkRectangle     alloc_area;
           double event_x, event_y;
-          int x, y;
+          double x, y;
           GtkNative *native;
 
           /* We may need some semantics to tell us the offset of the event
index 66c2c49e4a07ac967b1c10a2b39c0bd02cc6b202..b9a285d823721c3338414c6b2d6157474981349c 100644 (file)
@@ -274,6 +274,7 @@ get_child_position (GtkOverlay     *overlay,
   GtkRequisition req;
   GtkAllocation alloc;
   gint s, e;
+  double x, y;
 
   gtk_widget_get_preferred_size (widget, &req, NULL);
 
@@ -287,11 +288,11 @@ get_child_position (GtkOverlay     *overlay,
       gtk_widget_translate_coordinates (editor->sv_plane,
                                         gtk_widget_get_parent (editor->grid),
                                         0, -6,
-                                        &allocation->x, &allocation->y);
+                                        &x, &y);
       if (gtk_widget_get_direction (GTK_WIDGET (overlay)) == GTK_TEXT_DIR_RTL)
-        allocation->x = 0;
+        x = 0;
       else
-        allocation->x = gtk_widget_get_width (GTK_WIDGET (overlay)) - req.width;
+        x = gtk_widget_get_width (GTK_WIDGET (overlay)) - req.width;
     }
   else if (widget == editor->h_popup)
     {
@@ -302,12 +303,12 @@ get_child_position (GtkOverlay     *overlay,
         gtk_widget_translate_coordinates (editor->h_slider,
                                           gtk_widget_get_parent (editor->grid),
                                           - req.width - 6, editor->popup_position - req.height / 2,
-                                          &allocation->x, &allocation->y);
+                                          &x, &y);
       else
         gtk_widget_translate_coordinates (editor->h_slider,
                                           gtk_widget_get_parent (editor->grid),
                                           alloc.width + 6, editor->popup_position - req.height / 2,
-                                          &allocation->x, &allocation->y);
+                                          &x, &y);
     }
   else if (widget == editor->a_popup)
     {
@@ -317,13 +318,13 @@ get_child_position (GtkOverlay     *overlay,
       gtk_widget_translate_coordinates (editor->a_slider,
                                         gtk_widget_get_parent (editor->grid),
                                         editor->popup_position - req.width / 2, - req.height - 6,
-                                        &allocation->x, &allocation->y);
+                                        &x, &y);
     }
   else
     return FALSE;
 
-  allocation->x = CLAMP (allocation->x, 0, gtk_widget_get_width (GTK_WIDGET (overlay)) - req.width);
-  allocation->y = CLAMP (allocation->y, 0, gtk_widget_get_height (GTK_WIDGET (overlay)) - req.height);
+  allocation->x = CLAMP (x, 0, gtk_widget_get_width (GTK_WIDGET (overlay)) - req.width);
+  allocation->y = CLAMP (y, 0, gtk_widget_get_height (GTK_WIDGET (overlay)) - req.height);
 
   return TRUE;
 }
index 999ab113ca15176b4fd003c391c6ed28dd9f1b9e..5099220d3f9c07108e0d23c81b9da896557f9ae4 100644 (file)
@@ -120,8 +120,8 @@ gtk_drag_icon_native_get_renderer (GtkNative *native)
 
 static void
 gtk_drag_icon_native_get_surface_transform (GtkNative *native,
-                                            int       *x,
-                                            int       *y)
+                                            double    *x,
+                                            double    *y)
 {
   GtkCssBoxes css_boxes;
   const graphene_rect_t *margin_rect;
index 779fbefb814fdcf9157c80aafde9954797803be9..3d45cec16331724eba801132e80bdc9f444a2b36 100644 (file)
@@ -490,7 +490,7 @@ gtk_drag_source_drag_begin (GtkDragSource *source)
 {
   GtkWidget *widget;
   GdkDevice *device;
-  int x, y;
+  double x, y;
   GtkNative *native;
   GdkSurface *surface;
   double px, py;
@@ -509,8 +509,8 @@ gtk_drag_source_drag_begin (GtkDragSource *source)
   gtk_widget_translate_coordinates (widget, GTK_WIDGET (native), source->start_x, source->start_y, &x, &y);
   gdk_surface_get_device_position (surface, device, &px, &py, NULL);
 
-  dx = round (px) - x;
-  dy = round (py) - y;
+  dx = round (px - x);
+  dy = round (py - y);
 
   g_signal_emit (source, signals[PREPARE], 0, source->start_x, source->start_y, &content);
   if (!content)
index 6a925ebe63aa4395100ae397c9032ef9b42172af..9f704c87f6bf0ca0a9ec6124227aaa29179e68d4 100644 (file)
@@ -253,7 +253,7 @@ scroll_to_child (GtkWidget *child)
   GtkEmojiChooser *chooser;
   GtkAdjustment *adj;
   GtkAllocation alloc;
-  int pos;
+  double pos;
   double value;
   double page_size;
 
index 08a458cff891023138e466f09d0bca1bc1e54b7a..7a308498466681668126ee60cf3178493f1c1c28 100644 (file)
@@ -2799,7 +2799,7 @@ gtk_entry_get_icon_at_pos (GtkEntry *entry,
   for (i = 0; i < MAX_ICONS; i++)
     {
       EntryIconInfo *icon_info = priv->icons[i];
-      int icon_x, icon_y;
+      double icon_x, icon_y;
 
       if (icon_info == NULL)
         continue;
index e9cb8cd06cfac59f1abe2694149cad842b141054..ba4961c280aa984ccc4a06c016e82594e78bb687 100644 (file)
@@ -1428,6 +1428,7 @@ rename_selected_cb (GtkTreeModel *model,
   GtkFileChooserWidget *impl = data;
   GdkRectangle rect;
   gchar *filename;
+  double x, y;
 
   gtk_tree_model_get (model, iter,
                       MODEL_COL_FILE, &impl->rename_file_source_file,
@@ -1442,7 +1443,9 @@ rename_selected_cb (GtkTreeModel *model,
   gtk_widget_translate_coordinates (impl->browse_files_tree_view,
                                     GTK_WIDGET (impl),
                                     rect.x, rect.y,
-                                    &rect.x, &rect.y);
+                                    &x, &y);
+  rect.x = x;
+  rect.y = y;
 
   filename = g_file_get_basename (impl->rename_file_source_file);
   gtk_editable_set_text (GTK_EDITABLE (impl->rename_file_name_entry), filename);
@@ -2009,9 +2012,10 @@ file_list_show_popover (GtkFileChooserWidget *impl,
       gtk_widget_translate_coordinates (impl->browse_files_tree_view,
                                         GTK_WIDGET (impl),
                                         rect.x, rect.y,
-                                        &rect.x, &rect.y);
+                                        &x, &y);
 
       rect.x = CLAMP (x - 20, 0, bounds.size.width - 40);
+      rect.y = y;
       rect.width = 40;
 
       g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free);
@@ -2113,15 +2117,14 @@ click_cb (GtkGesture           *gesture,
           GtkFileChooserWidget *impl)
 {
   PopoverData *pd;
-  int xx, yy;
 
   pd = g_new (PopoverData, 1);
   pd->impl = impl;
   gtk_widget_translate_coordinates (impl->browse_files_tree_view,
                                     GTK_WIDGET (impl),
-                                    x, y, &xx, &yy);
-  pd->x = xx;
-  pd->y = yy;
+                                    x, y, &x, &y);
+  pd->x = x;
+  pd->y = y;
 
   g_idle_add (file_list_show_popover_in_idle, pd);
 }
index 6c3b2b393a82c9c0d9d73bdd5eaad75d496efd15..658e6e7f7bf2db30f03aa07c0b6fa830307054ef 100644 (file)
@@ -354,6 +354,7 @@ notify_cursor_location (GtkIMContextWayland *context)
 {
   GtkIMContextWaylandGlobal *global;
   cairo_rectangle_int_t rect;
+  double x, y;
 
   global = gtk_im_context_wayland_get_global (context);
   if (global == NULL)
@@ -363,8 +364,10 @@ notify_cursor_location (GtkIMContextWayland *context)
   gtk_widget_translate_coordinates (context->widget,
                                     GTK_WIDGET (gtk_widget_get_root (context->widget)),
                                     rect.x, rect.y,
-                                    &rect.x, &rect.y);
+                                    &x, &y);
 
+  rect.x = x;
+  rect.y = y;
   zwp_text_input_v3_set_cursor_rectangle (global->text_input,
                                           rect.x, rect.y,
                                           rect.width, rect.height);
index f58c73890b19d64a540cf8b9ec91e2532502f7da..ed9a70c7b21bd84536958a839f3ffdc1200dfcf8 100644 (file)
@@ -1284,7 +1284,7 @@ translate_event_coordinates (GdkEvent  *event,
   GtkNative *native;
   graphene_point_t p;
   double event_x, event_y;
-  int native_x, native_y;
+  double native_x, native_y;
 
   *x = *y = 0;
 
@@ -1432,8 +1432,8 @@ update_pointer_focus_state (GtkWindow *toplevel,
   GtkWidget *old_target = NULL;
   GdkEventSequence *sequence;
   GdkDevice *device;
-  gdouble x, y;
-  int nx, ny;
+  double x, y;
+  double nx, ny;
 
   device = gdk_event_get_device (event);
   sequence = gdk_event_get_event_sequence (event);
@@ -1525,7 +1525,7 @@ handle_pointing_event (GdkEvent *event)
   GdkEventSequence *sequence;
   GdkDevice *device;
   double x, y;
-  int native_x, native_y;
+  double native_x, native_y;
   GtkWidget *native;
   GdkEventType type;
 
index 23996e59b314ee0c81ecad45a3af1429425ce7ab..201453587b927d65358e5939af2f97684cbce183 100644 (file)
@@ -48,8 +48,8 @@ gtk_native_default_get_renderer (GtkNative *self)
 
 static void
 gtk_native_default_get_surface_transform (GtkNative *self,
-                                          int       *x,
-                                          int       *y)
+                                          double    *x,
+                                          double    *y)
 {
   *x = 0;
   *y = 0;
@@ -111,8 +111,8 @@ gtk_native_get_renderer (GtkNative *self)
  */
 void
 gtk_native_get_surface_transform (GtkNative *self,
-                                  int       *x,
-                                  int       *y)
+                                  double    *x,
+                                  double    *y)
 {
   g_return_if_fail (GTK_IS_NATIVE (self));
   g_return_if_fail (x != NULL);
index 600584bad38e86a91cae8160f22ab72439bf52c8..ba596e0e9d6d7ce0bf0b48b3c968975ca1600a72 100644 (file)
@@ -49,8 +49,8 @@ struct _GtkNativeInterface
   GskRenderer * (* get_renderer)          (GtkNative    *self);
 
   void          (* get_surface_transform) (GtkNative    *self,
-                                           int          *x,
-                                           int          *y);
+                                           double       *x,
+                                           double       *y);
 
   void          (* check_resize)          (GtkNative    *self);
 };
@@ -69,8 +69,8 @@ GskRenderer *gtk_native_get_renderer   (GtkNative *self);
 
 GDK_AVAILABLE_IN_ALL
 void         gtk_native_get_surface_transform (GtkNative *self,
-                                               int       *x,
-                                               int       *y);
+                                               double    *x,
+                                               double    *y);
 
 G_END_DECLS
 
index 0b43e070f3fb0092a3e27cafb70cc8cf4d97fad8..07c2b5c31df9104ac039953fe5ee211a79b615c0 100644 (file)
@@ -1686,8 +1686,6 @@ drag_motion_callback (GtkDropTarget    *target,
 
       if (row != NULL)
         {
-          gint dest_y, dest_x;
-
           g_object_get (row, "order-index", &row_index, NULL);
           g_object_get (sidebar->row_placeholder, "order-index", &row_placeholder_index, NULL);
           /* We order the bookmarks sections based on the bookmark index that we
@@ -1703,9 +1701,9 @@ drag_motion_callback (GtkDropTarget    *target,
           row_placeholder_index = row_index;
           gtk_widget_translate_coordinates (GTK_WIDGET (sidebar), GTK_WIDGET (row),
                                            x, y,
-                                           &dest_x, &dest_y);
+                                           &x, &y);
 
-          if (dest_y > sidebar->drag_row_height / 2 && row_index > 0)
+          if (y > sidebar->drag_row_height / 2 && row_index > 0)
             row_placeholder_index++;
         }
       else
@@ -3459,8 +3457,8 @@ on_row_dragged (GtkGestureDrag *gesture,
 
   if (gtk_drag_check_threshold (GTK_WIDGET (row), 0, 0, x, y))
     {
-      gdouble start_x, start_y;
-      gint drag_x, drag_y;
+      double start_x, start_y;
+      double drag_x, drag_y;
       GdkContentProvider *content;
       GdkSurface *surface;
       GdkDevice *device;
index 0b299bb2c1015f7459f8574157e436b2d107c8be..eb2b9baf7de3c8747d09b4f07227049ee3169b74 100644 (file)
@@ -1898,14 +1898,17 @@ on_address_entry_show_help_pressed (GtkPlacesView        *view,
                                     GtkEntry             *entry)
 {
   GdkRectangle rect;
+  double x, y;
 
   /* Setup the auxiliary popover's rectangle */
   gtk_entry_get_icon_area (GTK_ENTRY (view->address_entry),
                            GTK_ENTRY_ICON_SECONDARY,
                            &rect);
   gtk_widget_translate_coordinates (view->address_entry, GTK_WIDGET (view),
-                                    rect.x, rect.y, &rect.x, &rect.y);
+                                    rect.x, rect.y, &x, &y);
 
+  rect.x = x;
+  rect.y = y;
   gtk_popover_set_pointing_to (GTK_POPOVER (view->server_adresses_popover), &rect);
   gtk_widget_set_visible (view->server_adresses_popover, TRUE);
 }
index c42587981f9cce3b6047cd66366cf2952c5f14bb..7f46641a42178c8b6af3d7571d9ff8a7cc9c8a87 100644 (file)
@@ -218,8 +218,8 @@ gtk_popover_native_get_renderer (GtkNative *native)
 
 static void
 gtk_popover_native_get_surface_transform (GtkNative *native,
-                                          int       *x,
-                                          int       *y)
+                                          double    *x,
+                                          double    *y)
 {
   GtkCssBoxes css_boxes;
   const graphene_rect_t *margin_rect;
@@ -1212,8 +1212,8 @@ gtk_popover_update_shape (GtkPopover *popover)
       cairo_surface_t *cairo_surface;
       cairo_region_t *region;
       cairo_t *cr;
-      int x, y;
-      int native_x, native_y;
+      double x, y;
+      double native_x, native_y;
 
       gtk_native_get_surface_transform (GTK_NATIVE (popover), &native_x, &native_y);
       gtk_css_boxes_init (&content_css_boxes, priv->contents_widget);
index 38efd2aec467f494257abf859c1ee52d88cdca93..6e96362914044a635fbe1b3930558e88921e7fbd 100644 (file)
@@ -1806,20 +1806,19 @@ update_initial_slider_position (GtkRange *range,
                                 double    y)
 {
   GtkRangePrivate *priv = gtk_range_get_instance_private (range);
-  int trough_x, trough_y;
 
   gtk_widget_translate_coordinates (GTK_WIDGET (range), priv->trough_widget,
-                                    x, y, &trough_x, &trough_y);
+                                    x, y, &x, &y);
 
   if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     {
       priv->slide_initial_slider_position = MAX (0, priv->slider_x);
-      priv->slide_initial_coordinate_delta = trough_x - priv->slide_initial_slider_position;
+      priv->slide_initial_coordinate_delta = x - priv->slide_initial_slider_position;
     }
   else
     {
       priv->slide_initial_slider_position = MAX (0, priv->slider_y);
-      priv->slide_initial_coordinate_delta = trough_y - priv->slide_initial_slider_position;
+      priv->slide_initial_coordinate_delta = y - priv->slide_initial_slider_position;
     }
 }
 
@@ -1899,7 +1898,7 @@ gtk_range_click_gesture_pressed (GtkGestureClick *gesture,
             (!primary_warps && shift_pressed && button == GDK_BUTTON_PRIMARY) ||
             (!primary_warps && button == GDK_BUTTON_MIDDLE)))
     {
-      int slider_range_x, slider_range_y;
+      double slider_range_x, slider_range_y;
       graphene_rect_t slider_bounds;
 
       gtk_widget_translate_coordinates (priv->trough_widget, widget,
@@ -1993,9 +1992,10 @@ update_slider_position (GtkRange *range,
   gdouble mark_delta;
   gdouble zoom;
   gint i;
+  double x, y;
 
   gtk_widget_translate_coordinates (GTK_WIDGET (range), priv->trough_widget,
-                                    mouse_x, mouse_y, &mouse_x, &mouse_y);
+                                    mouse_x, mouse_y, &x, &y);
 
   if (priv->zoom &&
       gtk_widget_compute_bounds (priv->trough_widget, priv->trough_widget, &trough_bounds))
@@ -2028,15 +2028,15 @@ update_slider_position (GtkRange *range,
         zoom_divisor = zoom - 1.0;
 
       if (priv->orientation == GTK_ORIENTATION_VERTICAL)
-        priv->slide_initial_slider_position = (zoom * (mouse_y - priv->slide_initial_coordinate_delta) - slider_bounds.origin.y) / zoom_divisor;
+        priv->slide_initial_slider_position = (zoom * (y - priv->slide_initial_coordinate_delta) - slider_bounds.origin.y) / zoom_divisor;
       else
-        priv->slide_initial_slider_position = (zoom * (mouse_x - priv->slide_initial_coordinate_delta) - slider_bounds.origin.x) / zoom_divisor;
+        priv->slide_initial_slider_position = (zoom * (x - priv->slide_initial_coordinate_delta) - slider_bounds.origin.x) / zoom_divisor;
     }
 
   if (priv->orientation == GTK_ORIENTATION_VERTICAL)
-    delta = mouse_y - (priv->slide_initial_coordinate_delta + priv->slide_initial_slider_position);
+    delta = y - (priv->slide_initial_coordinate_delta + priv->slide_initial_slider_position);
   else
-    delta = mouse_x - (priv->slide_initial_coordinate_delta + priv->slide_initial_slider_position);
+    delta = x - (priv->slide_initial_coordinate_delta + priv->slide_initial_slider_position);
 
   c = priv->slide_initial_slider_position + zoom * delta;
 
@@ -2635,18 +2635,19 @@ gtk_range_calc_marks (GtkRange *range)
 {
   GtkRangePrivate *priv = gtk_range_get_instance_private (range);
   GdkRectangle slider;
+  double x, y;
   gint i;
 
   for (i = 0; i < priv->n_marks; i++)
     {
       gtk_range_compute_slider_position (range, priv->marks[i], &slider);
       gtk_widget_translate_coordinates (priv->trough_widget, GTK_WIDGET (range),
-                                        slider.x, slider.y, &slider.x, &slider.y);
+                                        slider.x, slider.y, &x, &y);
 
       if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-        priv->mark_pos[i] = slider.x + slider.width / 2;
+        priv->mark_pos[i] = x + slider.width / 2;
       else
-        priv->mark_pos[i] = slider.y + slider.height / 2;
+        priv->mark_pos[i] = y + slider.height / 2;
     }
 }
 
index 7da012c9e7bd0ba792baa2fe47b7a772a3ae798b..ce6c4d8d374441d322d4b6567ca7e7f651be75f6 100644 (file)
@@ -80,8 +80,8 @@ gtk_text_handle_native_get_renderer (GtkNative *native)
 
 static void
 gtk_text_handle_native_get_surface_transform (GtkNative *native,
-                                              int       *x,
-                                              int       *y)
+                                              double    *x,
+                                              double    *y)
 {
   GtkCssBoxes css_boxes;
   const graphene_rect_t *margin_rect;
@@ -115,6 +115,7 @@ gtk_text_handle_present_surface (GtkTextHandle *handle)
   GdkPopupLayout *layout;
   GdkRectangle rect;
   GtkRequisition req;
+  double x, y;
 
   gtk_widget_get_preferred_size (widget, NULL, &req);
   gtk_text_handle_get_padding (handle, &handle->border);
@@ -126,7 +127,9 @@ gtk_text_handle_present_surface (GtkTextHandle *handle)
 
   gtk_widget_translate_coordinates (gtk_widget_get_parent (widget),
                                     gtk_widget_get_ancestor (widget, GTK_TYPE_WINDOW),
-                                    rect.x, rect.y, &rect.x, &rect.y);
+                                    rect.x, rect.y, &x, &y);
+  rect.x = x;
+  rect.y = y;
 
   if (handle->role == GTK_TEXT_HANDLE_ROLE_CURSOR)
     rect.x -= rect.width / 2;
index 5486e1333928d5a2d7ed0edb366e7a5e6ae7ca2b..2d9c72f6e358196aa60d5964656e86e2e25b5cea 100644 (file)
@@ -8618,19 +8618,19 @@ gtk_text_view_do_popup (GtkTextView *text_view,
           GtkNative *native;
           GdkSurface *surface;
           double px, py;
-          int nx, ny;
+          double nx, ny;
 
           native = gtk_widget_get_native (GTK_WIDGET (text_view));
           surface = gtk_native_get_surface (native);
           gdk_surface_get_device_position (surface, device, &px, &py, NULL);
           gtk_native_get_surface_transform (native, &nx, &ny);
-          rect.x = round (px) - nx;
-          rect.y = round (py) - ny;
 
           gtk_widget_translate_coordinates (GTK_WIDGET (gtk_widget_get_native (GTK_WIDGET (text_view))),
                                            GTK_WIDGET (text_view),
-                                           rect.x, rect.y,
-                                           &rect.x, &rect.y);
+                                           px - nx, py - ny,
+                                           &px, &py);
+          rect.x = px;
+          rect.y = py;
         }
 
       gtk_popover_set_pointing_to (GTK_POPOVER (priv->popup_menu), &rect);
index 2e65ee1ca5e48430398a21d075e79ec79fba7305..36b162885bdb2dd55ba01c82bf6049c6736eb8fe 100644 (file)
@@ -376,7 +376,6 @@ gtk_tooltip_trigger_tooltip_query (GtkWidget *widget)
   GdkSurface *surface;
   double x, y;
   GtkWidget *toplevel;
-  int dx, dy;
 
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
@@ -403,9 +402,9 @@ gtk_tooltip_trigger_tooltip_query (GtkWidget *widget)
   if (gtk_native_get_surface (GTK_NATIVE (toplevel)) != surface)
     return;
 
-  gtk_widget_translate_coordinates (toplevel, widget, round (x), round (y), &dx, &dy);
+  gtk_widget_translate_coordinates (toplevel, widget, x, y, &x, &y);
 
-  gtk_tooltip_handle_event_internal (GDK_MOTION_NOTIFY, surface, widget, dx, dy);
+  gtk_tooltip_handle_event_internal (GDK_MOTION_NOTIFY, surface, widget, x, y);
 }
 
 static void
@@ -426,7 +425,8 @@ _gtk_widget_find_at_coords (GdkSurface *surface,
 {
   GtkWidget *event_widget;
   GtkWidget *picked_widget;
-  int native_x, native_y;
+  double x, y;
+  double native_x, native_y;
 
   g_return_val_if_fail (GDK_IS_SURFACE (surface), NULL);
 
@@ -436,13 +436,16 @@ _gtk_widget_find_at_coords (GdkSurface *surface,
     return NULL;
 
   gtk_native_get_surface_transform (GTK_NATIVE (event_widget), &native_x, &native_y);
-  surface_x -= native_x;
-  surface_y -= native_y;
+  x = surface_x - native_x;
+  y = surface_y - native_y;
 
-  picked_widget = gtk_widget_pick (event_widget, surface_x, surface_y, GTK_PICK_INSENSITIVE);
+  picked_widget = gtk_widget_pick (event_widget, x, y, GTK_PICK_INSENSITIVE);
 
   if (picked_widget != NULL)
-    gtk_widget_translate_coordinates (event_widget, picked_widget, surface_x, surface_y, widget_x, widget_y);
+    gtk_widget_translate_coordinates (event_widget, picked_widget, x, y, &x, &y);
+
+  *widget_x = x;
+  *widget_y = y;
 
   return picked_widget;
 }
@@ -553,15 +556,23 @@ gtk_tooltip_run_requery (GtkWidget  **widget,
 
       if (!return_value)
         {
-         GtkWidget *parent = gtk_widget_get_parent (*widget);
+          GtkWidget *parent = gtk_widget_get_parent (*widget);
+
+          if (parent)
+            {
+              double xx = *x;
+              double yy = *y;
+
+              gtk_widget_translate_coordinates (*widget, parent, xx, yy, &xx, &yy);
 
-         if (parent)
-           gtk_widget_translate_coordinates (*widget, parent, *x, *y, x, y);
+              *x = xx;
+              *y = yy;
+            }
 
-         *widget = parent;
-       }
+          *widget = parent;
+        }
       else
-       break;
+        break;
     }
   while (*widget);
 
@@ -588,7 +599,7 @@ gtk_tooltip_position (GtkTooltip *tooltip,
   int rect_anchor_dx = 0;
   int cursor_size;
   int anchor_rect_padding;
-  int native_x, native_y;
+  double native_x, native_y;
 
   gtk_widget_realize (GTK_WIDGET (tooltip->window));
 
@@ -907,8 +918,7 @@ _gtk_tooltip_handle_event (GtkWidget *target,
   GdkEventType event_type;
   GdkSurface *surface;
   double x, y;
-  int native_x, native_y;
-  int tx, ty;
+  double nx, ny;
   GtkWidget *native;
 
   if (!tooltips_enabled (event))
@@ -919,13 +929,9 @@ _gtk_tooltip_handle_event (GtkWidget *target,
   gdk_event_get_position (event, &x, &y);
   native = GTK_WIDGET (gtk_widget_get_native (target));
 
-  gtk_native_get_surface_transform (GTK_NATIVE (native), &native_x, &native_y);
-  gtk_widget_translate_coordinates (native, target,
-                                    x - native_x,
-                                    y - native_y,
-                                    &tx, &ty);
-
-  gtk_tooltip_handle_event_internal (event_type, surface, target, tx, ty);
+  gtk_native_get_surface_transform (GTK_NATIVE (native), &nx, &ny);
+  gtk_widget_translate_coordinates (native, target, x - nx, y - ny, &x, &y);
+  gtk_tooltip_handle_event_internal (event_type, surface, target, x, y);
 }
 
 /* dx/dy must be in @target_widget's coordinates */
@@ -933,8 +939,8 @@ static void
 gtk_tooltip_handle_event_internal (GdkEventType   event_type,
                                    GdkSurface    *surface,
                                    GtkWidget     *target_widget,
-                                   gdouble        dx,
-                                   gdouble        dy)
+                                   double         dx,
+                                   double         dy)
 {
   int x = dx, y = dy;
   GdkDisplay *display;
index 2e871c534cf1b4d0a390018c595ad83d488e43a9..432f2aef8e32dee21e7e63f2e526210c533f709b 100644 (file)
@@ -94,8 +94,8 @@ gtk_tooltip_window_native_get_renderer (GtkNative *native)
 
 static void
 gtk_tooltip_window_native_get_surface_transform (GtkNative *native,
-                                                 int       *x,
-                                                 int       *y)
+                                                 double    *x,
+                                                 double    *y)
 {
   GtkCssBoxes css_boxes;
   const graphene_rect_t *margin_rect;
index 72c949ee734ca9305a57a384ae349183dcccf563..7e4aefc57355956fe0227689109ef23a819f894d 100644 (file)
@@ -648,7 +648,7 @@ focus_change_handler (GtkWidget *widget)
   GtkRoot *root;
   GtkWidget *focus_widget;
   graphene_rect_t rect;
-  int x, y;
+  double x, y;
 
   if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_FOCUS_WITHIN) == 0)
     return;
@@ -666,8 +666,8 @@ focus_change_handler (GtkWidget *widget)
     return;
 
   gtk_widget_translate_coordinates (viewport->child, widget,
-                                    (int)rect.origin.x,
-                                    (int)rect.origin.y,
+                                    rect.origin.x,
+                                    rect.origin.y,
                                      &x, &y);
 
   scroll_to_view (viewport->hadjustment, x, rect.size.width);
index 823964b2cc4dd3a694379b8db00a9f079807e3e0..54c45644bc8372bb4094b16c5a6c177a61c72441 100644 (file)
@@ -3447,7 +3447,7 @@ gtk_widget_get_surface_allocation (GtkWidget     *widget,
 {
   GtkWidget *parent;
   graphene_rect_t bounds;
-  int nx, ny;
+  double nx, ny;
 
   /* Don't consider the parent == widget case here. */
   parent = _gtk_widget_get_parent (widget);
@@ -4104,10 +4104,10 @@ gtk_widget_common_ancestor (GtkWidget *widget_a,
 gboolean
 gtk_widget_translate_coordinates (GtkWidget  *src_widget,
                                   GtkWidget  *dest_widget,
-                                  gint        src_x,
-                                  gint        src_y,
-                                  gint       *dest_x,
-                                  gint       *dest_y)
+                                  double      src_x,
+                                  double      src_y,
+                                  double     *dest_x,
+                                  double     *dest_y)
 {
   graphene_point_t p;
 
@@ -4552,7 +4552,7 @@ translate_event_coordinates (GdkEvent  *event,
   graphene_point_t p;
   double event_x, event_y;
   GtkNative *native;
-  int nx, ny;
+  double nx, ny;
 
   *x = *y = 0;
 
@@ -11657,7 +11657,7 @@ gtk_widget_render (GtkWidget            *widget,
   GtkSnapshot *snapshot;
   GskRenderer *renderer;
   GskRenderNode *root;
-  int x, y;
+  double x, y;
   gint64 before_snapshot = g_get_monotonic_time ();
   gint64 before_render = 0;
 
index 88ecc47fc8df33ec5cdd436f8617cf16c31abd6a..278c1228c7192817a923a7312428d8488b77dbbc 100644 (file)
@@ -653,10 +653,10 @@ gboolean     gtk_widget_is_ancestor     (GtkWidget      *widget,
 GDK_AVAILABLE_IN_ALL
 gboolean     gtk_widget_translate_coordinates (GtkWidget  *src_widget,
                                                GtkWidget  *dest_widget,
-                                               gint        src_x,
-                                               gint        src_y,
-                                               gint       *dest_x,
-                                               gint       *dest_y);
+                                               double      src_x,
+                                               double      src_y,
+                                               double     *dest_x,
+                                               double     *dest_y);
 
 GDK_AVAILABLE_IN_ALL
 gboolean     gtk_widget_contains              (GtkWidget  *widget,
index a158f23425a40c34d456ed504a63e042cb95be47..99cbb64ea23b4abf6c3a1070524b0f952ff84ebe 100644 (file)
@@ -1931,8 +1931,8 @@ gtk_window_root_set_focus (GtkRoot   *root,
 
 static void
 gtk_window_native_get_surface_transform (GtkNative *native,
-                                         int       *x,
-                                         int       *y)
+                                         double    *x,
+                                         double    *y)
 {
   const graphene_rect_t *margin_rect;
   GtkCssBoxes boxes;
index 7fb0e85ea7d594fb36d1280c979d91edc37bc34e..efe26714d6162b6fbc10bdfbe82e9f73eb0a2c2c 100644 (file)
@@ -224,19 +224,19 @@ do_popup_fallback (GtkWindowHandle *self,
       GtkNative *native;
       GdkSurface *surface;
       double px, py;
-      int nx, ny;
+      double nx, ny;
 
       native = gtk_widget_get_native (GTK_WIDGET (self));
       surface = gtk_native_get_surface (native);
       gdk_surface_get_device_position (surface, device, &px, &py, NULL);
       gtk_native_get_surface_transform (native, &nx, &ny);
-      rect.x = round (px) - nx;
-      rect.y = round (py) - ny;
 
       gtk_widget_translate_coordinates (GTK_WIDGET (gtk_widget_get_native (GTK_WIDGET (self))),
                                        GTK_WIDGET (self),
-                                       rect.x, rect.y,
-                                       &rect.x, &rect.y);
+                                       px - nx, py - ny,
+                                       &px, &py);
+      rect.x = px;
+      rect.y = py;
     }
 
   gtk_popover_set_pointing_to (GTK_POPOVER (self->fallback_menu), &rect);
@@ -444,8 +444,8 @@ drag_gesture_update_cb (GtkGestureDrag  *gesture,
     {
       GdkEventSequence *sequence;
       double start_x, start_y;
-      int native_x, native_y;
-      int window_x, window_y;
+      double native_x, native_y;
+      double window_x, window_y;
       GtkNative *native;
       GdkSurface *surface;
 
index 3df045936f2e47b824eb8213d277040e8fb3cd4f..d96181c19ff98f5854e7b9f9142362a676553c19 100644 (file)
@@ -49,7 +49,7 @@ gtk_focus_overlay_snapshot (GtkInspectorOverlay *overlay,
   GtkFocusOverlay *self = GTK_FOCUS_OVERLAY (overlay);
   GtkWidget *focus;
   graphene_rect_t bounds;
-  int nx, ny;
+  double nx, ny;
 
   if (!GTK_IS_NATIVE (widget))
     return;
index e03584ea8f5fc45832b891d85df6d181a981a984..ca6e3e0299f1806c82be8abcb45b0829df2da7bf 100644 (file)
@@ -51,7 +51,7 @@ find_widget_at_pointer (GdkDevice *device)
   if (widget)
     {
       double x, y;
-      int nx, ny;
+      double nx, ny;
 
       gdk_surface_get_device_position (gtk_native_get_surface (GTK_NATIVE (widget)),
                                        device, &x, &y, NULL);
index 67cef77ef7c9a44999177c1e83c3b5499f4b84bc..59900c603c592f936c264f032eafb68c171cc1d1 100644 (file)
@@ -157,7 +157,7 @@ gtk_layout_overlay_snapshot (GtkInspectorOverlay *overlay,
                              GskRenderNode       *node,
                              GtkWidget           *widget)
 {
-  int nx, ny;
+  double nx, ny;
 
   gtk_native_get_surface_transform (GTK_NATIVE (widget), &nx, &ny);
   gtk_snapshot_save (snapshot);
index 70f5be13857e9cb89fb60acfc1fa580a5ae7d7c3..07090289db4742cd09a1dcbe0ad3a9cfd894b6cc 100644 (file)
@@ -48,7 +48,7 @@ overlay_draw (GtkDrawingArea *da,
   GtkAllocation label_allocation;
   GtkRequisition minimum_size, natural_size;
   GtkWidget *label = data;
-  gint x, y;
+  double x, y;
 
   cairo_translate (cr, -0.5, -0.5);
   cairo_set_line_width (cr, 1);
index e3940a2c46e5280dba80221287fb627755d437cf..80ab08a58db1c7b9715c9f471888501e8f9ed2c3 100644 (file)
@@ -17,7 +17,7 @@ drag_begin (GtkDragSource *source,
   GtkWidget *row;
   GtkAllocation alloc;
   GdkPaintable *paintable;
-  int x, y;
+  double x, y;
 
   row = gtk_widget_get_ancestor (widget, GTK_TYPE_LIST_BOX_ROW);
   gtk_widget_get_allocation (row, &alloc);
index 7c115a1a31292dca8f34f020539bd96a90c38331..4929a751668a1ec85c0b54ae09a32edfe263a640 100644 (file)
@@ -96,7 +96,7 @@ get_child_position (GtkOverlay    *overlay,
   GtkRequisition req;
   GtkWidget *child;
   GtkAllocation main_alloc;
-  gint x, y;
+  double x, y;
 
   child = gtk_overlay_get_child (GTK_OVERLAY (overlay));
 
index aead504f9b2ad00cae4d45516e315c5f0ed408e7..5071131446594b1c888b83173ba269c3ad38dd63 100644 (file)
@@ -162,7 +162,7 @@ gtk_transform_tester_snapshot (GtkWidget   *widget,
 
     for (x = 0; x < G_N_ELEMENTS (points); x ++)
       {
-        int px, py;
+        double px, py;
 
         gtk_widget_translate_coordinates (self->test_widget, widget,
                                           points[x].coords.x, points[x].coords.y,
index d53a0c17c51002b2fdeb8b41c4f1ae2e023937b4..1c25a906fabc37c7a1ca12712ebf9a2eec978eac 100644 (file)
@@ -13,22 +13,20 @@ start_resize (GtkGestureClick *gesture,
   GdkEvent *event;
   guint button;
   guint32 timestamp;
-  int xx = x;
-  int yy = y;
 
   gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
 
   surface = gtk_native_get_surface (gtk_widget_get_native (widget));
   event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (gesture));
   if (gdk_event_get_event_type (event) == GDK_BUTTON_PRESS)
-    button = gdk_button_event_get_button (event);  
+    button = gdk_button_event_get_button (event);
   else
     button = 0;
   timestamp = gdk_event_get_time (event);
 
   gtk_widget_translate_coordinates (widget, GTK_WIDGET (gtk_widget_get_root (widget)),
-                                    xx, yy, &xx, &yy);
-  gdk_toplevel_begin_resize (GDK_TOPLEVEL (surface), edge, gdk_event_get_device (event), button, xx, yy, timestamp);
+                                    x, y, &x, &y);
+  gdk_toplevel_begin_resize (GDK_TOPLEVEL (surface), edge, gdk_event_get_device (event), button, xy, timestamp);
 
   gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture));
 }
@@ -61,22 +59,20 @@ start_move (GtkGestureClick *gesture,
   GdkEvent *event;
   guint button;
   guint32 timestamp;
-  int xx = x;
-  int yy = y;
 
   gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
 
   surface = gtk_native_get_surface (gtk_widget_get_native (widget));
   event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (gesture));
   if (gdk_event_get_event_type (event) == GDK_BUTTON_PRESS)
-    button = gdk_button_event_get_button (event);  
+    button = gdk_button_event_get_button (event);
   else
     button = 0;
   timestamp = gdk_event_get_time (event);
 
   gtk_widget_translate_coordinates (widget, GTK_WIDGET (gtk_widget_get_root (widget)),
-                                    xx, yy, &xx, &yy);
-  gdk_toplevel_begin_move (GDK_TOPLEVEL (surface), gdk_event_get_device (event), button, xx, yy, timestamp);
+                                    x, y, &x, &y);
+  gdk_toplevel_begin_move (GDK_TOPLEVEL (surface), gdk_event_get_device (event), button, xy, timestamp);
   gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture));
 }