PEPPER_API pixman_region32_t *
pepper_surface_get_input_region(pepper_surface_t *surface);
+PEPPER_API void
+pepper_surface_send_enter(pepper_surface_t *surface, pepper_output_t *output);
+
+PEPPER_API void
+pepper_surface_send_leave(pepper_surface_t *surface, pepper_output_t *output);
+
/* Buffer. */
PEPPER_API void
pepper_buffer_reference(pepper_buffer_t *buffer);
return &surface->input_region;
}
+PEPPER_API void
+pepper_surface_send_enter(pepper_surface_t *surface, pepper_output_t *output)
+{
+ struct wl_resource *resource;
+ struct wl_client *client = wl_resource_get_client(surface->resource);
+
+ wl_resource_for_each(resource, &output->resource_list)
+ {
+ if (wl_resource_get_client(resource) == client)
+ wl_surface_send_enter(surface->resource, resource);
+ }
+}
+
+PEPPER_API void
+pepper_surface_send_leave(pepper_surface_t *surface, pepper_output_t *output)
+{
+ struct wl_resource *resource;
+ struct wl_client *client = wl_resource_get_client(surface->resource);
+
+ wl_resource_for_each(resource, &output->resource_list)
+ {
+ if (wl_resource_get_client(resource) == client)
+ wl_surface_send_leave(surface->resource, resource);
+ }
+}
+
void
pepper_surface_flush_damage(pepper_surface_t *surface)
{
{
pepper_bool_t active;
int i;
+ uint32_t output_overlap_prev;
if (!view->dirty)
return;
}
/* Output overlap. */
+ output_overlap_prev = view->output_overlap;
view->output_overlap = 0;
pepper_list_for_each(output, &view->compositor->output_list, link)
};
if (pixman_region32_contains_rectangle(&view->bounding_region, &box) != PIXMAN_REGION_OUT)
+ {
view->output_overlap |= (1 << output->id);
+ if (!(output_overlap_prev & (1 << output->id)))
+ pepper_surface_send_enter(view->surface, output);
+ }
+ else
+ {
+ if (output_overlap_prev & (1 << output->id))
+ pepper_surface_send_leave(view->surface, output);
+ }
}
}