coregraphics : strokes and gradients

Be sure to convert the stroke to a fillable path if we need to draw a stroke **with** a gradient.

CoreGraphics can natively draw a stroke (without having to explicitly set a clip), so we only do this convert-fill-to-stroke if we have to draw with a gradient.

This PR also fixes the case when the gradient needs to extend beyond its logical domain (i.e. clamp-tile). That fix is needed for fills as well as strokes.

Diffs=
c3f7325d8 Handle strokes and gradients
diff --git a/.rive_head b/.rive_head
index a98cdd0..844f5ea 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-ff3c43ce47aea58c9592aad5f8be0b434e89901a
+c3f7325d8ec878b518b04c0399837d5b07b1cd34
diff --git a/skia/renderer/src/cg_factory.cpp b/skia/renderer/src/cg_factory.cpp
index e8db79b..6af4db9 100644
--- a/skia/renderer/src/cg_factory.cpp
+++ b/skia/renderer/src/cg_factory.cpp
@@ -148,6 +148,9 @@
 public:
     CGRenderShader() {}
 
+    static constexpr int clampOptions =
+        kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation;
+
     virtual void draw(CGContextRef) {}
 };
 
@@ -226,8 +229,7 @@
     }
 
     void draw(CGContextRef ctx) override {
-        CGGradientDrawingOptions options = 0;
-        CGContextDrawRadialGradient(ctx, m_grad, m_center, 0, m_center, m_radius, options);
+        CGContextDrawRadialGradient(ctx, m_grad, m_center, 0, m_center, m_radius, clampOptions);
     }
 };
 
@@ -249,8 +251,7 @@
     }
 
     void draw(CGContextRef ctx) override {
-        CGGradientDrawingOptions options = 0;
-        CGContextDrawLinearGradient(ctx, m_grad, m_start, m_end, options);
+        CGContextDrawLinearGradient(ctx, m_grad, m_start, m_end, clampOptions);
     }
 };
 
@@ -295,6 +296,10 @@
     CGContextBeginPath(m_ctx);
     CGContextAddPath(m_ctx, cgpath->path());
     if (auto sh = cgpaint->shader()) {
+        if (cgpaint->isStroke()) {
+            // so we can clip against the "stroke" of the path
+            CGContextReplacePathWithStrokedPath(m_ctx);
+        }
         CGContextSaveGState(m_ctx);
         CGContextClip(m_ctx);
         sh->draw(m_ctx);