Use cairo_surface instead of cairo_pattern