capi: Added C wrappers for gradient func 93/239993/1
authorMateusz Palkowski <m.palkowski@samsung.com>
Fri, 31 Jul 2020 09:34:49 +0000 (11:34 +0200)
committerMateusz Palkowski <m.palkowski@samsung.com>
Fri, 31 Jul 2020 09:34:49 +0000 (11:34 +0200)
Change-Id: If41dab9b06f6cec2831ea1361f30b50a193e99c4

inc/thorvg_capi.h
src/bindings/capi/tvgCapi.cpp
test/testCapi.c

index 9fa4d59..037730f 100644 (file)
@@ -35,6 +35,7 @@ extern "C" {
 
 typedef struct _Tvg_Canvas Tvg_Canvas;
 typedef struct _Tvg_Paint Tvg_Paint;
+typedef struct _Tvg_Gradient Tvg_Gradient;
 
 #define TVG_ENGINE_SW (1 << 1)
 #define TVG_ENGINE_GL (1 << 2)
@@ -93,6 +94,11 @@ typedef struct
     float e31, e32, e33;
 } Tvg_Matrix;
 
+typedef struct
+{
+    float offset;
+    uint8_t r, g, b, a;
+} Tvg_Color_Stop;
 
 /************************************************************************/
 /* Engine API                                                           */
@@ -144,6 +150,20 @@ TVG_EXPORT Tvg_Result tvg_shape_scale(Tvg_Paint* paint, float factor);
 TVG_EXPORT Tvg_Result tvg_shape_rotate(Tvg_Paint* paint, float degree);
 TVG_EXPORT Tvg_Result tvg_shape_translate(Tvg_Paint* paint, float x, float y);
 TVG_EXPORT Tvg_Result tvg_shape_transform(Tvg_Paint* paint, const Tvg_Matrix* m);
+TVG_EXPORT Tvg_Result tvg_shape_linear_gradient_set(Tvg_Paint* paint, Tvg_Gradient *grad);
+TVG_EXPORT Tvg_Result tvg_shape_radial_gradient_set(Tvg_Paint* paint, Tvg_Gradient *grad);
+
+
+/************************************************************************/
+/* Gradient API                                                         */
+/************************************************************************/
+TVG_EXPORT Tvg_Gradient* tvg_linear_gradient_new();
+TVG_EXPORT Tvg_Gradient* tvg_radial_gradient_new();
+TVG_EXPORT Tvg_Result tvg_gradient_del(Tvg_Gradient* grad);
+TVG_EXPORT Tvg_Result tvg_linear_gradient_set(Tvg_Gradient* grad, float x1, float y1, float x2, float y2);
+TVG_EXPORT Tvg_Result tvg_radial_gradient_set(Tvg_Gradient* grad, float cx, float cy, float radius);
+TVG_EXPORT Tvg_Result tvg_gradient_color_stops(Tvg_Gradient* grad, const Tvg_Color_Stop* color_stop, uint32_t cnt);
+
 
 #ifdef __cplusplus
 }
index 9ceb113..5df6b5a 100644 (file)
@@ -35,6 +35,11 @@ struct _Tvg_Paint
     //Dummy for Direct Casting
 };
 
+struct _Tvg_Gradient
+{
+    //Dummy for Direct Casting
+};
+
 
 /************************************************************************/
 /* Engine API                                                           */
@@ -246,6 +251,52 @@ TVG_EXPORT Tvg_Result tvg_shape_transform(Tvg_Paint* paint, const Tvg_Matrix* m)
     return (Tvg_Result) reinterpret_cast<Shape*>(paint)->transform(*(reinterpret_cast<const Matrix*>(m)));
 }
 
+TVG_EXPORT Tvg_Result tvg_shape_linear_gradient_set(Tvg_Paint* paint, Tvg_Gradient *grad)
+{
+    return (Tvg_Result) reinterpret_cast<Shape*>(paint)->fill(unique_ptr<LinearGradient>((LinearGradient*)(grad)));
+}
+
+TVG_EXPORT Tvg_Result tvg_shape_radial_gradient_set(Tvg_Paint* paint, Tvg_Gradient *grad)
+{
+    return (Tvg_Result) reinterpret_cast<Shape*>(paint)->fill(unique_ptr<RadialGradient>((RadialGradient*)(grad)));
+}
+
+
+/************************************************************************/
+/* Gradient API                                                         */
+/************************************************************************/
+TVG_EXPORT Tvg_Gradient* tvg_linear_gradient_new()
+{
+    return (Tvg_Gradient*)LinearGradient::gen().release();
+}
+
+TVG_EXPORT Tvg_Gradient* tvg_radial_gradient_new()
+{
+    return (Tvg_Gradient*)RadialGradient::gen().release();
+
+}
+
+TVG_EXPORT Tvg_Result tvg_gradient_del(Tvg_Gradient* grad)
+{
+    delete(grad);
+    return TVG_RESULT_SUCCESS;
+}
+
+TVG_EXPORT Tvg_Result tvg_linear_gradient_set(Tvg_Gradient* grad, float x1, float y1, float x2, float y2)
+{
+    return (Tvg_Result) reinterpret_cast<LinearGradient*>(grad)->linear(x1, y1, x2, y2);
+}
+
+TVG_EXPORT Tvg_Result tvg_radial_gradient_set(Tvg_Gradient* grad, float cx, float cy, float radius)
+{
+    return (Tvg_Result) reinterpret_cast<RadialGradient*>(grad)->radial(cx, cy, radius);
+}
+
+TVG_EXPORT Tvg_Result tvg_gradient_color_stops(Tvg_Gradient* grad, const Tvg_Color_Stop* color_stop, uint32_t cnt)
+{
+    return (Tvg_Result) reinterpret_cast<Fill*>(grad)->colorStops(reinterpret_cast<const Fill::ColorStop*>(color_stop), cnt);
+}
+
 #ifdef __cplusplus
 }
 #endif
\ No newline at end of file
index 6a46e97..3a307ab 100644 (file)
@@ -20,11 +20,36 @@ void testCapi()
 \r
     Tvg_Paint* shape = tvg_shape_new();\r
     tvg_shape_append_rect(shape, 0, 0, 200, 200, 0, 0);\r
+    tvg_shape_append_circle(shape, 200, 200, 100, 100);\r
     tvg_shape_append_rect(shape, 100, 100, 300, 300, 100, 100);\r
-    tvg_shape_append_circle(shape, 400, 400, 100, 100);\r
-    tvg_shape_append_circle(shape, 400, 500, 170, 100);\r
-    tvg_shape_fill_color(shape, 255, 255, 0, 255);\r
+    Tvg_Gradient* grad = tvg_linear_gradient_new();\r
+    tvg_linear_gradient_set(grad, 0, 0, 300, 300);\r
+    Tvg_Color_Stop color_stops[4] =\r
+    {\r
+        {.offset=0.0, .r=0, .g=0, .b=0, .a=255},\r
+        {.offset=0.25, .r=255, .g=0, .b=0, .a=255},\r
+        {.offset=0.5, .r=0, .g=255, .b=0, .a=255},\r
+        {.offset=1.0, .r=0, .g=0, .b=255, .a=255}\r
+    };\r
+\r
+    Tvg_Paint *shape1 = tvg_shape_new();\r
+    tvg_shape_append_rect(shape1, 500, 500, 100, 100, 30, 30);\r
+    Tvg_Gradient* grad1 = tvg_radial_gradient_new();\r
+    tvg_radial_gradient_set(grad1, 550, 550, 50);\r
+    Tvg_Color_Stop color_stops1[3] =\r
+    {\r
+        {.offset=0.0, .r=0, .g=0, .b=0, .a=255},\r
+        {.offset=0.6, .r=255, .g=0, .b=0, .a=255},\r
+        {.offset=1.0, .r=0, .g=255, .b=255, .a=255}\r
+    };\r
+\r
+    tvg_gradient_color_stops(grad, color_stops, 4);\r
+    tvg_gradient_color_stops(grad1, color_stops1, 3);\r
+    tvg_shape_linear_gradient_set(shape, grad);\r
+    tvg_shape_radial_gradient_set(shape1, grad1);\r
+\r
     tvg_canvas_push(canvas, shape);\r
+    tvg_canvas_push(canvas, shape1);\r
 \r
     tvg_canvas_draw(canvas);\r
     tvg_canvas_sync(canvas);\r