Pattern is no longer completely immutable. The resource itself is fixed, but the extend, filter, and matrix_2d can now be modified. This works better and still aligns to the underlying GPU pattern where the extend and filter would be shader parameters or would trigger the use of shader variants, and the pattern transformation matrix would be a shader parameter. Removed extend, filter, and matrix_2d from the pattern factories. surface now stores its pattern object rather than just directly setting the cairo source and it sets the extend, filter, and matrix_2d on the pattern at render-time rather than when set_pattern is called. This in turn lets the render functions gain two useful overloads. Both take a const surface& to be used as the pattern (without retaining any reference to it once the draw operation has returned). Both also take an option extend and filter, with default values provided, thus truly allowing for functionality similar to cairo_set_source_surface. One takes a point as an origin for simple translation of the surface when sampling from it while the other takes a full matrix_2d to allow for more advanced sample coordinate transformations.