[mutter/gbsneto/explicit-framebuffer-preparations: 11/16] clutter-actor: Remove cogl_rectangle from pick()
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gbsneto/explicit-framebuffer-preparations: 11/16] clutter-actor: Remove cogl_rectangle from pick()
- Date: Sun, 18 Nov 2018 22:29:33 +0000 (UTC)
commit 203725bfd3b3b1636b8a3a359b519afc61d4251e
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 | 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_framebuffer_draw_rectangle (framebuffer,
+ pick_pipeline,
+ 0, 0,
+ width, height);
- cogl_rectangle (0, 0, width, height);
+ cogl_object_unref (pick_pipeline);
}
/* XXX - this thoroughly sucks, but we need to maintain compatibility
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]