From 203725bfd3b3b1636b8a3a359b519afc61d4251e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 8 Nov 2018 19:54:11 -0200 Subject: [PATCH] clutter-actor: Remove cogl_rectangle from pick() The default implementation of ClutterActor.pick() uses cogl_rectangle() to draw the rectangle with the color for picking. Replace that by cogl_framebuffer_draw_rectangle(). A static color pipeline had to be created in order to hold the pick color. --- clutter/clutter/clutter-actor.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 3580ac1fd..37bbd2cfc 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -2227,25 +2227,46 @@ static void clutter_actor_real_pick (ClutterActor *self, const ClutterColor *color) { + CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + /* the default implementation is just to paint a rectangle * with the same size of the actor using the passed color */ if (clutter_actor_should_pick_paint (self)) { + static CoglPipeline *default_pick_pipeline = NULL; ClutterActorBox box = { 0, }; + CoglPipeline *pick_pipeline; float width, height; + if (G_UNLIKELY (default_pick_pipeline == NULL)) + { + CoglContext *ctx = + clutter_backend_get_cogl_context (clutter_get_default_backend ()); + + default_pick_pipeline = cogl_pipeline_new (ctx); + } + + g_assert (default_pick_pipeline != NULL); + pick_pipeline = cogl_pipeline_copy (default_pick_pipeline); + clutter_actor_get_allocation_box (self, &box); width = box.x2 - box.x1; height = box.y2 - box.y1; - cogl_set_source_color4ub (color->red, - color->green, - color->blue, - color->alpha); + cogl_pipeline_set_color4ub (pick_pipeline, + color->red, + color->green, + color->blue, + color->alpha); - cogl_rectangle (0, 0, width, height); + cogl_framebuffer_draw_rectangle (framebuffer, + pick_pipeline, + 0, 0, + width, height); + + cogl_object_unref (pick_pipeline); } /* XXX - this thoroughly sucks, but we need to maintain compatibility