clutter: Check updated devices with the current clip

We do check the clip area as an optimization to know which input devices
might need updating state after a relayout (Assuming that if a device is
under a non-painted area, it's actor beneath didn't change).

Use the clip region for this, and drop the last usage of the clip region
bounds.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/867
This commit is contained in:
Carlos Garnacho 2019-10-20 13:36:44 +02:00 committed by Georges Basile Stavracas Neto
parent a586f6a152
commit 353d7909f6

View File

@ -1394,11 +1394,10 @@ _clutter_stage_check_updated_pointers (ClutterStage *stage)
ClutterDeviceManager *device_manager; ClutterDeviceManager *device_manager;
GSList *updating = NULL; GSList *updating = NULL;
const GSList *devices; const GSList *devices;
cairo_rectangle_int_t clip; cairo_region_t *clip;
graphene_point_t point; graphene_point_t point;
gboolean has_clip;
has_clip = _clutter_stage_window_get_redraw_clip_bounds (priv->impl, &clip); clip = _clutter_stage_window_get_redraw_clip (priv->impl);
device_manager = clutter_device_manager_get_default (); device_manager = clutter_device_manager_get_default ();
devices = clutter_device_manager_peek_devices (device_manager); devices = clutter_device_manager_peek_devices (device_manager);
@ -1421,9 +1420,7 @@ _clutter_stage_check_updated_pointers (ClutterStage *stage)
if (!clutter_input_device_get_coords (dev, NULL, &point)) if (!clutter_input_device_get_coords (dev, NULL, &point))
continue; continue;
if (!has_clip || if (!clip || cairo_region_contains_point (clip, point.x, point.y))
(point.x >= clip.x && point.x < clip.x + clip.width &&
point.y >= clip.y && point.y < clip.y + clip.height))
updating = g_slist_prepend (updating, dev); updating = g_slist_prepend (updating, dev);
break; break;
default: default: