[mutter/gbsneto/explicit-framebuffer-preparations: 5/10] clutter-actor: Remove cogl_rectangle from pick()



commit f5f018a36926822906b89c8e14bfd55d0a93b2ea
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Nov 8 19:54:11 2018 -0200

    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 | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index b5eed5234..904bd375e 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -2227,25 +2227,40 @@ 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 *color_pipeline = NULL;
       ClutterActorBox box = { 0, };
       float width, height;
 
+      if (G_UNLIKELY (color_pipeline == NULL))
+        {
+          CoglContext *ctx =
+            clutter_backend_get_cogl_context (clutter_get_default_backend ());
+
+          color_pipeline = cogl_pipeline_new (ctx);
+        }
+
       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 (color_pipeline,
+                                  color->red,
+                                  color->green,
+                                  color->blue,
+                                  color->alpha);
 
-      cogl_rectangle (0, 0, width, height);
+      cogl_framebuffer_draw_rectangle (framebuffer,
+                                       color_pipeline,
+                                       0, 0,
+                                       width, height);
     }
 
   /* XXX - this thoroughly sucks, but we need to maintain compatibility


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]