Try to fix the bug but doesn't seem to work properly when combined with rotate.
First commit to change the Cairo render system using Cairo context instead of Cairo surface.
Apply to Layer, Context, Rectangle, Layer_Composite, render and targets Cairo type.
Do not optimize the render of the shape pre-clipping to the canvas  dimensions. Leave it to Cairo API
Rotate Layer: Add support for Cairo render using context
Rotate Layer: Do not rotate through a intermediate surface. Rotate directly the result.
Stretch Layer: Add support for Cairo render using context
Move the Cairo scale and translate commands to the top of the command stack on the targets. It simplifies the code and reduce the number of operations in each vector layer.
Blur_Layer: add support for Cairo render using cairo_t*.
This commit is the base example for all the layers that needs to access the pixels to perform the transformation.
Create a new function cairo_renddesc_untransform and use it in Blur layer
Layer_Translate: add support for Cairo render using cairo_t*.
Zoom: add support for Cairo render using cairo_t*.
Simplify Rectangle layer code
Paste Canvas: add support for Cairo render using cairo_t*.
Layer_Shape: Add function to feather the given Cairo surface.
Apply the feather_cairo_surface function to Advanced Outline, Outline, Region and Polygon
Remove extra cairo_save and add missing cairo_save
Layer Polygon: add support for Cairo render using cairo_t*.
Reorder rectangle code and fix not rendered inverted rectangle.
Fix Polygon layer to render inverted using normal Cairo commands properly
Rework Layer_PasteCanvas to do not use a separated Cairo context to render its canvas. Also don't untransform the RendDesc. It delivers unneeded large RendDesc in some cases.