Temporarily redirects drawing to an intermediate surface known as a group. The redirection lasts until the group is completed by a call to cairo_pop_group() or cairo_pop_group_to_source(). These calls provide the result of any drawing to the group as a pattern, (either as an explicit object, or set as the source pattern).

cairo_push_group(cr)

Arguments

cr

[cairo_t *] a cairo context

Details

This group functionality can be convenient for performing intermediate compositing. One common use of a group is to render objects as opaque within the group, (so that they occlude each other), and then blend the result with translucence onto the destination.

Groups can be nested arbitrarily deep by making balanced calls to cairo_push_group()/cairo_pop_group(). Each call pushes/pops the new target group onto/from a stack.

The cairo_push_group() function calls cairo_save() so that any changes to the graphics state will not be visible outside the group, (the pop_group functions call cairo_restore()).

By default the intermediate group will have a content type of %CAIRO_CONTENT_COLOR_ALPHA. Other content types can be chosen for the group by using cairo_push_group_with_content() instead.

As an example, here is how one might fill and stroke a path with translucence, but without any portion of the fill being visible under the stroke:

<informalexample><programlisting> cairo_push_group (cr); cairo_set_source (cr, fill_pattern); cairo_fill_preserve (cr); cairo_set_source (cr, stroke_pattern); cairo_stroke (cr); cairo_pop_group_to_source (cr); cairo_paint_with_alpha (cr, alpha); </programlisting></informalexample>

Since: 1.2

C function prototype: void cairo_push_group (cairo_t *cr)

See also

Other cairo--: cairo_append_path(), cairo_arc_negative(), cairo_arc(), cairo_clip_extents(), cairo_clip_preserve(), cairo_clip(), cairo_close_path(), cairo_copy_page(), cairo_copy_path_flat(), cairo_copy_path(), cairo_create(), cairo_curve_to(), cairo_device_to_user_distance(), cairo_device_to_user(), cairo_fill_extents(), cairo_fill_preserve(), cairo_fill(), cairo_font_extents(), cairo_get_antialias(), cairo_get_current_point(), cairo_get_dash_count(), cairo_get_dash(), cairo_get_fill_rule(), cairo_get_font_face(), cairo_get_font_matrix(), cairo_get_group_target(), cairo_get_line_cap(), cairo_get_line_join(), cairo_get_line_width(), cairo_get_matrix(), cairo_get_miter_limit(), cairo_get_operator(), cairo_get_source(), cairo_get_target(), cairo_get_tolerance(), cairo_has_current_point(), cairo_identity_matrix(), cairo_in_clip(), cairo_in_fill(), cairo_in_stroke(), cairo_line_to(), cairo_mask_surface(), cairo_mask(), cairo_move_to(), cairo_new_path(), cairo_new_sub_path(), cairo_paint_with_alpha(), cairo_paint(), cairo_path_extents(), cairo_pop_group_to_source(), cairo_pop_group(), cairo_push_group_with_content(), cairo_rectangle(), cairo_rel_curve_to(), cairo_rel_line_to(), cairo_rel_move_to(), cairo_reset_clip(), cairo_restore(), cairo_rotate(), cairo_save(), cairo_scale(), cairo_select_font_face(), cairo_set_antialias(), cairo_set_dash(), cairo_set_fill_rule(), cairo_set_font_face(), cairo_set_font_matrix(), cairo_set_font_size(), cairo_set_line_cap(), cairo_set_line_join(), cairo_set_line_width(), cairo_set_matrix(), cairo_set_miter_limit(), cairo_set_operator(), cairo_set_source_rgba(), cairo_set_source_rgb(), cairo_set_source_surface(), cairo_set_source(), cairo_set_tolerance(), cairo_show_page(), cairo_show_text(), cairo_status(), cairo_stroke_extents(), cairo_stroke_preserve(), cairo_stroke(), cairo_tag_begin(), cairo_tag_end(), cairo_text_extents(), cairo_text_path(), cairo_transform(), cairo_translate(), cairo_user_to_device_distance(), cairo_user_to_device()