lib/elementary/efl_ui_layout_part_content.eo \
lib/elementary/efl_ui_layout_part_text.eo \
lib/elementary/efl_ui_layout_part_table.eo \
+ lib/elementary/efl_ui_layout_part_bg.eo \
lib/elementary/efl_ui_layout_part_legacy.eo \
lib/elementary/efl_ui_multibuttonentry_part.eo \
lib/elementary/efl_ui_panes_part.eo \
lib/elementary/efl_ui_slider_part.eo \
lib/elementary/efl_ui_textpath_part.eo \
lib/elementary/efl_ui_widget_part.eo \
+ lib/elementary/efl_ui_widget_part_bg.eo \
lib/elementary/efl_ui_win_part.eo \
lib/elementary/efl_access.eo \
lib/elementary/efl_access_action.eo \
bin/elementary/test_nstate.c \
bin/elementary/test_panel.c \
bin/elementary/test_panes.c \
+bin/elementary/test_part_bg.c \
bin/elementary/test_photo.c \
bin/elementary/test_photocam.c \
bin/elementary/test_popup.c \
test_nstate.c \
test_panel.c \
test_panes.c \
+test_part_bg.c \
test_photo.c \
test_photocam.c \
test_popup.c \
void test_win_modal(void *data, Evas_Object *obj, void *event_info);
void test_box_disable(void *data, Evas_Object *obj, void *event_info);
void test_layout_disable(void *data, Evas_Object *obj, void *event_info);
+void test_part_background(void *data, Evas_Object *obj, void *event_info);
void test_colorclass(void *data, Evas_Object *obj, void *event_info);
//------------------------------//
ADD_TEST(NULL, "Widgets Disable/Enable", "Box", test_box_disable);
ADD_TEST(NULL, "Widgets Disable/Enable", "Layout", test_layout_disable);
+
+ //------------------------------//
+ ADD_TEST(NULL, "Widgets Part", "Part Background", test_part_background);
#undef ADD_TEST
if (autorun)
--- /dev/null
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+#include <Elementary.h>
+
+const Efl_Class *content_class[17];
+
+
+static void
+_reset_cb(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+ Evas_Object *radio = data;
+ Evas_Object *target;
+
+ radio = efl_ui_radio_selected_object_get(radio);
+ target = evas_object_data_get(radio, "data");
+
+ efl_gfx_color_set(efl_part(target, "background"), 0, 0, 0, 0);
+ efl_file_set(efl_part(target, "background"), NULL, NULL);
+}
+
+static void
+_color_cb(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+ Evas_Object *radio = data;
+ Evas_Object *target;
+ static Eina_Bool i;
+
+ radio = efl_ui_radio_selected_object_get(radio);
+ target = evas_object_data_get(radio, "data");
+ i ^= EINA_TRUE;
+ efl_gfx_color_set(efl_part(target, "background"), (i) ? 255 : 0, (i) ? 0 : 255, 0, 255);
+}
+
+static void
+_scale_type_cb(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+ Evas_Object *radio = data;
+ Evas_Object *target;
+ Efl_Ui_Image_Scale_Type type;
+ char buf[PATH_MAX];
+
+ radio = efl_ui_radio_selected_object_get(radio);
+ target = evas_object_data_get(radio, "data");
+
+ snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get());
+ efl_file_set(efl_part(target, "background"), buf, NULL);
+ type = efl_ui_image_scale_type_get(efl_part(target, "background"));
+ type = (type + 1) % 5;
+ efl_ui_image_scale_type_set(efl_part(target, "background"), type);
+}
+
+static Evas_Object *
+_create_box_contents(Evas_Object *box)
+{
+ Evas_Object *hbox;
+ Evas_Object *radio_group, *radio;
+ Evas_Object *content;
+ char buf[PATH_MAX];
+ unsigned int i;
+
+ 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, 1, 1),
+ efl_pack_end(box, efl_added));
+
+ radio_group = radio = efl_add(EFL_UI_RADIO_CLASS, hbox,
+ efl_pack_end(hbox, efl_added),
+ efl_gfx_size_hint_weight_set(efl_added, 0, 0),
+ efl_ui_radio_state_value_set(efl_added, 0));
+
+ content = efl_add(EFL_UI_BOX_CLASS, hbox,
+ efl_pack_end(hbox, efl_added));
+ evas_object_data_set(radio, "data", content);
+
+ content = efl_add(EFL_UI_TEXT_CLASS, content,
+ efl_text_set(efl_added, "box"),
+ efl_ui_text_interactive_editable_set(efl_added, EINA_FALSE),
+ efl_pack_end(content, efl_added));
+
+ for (i = 0; i < (sizeof(content_class) / sizeof(content_class[0])) ; i++)
+ {
+ if (!content_class[i]) continue;
+
+ hbox = efl_add(EFL_UI_BOX_CLASS, box,
+ efl_ui_direction_set(efl_added, EFL_UI_DIR_HORIZONTAL),
+ efl_pack_end(box, efl_added));
+
+ radio = efl_add(EFL_UI_RADIO_CLASS, hbox,
+ efl_ui_radio_group_add(efl_added, radio_group),
+ efl_pack_end(hbox, efl_added),
+ efl_ui_radio_state_value_set(efl_added, i + 1),
+ efl_gfx_size_hint_weight_set(efl_added, 0, 0)
+ );
+
+ content = efl_add(content_class[i], hbox,
+ efl_pack_end(hbox, efl_added));
+ if (efl_isa(content, efl_text_interface_get()))
+ efl_text_set(content, "text");
+
+ if (efl_isa(content, EFL_UI_IMAGE_CLASS))
+ {
+ snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
+ efl_file_set(content, buf, NULL);
+ }
+
+ evas_object_data_set(radio, "data", content);
+ }
+
+ efl_ui_nstate_value_set(radio_group, 0);
+
+ return radio_group;
+}
+
+void
+test_part_background(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *win;
+ Evas_Object *scr;
+ Evas_Object *vbox, *hbox;
+ Evas_Object *radio_group;
+ Evas_Object *reset_btn, *color_btn, *scale_btn;
+
+ content_class[0] = EFL_UI_CALENDAR_CLASS;
+ content_class[1] = EFL_UI_SLIDER_CLASS;
+ content_class[2] = EFL_UI_SLIDER_INTERVAL_CLASS;
+ content_class[3] = EFL_UI_MULTIBUTTONENTRY_CLASS;
+ content_class[4] = EFL_UI_PROGRESSBAR_CLASS;
+ content_class[5] = EFL_UI_CLOCK_CLASS;
+ content_class[6] = EFL_UI_BUTTON_CLASS;
+ content_class[7] = EFL_UI_CHECK_CLASS;
+ content_class[8] = EFL_UI_RADIO_CLASS;
+ content_class[9] = EFL_UI_TEXT_CLASS;
+ content_class[10] = EFL_UI_FLIP_CLASS;
+ content_class[11] = EFL_UI_PANES_CLASS;
+ content_class[12] = EFL_UI_VIDEO_CLASS;
+ content_class[13] = EFL_UI_BG_CLASS;
+ content_class[14] = EFL_UI_IMAGE_CLASS;
+ content_class[15] = EFL_UI_IMAGE_ZOOMABLE_CLASS;
+ content_class[16] = EFL_UI_NSTATE_CLASS;
+ //content_class[17] = EFL_UI_SPINNER_CLASS;
+
+ win = efl_add(EFL_UI_WIN_CLASS, NULL,
+ efl_text_set(efl_added, "Widget Part Background"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+
+ vbox = efl_add(EFL_UI_BOX_CLASS, win,
+ efl_gfx_size_hint_weight_set(efl_added, 1, 1),
+ efl_content_set(win, efl_added));
+
+ hbox = efl_add(EFL_UI_BOX_CLASS, vbox,
+ efl_ui_direction_set(efl_added, EFL_UI_DIR_HORIZONTAL),
+ efl_gfx_size_hint_weight_set(efl_added, 1.0, 0.0),
+ efl_pack_end(vbox, efl_added));
+
+ reset_btn = efl_add(EFL_UI_BUTTON_CLASS, hbox,
+ efl_pack_end(hbox, efl_added),
+ efl_text_set(efl_added, "reset"));
+ color_btn = efl_add(EFL_UI_BUTTON_CLASS, hbox,
+ efl_pack_end(hbox, efl_added),
+ efl_text_set(efl_added, "color"));
+ scale_btn = efl_add(EFL_UI_BUTTON_CLASS, hbox,
+ efl_pack_end(hbox, efl_added),
+ efl_text_set(efl_added, "scale_type"));
+
+ scr = elm_scroller_add(vbox);
+ evas_object_show(scr);
+ evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ efl_pack_end(vbox, scr);
+
+ vbox = efl_add(EFL_UI_BOX_CLASS, scr,
+ efl_gfx_size_hint_weight_set(efl_added, 1, 1),
+ efl_content_set(scr, efl_added));
+
+ radio_group = _create_box_contents(vbox);
+
+ efl_event_callback_add(reset_btn, EFL_UI_EVENT_CLICKED, _reset_cb, radio_group);
+ efl_event_callback_add(color_btn, EFL_UI_EVENT_CLICKED, _color_cb, radio_group);
+ efl_event_callback_add(scale_btn, EFL_UI_EVENT_CLICKED, _scale_type_cb, radio_group);
+
+ efl_gfx_size_set(win, EINA_SIZE2D(300, 200));
+}
#ifdef EFL_EO_API_SUPPORT
# include <efl_config_global.eo.h>
# include <efl_ui_widget_part.eo.h>
+# include <efl_ui_widget_part_bg.eo.h>
# include <efl_ui_layout_part.eo.h>
# include <efl_ui_layout_part_box.eo.h>
# include <efl_ui_layout_part_content.eo.h>
+# include <efl_ui_layout_part_bg.eo.h>
# include <efl_ui_layout_part_text.eo.h>
# include <efl_ui_layout_part_table.eo.h>
# include <efl_ui_win_part.eo.h>
#define EFL_ACCESS_PROTECTED
#define ELM_LAYOUT_PROTECTED
+#define EFL_UI_WIDGET_PART_BG_PROTECTED
#include <Elementary.h>
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ELM_WIDGET_DATA_GET_OR_RETURN((Eo *) obj, wd, NULL);
+ if (eina_streq(part, "background"))
+ return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_BG_CLASS, obj, part);
// Check part type without using edje_object_part_object_get(), as this
// can cause recalc, which has side effects... and could be slow.
type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, part));
ERR("Invalid type found for part '%s' in group '%s'", part, sd->group);
return NULL;
}
-
switch (type)
{
case EFL_CANVAS_LAYOUT_PART_TYPE_BOX:
elm_widget_part_translatable_text_set(pd->obj, pd->part, label, domain);
}
+/* Efl.Ui.Layout.Part.Bg (common) */
+EOLIAN static void
+_efl_ui_layout_part_bg_efl_ui_widget_part_bg_bg_set(Eo *obj, void *_pd EINA_UNUSED, Efl_Canvas_Object *bg)
+{
+ Efl_Canvas_Layout_Part_Type type;
+ Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
+ Efl_Ui_Layout_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
+ ELM_WIDGET_DATA_GET_OR_RETURN(pd->obj, wd);
+
+ // Check part type without using edje_object_part_object_get(), as this
+ // can cause recalc, which has side effects... and could be slow.
+ type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, "background"));
+ if (type != EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW)
+ efl_ui_widget_part_bg_set(efl_super(obj, EFL_UI_LAYOUT_PART_BG_CLASS), bg);
+
+ if (wd->bg == bg)
+ return;
+
+ efl_del(wd->bg);
+ wd->bg = bg;
+ if (!wd->bg)
+ return;
+
+ _efl_ui_layout_content_set(pd->obj, sd, "background", bg);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_layout_part_bg_efl_file_file_set(Eo *obj, void *pd EINA_UNUSED, const char *file, const char *key)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ return efl_file_set(bg_obj, file, key);
+}
+
+EOLIAN static void
+_efl_ui_layout_part_bg_efl_file_file_get(Eo *obj, void *pd EINA_UNUSED, const char **file, const char **key)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_file_get(bg_obj, file, key);
+}
+
+EOLIAN static void
+_efl_ui_layout_part_bg_efl_gfx_color_set(Eo *obj, void *pd EINA_UNUSED, int r, int g, int b, int a)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_gfx_color_set(bg_obj, r, g, b, a);
+}
+
+EOLIAN static void
+_efl_ui_layout_part_bg_efl_gfx_color_get(Eo *obj, void *pd EINA_UNUSED, int *r, int *g, int *b, int *a)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_gfx_color_get(bg_obj, r, g, b, a);
+}
+
+EOLIAN static void
+_efl_ui_layout_part_bg_efl_ui_image_scale_type_set(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Image_Scale_Type scale_type)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_ui_image_scale_type_set(bg_obj, scale_type);
+}
+
+EOLIAN static Efl_Ui_Image_Scale_Type
+_efl_ui_layout_part_bg_efl_ui_image_scale_type_get(Eo *obj, void *pd EINA_UNUSED)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ return efl_ui_image_scale_type_get(bg_obj);
+}
+
/* Efl.Ui.Layout.Part_Xxx includes */
#include "efl_ui_layout_part.eo.c"
#include "efl_ui_layout_part_content.eo.c"
+#include "efl_ui_layout_part_bg.eo.c"
#include "efl_ui_layout_part_text.eo.c"
#include "efl_ui_layout_part_legacy.eo.c"
--- /dev/null
+class Efl.Ui.Layout.Part.Bg (Efl.Ui.Widget.Part.Bg, Efl.Ui.Bg)
+{
+ [[Elementary layout internal part background class]]
+ data: null;
+ implements {
+ Efl.Ui.Widget.Part.Bg.bg { set; }
+ Efl.File.file { get; set; }
+ Efl.Gfx.color { set; get; }
+ Efl.Ui.Image.scale_type { get; set; }
+ }
+}
--- /dev/null
+class Efl.Ui.Widget.Part.Bg (Efl.Ui.Widget.Part, Efl.Ui.Bg)
+{
+ [[Elementary widget internal part background class]]
+ data: null;
+ methods {
+ @property bg @protected {
+ [[Background object]]
+ set {
+ }
+ get {
+ }
+ values {
+ bg: Efl.Canvas.Object;
+ }
+ }
+ }
+ implements {
+ Efl.File.file { get; set; }
+ Efl.Gfx.color { set; get; }
+ Efl.Ui.Image.scale_type { get; set; }
+ }
+}
_ ## type ## _efl_part_part(const Eo *obj, typedata *priv EINA_UNUSED, const char *part) \
{ \
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); \
+ if (eina_streq(part, "background")) \
+ return efl_part(efl_super(obj, MY_CLASS), part); \
return ELM_PART_IMPLEMENT(TYPE ## _PART_CLASS, obj, part); \
}
#define EFL_INPUT_EVENT_PROTECTED
#define EFL_UI_TRANSLATABLE_PROTECTED
#define EFL_UI_FOCUS_OBJECT_PROTECTED
+#define EFL_UI_WIDGET_PART_BG_PROTECTED
#include <Elementary.h>
evas_object_move(sd->hover_obj, sd->x, sd->y);
evas_object_resize(sd->hover_obj, sd->w, sd->h);
}
+ if (sd->bg)
+ {
+ evas_object_move(sd->bg, sd->x, sd->y);
+ evas_object_resize(sd->bg, sd->w, sd->h);
+ }
}
EOLIAN static void
}
EOLIAN static void
-_elm_widget_efl_gfx_color_set(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, int r, int g, int b, int a)
+_elm_widget_efl_gfx_color_set(Eo *obj, Elm_Widget_Smart_Data *pd, int r, int g, int b, int a)
{
Eina_Iterator *it;
Evas_Object *o;
it = evas_object_smart_iterator_new(obj);
EINA_ITERATOR_FOREACH(it, o)
{
+ if (pd->bg == o) continue;
if (evas_object_data_get(o, "_elm_leaveme")) continue;
evas_object_color_set(o, r, g, b, a);
}
}
EOLIAN static void
-_elm_widget_efl_canvas_group_group_member_add(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Evas_Object *child)
+_elm_widget_efl_canvas_group_group_member_add(Eo *obj, Elm_Widget_Smart_Data *pd, Evas_Object *child)
{
int r, g, b, a;
efl_canvas_group_member_add(efl_super(obj, MY_CLASS), child);
if (evas_object_data_get(child, "_elm_leaveme")) return;
- evas_object_color_get(obj, &r, &g, &b, &a);
- evas_object_color_set(child, r, g, b, a);
+ if (pd->bg != child)
+ {
+ evas_object_color_get(obj, &r, &g, &b, &a);
+ evas_object_color_set(child, r, g, b, a);
+ }
efl_canvas_object_no_render_set(child, efl_canvas_object_no_render_get(obj));
evas_object_clip_set(child, evas_object_clip_get(obj));
EOLIAN static Efl_Object *
_elm_widget_efl_part_part(const Eo *obj, Elm_Widget_Smart_Data *wd EINA_UNUSED, const char *part)
{
+ if (eina_streq(part, "background"))
+ return ELM_PART_IMPLEMENT(EFL_UI_WIDGET_PART_BG_CLASS, obj, part);
return ELM_PART_IMPLEMENT(EFL_UI_WIDGET_PART_CLASS, obj, part);
}
/* Efl.Part end */
+/* Efl.Part Bg implementation */
+EOLIAN static void
+_efl_ui_widget_part_bg_bg_set(Eo *obj, void *_pd EINA_UNUSED, Efl_Canvas_Object *bg)
+{
+ Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
+ Elm_Widget_Smart_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
+
+ if (sd->bg == bg)
+ return;
+
+ efl_del(sd->bg);
+ sd->bg = bg;
+ if (!sd->bg)
+ return;
+
+ efl_canvas_group_member_add(pd->obj, sd->bg);
+ evas_object_stack_below(sd->bg, sd->resize_obj);
+ _smart_reconfigure(sd);
+}
+
+EOLIAN static Efl_Canvas_Object *
+_efl_ui_widget_part_bg_bg_get(Eo *obj, void *_pd EINA_UNUSED)
+{
+ Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
+ Elm_Widget_Smart_Data *sd = efl_data_scope_get(pd->obj, MY_CLASS);
+ Evas_Object *bg_obj = sd->bg;
+
+ if (!bg_obj)
+ {
+ bg_obj = efl_add(EFL_UI_BG_CLASS, pd->obj);
+ efl_ui_widget_part_bg_set(obj, bg_obj);
+ }
+
+ return bg_obj;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_widget_part_bg_efl_file_file_set(Eo *obj, void *pd EINA_UNUSED, const char *file, const char *key)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ return efl_file_set(bg_obj, file, key);
+}
+
+EOLIAN static void
+_efl_ui_widget_part_bg_efl_file_file_get(Eo *obj, void *pd EINA_UNUSED, const char **file, const char **key)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_file_get(bg_obj, file, key);
+}
+
+EOLIAN static void
+_efl_ui_widget_part_bg_efl_gfx_color_set(Eo *obj, void *pd EINA_UNUSED, int r, int g, int b, int a)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_gfx_color_set(bg_obj, r, g, b, a);
+}
+
+EOLIAN static void
+_efl_ui_widget_part_bg_efl_gfx_color_get(Eo *obj, void *pd EINA_UNUSED, int *r, int *g, int *b, int *a)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_gfx_color_get(bg_obj, r, g, b, a);
+}
+
+EOLIAN static void
+_efl_ui_widget_part_bg_efl_ui_image_scale_type_set(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Image_Scale_Type scale_type)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ efl_ui_image_scale_type_set(bg_obj, scale_type);
+}
+
+EOLIAN static Efl_Ui_Image_Scale_Type
+_efl_ui_widget_part_bg_efl_ui_image_scale_type_get(Eo *obj, void *pd EINA_UNUSED)
+{
+ Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
+
+ return efl_ui_image_scale_type_get(bg_obj);
+}
+
+#include "efl_ui_widget_part_bg.eo.c"
+
+/* Efl.Part Bg end */
+
/* Internal EO APIs and hidden overrides */
Eina_List *subobjs; /**< list of widgets' sub objects in the elementary tree */
Evas_Object *resize_obj; /**< an unique object for each widget that shows the look of a widget. Resize object's geometry is same as the widget. This resize object is different from that of window's resize object. */
Evas_Object *hover_obj;
+ Evas_Object *bg;
Eina_List *tooltips, *cursors;
Evas_Object *focus_previous, *focus_next;
Evas_Object *focus_up, *focus_down, *focus_right, *focus_left;