jpeg pushed a commit to branch master.

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

commit ebff5e8639851ab9d80fa6ff36f20f08952c015e
Author: Sungtaek Hong <[email protected]>
Date:   Tue Sep 26 11:46:11 2017 +0900

    elm_bg: rename elm_bg to Efl.Ui.Bg
    
    Summary:
    elm_bg was supposed to be used only in legacy,
    but since we need a common object to be used as a background of widgets,
    it is now renamed as efl_ui_bg and supports EO APIs.
    
    Reviewers: cedric, jpeg, woohyun
    
    Differential Revision: https://phab.enlightenment.org/D5147
---
 po/POTFILES.in                               |   2 +-
 src/Makefile_Elementary.am                   |   6 +-
 src/bin/elementary/test.c                    |   2 +
 src/bin/elementary/test_bg.c                 | 108 ++++++++++++++++
 src/lib/elementary/{elm_bg.c => efl_ui_bg.c} | 182 +++++++++++++++++----------
 src/lib/elementary/efl_ui_bg.eo              |  17 +++
 src/lib/elementary/efl_ui_bg_eo.h            |   1 +
 src/lib/elementary/efl_ui_bg_private.h       |  69 ++++++++++
 src/lib/elementary/efl_ui_win.c              |   2 +-
 src/lib/elementary/elm_bg.eo                 | 101 ---------------
 src/lib/elementary/elm_bg.h                  |   2 +-
 src/lib/elementary/elm_bg_legacy.h           |  72 ++++++++++-
 12 files changed, 391 insertions(+), 173 deletions(-)

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 187aaa3d07..5abceaabff 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -103,7 +103,7 @@ src/lib/elementary/elc_popup.c
 src/lib/elementary/elc_scrolled_entry.c
 src/lib/elementary/elm_access.c
 src/lib/elementary/elm_actionslider.c
-src/lib/elementary/elm_bg.c
+src/lib/elementary/efl_ui_bg.c
 src/lib/elementary/elm_box.c
 src/lib/elementary/elm_bubble.c
 src/lib/elementary/efl_ui_button.c
diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am
index 269b7104dc..60b2b7fac7 100644
--- a/src/Makefile_Elementary.am
+++ b/src/Makefile_Elementary.am
@@ -4,7 +4,7 @@
 elm_public_eolian_files = \
        lib/elementary/elm_atspi_bridge.eo \
        lib/elementary/elm_atspi_app_object.eo \
-       lib/elementary/elm_bg.eo \
+       lib/elementary/efl_ui_bg.eo \
        lib/elementary/efl_ui_button.eo \
        lib/elementary/elm_calendar.eo \
        lib/elementary/efl_ui_check.eo \
@@ -345,7 +345,7 @@ includesub_HEADERS = \
        lib/elementary/elm_atspi_app_object.h \
        lib/elementary/elm_authors.h \
        lib/elementary/elm_bg.h \
-       lib/elementary/elm_bg_eo.h \
+       lib/elementary/efl_ui_bg_eo.h \
        lib/elementary/elm_bg_legacy.h \
        lib/elementary/elm_box.h \
        lib/elementary/elm_box_legacy.h \
@@ -569,7 +569,7 @@ lib_elementary_libelementary_la_SOURCES = \
        lib/elementary/elm_actionslider.c \
        lib/elementary/elm_atspi_app_object.c \
        lib/elementary/elm_atspi_bridge.c \
-       lib/elementary/elm_bg.c \
+       lib/elementary/efl_ui_bg.c \
        lib/elementary/elm_box.c \
        lib/elementary/elm_bubble.c \
        lib/elementary/efl_ui_button.c \
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index 8220261035..6652716eb3 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -17,6 +17,7 @@ void test_bg_plain(void *data, Evas_Object *obj, void 
*event_info);
 void test_bg_image(void *data, Evas_Object *obj, void *event_info);
 void test_bg_options(void *data, Evas_Object *obj, void *event_info);
 void test_bg_window(void *data, Evas_Object *obj, void *event_info);
+void test_bg_scale_type(void *data, Evas_Object *obj, void *event_info);
 void test_icon(void *data, Evas_Object *obj, void *event_info);
 void test_icon_transparent(void *data, Evas_Object *obj, void *event_info);
 void test_icon_standard(void *data, Evas_Object *obj, void *event_info);
@@ -664,6 +665,7 @@ add_tests:
    ADD_TEST(NULL, "Window / Background", "Bg Image", test_bg_image);
    ADD_TEST(NULL, "Window / Background", "Bg Options", test_bg_options);
    ADD_TEST(NULL, "Window / Background", "Bg EOAPI (Efl.Ui.Win)", 
test_bg_window);
+   ADD_TEST(NULL, "Window / Background", "Bg EOAPI (Efl.Ui.Bg)", 
test_bg_scale_type);
    ADD_TEST(NULL, "Window / Background", "Window States", test_win_state);
    ADD_TEST(NULL, "Window / Background", "Window States 2", test_win_state2);
    ADD_TEST(NULL, "Window / Background", "Inwin", test_inwin);
diff --git a/src/bin/elementary/test_bg.c b/src/bin/elementary/test_bg.c
index 8402a59509..ba64598505 100644
--- a/src/bin/elementary/test_bg.c
+++ b/src/bin/elementary/test_bg.c
@@ -366,3 +366,111 @@ test_bg_window(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
 
    efl_gfx_size_set(win, EINA_SIZE2D(300, 200));
 }
+
+static void
+_cb_radio_changed_scale_type(void *data, const Efl_Event *ev)
+{
+   Evas_Object *o_bg = data;
+
+   efl_ui_image_scale_type_set(o_bg, efl_ui_radio_value_get(ev->object));
+}
+
+static void
+_cb_check_changed_scale_type(void *data, const Efl_Event *ev)
+{
+   Evas_Object *o_bg = data;
+
+   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);
+}
+
+void
+test_bg_scale_type(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Evas_Object *win;
+   Evas_Object *box, *hbox, *o_bg;
+   Evas_Object *rd, *rdg;
+   char buf[PATH_MAX];
+
+   win = efl_add(EFL_UI_WIN_CLASS, NULL,
+                 efl_text_set(efl_added, "Bg EOAPI (Efl.Ui.Bg)"),
+                 efl_ui_win_autodel_set(efl_added, EINA_TRUE),
+                 efl_ui_win_alpha_set(efl_added, EINA_FALSE));
+
+   efl_add(EFL_UI_BG_CLASS, win,
+           efl_gfx_size_hint_weight_set(efl_added, EFL_GFX_SIZE_HINT_EXPAND, 
EFL_GFX_SIZE_HINT_EXPAND),
+           efl_content_set(win, efl_added));
+
+   box = efl_add(EFL_UI_BOX_CLASS, win,
+                 efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL),
+                 efl_gfx_size_hint_weight_set(efl_added, 
EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND),
+                 efl_content_set(win, efl_added));
+
+   snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", 
elm_app_data_dir_get());
+
+   o_bg = efl_add(EFL_UI_BG_CLASS, box,
+                  efl_file_set(efl_added, buf, NULL),
+                  efl_gfx_size_hint_weight_set(efl_added, 
EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND),
+                  efl_gfx_size_hint_align_set(efl_added, 
EFL_GFX_SIZE_HINT_FILL, EFL_GFX_SIZE_HINT_FILL),
+                  efl_pack(box, efl_added));
+
+   hbox = efl_add(EFL_UI_BOX_CLASS, box,
+                  efl_ui_direction_set(efl_added, EFL_UI_DIR_HORIZONTAL),
+                  efl_gfx_size_hint_weight_set(efl_added, 
EFL_GFX_SIZE_HINT_EXPAND, 0.0),
+                  efl_gfx_size_hint_align_set(efl_added, 
EFL_GFX_SIZE_HINT_FILL, EFL_GFX_SIZE_HINT_FILL),
+                  efl_pack(box, efl_added));
+
+   rdg = rd = efl_add(EFL_UI_RADIO_CLASS, hbox,
+                efl_ui_radio_state_value_set(efl_added, 
EFL_UI_IMAGE_SCALE_TYPE_FILL),
+                efl_text_set(efl_added, "Fill"),
+                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),
+                efl_text_set(efl_added, "Fit Inside"),
+                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_OUTSIDE),
+                efl_ui_radio_group_add(efl_added, rdg),
+                efl_text_set(efl_added, "Fit Outside"),
+                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),
+                efl_text_set(efl_added, "None"),
+                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_TILE),
+                efl_ui_radio_group_add(efl_added, rdg),
+                efl_text_set(efl_added, "Tile"),
+                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));
+
+   efl_ui_radio_value_set(rdg, EFL_UI_IMAGE_SCALE_TYPE_FILL);
+
+   efl_add(EFL_UI_CHECK_CLASS, hbox,
+                efl_text_set(efl_added, "Bg Color"),
+                efl_gfx_size_hint_weight_set(efl_added, 
EFL_GFX_SIZE_HINT_EXPAND, 0.0),
+                efl_event_callback_add(efl_added, EFL_UI_CHECK_EVENT_CHANGED, 
_cb_check_changed_scale_type, o_bg),
+                efl_pack(hbox, efl_added));
+
+   efl_gfx_size_set(win, EINA_SIZE2D(300, 200));
+}
+
+
diff --git a/src/lib/elementary/elm_bg.c b/src/lib/elementary/efl_ui_bg.c
similarity index 60%
rename from src/lib/elementary/elm_bg.c
rename to src/lib/elementary/efl_ui_bg.c
index e0e2c48062..d12b5fd10b 100644
--- a/src/lib/elementary/elm_bg.c
+++ b/src/lib/elementary/efl_ui_bg.c
@@ -7,13 +7,13 @@
 
 #include <Elementary.h>
 #include "elm_priv.h"
-#include "elm_widget_bg.h"
+#include "efl_ui_bg_private.h"
 #include "elm_widget_layout.h"
 
-#define MY_CLASS ELM_BG_CLASS
-#define MY_CLASS_PFX elm_bg
+#define MY_CLASS EFL_UI_BG_CLASS
+#define MY_CLASS_PFX efl_ui_bg
 
-#define MY_CLASS_NAME "Elm_Bg"
+#define MY_CLASS_NAME "Efl.Ui.Bg"
 #define MY_CLASS_NAME_LEGACY "elm_bg"
 
 static const Elm_Layout_Part_Alias_Description _content_aliases[] =
@@ -23,7 +23,7 @@ static const Elm_Layout_Part_Alias_Description 
_content_aliases[] =
 };
 
 EOLIAN static void
-_elm_bg_elm_layout_sizing_eval(Eo *obj, Elm_Bg_Data *sd)
+_efl_ui_bg_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Bg_Data *sd)
 {
    Evas_Coord iw = 0, ih = 0, mw = -1, mh = -1;
    Evas_Coord bx = 0, by = 0, bw = 0, bh = 0;
@@ -43,40 +43,44 @@ _elm_bg_elm_layout_sizing_eval(Eo *obj, Elm_Bg_Data *sd)
    evas_object_geometry_get
      (wd->resize_obj, &bx, &by, &bw, &bh);
 
-   switch (sd->option)
+   switch (sd->scale_type)
      {
-      case ELM_BG_OPTION_CENTER:
-        fw = mw = iw;
-        fh = mh = ih;
-        break;
-
-      case ELM_BG_OPTION_SCALE:
-        fw = bw;
-        fh = ((ih * fw) / iw);
-        if (fh < bh)
-          {
-             fh = bh;
-             fw = ((iw * fh) / ih);
-          }
-        fx = ((bw - fw) / 2);
-        fy = ((bh - fh) / 2);
-        break;
-
-      case ELM_BG_OPTION_TILE:
-        fw = iw;
-        fh = ih;
-        break;
-
-      case ELM_BG_OPTION_STRETCH:
-      default:
-        fw = bw;
-        fh = bh;
-        break;
+       case EFL_UI_IMAGE_SCALE_TYPE_NONE:
+         fw = mw = iw;
+         fh = mh = ih;
+         break;
+       case EFL_UI_IMAGE_SCALE_TYPE_FILL:
+         fw = bw;
+         fh = bh;
+         break;
+       case EFL_UI_IMAGE_SCALE_TYPE_FIT_INSIDE:
+         mw = fw = bw;
+         mh = fh = ((ih * fw) / iw);
+         if (fh > bh)
+           {
+              mh = fh = bh;
+              mw = fw = ((iw * fh) / ih);
+           }
+         break;
+       case EFL_UI_IMAGE_SCALE_TYPE_FIT_OUTSIDE:
+         fw = bw;
+         fh = ((ih * fw) / iw);
+         if (fh < bh)
+           {
+              fh = bh;
+              fw = ((iw * fh) / ih);
+           }
+         fx = ((bw - fw) / 2);
+         fy = ((bh - fh) / 2);
+         break;
+       case EFL_UI_IMAGE_SCALE_TYPE_TILE:
+         fw = iw;
+         fh = ih;
+         break;
      }
 
    evas_object_image_fill_set(sd->img, fx, fy, fw, fh);
 
-   evas_object_size_hint_min_set(sd->img, mw, mh);
    evas_object_size_hint_max_set(sd->img, mw, mh);
 }
 
@@ -90,14 +94,14 @@ _on_resize(void *data,
 }
 
 EOLIAN static void
-_elm_bg_efl_canvas_group_group_add(Eo *obj, Elm_Bg_Data *priv)
+_efl_ui_bg_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Bg_Data *priv)
 {
 
    efl_canvas_group_add(efl_super(obj, MY_CLASS));
    elm_widget_sub_object_parent_add(obj);
    elm_widget_can_focus_set(obj, EINA_FALSE);
 
-   priv->option = ELM_BG_OPTION_SCALE;
+   priv->scale_type = EFL_UI_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
 
    evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _on_resize, obj);
 
@@ -113,7 +117,7 @@ elm_bg_add(Evas_Object *parent)
 }
 
 EOLIAN static Eo *
-_elm_bg_efl_object_constructor(Eo *obj, Elm_Bg_Data *_pd EINA_UNUSED)
+_efl_ui_bg_efl_object_constructor(Eo *obj, Efl_Ui_Bg_Data *_pd EINA_UNUSED)
 {
    elm_interface_atspi_accessible_type_set(obj, ELM_ATSPI_TYPE_DISABLED);
    obj = efl_constructor(efl_super(obj, MY_CLASS));
@@ -123,7 +127,7 @@ _elm_bg_efl_object_constructor(Eo *obj, Elm_Bg_Data *_pd 
EINA_UNUSED)
 }
 
 EOLIAN static Eina_Bool
-_elm_bg_efl_file_file_set(Eo *obj, Elm_Bg_Data *sd, const char *file, const 
char *group)
+_efl_ui_bg_efl_file_file_set(Eo *obj, Efl_Ui_Bg_Data *sd, const char *file, 
const char *group)
 {
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
 
@@ -178,24 +182,78 @@ _elm_bg_efl_file_file_set(Eo *obj, Elm_Bg_Data *sd, const 
char *file, const char
 }
 
 EOLIAN static void
-_elm_bg_efl_file_file_get(Eo *obj EINA_UNUSED, Elm_Bg_Data *sd, const char 
**file, const char **group)
+_efl_ui_bg_efl_file_file_get(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd, const 
char **file, const char **group)
 {
    if (file) *file = sd->file;
    if (group) *group = sd->group;
 }
 
+EAPI void
+elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option)
+{
+  EFL_UI_BG_DATA_GET(obj, sd);
+  switch (option)
+    {
+      case ELM_BG_OPTION_CENTER:
+        sd->scale_type = EFL_UI_IMAGE_SCALE_TYPE_NONE;
+        break;
+      case ELM_BG_OPTION_SCALE:
+        sd->scale_type = EFL_UI_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
+        break;
+      case ELM_BG_OPTION_TILE:
+        sd->scale_type = EFL_UI_IMAGE_SCALE_TYPE_TILE;
+        break;
+      case ELM_BG_OPTION_STRETCH:
+        sd->scale_type = EFL_UI_IMAGE_SCALE_TYPE_FILL;
+        break;
+      case ELM_BG_OPTION_LAST:
+      default:
+        sd->scale_type = EFL_UI_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
+    }
+
+  elm_layout_sizing_eval(obj);
+}
+
+EAPI Elm_Bg_Option
+elm_bg_option_get(const Evas_Object *obj)
+{
+  Elm_Bg_Option option = ELM_BG_OPTION_LAST;
+  EFL_UI_BG_DATA_GET(obj, sd);
+
+  switch (sd->scale_type)
+  {
+    case EFL_UI_IMAGE_SCALE_TYPE_NONE:
+      option = ELM_BG_OPTION_CENTER;
+      break;
+    case EFL_UI_IMAGE_SCALE_TYPE_FIT_OUTSIDE:
+      option = ELM_BG_OPTION_SCALE;
+      break;
+    case EFL_UI_IMAGE_SCALE_TYPE_TILE:
+      option = ELM_BG_OPTION_TILE;
+      break;
+    case EFL_UI_IMAGE_SCALE_TYPE_FILL:
+      option = ELM_BG_OPTION_STRETCH;
+      break;
+    case EFL_UI_IMAGE_SCALE_TYPE_FIT_INSIDE:
+    default:
+      ERR("Scale type %d cannot be converted to Elm_Bg_Option", 
sd->scale_type);
+      break;
+  }
+  return option;
+}
+
 EOLIAN static void
-_elm_bg_option_set(Eo *obj, Elm_Bg_Data *sd, Elm_Bg_Option option)
+_efl_ui_bg_efl_ui_image_scale_type_set(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data 
*sd, Efl_Ui_Image_Scale_Type scale_type)
 {
-   sd->option = option;
+  sd->scale_type = scale_type;
 
-   elm_layout_sizing_eval(obj);
+  elm_layout_sizing_eval(obj);
 }
 
-EOLIAN static Elm_Bg_Option
-_elm_bg_option_get(Eo *obj EINA_UNUSED, Elm_Bg_Data *sd)
+EOLIAN static Efl_Ui_Image_Scale_Type
+_efl_ui_bg_efl_ui_image_scale_type_get(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd)
 {
-   return sd->option;
+   return sd->scale_type;
 }
 
 EAPI void
@@ -204,12 +262,12 @@ elm_bg_color_set(Evas_Object *obj,
                  int g,
                  int b)
 {
-   ELM_BG_CHECK(obj);
-   elm_obj_bg_color_set(obj, r, g, b, 255);
+   EFL_UI_BG_CHECK(obj);
+   efl_gfx_color_set(obj, r, g, b, 255);
 }
 
 EOLIAN static void
-_elm_bg_color_set(Eo *obj, Elm_Bg_Data *sd, int r, int g, int b, int a)
+_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);
 
@@ -224,9 +282,8 @@ _elm_bg_color_set(Eo *obj, Elm_Bg_Data *sd, int r, int g, 
int b, int a)
      {
         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);
      }
 
@@ -239,20 +296,15 @@ elm_bg_color_get(const Evas_Object *obj,
                  int *g,
                  int *b)
 {
-   ELM_BG_CHECK(obj);
-   elm_obj_bg_color_get((Eo *) obj, r, g, b, NULL);
-}
-
-EOLIAN static void
-_elm_bg_color_get(Eo *obj EINA_UNUSED, Elm_Bg_Data *sd, int *r, int *g, int 
*b, int *a)
-{
-   evas_object_color_get(sd->rect, r, g, b, a);
+   EFL_UI_BG_CHECK(obj);
+   efl_gfx_color_get((Eo *) obj, r, g, b, NULL);
 }
 
-EOLIAN static void
-_elm_bg_load_size_set(Eo *obj EINA_UNUSED, Elm_Bg_Data *sd, Evas_Coord w, 
Evas_Coord h)
+EAPI void
+elm_bg_load_size_set(Evas_Object *obj, int w, int h)
 {
    const char *p;
+   EFL_UI_BG_DATA_GET(obj, sd);
 
    sd->load_opts.w = w;
    sd->load_opts.h = h;
@@ -263,7 +315,7 @@ _elm_bg_load_size_set(Eo *obj EINA_UNUSED, Elm_Bg_Data *sd, 
Evas_Coord w, Evas_C
 }
 
 static void
-_elm_bg_class_constructor(Efl_Class *klass)
+_efl_ui_bg_class_constructor(Efl_Class *klass)
 {
    evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
 }
@@ -284,9 +336,9 @@ elm_bg_file_get(const Eo *obj, const char **file, const 
char **group)
 
 ELM_LAYOUT_CONTENT_ALIASES_IMPLEMENT(MY_CLASS_PFX)
 
-#define ELM_BG_EXTRA_OPS \
+#define EFL_UI_BG_EXTRA_OPS \
    ELM_LAYOUT_CONTENT_ALIASES_OPS(MY_CLASS_PFX), \
-   ELM_LAYOUT_SIZING_EVAL_OPS(elm_bg), \
-   EFL_CANVAS_GROUP_ADD_OPS(elm_bg)
+   ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_bg), \
+   EFL_CANVAS_GROUP_ADD_OPS(efl_ui_bg)
 
-#include "elm_bg.eo.c"
+#include "efl_ui_bg.eo.c"
diff --git a/src/lib/elementary/efl_ui_bg.eo b/src/lib/elementary/efl_ui_bg.eo
new file mode 100644
index 0000000000..280fe4d276
--- /dev/null
+++ b/src/lib/elementary/efl_ui_bg.eo
@@ -0,0 +1,17 @@
+class Efl.Ui.Bg (Efl.Ui.Layout, Efl.Ui.Image)
+{
+   [[The bg (background) widget is used for setting (solid) background 
decorations
+
+   to a window (unless it has transparency enabled) or to any container 
object. It
+   works just like an image, but has some properties useful to a background, 
like
+   setting it to tiled, centered, scaled or stretched.
+   ]]
+   legacy_prefix: elm_bg;
+   implements {
+      class.constructor;
+      Efl.Object.constructor;
+      Efl.File.file { get; set; }
+      Efl.Gfx.color { set; }
+      Efl.Ui.Image.scale_type { get; set; }
+   }
+}
diff --git a/src/lib/elementary/efl_ui_bg_eo.h 
b/src/lib/elementary/efl_ui_bg_eo.h
new file mode 100644
index 0000000000..135630eeb4
--- /dev/null
+++ b/src/lib/elementary/efl_ui_bg_eo.h
@@ -0,0 +1 @@
+#include "efl_ui_bg.eo.h"
\ No newline at end of file
diff --git a/src/lib/elementary/efl_ui_bg_private.h 
b/src/lib/elementary/efl_ui_bg_private.h
new file mode 100644
index 0000000000..311fd44269
--- /dev/null
+++ b/src/lib/elementary/efl_ui_bg_private.h
@@ -0,0 +1,69 @@
+#ifndef ELM_WIDGET_BG_H
+#define ELM_WIDGET_BG_H
+
+#include "Elementary.h"
+
+/* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
+ * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
+ * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
+ * IT AT RUNTIME.
+ */
+
+/**
+ * @addtogroup Widget
+ * @{
+ *
+ * @section elm-bg-class The Elementary Bg Class
+ *
+ * Elementary, besides having the @ref Bg widget, exposes its
+ * foundation -- the Elementary Bg Class -- in order to create other
+ * widgets which are a bg with some more logic on top.
+ */
+
+/**
+ * Base layout smart data extended with bg instance data.
+ */
+typedef struct _Efl_Ui_Bg_Data Efl_Ui_Bg_Data;
+struct _Efl_Ui_Bg_Data
+{
+   Evas_Object          *rect; /*<< Used for elm_bg_color_set(): 
elm.swallow.rectangle */
+   Evas_Object          *img; /*<< Used for elm_bg_file_set(): 
elm.swallow.content */
+   const char           *file, *group;  /*<< path to file and group name to 
give life to "img": elm.swallow.background */
+   Efl_Ui_Image_Scale_Type scale_type;
+   
+   struct
+     {
+        Evas_Coord w, h;
+     } load_opts;
+};
+
+/**
+ * @}
+ */
+
+#define EFL_UI_BG_DATA_GET(o, sd) \
+Efl_Ui_Bg_Data * sd = efl_data_scope_get(o, EFL_UI_BG_CLASS)
+
+#define EFL_UI_BG_DATA_GET_OR_RETURN(o, ptr)            \
+  EFL_UI_BG_DATA_GET(o, ptr);                           \
+  if (EINA_UNLIKELY(!ptr))                           \
+    {                                                \
+       CRI("No widget data for object %p (%s)",      \
+           o, evas_object_type_get(o));              \
+       return;                                       \
+    }
+
+#define EFL_UI_BG_DATA_GET_OR_RETURN_VAL(o, ptr, val)   \
+  EFL_UI_BG_DATA_GET(o, ptr);                           \
+  if (EINA_UNLIKELY(!ptr))                           \
+    {                                                \
+       CRI("No widget data for object %p (%s)",      \
+           o, evas_object_type_get(o));              \
+       return val;                                   \
+    }
+
+#define EFL_UI_BG_CHECK(obj)                              \
+  if (EINA_UNLIKELY(!efl_isa((obj), EFL_UI_BG_CLASS))) \
+    return
+
+#endif
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index bdf94c1e36..0d6731c123 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -6911,7 +6911,7 @@ _elm_win_standard_init(Eo *obj)
         /* Legacy theme compatibility */
         DBG("Detected legacy theme used for elm_bg. Swallowing object.");
         sd->csd.need_bg_solid = EINA_FALSE;
-        _elm_win_bg_set(sd, efl_add(ELM_BG_CLASS, obj));
+        _elm_win_bg_set(sd, efl_add(EFL_UI_BG_CLASS, obj));
      }
 
    _elm_win_frame_style_update(sd, 0, 1);
diff --git a/src/lib/elementary/elm_bg.eo b/src/lib/elementary/elm_bg.eo
deleted file mode 100644
index 0714299002..0000000000
--- a/src/lib/elementary/elm_bg.eo
+++ /dev/null
@@ -1,101 +0,0 @@
-enum Elm.Bg.Option
-{
-   [[Identifiers on how a background widget is to display its image
-
-   -- if it was set to use an image file.
-
-     See also @Elm.Bg.option.set, @Elm.Bg.option.get.
-   ]]
-  center, [[Center the background image.]]
-  scale, [[Scale the background image, retaining aspect ratio (default).]]
-  stretch, [[Stretch the background image to fill the widget's area.]]
-  tile, [[Tile background image at its original size.]]
-  last  [[Sentinel value to indicate last enum field during iteration. Also 
used to indicate errors]]
-}
-
-class Elm.Bg (Efl.Ui.Layout, Efl.File)
-{
-   [[The bg (background) widget is used for setting (solid) background 
decorations
-
-   to a window (unless it has transparency enabled) or to any container 
object. It
-   works just like an image, but has some properties useful to a background, 
like
-   setting it to tiled, centered, scaled or stretched.
-   ]]
-   legacy_prefix: elm_bg;
-   eo_prefix: elm_obj_bg;
-   methods {
-      @property option {
-         [[The mode of display for a given background widget's image]]
-         set {
-            [[This sets how the background widget will display its image. This
-              will only work if the @Efl.File.file.set was previously called 
with
-              an image file on $obj. The image can be display tiled, scaled,
-              centered or stretched. @Elm.Bg.Option.scale by default.
-            ]]
-         }
-         get {
-         }
-         values {
-            option: Elm.Bg.Option; [[The desired background option(See 
@Elm.Bg.Option)]]
-         }
-      }
-      @property color {
-         [[The color on a given background widget]]
-         set {
-            [[This sets the color used for the background rectangle, in RGB
-              format. Each color component's range is from 0 to 255.
-
-              Note: You probably only want to use this function if you haven't
-              previously called @Efl.File.file.set, so that you just want a 
solid
-              color background.
-
-              Note: You can reset the color by setting $r, $g, $b as -1, -1, 
-1.
-            ]]
-            legacy: null; /* legacy doesn't have 'a' param */
-         }
-         get {
-            [[Note: Use $null pointers on the file components you're not
-              interested in: they'll be ignored by the function.
-            ]]
-            legacy: null; /* legacy doesn't have 'a' param */
-
-         }
-         values {
-            r: int; [[The red color component's value]]
-            g: int; [[The green color component's value]]
-            b: int; [[The blue color component's value]]
-            a: int; [[The alpha color component's value]]
-         }
-      }
-      @property load_size {
-         set {
-            [[Set the size of the pixmap representation of the image set on a
-              given background widget.
-
-              Warning: This function just makes sense if an image file was set 
on
-              $obj, with @Efl.File.file.set
-
-              This function sets a new size for pixmap representation of the
-              given bg image. It allows for the image to be loaded already in 
the
-              specified size, reducing the memory usage and load time (for
-              example, when loading a big image file with its load size set to 
a
-              smaller size)
-
-              Note: This is just a hint for the underlying system. The real 
size
-              of the pixmap may differ depending on the type of image being
-              loaded, being bigger than requested.
-
-            ]]
-         }
-         values {
-            w: int; [[The new width of the image pixmap representation.]]
-            h: int; [[The new height of the image pixmap representation.]]
-         }
-      }
-   }
-   implements {
-      class.constructor;
-      Efl.Object.constructor;
-      Efl.File.file { get; set; }
-   }
-}
diff --git a/src/lib/elementary/elm_bg.h b/src/lib/elementary/elm_bg.h
index 0a93268f77..c11c342d90 100644
--- a/src/lib/elementary/elm_bg.h
+++ b/src/lib/elementary/elm_bg.h
@@ -30,7 +30,7 @@
  */
 
 #ifdef EFL_EO_API_SUPPORT
-#include "elm_bg_eo.h"
+#include "efl_ui_bg_eo.h"
 #endif
 #ifndef EFL_NOLEGACY_API_SUPPORT
 #include "elm_bg_legacy.h"
diff --git a/src/lib/elementary/elm_bg_legacy.h 
b/src/lib/elementary/elm_bg_legacy.h
index a46cc7bcd8..33a1a5211d 100644
--- a/src/lib/elementary/elm_bg_legacy.h
+++ b/src/lib/elementary/elm_bg_legacy.h
@@ -1,4 +1,23 @@
 /**
+ * @brief Identifiers on how a background widget is to display its image
+ *
+ * -- if it was set to use an image file.
+ *
+ * @ingroup Elm_Bg
+ */
+ typedef enum
+ {
+   ELM_BG_OPTION_CENTER = 0, /**< Center the background image. */
+   ELM_BG_OPTION_SCALE, /**< Scale the background image, retaining aspect ratio
+                         * (default). */
+   ELM_BG_OPTION_STRETCH, /**< Stretch the background image to fill the 
widget's
+                           * area. */
+   ELM_BG_OPTION_TILE, /**< Tile background image at its original size. */
+   ELM_BG_OPTION_LAST /**< Sentinel value to indicate last enum field during
+                       * iteration. Also used to indicate errors */
+ } Elm_Bg_Option;
+
+/**
  * Add a new background to the parent
  *
  * @param parent The parent object
@@ -91,4 +110,55 @@ EAPI Eina_Bool elm_bg_file_set(Eo *obj, const char *file, 
const char *group);
  */
 EAPI void elm_bg_file_get(const Eo *obj, const char **file, const char 
**group);
 
-#include "elm_bg.eo.legacy.h"
+/**
+  * Set the mode of display for a given background widget's image
+  *
+  * This sets how the background widget will display its image. This
+  * will only work if the elm_bg_file_set() was previously called with
+  * an image file on $obj. The image can be display tiled, scaled,
+  * centered or stretched. #ELM_BG_OPTION_SCALE by default.
+  *
+  * @param[in] option The desired background option(See Elm.Bg.Option).
+  *
+  * @see elm_bg_option_get()
+  *
+  * @ingroup Elm_Bg
+  */
+EAPI void elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option);
+
+/**
+  * Get the mode of display of a given background widget's image
+  *
+  * @return  The background option Elm.Bg.Option Default is #Elm_Bg_SCALE.
+  *
+  * @see elm_bg_option_set()
+  *
+  * @ingroup Elm_Bg
+  */
+EAPI Elm_Bg_Option elm_bg_option_get(const Evas_Object *obj);
+
+/**
+  * Set the size of the pixmap representation of the image set on a
+  * given background widget.
+  *
+  * @warning: This function just makes sense if an image file was set on
+  * @p obj, with elm_bg_file_set().
+  *
+  * This function sets a new size for pixmap representation of the
+  * given bg image. It allows for the image to be loaded already in the
+  * specified size, reducing the memory usage and load time (for
+  * example, when loading a big image file with its load size set to a
+  * smaller size)
+  *
+  * @note: This is just a hint for the underlying system. The real size
+  * of the pixmap may differ depending on the type of image being
+  * loaded, being bigger than requested.
+  *
+  * @ingroup Elm_Bg
+  *
+  * @param[in] w The new width of the image pixmap representation
+  * @param[in] h The new height of the image pixmap representation
+  */
+EAPI void elm_bg_load_size_set(Evas_Object *obj, int w, int h);
+
+#include "efl_ui_bg.eo.legacy.h"

-- 


Reply via email to