cairo_t * gsk_cairo_blur_finish_drawing (cairo_t *cr, float radius, const GdkRGBA *color, GskBlurFlags blur_flags) { cairo_t *original_cr; cairo_surface_t *surface; gdouble x_scale; if (!needs_blur (radius)) return cr; original_cr = cairo_get_user_data (cr, &original_cr_key); /* Blur the surface. */ surface = cairo_get_target (cr); x_scale = 1; cairo_surface_get_device_scale (cairo_get_target (cr), &x_scale, NULL); gsk_cairo_blur_surface (surface, x_scale * radius, blur_flags); gdk_cairo_set_source_rgba (original_cr, color); if (blur_flags & GSK_BLUR_REPEAT) mask_surface_repeat (original_cr, surface); else cairo_mask_surface (original_cr, surface, 0, 0); cairo_destroy (cr); cairo_surface_destroy (surface); return original_cr; }
const cairo_test_context_t * cairo_test_get_context (cairo_t *cr) { return cairo_get_user_data (cr, &_cairo_test_context_key); }