[mutter/gbsneto/explicit-framebuffer-preparations: 5/10] 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: 5/10] clutter-actor: Remove cogl_rectangle from pick()
- Date: Thu, 8 Nov 2018 23:33:21 +0000 (UTC)
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]