jpeg pushed a commit to branch master.

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

commit 8608e8dc7047bfe074a71e638bc44b0eec198827
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Fri Nov 24 15:17:05 2017 +0900

    part bg: Fix up some unnecessary complexity
    
    See previous commit :)
    
    Note: right now the background part has a small 3d indent which comes
    from the legacy theme being used. This will be fixed soon.
---
 src/bin/elementary/test.c                   |   2 +-
 src/lib/elementary/efl_ui_layout.c          | 104 ++++++++++------------------
 src/lib/elementary/efl_ui_layout_part_bg.eo |   7 +-
 src/lib/elementary/efl_ui_widget_part_bg.eo |  15 +---
 src/lib/elementary/elm_part_helper.h        |  26 ++++---
 src/lib/elementary/elm_widget.c             |  40 +++++------
 src/lib/elementary/elm_widget.h             |   2 +
 7 files changed, 76 insertions(+), 120 deletions(-)

diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index e4ba05f74c..c4f5e9b21f 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -1133,7 +1133,7 @@ add_tests:
    ADD_TEST(NULL, "Widgets Disable/Enable", "Layout", test_layout_disable);
 
    //------------------------------//
-   ADD_TEST(NULL, "Widgets Part", "Part Background", test_part_background);
+   ADD_TEST_EO(NULL, "Widgets Part", "Part Background", test_part_background);
 #undef ADD_TEST
 
    if (autorun)
diff --git a/src/lib/elementary/efl_ui_layout.c 
b/src/lib/elementary/efl_ui_layout.c
index a4cd798cb2..abe8554d45 100644
--- a/src/lib/elementary/efl_ui_layout.c
+++ b/src/lib/elementary/efl_ui_layout.c
@@ -2383,17 +2383,33 @@ _efl_ui_layout_efl_part_part(const Eo *obj, 
Efl_Ui_Layout_Data *sd, const char *
    EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
    ELM_WIDGET_DATA_GET_OR_RETURN((Eo *) obj, wd, NULL);
 
-   if (eina_streq(part, "background"))
-     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_BG_CLASS, obj, part);
    // Check part type without using edje_object_part_object_get(), as this
    // can cause recalc, which has side effects... and could be slow.
    type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, part));
 
+   if (eina_streq(part, "background"))
+     {
+        if (type != EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW)
+          {
+             if (type < EFL_CANVAS_LAYOUT_PART_TYPE_LAST)
+               {
+                  const char *file = NULL, *key = NULL;
+                  efl_file_get(wd->resize_obj, &file, &key);
+                  WRN("Layout has a background but it's not a swallow: 
'%s:%s'",
+                      file, key);
+               }
+             return efl_part(efl_super(obj, MY_CLASS), part);
+          }
+
+        return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_BG_CLASS, obj, part);
+     }
+
    if (type >= EFL_CANVAS_LAYOUT_PART_TYPE_LAST)
      {
         ERR("Invalid type found for part '%s' in group '%s'", part, sd->group);
         return NULL;
      }
+
    switch (type)
      {
       case EFL_CANVAS_LAYOUT_PART_TYPE_BOX:
@@ -2528,78 +2544,28 @@ 
_efl_ui_layout_part_legacy_efl_ui_translatable_translatable_text_set(Eo *obj, vo
    elm_widget_part_translatable_text_set(pd->obj, pd->part, label, domain);
 }
 
-/* Efl.Ui.Layout.Part.Bg (common) */
-EOLIAN static void
-_efl_ui_layout_part_bg_efl_ui_widget_part_bg_bg_set(Eo *obj, void *_pd 
EINA_UNUSED, Efl_Canvas_Object *bg)
-{
-   Efl_Canvas_Layout_Part_Type type;
-   Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
-   Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-   ELM_WIDGET_DATA_GET_OR_RETURN(pd->obj, wd);
-
-   // Check part type without using edje_object_part_object_get(), as this
-   // can cause recalc, which has side effects... and could be slow.
-   type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, 
"background"));
-   if (type != EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW)
-     efl_ui_widget_part_bg_set(efl_super(obj, EFL_UI_LAYOUT_PART_BG_CLASS), 
bg);
-
-   if (wd->bg == bg)
-     return;
-
-   efl_del(wd->bg);
-   wd->bg = bg;
-   if (!wd->bg)
-     return;
-
-   _efl_ui_layout_content_set(pd->obj, sd, "background", bg);
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_layout_part_bg_efl_file_file_set(Eo *obj, void *pd EINA_UNUSED, const 
char *file, const char *key)
-{
-   Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
-
-   return efl_file_set(bg_obj, file, key);
-}
-
-EOLIAN static void
-_efl_ui_layout_part_bg_efl_file_file_get(Eo *obj, void *pd EINA_UNUSED, const 
char **file, const char **key)
-{
-   Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
-
-   efl_file_get(bg_obj, file, key);
-}
-
-EOLIAN static void
-_efl_ui_layout_part_bg_efl_gfx_color_set(Eo *obj, void *pd EINA_UNUSED, int r, 
int g, int b, int a)
-{
-   Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
-
-   efl_gfx_color_set(bg_obj, r, g, b, a);
-}
-
-EOLIAN static void
-_efl_ui_layout_part_bg_efl_gfx_color_get(Eo *obj, void *pd EINA_UNUSED, int 
*r, int *g, int *b, int *a)
-{
-   Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+/* Efl.Ui.Layout.Part_Bg (common) */
 
-   efl_gfx_color_get(bg_obj, r, g, b, a);
-}
-
-EOLIAN static void
-_efl_ui_layout_part_bg_efl_ui_image_scale_type_set(Eo *obj, void *pd 
EINA_UNUSED, Efl_Ui_Image_Scale_Type scale_type)
+EOLIAN static Efl_Object *
+_efl_ui_layout_part_bg_efl_object_finalize(Eo *obj, void *_pd EINA_UNUSED)
 {
-   Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+   Efl_Ui_Layout_Data *sd;
+   Elm_Part_Data *pd;
+   Eo *bg;
 
-   efl_ui_image_scale_type_set(bg_obj, scale_type);
-}
+   obj = efl_finalize(efl_super(obj, EFL_UI_LAYOUT_PART_BG_CLASS));
+   if (!obj) return NULL;
 
-EOLIAN static Efl_Ui_Image_Scale_Type
-_efl_ui_layout_part_bg_efl_ui_image_scale_type_get(Eo *obj, void *pd 
EINA_UNUSED)
-{
-   Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+   pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
+   sd = efl_data_scope_get(pd->obj, MY_CLASS);
+   bg = _efl_ui_widget_bg_get(pd->obj);
+   if (!_efl_ui_layout_content_set(pd->obj, sd, "background", bg))
+     {
+        ERR("Failed to swallow new background object!");
+        // Shouldn't happen. What now? del bg? call super? return null?
+     }
 
-   return efl_ui_image_scale_type_get(bg_obj);
+   return obj;
 }
 
 /* Efl.Ui.Layout.Part_Xxx includes */
diff --git a/src/lib/elementary/efl_ui_layout_part_bg.eo 
b/src/lib/elementary/efl_ui_layout_part_bg.eo
index 9da3921797..dc157d2666 100644
--- a/src/lib/elementary/efl_ui_layout_part_bg.eo
+++ b/src/lib/elementary/efl_ui_layout_part_bg.eo
@@ -1,11 +1,8 @@
-class Efl.Ui.Layout.Part.Bg (Efl.Ui.Widget.Part.Bg, Efl.Ui.Bg)
+class Efl.Ui.Layout.Part_Bg (Efl.Ui.Widget.Part_Bg)
 {
    [[Elementary layout internal part background class]]
    data: null;
    implements {
-      Efl.Ui.Widget.Part.Bg.bg { set; }
-      Efl.File.file { get; set; }
-      Efl.Gfx.color { set; get; }
-      Efl.Ui.Image.scale_type { get; set; }
+      Efl.Object.finalize;
    }
 }
diff --git a/src/lib/elementary/efl_ui_widget_part_bg.eo 
b/src/lib/elementary/efl_ui_widget_part_bg.eo
index 47e5c6e8bf..f35d4f66e4 100644
--- a/src/lib/elementary/efl_ui_widget_part_bg.eo
+++ b/src/lib/elementary/efl_ui_widget_part_bg.eo
@@ -1,21 +1,10 @@
-class Efl.Ui.Widget.Part.Bg (Efl.Ui.Widget.Part, Efl.Ui.Bg)
+class Efl.Ui.Widget.Part_Bg (Efl.Ui.Widget.Part, Efl.Ui.Bg)
 {
    [[Elementary widget internal part background class]]
    data: null;
-   methods {
-      @property bg @protected {
-         [[Background object]]
-         set {
-         }
-         get {
-         }
-         values {
-            bg: Efl.Canvas.Object;
-         }
-      }
-   }
    implements {
       Efl.File.file { get; set; }
+      //Efl.File.mmap { get; set; }
       Efl.Gfx.color { set; get; }
       Efl.Ui.Image.scale_type { get; set; }
    }
diff --git a/src/lib/elementary/elm_part_helper.h 
b/src/lib/elementary/elm_part_helper.h
index b74bd5734e..eef0d2fced 100644
--- a/src/lib/elementary/elm_part_helper.h
+++ b/src/lib/elementary/elm_part_helper.h
@@ -1,6 +1,8 @@
 #ifndef _ELM_PART_HELPER_H
 #define _ELM_PART_HELPER_H
 
+#include "Elementary.h"
+#include "elm_priv.h"
 #include "efl_ui_layout_part_legacy.eo.h"
 
 //#define ELM_PART_HOOK do { ERR("%s@%p:%s [%d]", efl_class_name_get(pd->obj), 
pd->obj, pd->part, (int) pd->temp); } while(0)
@@ -63,15 +65,23 @@ _elm_part_alias_find(const 
Elm_Layout_Part_Alias_Description *aliases, const cha
    return EINA_FALSE;
 }
 
+static inline Eo *
+_elm_part_initialize(Eo *proxy, Eo *obj, const char *part)
+{
+   Elm_Part_Data *pd = efl_data_scope_get(proxy, EFL_UI_WIDGET_PART_CLASS);
+
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(pd && obj && part, NULL);
+   efl_allow_parent_unref_set(proxy, 1);
+   // efl_auto_unref_set(proxy, 1);
+   pd->part = eina_tmpstr_add(part);
+   pd->obj = obj;
+
+   return proxy;
+}
+
 #define ELM_PART_IMPLEMENT(PART_CLASS, _obj, _part) ({ \
-   EINA_SAFETY_ON_NULL_RETURN_VAL(_obj, NULL); \
-   EINA_SAFETY_ON_NULL_RETURN_VAL(_part, NULL); \
-   Eo *proxy = efl_add(PART_CLASS, (Eo *) _obj); \
-   Elm_Part_Data *pd = efl_data_scope_get(proxy, EFL_UI_WIDGET_PART_CLASS); \
-   EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL); \
-   pd->obj = (Eo *) _obj; \
-   pd->part = eina_tmpstr_add(_part); \
-   efl_allow_parent_unref_set(proxy, 1); \
+   Eo *proxy = efl_add(PART_CLASS, (Eo *) _obj, \
+                       _elm_part_initialize(efl_added, (Eo *) _obj, _part)); \
    efl_auto_unref_set(proxy, 1); \
    proxy; })
 
diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c
index c4e6823348..e629d7c700 100644
--- a/src/lib/elementary/elm_widget.c
+++ b/src/lib/elementary/elm_widget.c
@@ -5550,41 +5550,33 @@ _efl_ui_widget_part_efl_object_destructor(Eo *obj, 
Elm_Part_Data *pd)
 /* Efl.Part end */
 
 /* Efl.Part Bg implementation */
-EOLIAN static void
-_efl_ui_widget_part_bg_bg_set(Eo *obj, void *_pd EINA_UNUSED, 
Efl_Canvas_Object *bg)
-{
-   Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
-   Elm_Widget_Smart_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
-
-   if (sd->bg == bg)
-     return;
 
-   efl_del(sd->bg);
-   sd->bg = bg;
-   if (!sd->bg)
-     return;
-
-   efl_canvas_group_member_add(pd->obj, sd->bg);
-   evas_object_stack_below(sd->bg, sd->resize_obj);
-   _smart_reconfigure(sd);
-}
-
-EOLIAN static Efl_Canvas_Object *
-_efl_ui_widget_part_bg_bg_get(Eo *obj, void *_pd EINA_UNUSED)
+Efl_Canvas_Object *
+_efl_ui_widget_bg_get(Elm_Widget *obj)
 {
-   Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
-   Elm_Widget_Smart_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
+   Elm_Widget_Smart_Data *sd = efl_data_scope_get(obj, MY_CLASS);
    Evas_Object *bg_obj = sd->bg;
 
    if (!bg_obj)
      {
-        bg_obj = efl_add(EFL_UI_BG_CLASS, pd->obj);
-        efl_ui_widget_part_bg_set(obj, bg_obj);
+        bg_obj = efl_add(EFL_UI_BG_CLASS, obj);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(bg_obj, NULL);
+        sd->bg = bg_obj;
+        efl_canvas_group_member_add(obj, sd->bg);
+        evas_object_stack_below(sd->bg, sd->resize_obj);
+        _smart_reconfigure(sd);
      }
 
    return bg_obj;
 }
 
+static inline Efl_Canvas_Object *
+efl_ui_widget_part_bg_get(Eo *part_obj)
+{
+   Elm_Part_Data *pd = efl_data_scope_get(part_obj, EFL_UI_WIDGET_PART_CLASS);
+   return _efl_ui_widget_bg_get(pd->obj);
+}
+
 EOLIAN static Eina_Bool
 _efl_ui_widget_part_bg_efl_file_file_set(Eo *obj, void *pd EINA_UNUSED, const 
char *file, const char *key)
 {
diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h
index b37fed5337..abc92795a8 100644
--- a/src/lib/elementary/elm_widget.h
+++ b/src/lib/elementary/elm_widget.h
@@ -751,6 +751,8 @@ EAPI Eina_Bool        
_elm_widget_item_onscreen_is(Elm_Object_Item *item);
 const char*           _elm_widget_accessible_plain_name_get(Evas_Object *obj, 
const char* name);
 const char*           
_elm_widget_item_accessible_plain_name_get(Elm_Object_Item *item, const char* 
name);
 
+Efl_Canvas_Object *   _efl_ui_widget_bg_get(Elm_Widget *obj);
+
 #define ELM_WIDGET_DATA_GET_OR_RETURN(o, ptr, ...)   \
   Elm_Widget_Smart_Data *ptr;                        \
   ptr = efl_data_scope_get(o, ELM_WIDGET_CLASS);  \

-- 


Reply via email to