summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2017-11-24 15:17:05 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2017-11-24 16:12:31 +0900
commit8608e8dc7047bfe074a71e638bc44b0eec198827 (patch)
treebe21be37d6b0ccfbd92c9f76fdbf9d68c2d77d5a
parent3c47a4f9f9ef7705992a61148f1f53311bcade49 (diff)
downloadefl-8608e8dc7047bfe074a71e638bc44b0eec198827.tar.gz
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.
-rw-r--r--src/bin/elementary/test.c2
-rw-r--r--src/lib/elementary/efl_ui_layout.c104
-rw-r--r--src/lib/elementary/efl_ui_layout_part_bg.eo7
-rw-r--r--src/lib/elementary/efl_ui_widget_part_bg.eo15
-rw-r--r--src/lib/elementary/elm_part_helper.h26
-rw-r--r--src/lib/elementary/elm_widget.c40
-rw-r--r--src/lib/elementary/elm_widget.h2
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); \