forked from enlightenment/efl
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.
This commit is contained in:
parent
3c47a4f9f9
commit
8608e8dc70
|
@ -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)
|
||||
|
|
|
@ -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.Ui.Layout.Part_Bg (common) */
|
||||
|
||||
EOLIAN static Efl_Object *
|
||||
_efl_ui_layout_part_bg_efl_object_finalize(Eo *obj, void *_pd EINA_UNUSED)
|
||||
{
|
||||
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);
|
||||
Efl_Ui_Layout_Data *sd;
|
||||
Elm_Part_Data *pd;
|
||||
Eo *bg;
|
||||
|
||||
// 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);
|
||||
obj = efl_finalize(efl_super(obj, EFL_UI_LAYOUT_PART_BG_CLASS));
|
||||
if (!obj) return NULL;
|
||||
|
||||
if (wd->bg == bg)
|
||||
return;
|
||||
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?
|
||||
}
|
||||
|
||||
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_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)
|
||||
{
|
||||
Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
|
||||
|
||||
efl_ui_image_scale_type_set(bg_obj, scale_type);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
return efl_ui_image_scale_type_get(bg_obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
/* Efl.Ui.Layout.Part_Xxx includes */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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; }
|
||||
}
|
||||
|
|
|
@ -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; })
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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); \
|
||||
|
|
Loading…
Reference in New Issue