From 2af6bc5f49c89f641684e67ee50edda2d239ddf3 Mon Sep 17 00:00:00 2001 From: Michal Szczecinski Date: Fri, 7 Aug 2020 09:04:42 +0200 Subject: [PATCH] evas/canvas/vg: Added thorvg initialization. Added thorvg initialization in evas_vg_cache. To don't break current code, added separated functions to render object when thorvg lib is used. Change-Id: I2ea361fab9758a170f971dc7a731eded9d45b0e6 --- src/lib/evas/canvas/evas_vg_private.h | 21 +++++++++++++++++++++ src/lib/evas/vg/evas_vg_cache.c | 9 +++++++++ 2 files changed, 30 insertions(+) diff --git a/src/lib/evas/canvas/evas_vg_private.h b/src/lib/evas/canvas/evas_vg_private.h index b237b6f..8cf0938 100644 --- a/src/lib/evas/canvas/evas_vg_private.h +++ b/src/lib/evas/canvas/evas_vg_private.h @@ -1,8 +1,13 @@ #ifndef EVAS_VG_PRIVATE_H_ # define EVAS_VG_PRIVATE_H_ +//TODO: Parametrize this include #include +#ifdef HAVE_THORVG +#include +#endif + typedef struct _Efl_Canvas_Vg_Node_Data Efl_Canvas_Vg_Node_Data; typedef struct _Efl_Canvas_Vg_Container_Data Efl_Canvas_Vg_Container_Data; typedef struct _Efl_Canvas_Vg_Gradient_Data Efl_Canvas_Vg_Gradient_Data; @@ -55,6 +60,11 @@ struct _Efl_Canvas_Vg_Object_Data void *ckeys[2]; //cache keys for first, last frames if animation Eina_Bool changed : 1; + +#ifdef HAVE_THORVG + Tvg_Canvas *tvg_canvas; + uint32_t *tvg_buffer; +#endif }; struct _Efl_Canvas_Vg_Node_Data @@ -71,6 +81,13 @@ struct _Efl_Canvas_Vg_Node_Data Efl_Canvas_Vg_Node_Data *nd, void *engine, void *output, void *contenxt, Ector_Surface *surface, Eina_Matrix3 *ptransform, int opacity, Ector_Buffer *comp, Efl_Gfx_Vg_Composite_Method comp_method, void *data); + +#ifdef HAVE_THORVG + void (*render_pre_tvg)(Evas_Object_Protected_Data *vg_pd, Efl_VG *node, Efl_Canvas_Vg_Node_Data *nd, void *canvas); + void (*render_tvg)(Evas_Object_Protected_Data *vg_pd, Efl_VG *node, Efl_Canvas_Vg_Node_Data *nd, void *canvas); + void (*set_color)(Efl_Canvas_Vg_Node_Data *nd, int r, int g, int b, int a); +#endif + void *data; double x, y; @@ -176,6 +193,10 @@ _evas_vg_render_pre(Evas_Object_Protected_Data *vg_pd, Efl_VG *child, if (nd) nd->render_pre(vg_pd, child, nd, engine, output, context, surface, transform, opacity, comp, comp_method, nd->data); +#ifdef HAVE_THORVG + //TODO: This function probably is not called when HAVE_THORVG is defined + if (nd && nd->render_pre_tvg) nd->render_pre_tvg(vg_pd, child, nd, NULL); +#endif return nd; } diff --git a/src/lib/evas/vg/evas_vg_cache.c b/src/lib/evas/vg/evas_vg_cache.c index d9cefb8..e8610ae 100644 --- a/src/lib/evas/vg/evas_vg_cache.c +++ b/src/lib/evas/vg/evas_vg_cache.c @@ -271,6 +271,10 @@ evas_cache_vg_init(void) return; } +#ifdef HAVE_THORVG + tvg_engine_init(TVG_ENGINE_SW, eina_cpu_count()); +#endif + vg_cache->vfd_hash = eina_hash_string_superfast_new(_evas_cache_vg_data_free_cb); vg_cache->vg_entry_hash = eina_hash_string_superfast_new(_evas_cache_vg_entry_free_cb); vg_cache->ref++; @@ -315,6 +319,11 @@ evas_cache_vg_shutdown(void) { if (!vg_cache) return; vg_cache->ref--; + +#ifdef HAVE_THORVG + tvg_engine_term(TVG_ENGINE_SW | TVG_ENGINE_GL); +#endif + if (vg_cache->ref > 0) return; char *key; -- 2.7.4