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
This commit is contained in:
Sungtaek Hong 2017-11-27 11:55:24 +09:00 committed by Jean-Philippe Andre
parent bed67ef0d0
commit b8789e52ae
3 changed files with 43 additions and 24 deletions

View File

@ -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),

View File

@ -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)
{

View File

@ -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; }
}
}