shaped-texture: Use non-deprecated cogl APIs

https://bugzilla.gnome.org/show_bug.cgi?id=706930
This commit is contained in:
Jasper St. Pierre 2013-08-27 16:25:40 -04:00
parent 57258dc1d4
commit c251ab5092

View File

@ -150,11 +150,12 @@ meta_shaped_texture_paint (ClutterActor *actor)
{ {
MetaShapedTexture *stex = (MetaShapedTexture *) actor; MetaShapedTexture *stex = (MetaShapedTexture *) actor;
MetaShapedTexturePrivate *priv = stex->priv; MetaShapedTexturePrivate *priv = stex->priv;
CoglTexture *paint_tex;
guint tex_width, tex_height; guint tex_width, tex_height;
ClutterActorBox alloc;
CoglContext *ctx; CoglContext *ctx;
CoglPipeline *pipeline; CoglFramebuffer *fb;
CoglPipeline *pipeline = NULL;
CoglTexture *paint_tex;
ClutterActorBox alloc;
if (priv->clip_region && cairo_region_is_empty (priv->clip_region)) if (priv->clip_region && cairo_region_is_empty (priv->clip_region))
return; return;
@ -192,6 +193,7 @@ meta_shaped_texture_paint (ClutterActor *actor)
return; return;
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
fb = cogl_get_draw_framebuffer ();
if (priv->mask_texture == NULL) if (priv->mask_texture == NULL)
{ {
@ -208,12 +210,10 @@ meta_shaped_texture_paint (ClutterActor *actor)
{ {
CoglColor color; CoglColor color;
guchar opacity = clutter_actor_get_paint_opacity (actor); guchar opacity = clutter_actor_get_paint_opacity (actor);
cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity); cogl_color_init_from_4ub (&color, opacity, opacity, opacity, opacity);
cogl_pipeline_set_color (pipeline, &color); cogl_pipeline_set_color (pipeline, &color);
} }
cogl_set_source (pipeline);
clutter_actor_get_allocation_box (actor, &alloc); clutter_actor_get_allocation_box (actor, &alloc);
if (priv->clip_region) if (priv->clip_region)
@ -256,7 +256,8 @@ meta_shaped_texture_paint (ClutterActor *actor)
coords[6] = coords[2]; coords[6] = coords[2];
coords[7] = coords[3]; coords[7] = coords[3];
cogl_rectangle_with_multitexture_coords (x1, y1, x2, y2, cogl_framebuffer_draw_multitextured_rectangle (fb, pipeline,
x1, y1, x2, y2,
&coords[0], 8); &coords[0], 8);
} }
@ -264,11 +265,13 @@ meta_shaped_texture_paint (ClutterActor *actor)
} }
} }
cogl_rectangle (0, 0, cogl_framebuffer_draw_rectangle (fb, pipeline,
0, 0,
alloc.x2 - alloc.x1, alloc.x2 - alloc.x1,
alloc.y2 - alloc.y1); alloc.y2 - alloc.y1);
out: out:
if (pipeline != NULL)
cogl_object_unref (pipeline); cogl_object_unref (pipeline);
} }
@ -281,13 +284,16 @@ meta_shaped_texture_pick (ClutterActor *actor,
/* If there is no region then use the regular pick */ /* If there is no region then use the regular pick */
if (priv->mask_texture == NULL) if (priv->mask_texture == NULL)
CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class) CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)->pick (actor, color);
->pick (actor, color);
else if (clutter_actor_should_pick_paint (actor)) else if (clutter_actor_should_pick_paint (actor))
{ {
CoglTexture *paint_tex; CoglTexture *paint_tex;
ClutterActorBox alloc; ClutterActorBox alloc;
guint tex_width, tex_height; guint tex_width, tex_height;
CoglPipeline *pipeline;
CoglContext *ctx;
CoglFramebuffer *fb;
CoglColor cogl_color;
paint_tex = COGL_TEXTURE (priv->texture); paint_tex = COGL_TEXTURE (priv->texture);
@ -300,17 +306,22 @@ meta_shaped_texture_pick (ClutterActor *actor,
if (tex_width == 0 || tex_height == 0) /* no contents yet */ if (tex_width == 0 || tex_height == 0) /* no contents yet */
return; return;
cogl_set_source_color4ub (color->red, color->green, color->blue, ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
color->alpha); fb = cogl_get_draw_framebuffer ();
cogl_color_init_from_4ub (&cogl_color, color->red, color->green, color->blue, color->alpha);
pipeline = cogl_pipeline_new (ctx);
cogl_pipeline_set_layer_texture (pipeline, 0, priv->mask_texture);
cogl_pipeline_set_color (pipeline, &cogl_color);
clutter_actor_get_allocation_box (actor, &alloc); clutter_actor_get_allocation_box (actor, &alloc);
/* Paint the mask rectangle in the given color */ cogl_framebuffer_draw_rectangle (fb, pipeline,
cogl_set_source_texture (priv->mask_texture); 0, 0,
cogl_rectangle_with_texture_coords (0, 0,
alloc.x2 - alloc.x1, alloc.x2 - alloc.x1,
alloc.y2 - alloc.y1, alloc.y2 - alloc.y1);
0, 0, 1, 1); cogl_object_unref (pipeline);
} }
} }