From b8789e52ae5852a1769830786e8ed8971d05c9c3 Mon Sep 17 00:00:00 2001 From: Sungtaek Hong Date: Mon, 27 Nov 2017 11:55:24 +0900 Subject: [PATCH] efl_ui_bg: add Efl.Gfx.color_get. Summary: since legacy elm_bg_color_set/get is changed to efl_gfx_color_set/get, efl_gfx_color_get also should get color of inner rect. @fix Test Plan: 1) run elementary test. 2) run Bg EO API(Efl.Ui.Bg) 3) set/unset "Bg color" check. 4) observe printed color values. Reviewers: jpeg, woohyun, cedric Differential Revision: https://phab.enlightenment.org/D5429 --- src/bin/elementary/test_bg.c | 11 ++++++--- src/lib/elementary/efl_ui_bg.c | 53 +++++++++++++++++++++++++---------------- src/lib/elementary/efl_ui_bg.eo | 3 ++- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/bin/elementary/test_bg.c b/src/bin/elementary/test_bg.c index 5ebf59f..7ec6fe6 100644 --- a/src/bin/elementary/test_bg.c +++ b/src/bin/elementary/test_bg.c @@ -382,11 +382,16 @@ static void _cb_check_changed_scale_type(void *data, const Efl_Event *ev) { Evas_Object *o_bg = data; + int r, g, b, a; if (efl_ui_check_selected_get(ev->object)) efl_gfx_color_set(o_bg, 255, 128, 128, 255); else efl_gfx_color_set(o_bg, 0, 0, 0, 0); + + efl_gfx_color_get(o_bg, &r, &g, &b, &a); + printf("bg color: %d %d %d %d\n", r, g, b, a); + fflush(stdout); } void @@ -431,7 +436,7 @@ test_bg_scale_type(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e efl_gfx_size_hint_weight_set(efl_added, EFL_GFX_SIZE_HINT_EXPAND, 0.0), efl_event_callback_add(efl_added, EFL_UI_RADIO_EVENT_CHANGED, _cb_radio_changed_scale_type, o_bg), efl_pack(hbox, efl_added)); - + rd = efl_add(EFL_UI_RADIO_CLASS, hbox, efl_ui_radio_state_value_set(efl_added, EFL_UI_IMAGE_SCALE_TYPE_FIT_INSIDE), efl_ui_radio_group_add(efl_added, rdg), @@ -440,7 +445,7 @@ test_bg_scale_type(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e efl_event_callback_add(efl_added, EFL_UI_RADIO_EVENT_CHANGED, _cb_radio_changed_scale_type, o_bg), efl_pack(hbox, efl_added)); - + rd = efl_add(EFL_UI_RADIO_CLASS, hbox, efl_ui_radio_state_value_set(efl_added, EFL_UI_IMAGE_SCALE_TYPE_FIT_OUTSIDE), efl_ui_radio_group_add(efl_added, rdg), @@ -448,7 +453,7 @@ test_bg_scale_type(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e efl_gfx_size_hint_weight_set(efl_added, EFL_GFX_SIZE_HINT_EXPAND, 0.0), efl_event_callback_add(efl_added, EFL_UI_RADIO_EVENT_CHANGED, _cb_radio_changed_scale_type, o_bg), efl_pack(hbox, efl_added)); - + rd = efl_add(EFL_UI_RADIO_CLASS, hbox, efl_ui_radio_state_value_set(efl_added, EFL_UI_IMAGE_SCALE_TYPE_NONE), efl_ui_radio_group_add(efl_added, rdg), diff --git a/src/lib/elementary/efl_ui_bg.c b/src/lib/elementary/efl_ui_bg.c index a3838b7..3a38c4a 100644 --- a/src/lib/elementary/efl_ui_bg.c +++ b/src/lib/elementary/efl_ui_bg.c @@ -98,6 +98,9 @@ EOLIAN static void _efl_ui_bg_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Bg_Data *priv) { + priv->rect = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_color_set(priv->rect, 0, 0, 0, 0); + efl_canvas_group_add(efl_super(obj, MY_CLASS)); elm_widget_sub_object_parent_add(obj); elm_widget_can_focus_set(obj, EINA_FALSE); @@ -108,6 +111,7 @@ _efl_ui_bg_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Bg_Data *priv) if (!elm_layout_theme_set(obj, "bg", "base", elm_widget_style_get(obj))) CRI("Failed to set layout!"); + elm_layout_content_set(obj, "elm.swallow.rectangle", priv->rect); } EAPI Evas_Object * @@ -129,6 +133,20 @@ _efl_ui_bg_efl_object_constructor(Eo *obj, Efl_Ui_Bg_Data *_pd EINA_UNUSED) return obj; } +/* FIXME: Efl.Canvas.group_member_add in Elm.Widget sets child's colors as the same + * with that of obj. The color of resize_obj of Bg should not be changed + * because actual color is the color of rectangle in resize_obj. + */ +EOLIAN static void +_efl_ui_bg_efl_canvas_group_group_member_add(Eo *obj, Efl_Ui_Bg_Data *_pd EINA_UNUSED, Evas_Object *child) +{ + efl_canvas_group_member_add(efl_super(obj, MY_CLASS), child); + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + + if (wd->resize_obj == child) + evas_object_color_set(child, 255, 255, 255, 255); +} + EOLIAN static Eina_Bool _efl_ui_bg_efl_file_file_set(Eo *obj, Efl_Ui_Bg_Data *sd, const char *file, const char *group) { @@ -265,31 +283,20 @@ elm_bg_color_set(Evas_Object *obj, int g, int b) { + int a = 255; EFL_UI_BG_CHECK(obj); - efl_gfx_color_set(obj, r, g, b, 255); -} - -EOLIAN static void -_efl_ui_bg_efl_gfx_color_set(Eo *obj, Efl_Ui_Bg_Data *sd, int r, int g, int b, int a) -{ - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); // reset color if ((r == -1) && (g == -1) && (b == -1)) - { - ELM_SAFE_FREE(sd->rect, evas_object_del); - return; - } - - if (!sd->rect) - { - sd->rect = evas_object_rectangle_add - (evas_object_evas_get(wd->resize_obj)); - efl_gfx_visible_set(sd->rect, EINA_TRUE); - elm_layout_content_set(obj, "elm.swallow.rectangle", sd->rect); - elm_layout_sizing_eval(obj); - } + { + r = g = b = a = 0; + } + efl_gfx_color_set(obj, r, g, b, a); +} +EOLIAN static void +_efl_ui_bg_efl_gfx_color_set(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd, int r, int g, int b, int a) +{ evas_object_color_set(sd->rect, r, g, b, a); } @@ -303,6 +310,12 @@ elm_bg_color_get(const Evas_Object *obj, efl_gfx_color_get((Eo *) obj, r, g, b, NULL); } +EOLIAN static void +_efl_ui_bg_efl_gfx_color_get(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd, int *r, int *g, int *b, int *a) +{ + evas_object_color_get(sd->rect, r, g, b, a); +} + EAPI void elm_bg_load_size_set(Evas_Object *obj, int w, int h) { diff --git a/src/lib/elementary/efl_ui_bg.eo b/src/lib/elementary/efl_ui_bg.eo index 280fe4d..d6976da 100644 --- a/src/lib/elementary/efl_ui_bg.eo +++ b/src/lib/elementary/efl_ui_bg.eo @@ -10,8 +10,9 @@ class Efl.Ui.Bg (Efl.Ui.Layout, Efl.Ui.Image) implements { class.constructor; Efl.Object.constructor; + Efl.Canvas.Group.group_member_add; Efl.File.file { get; set; } - Efl.Gfx.color { set; } + Efl.Gfx.color { get; set; } Efl.Ui.Image.scale_type { get; set; } } } -- 2.7.4