summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSungtaek Hong <sth253.hong@samsung.com>2017-09-26 11:46:11 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2017-09-26 17:58:07 +0900
commitebff5e8639851ab9d80fa6ff36f20f08952c015e (patch)
treef7017fb4742e77fc3faa395000be665ed8627da7
parent8557fe818f6ac033f582dc4865235aa3176d7447 (diff)
downloadefl-ebff5e8639851ab9d80fa6ff36f20f08952c015e.tar.gz
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
-rw-r--r--po/POTFILES.in2
-rw-r--r--src/Makefile_Elementary.am6
-rw-r--r--src/bin/elementary/test.c2
-rw-r--r--src/bin/elementary/test_bg.c108
-rw-r--r--src/lib/elementary/efl_ui_bg.c (renamed from src/lib/elementary/elm_bg.c)182
-rw-r--r--src/lib/elementary/efl_ui_bg.eo17
-rw-r--r--src/lib/elementary/efl_ui_bg_eo.h1
-rw-r--r--src/lib/elementary/efl_ui_bg_private.h69
-rw-r--r--src/lib/elementary/efl_ui_win.c2
-rw-r--r--src/lib/elementary/elm_bg.eo101
-rw-r--r--src/lib/elementary/elm_bg.h2
-rw-r--r--src/lib/elementary/elm_bg_legacy.h72
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
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"