efl_ui_bg: add Efl.Gfx.color_get.
authorSungtaek Hong <sth253.hong@samsung.com>
Mon, 27 Nov 2017 02:55:24 +0000 (11:55 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Mon, 27 Nov 2017 02:55:24 +0000 (11:55 +0900)
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
src/lib/elementary/efl_ui_bg.c
src/lib/elementary/efl_ui_bg.eo

index 5ebf59f..7ec6fe6 100644 (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),
index a3838b7..3a38c4a 100644 (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)
 {
index 280fe4d..d6976da 100644 (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; }
    }
 }