jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a8b6c1cd7f067001c902967af3a652d1d4efc782

commit a8b6c1cd7f067001c902967af3a652d1d4efc782
Author: Jean-Philippe Andre <[email protected]>
Date:   Thu Mar 23 16:22:43 2017 +0900

    evas filters: Move private data out of evas headers
    
    This moves the filter internal data back to the filters
    implementation, rather than inside evas common headers.
---
 src/lib/evas/canvas/evas_filter_mixin.c    | 50 ++++++++++++++++++++++++++++--
 src/lib/evas/canvas/evas_main.c            |  2 --
 src/lib/evas/canvas/evas_object_main.c     | 12 ++-----
 src/lib/evas/filters/evas_filter.c         |  2 ++
 src/lib/evas/filters/evas_filter_private.h |  3 ++
 src/lib/evas/include/evas_private.h        | 32 -------------------
 6 files changed, 55 insertions(+), 46 deletions(-)

diff --git a/src/lib/evas/canvas/evas_filter_mixin.c 
b/src/lib/evas/canvas/evas_filter_mixin.c
index d2c17b2..f3ed146 100644
--- a/src/lib/evas/canvas/evas_filter_mixin.c
+++ b/src/lib/evas/canvas/evas_filter_mixin.c
@@ -17,6 +17,34 @@
 typedef struct _Evas_Filter_Data Evas_Filter_Data;
 typedef struct _Evas_Filter_Post_Render_Data Evas_Filter_Post_Render_Data;
 
+struct _Evas_Object_Filter_Data
+{
+   Evas_Object_Protected_Data *obj;
+   Eina_Stringshare    *name;
+   Eina_Stringshare    *code;
+   Evas_Filter_Program *chain;
+   Evas_Filter_Context *context;
+   Eina_Hash           *sources; // Evas_Filter_Proxy_Binding
+   Eina_Inlist         *data; // Evas_Filter_Data_Binding
+   Eina_Rectangle       prev_obscured, obscured;
+   void                *output;
+   struct {
+      struct {
+         Eina_Stringshare *name;
+         double            value;
+      } cur;
+      struct {
+         Eina_Stringshare *name;
+         double            value;
+      } next;
+      double               pos;
+   } state;
+   Eina_Bool            changed : 1;
+   Eina_Bool            invalid : 1; // Code parse failed
+   Eina_Bool            async : 1;
+   Eina_Bool            reuse : 1;
+};
+
 struct _Evas_Filter_Data
 {
    const Evas_Object_Filter_Data *data;
@@ -29,6 +57,24 @@ struct _Evas_Filter_Post_Render_Data
    Eina_Bool success;
 };
 
+static const Evas_Object_Filter_Data evas_filter_data_cow_default = {};
+Eina_Cow *evas_object_filter_cow = NULL;
+
+void
+evas_filter_mixin_init(void)
+{
+   evas_object_filter_cow = eina_cow_add
+         ("Evas Filter Data", sizeof(Evas_Object_Filter_Data), 8,
+          &evas_filter_data_cow_default, EINA_TRUE);
+}
+
+void
+evas_filter_mixin_shutdown(void)
+{
+   eina_cow_del(evas_object_filter_cow);
+   evas_object_filter_cow = NULL;
+}
+
 static inline void
 _state_check(Evas_Object_Filter_Data *fcow)
 {
@@ -630,7 +676,7 @@ 
_efl_canvas_filter_internal_efl_gfx_filter_filter_padding_get(Eo *eo_obj EINA_UN
 EOLIAN static void
 _efl_canvas_filter_internal_filter_changed_set(Eo *eo_obj EINA_UNUSED, 
Evas_Filter_Data *pd, Eina_Bool val)
 {
-   if ((evas_object_filter_cow_default != pd->data) && (pd->data->changed != 
val))
+   if ((&evas_filter_data_cow_default != pd->data) && (pd->data->changed != 
val))
      {
         Evas_Object_Filter_Data *fcow = FCOW_BEGIN(pd);
         fcow->changed = val;
@@ -668,7 +714,7 @@ _efl_canvas_filter_internal_efl_object_destructor(Eo 
*eo_obj, Evas_Filter_Data *
    Evas_Public_Data *e;
    Eina_Inlist *il;
 
-   if (!pd->data || (evas_object_filter_cow_default == pd->data))
+   if (!pd->data || (&evas_filter_data_cow_default == pd->data))
      goto finish;
 
    obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 1dac921..1323a89 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -157,9 +157,7 @@ evas_shutdown(void)
    evas_object_image_state_cow = NULL;
 
    evas_filter_shutdown();
-   eina_cow_del(evas_object_filter_cow);
    eina_cow_del(evas_object_mask_cow);
-   evas_object_filter_cow = NULL;
    evas_object_mask_cow = NULL;
 
    evas_thread_shutdown();
diff --git a/src/lib/evas/canvas/evas_object_main.c 
b/src/lib/evas/canvas/evas_object_main.c
index b62ffe6..6ec47de 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -32,10 +32,6 @@ static const Evas_Object_Protected_State default_state = {
   { 255, 255, 255, 255 },
   1.0, 0, EVAS_RENDER_BLEND, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE, 
EINA_FALSE
 };
-static const Evas_Object_Filter_Data default_filter = {
-  NULL, NULL, NULL, NULL, NULL, NULL, NULL, {}, {}, NULL, {}, EINA_FALSE, 
EINA_FALSE, EINA_TRUE, EINA_TRUE
-};
-const void * const evas_object_filter_cow_default = &default_filter;
 static const Evas_Object_Mask_Data default_mask = {
   NULL, 0, 0, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE
 };
@@ -44,36 +40,32 @@ Eina_Cow *evas_object_proxy_cow = NULL;
 Eina_Cow *evas_object_map_cow = NULL;
 Eina_Cow *evas_object_state_cow = NULL;
 Eina_Cow *evas_object_3d_cow = NULL;
-Eina_Cow *evas_object_filter_cow = NULL;
 Eina_Cow *evas_object_mask_cow = NULL;
 
 static Eina_Bool
 _init_cow(void)
 {
-   if (evas_object_map_cow && evas_object_proxy_cow && evas_object_state_cow 
&& evas_object_3d_cow && evas_object_filter_cow) return EINA_TRUE;
+   if (evas_object_map_cow && evas_object_proxy_cow && evas_object_state_cow 
&& evas_object_3d_cow) return EINA_TRUE;
 
    evas_object_proxy_cow = eina_cow_add("Evas Object Proxy", sizeof 
(Evas_Object_Proxy_Data), 8, &default_proxy, EINA_TRUE);
    evas_object_map_cow = eina_cow_add("Evas Object Map", sizeof 
(Evas_Object_Map_Data), 8, &default_map, EINA_TRUE);
    evas_object_state_cow = eina_cow_add("Evas Object State", sizeof 
(Evas_Object_Protected_State), 64, &default_state, EINA_FALSE);
    evas_object_3d_cow = eina_cow_add("Evas Object 3D", sizeof 
(Evas_Object_3D_Data), 8, &default_proxy, EINA_TRUE);
-   evas_object_filter_cow = eina_cow_add("Evas Filter Data", sizeof 
(Evas_Object_Filter_Data), 8, &default_filter, EINA_TRUE);
    evas_object_mask_cow = eina_cow_add("Evas Mask Data", sizeof 
(Evas_Object_Mask_Data), 8, &default_mask, EINA_TRUE);
 
    if (!(evas_object_map_cow && evas_object_proxy_cow && evas_object_state_cow 
&&
-         evas_object_3d_cow && evas_object_filter_cow && evas_object_mask_cow))
+         evas_object_3d_cow && evas_object_mask_cow))
      {
         eina_cow_del(evas_object_proxy_cow);
         eina_cow_del(evas_object_map_cow);
         eina_cow_del(evas_object_state_cow);
         eina_cow_del(evas_object_3d_cow);
-        eina_cow_del(evas_object_filter_cow);
         eina_cow_del(evas_object_mask_cow);
 
         evas_object_proxy_cow = NULL;
         evas_object_map_cow = NULL;
         evas_object_state_cow = NULL;
         evas_object_3d_cow = NULL;
-        evas_object_filter_cow = NULL;
         evas_object_mask_cow = NULL;
 
         return EINA_FALSE;
diff --git a/src/lib/evas/filters/evas_filter.c 
b/src/lib/evas/filters/evas_filter.c
index c0990a0..5ed3ba8 100644
--- a/src/lib/evas/filters/evas_filter.c
+++ b/src/lib/evas/filters/evas_filter.c
@@ -1802,6 +1802,7 @@ evas_filter_init(void)
 {
    if ((init_cnt++) > 0) return;
    _evas_filter_log_dom = eina_log_domain_register("evas_filter", 
EVAS_FILTER_LOG_COLOR);
+   evas_filter_mixin_init();
 }
 
 void
@@ -1809,6 +1810,7 @@ evas_filter_shutdown(void)
 {
    if ((--init_cnt) > 0) return;
    evas_filter_parser_shutdown();
+   evas_filter_mixin_shutdown();
    eina_log_domain_unregister(_evas_filter_log_dom);
    _evas_filter_log_dom = 0;
 }
diff --git a/src/lib/evas/filters/evas_filter_private.h 
b/src/lib/evas/filters/evas_filter_private.h
index fb55aaf..23de8e4 100644
--- a/src/lib/evas/filters/evas_filter_private.h
+++ b/src/lib/evas/filters/evas_filter_private.h
@@ -273,6 +273,9 @@ enum _Evas_Filter_Support
    EVAS_FILTER_SUPPORT_GL
 };
 
+void                     evas_filter_mixin_init(void);
+void                     evas_filter_mixin_shutdown(void);
+
 void                     evas_filter_context_clear(Evas_Filter_Context *ctx, 
Eina_Bool keep_buffers);
 void                     evas_filter_context_source_set(Evas_Filter_Context 
*ctx, Evas_Object *eo_proxy, Evas_Object *eo_source, int bufid, 
Eina_Stringshare *name);
 
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 1cf58e2..3571cd6 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1284,34 +1284,6 @@ struct _Evas_Font_Description
    Eina_Bool is_new : 1;
 };
 
-struct _Evas_Object_Filter_Data
-{
-   Evas_Object_Protected_Data *obj;
-   Eina_Stringshare    *name;
-   Eina_Stringshare    *code;
-   Evas_Filter_Program *chain;
-   Evas_Filter_Context *context;
-   Eina_Hash           *sources; // Evas_Filter_Proxy_Binding
-   Eina_Inlist         *data; // Evas_Filter_Data_Binding
-   Eina_Rectangle       prev_obscured, obscured;
-   void                *output;
-   struct {
-      struct {
-         Eina_Stringshare *name;
-         double            value;
-      } cur;
-      struct {
-         Eina_Stringshare *name;
-         double            value;
-      } next;
-      double               pos;
-   } state;
-   Eina_Bool            changed : 1;
-   Eina_Bool            invalid : 1; // Code parse failed
-   Eina_Bool            async : 1;
-   Eina_Bool            reuse : 1;
-};
-
 struct _Evas_Object_Func
 {
    void (*free) (Evas_Object *obj, Evas_Object_Protected_Data *pd, void 
*type_private_data);
@@ -2062,10 +2034,6 @@ extern Eina_Cow *evas_object_3d_cow;
 extern Eina_Cow *evas_object_image_pixels_cow;
 extern Eina_Cow *evas_object_image_load_opts_cow;
 extern Eina_Cow *evas_object_image_state_cow;
-
-extern Eina_Cow *evas_object_filter_cow;
-// This should be replaced by something like "eina_cow_default_get()" maybe
-extern const void * const evas_object_filter_cow_default;
 extern Eina_Cow *evas_object_mask_cow;
 
 # define EINA_COW_STATE_WRITE_BEGIN(Obj, Write, State)          \

-- 


Reply via email to