jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b8789e52ae5852a1769830786e8ed8971d05c9c3

commit b8789e52ae5852a1769830786e8ed8971d05c9c3
Author: Sungtaek Hong <[email protected]>
Date:   Mon Nov 27 11:55:24 2017 +0900

    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 5ebf59f8e8..7ec6fe615a 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 a3838b71d4..3a38c4a284 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 280fe4d276..d6976da340 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; }
    }
 }

-- 


Reply via email to