/** * meta_background_actor_get_clip_region: * @self: a #MetaBackgroundActor * * Return value (transfer full): a #cairo_region_t that represents the part of * the background not obscured by other #MetaBackgroundActor or * #MetaWindowActor objects. */ cairo_region_t * meta_background_actor_get_clip_region (MetaBackgroundActor *self) { MetaBackgroundActorPrivate *priv = self->priv; ClutterActorBox content_box; cairo_rectangle_int_t content_area = { 0 }; cairo_region_t *clip_region; g_return_val_if_fail (META_IS_BACKGROUND_ACTOR (self), NULL); if (!priv->clip_region) return NULL; clutter_actor_get_content_box (CLUTTER_ACTOR (self), &content_box); content_area.x = content_box.x1; content_area.y = content_box.y1; content_area.width = content_box.x2 - content_box.x1; content_area.height = content_box.y2 - content_box.y1; clip_region = cairo_region_create_rectangle (&content_area); cairo_region_intersect (clip_region, priv->clip_region); return clip_region; }
static void clutter_image_paint_content (ClutterContent *content, ClutterActor *actor, ClutterPaintNode *root) { ClutterImagePrivate *priv = CLUTTER_IMAGE (content)->priv; ClutterScalingFilter min_f, mag_f; ClutterContentRepeat repeat; ClutterPaintNode *node; ClutterActorBox box; ClutterColor color; guint8 paint_opacity; if (priv->texture == NULL) return; clutter_actor_get_content_box (actor, &box); paint_opacity = clutter_actor_get_paint_opacity (actor); clutter_actor_get_content_scaling_filters (actor, &min_f, &mag_f); repeat = clutter_actor_get_content_repeat (actor); /* ClutterTextureNode will premultiply the blend color, so we * want it to be white with the paint opacity */ color.red = 255; color.green = 255; color.blue = 255; color.alpha = paint_opacity; node = clutter_texture_node_new (priv->texture, &color, min_f, mag_f); clutter_paint_node_set_name (node, "Image"); if (repeat == CLUTTER_REPEAT_NONE) clutter_paint_node_add_rectangle (node, &box); else { float t_w = 1.f, t_h = 1.f; if ((repeat & CLUTTER_REPEAT_X_AXIS) != FALSE) t_w = (box.x2 - box.x1) / cogl_texture_get_width (priv->texture); if ((repeat & CLUTTER_REPEAT_Y_AXIS) != FALSE) t_h = (box.y2 - box.y1) / cogl_texture_get_height (priv->texture); clutter_paint_node_add_texture_rectangle (node, &box, 0.f, 0.f, t_w, t_h); } clutter_paint_node_add_child (root, node); clutter_paint_node_unref (node); }