Removed rectangle_int type.
Removed user_data_key type and user data functionality.
Removed excess raster_source_pattern functionality.
Removed mime functionality from surface type.
Removed create from PNG stream functionality from image_surface.
Added point type. (Note: Ignore addition of extraneous file render_surface.cpp).
Matrix multiply is now an operator. Fixed code for stand-alone point type operators.
Adjusted functions to take point type where appropriate (also adjusted one to take a rectangle).
Removed path creation from context and put it into new path_builder class. Made path an immutable class rather than a POD struct like it was, Added arc, arc_negative, and new_sub_path to path_data_type enum. Renamed non-API function _Make_path to _Make_path_from_native_handle. Fixed code that used modified types.
Moved towards a system where pattern is immutable and is created by various *_pattern_builder objects. This is currently imperfect in that surface is still mutable. Need to test to ensure that raster_source patterns are immutable.
Removed write to PNG stream functionality from surface.
The surface and image_surface types were transformed into move-only types. The context type was renamed to render_surface. render_surface derives from surface and is a move-only type. Added new methods to render_surface to enable one-shot rendering of surfaces. The surface_pattern_builder type now only can be constructed from an rvalue surface reference. The make_surface functions now return render_surface objects rather than surface objects. Various changes made to ancillary files to accomodate the changes.
Moved render_surface definitions from context.cpp to render_surface.cpp and eliminated context.cpp file.
Moved render_surface functionality to surface since the purpose of the surface class is to be drawn to. Eliminated surface_pattern_builder; it destroys the concept of pattern being an immutable type since the underlying surface would be inherently mutable.
Made font_options immutable and created a font_options_builder factory class for it.
Added missing scaled_font class functionality. Added a note about a difference between cairo and this API to surface.cpp.
Eliminated status and finish member functions from the device class.
Eliminated unused region class type and region_overlap enum type. Eliminated unused file render_surface.cpp. Eliminated commented-out code sections.
Added member functions to surface to allow for stroke and fill with a surface. Changed return of pop_group to surface (was pattern). Added convenience methods to clear dash and path to default values. Fixed a bug with surface::paint(const surface& s) implementation. The clip, fill, and stroke member functions of surface now automatically behave like their cairo_*_preserve equivalents; preserve variants have been eliminated. Removed surface::get_group_target since it would break the move-only, non-aliased nature of surface if called when the surface itself (rather than some push_group-created surface) was the group target. Renamed surface::get_source to surface::get_pattern.
Removed unused helper function that was not part of the API.