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)
float e31, e32, e33;
} Tvg_Matrix;
+typedef struct
+{
+ float offset;
+ uint8_t r, g, b, a;
+} Tvg_Color_Stop;
/************************************************************************/
/* Engine API */
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
}
//Dummy for Direct Casting
};
+struct _Tvg_Gradient
+{
+ //Dummy for Direct Casting
+};
+
/************************************************************************/
/* Engine API */
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
\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