From 05757ec07cf0b050ffbd4d528fdb76ccbf92995c Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 4 Aug 2020 09:37:08 +0900 Subject: [PATCH] capi: revise some common paint interfaces and added picture stuff. Change-Id: I9850cbead5ce1ab172f284738fe8456cd19dc3f9 --- inc/thorvg_capi.h | 22 ++++++++++--- src/bindings/capi/tvgCapi.cpp | 72 +++++++++++++++++++++++++++++++------------ 2 files changed, 69 insertions(+), 25 deletions(-) diff --git a/inc/thorvg_capi.h b/inc/thorvg_capi.h index 5c0428b..ecd7ee6 100644 --- a/inc/thorvg_capi.h +++ b/inc/thorvg_capi.h @@ -128,10 +128,19 @@ TVG_EXPORT Tvg_Result tvg_canvas_sync(Tvg_Canvas* canvas); /************************************************************************/ +/* Paint API */ +/************************************************************************/ +TVG_EXPORT Tvg_Result tvg_paint_del(Tvg_Paint* paint); +TVG_EXPORT Tvg_Result tvg_paint_scale(Tvg_Paint* paint, float factor); +TVG_EXPORT Tvg_Result tvg_paint_rotate(Tvg_Paint* paint, float degree); +TVG_EXPORT Tvg_Result tvg_paint_translate(Tvg_Paint* paint, float x, float y); +TVG_EXPORT Tvg_Result tvg_paint_transform(Tvg_Paint* paint, const Tvg_Matrix* m); + + +/************************************************************************/ /* Shape API */ /************************************************************************/ TVG_EXPORT Tvg_Paint* tvg_shape_new(); -TVG_EXPORT Tvg_Result tvg_shape_del(Tvg_Paint* paint); TVG_EXPORT Tvg_Result tvg_shape_reset(Tvg_Paint* paint); TVG_EXPORT Tvg_Result tvg_shape_move_to(Tvg_Paint* paint, float x, float y); TVG_EXPORT Tvg_Result tvg_shape_line_to(Tvg_Paint* paint, float x, float y); @@ -147,10 +156,6 @@ TVG_EXPORT Tvg_Result tvg_shape_set_stroke_dash(Tvg_Paint* paint, const float* d TVG_EXPORT Tvg_Result tvg_shape_set_stroke_cap(Tvg_Paint* paint, Tvg_Stroke_Cap cap); TVG_EXPORT Tvg_Result tvg_shape_set_stroke_join(Tvg_Paint* paint, Tvg_Stroke_Join join); TVG_EXPORT Tvg_Result tvg_shape_fill_color(Tvg_Paint* paint, uint8_t r, uint8_t g, uint8_t b, uint8_t a); -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); @@ -166,6 +171,13 @@ TVG_EXPORT Tvg_Result tvg_radial_gradient_set(Tvg_Gradient* grad, float cx, floa TVG_EXPORT Tvg_Result tvg_gradient_color_stops(Tvg_Gradient* grad, const Tvg_Color_Stop* color_stop, uint32_t cnt); +/************************************************************************/ +/* Picture API */ +/************************************************************************/ +TVG_EXPORT Tvg_Paint* tvg_picture_new(); +TVG_EXPORT Tvg_Result tvg_picture_load(Tvg_Paint* paint, const char* path); +TVG_EXPORT Tvg_Result tvg_picture_get_viewbox(Tvg_Paint* paint, float* x, float* y, float* w, float* h); + #ifdef __cplusplus } #endif diff --git a/src/bindings/capi/tvgCapi.cpp b/src/bindings/capi/tvgCapi.cpp index 9897584..9f9646e 100644 --- a/src/bindings/capi/tvgCapi.cpp +++ b/src/bindings/capi/tvgCapi.cpp @@ -132,19 +132,47 @@ TVG_EXPORT Tvg_Result tvg_canvas_sync(Tvg_Canvas* canvas) /************************************************************************/ -/* Shape API */ +/* Paint API */ /************************************************************************/ -TVG_EXPORT Tvg_Paint* tvg_shape_new() +TVG_EXPORT Tvg_Result tvg_paint_del(Tvg_Paint* paint) { - return (Tvg_Paint*) Shape::gen().release(); + delete(paint); + return TVG_RESULT_SUCCESS; } -TVG_EXPORT Tvg_Result tvg_shape_del(Tvg_Paint* paint) +TVG_EXPORT Tvg_Result tvg_paint_scale(Tvg_Paint* paint, float factor) { - delete(paint); - return TVG_RESULT_SUCCESS; + return (Tvg_Result) reinterpret_cast(paint)->scale(factor); +} + + +TVG_EXPORT Tvg_Result tvg_paint_rotate(Tvg_Paint* paint, float degree) +{ + return (Tvg_Result) reinterpret_cast(paint)->rotate(degree); +} + + +TVG_EXPORT Tvg_Result tvg_paint_translate(Tvg_Paint* paint, float x, float y) +{ + return (Tvg_Result) reinterpret_cast(paint)->translate(x, y); +} + + +TVG_EXPORT Tvg_Result tvg_paint_transform(Tvg_Paint* paint, const Tvg_Matrix* m) +{ + return (Tvg_Result) reinterpret_cast(paint)->transform(*(reinterpret_cast(m))); +} + + +/************************************************************************/ +/* Shape API */ +/************************************************************************/ + +TVG_EXPORT Tvg_Paint* tvg_shape_new() +{ + return (Tvg_Paint*) Shape::gen().release(); } @@ -235,34 +263,38 @@ TVG_EXPORT Tvg_Result tvg_shape_fill_color(Tvg_Paint* paint, uint8_t r, uint8_t return (Tvg_Result) reinterpret_cast(paint)->fill(r, g, b, a); } -TVG_EXPORT Tvg_Result tvg_shape_scale(Tvg_Paint* paint, float factor) -{ - return (Tvg_Result) reinterpret_cast(paint)->scale(factor); -} -TVG_EXPORT Tvg_Result tvg_shape_rotate(Tvg_Paint* paint, float degree) +TVG_EXPORT Tvg_Result tvg_shape_linear_gradient_set(Tvg_Paint* paint, Tvg_Gradient *gradient) { - return (Tvg_Result) reinterpret_cast(paint)->rotate(degree); + return (Tvg_Result) reinterpret_cast(paint)->fill(unique_ptr((LinearGradient*)(gradient))); } -TVG_EXPORT Tvg_Result tvg_shape_translate(Tvg_Paint* paint, float x, float y) + +TVG_EXPORT Tvg_Result tvg_shape_radial_gradient_set(Tvg_Paint* paint, Tvg_Gradient *gradient) { - return (Tvg_Result) reinterpret_cast(paint)->translate(x, y); + return (Tvg_Result) reinterpret_cast(paint)->fill(unique_ptr((RadialGradient*)(gradient))); } -TVG_EXPORT Tvg_Result tvg_shape_transform(Tvg_Paint* paint, const Tvg_Matrix* m) + +/************************************************************************/ +/* Picture API */ +/************************************************************************/ + +TVG_EXPORT Tvg_Paint* tvg_picture_new() { - return (Tvg_Result) reinterpret_cast(paint)->transform(*(reinterpret_cast(m))); + return (Tvg_Paint*) Picture::gen().release(); } -TVG_EXPORT Tvg_Result tvg_shape_linear_gradient_set(Tvg_Paint* paint, Tvg_Gradient *grad) + +TVG_EXPORT Tvg_Result tvg_picture_load(Tvg_Paint* paint, const char* path) { - return (Tvg_Result) reinterpret_cast(paint)->fill(unique_ptr((LinearGradient*)(grad))); + return (Tvg_Result) reinterpret_cast(paint)->load(path); } -TVG_EXPORT Tvg_Result tvg_shape_radial_gradient_set(Tvg_Paint* paint, Tvg_Gradient *grad) + +TVG_EXPORT Tvg_Result tvg_picture_get_viewbox(Tvg_Paint* paint, float* x, float* y, float* w, float* h) { - return (Tvg_Result) reinterpret_cast(paint)->fill(unique_ptr((RadialGradient*)(grad))); + return (Tvg_Result) reinterpret_cast(paint)->viewbox(x, y, w, h); } -- 2.7.4