viewport: Implement clipping for picking
authorBenjamin Otte <otte@redhat.com>
Sun, 5 Nov 2017 06:17:36 +0000 (07:17 +0100)
committerBenjamin Otte <otte@redhat.com>
Sun, 5 Nov 2017 06:19:22 +0000 (07:19 +0100)
This is necessary because picking is no longer automatically constrained
to a widget's box. So all clipping widgets need to constrain their
clipping, too.

This patch does that for GtkViewport only.

gtk/gtkviewport.c

index cb47726c66b660eed3f70fe9ef8d0e2b83b9d4b6..d5ccf27868f825883373486a7aceac35d8dc3660 100644 (file)
@@ -198,6 +198,25 @@ viewport_set_adjustment_values (GtkViewport    *viewport,
                             viewport_size);
 }
 
+static GtkWidget *
+gtk_viewport_pick (GtkWidget *widget,
+                   double     x,
+                   double     y)
+{
+  if (x >= 0 && x <= gtk_widget_get_width (widget) &&
+      y >= 0 && y <= gtk_widget_get_height(widget))
+    {
+      return GTK_WIDGET_CLASS (gtk_viewport_parent_class)->pick (widget, x, y);
+    }
+  else
+    {
+      if (gtk_widget_contains (widget, x, y))
+        return widget;
+      else
+        return NULL;
+    }
+}
+
 static void
 gtk_viewport_measure (GtkWidget      *widget,
                       GtkOrientation  orientation,
@@ -236,6 +255,7 @@ gtk_viewport_class_init (GtkViewportClass *class)
   widget_class->snapshot = gtk_viewport_snapshot;
   widget_class->size_allocate = gtk_viewport_size_allocate;
   widget_class->measure = gtk_viewport_measure;
+  widget_class->pick = gtk_viewport_pick;
   
   gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_VIEWPORT);