static cairo_status_t _cairo_paginated_surface_finish (void *abstract_surface) { cairo_paginated_surface_t *surface = abstract_surface; cairo_status_t status = CAIRO_STATUS_SUCCESS; if (! surface->base.is_clear || surface->page_num == 1) { /* Bypass some of the sanity checking in cairo-surface.c, as we * know that the surface is finished... */ status = (cairo_status_t)_cairo_paginated_surface_show_page (surface); } /* XXX We want to propagate any errors from destroy(), but those are not * returned via the api. So we need to explicitly finish the target, * and check the status afterwards. However, we can only call finish() * on the target, if we own it. */ if (CAIRO_REFERENCE_COUNT_GET_VALUE (&surface->target->ref_count) == 1) cairo_surface_finish (surface->target); if (status == CAIRO_STATUS_SUCCESS) status = cairo_surface_status (surface->target); cairo_surface_destroy (surface->target); cairo_surface_finish (surface->recording_surface); if (status == CAIRO_STATUS_SUCCESS) status = cairo_surface_status (surface->recording_surface); cairo_surface_destroy (surface->recording_surface); return status; }
/** * cairo_font_face_get_reference_count: * @font_face: a #cairo_font_face_t * * Returns the current reference count of @font_face. * * Return value: the current reference count of @font_face. If the * object is a nil object, 0 will be returned. * * Since: 1.4 **/ unsigned int cairo_font_face_get_reference_count (cairo_font_face_t *font_face) { if (font_face == NULL || CAIRO_REFERENCE_COUNT_IS_INVALID (&font_face->ref_count)) return 0; return CAIRO_REFERENCE_COUNT_GET_VALUE (&font_face->ref_count); }