theme -> can specify a new theme for an object andit gets inherited. need to
add tests. SVN revision: 48771
This commit is contained in:
parent
cd097950e4
commit
d888b71dba
|
@ -195,19 +195,21 @@ extern "C" {
|
|||
ELM_THUMB_ANIMATION_STOP,
|
||||
ELM_THUMB_ANIMATION_LAST
|
||||
} Elm_Thumb_Animation_Setting;
|
||||
|
||||
typedef enum _Elm_Clock_Digedit
|
||||
{
|
||||
ELM_CLOCK_NONE = 0,
|
||||
ELM_CLOCK_HOUR_DECIMAL = 1 << 0,
|
||||
ELM_CLOCK_HOUR_UNIT = 1 << 1,
|
||||
ELM_CLOCK_MIN_DECIMAL = 1 << 2,
|
||||
ELM_CLOCK_MIN_UNIT = 1 << 3,
|
||||
ELM_CLOCK_SEC_DECIMAL = 1 << 4,
|
||||
ELM_CLOCK_SEC_UNIT = 1 << 5,
|
||||
ELM_CLOCK_ALL = (1 << 6) - 1
|
||||
} Elm_Clock_Digedit;
|
||||
|
||||
|
||||
typedef struct _Elm_Theme Elm_Theme;
|
||||
|
||||
typedef enum _Elm_Clock_Digedit
|
||||
{
|
||||
ELM_CLOCK_NONE = 0,
|
||||
ELM_CLOCK_HOUR_DECIMAL = 1 << 0,
|
||||
ELM_CLOCK_HOUR_UNIT = 1 << 1,
|
||||
ELM_CLOCK_MIN_DECIMAL = 1 << 2,
|
||||
ELM_CLOCK_MIN_UNIT = 1 << 3,
|
||||
ELM_CLOCK_SEC_DECIMAL = 1 << 4,
|
||||
ELM_CLOCK_SEC_UNIT = 1 << 5,
|
||||
ELM_CLOCK_ALL = (1 << 6) - 1
|
||||
} Elm_Clock_Digedit;
|
||||
|
||||
#ifndef ELM_LIB_QUICKLAUNCH
|
||||
#define ELM_MAIN() int main(int argc, char **argv) {elm_init(argc, argv); return elm_main(argc, argv);}
|
||||
#else
|
||||
|
@ -270,13 +272,22 @@ extern "C" {
|
|||
|
||||
EAPI void elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h);
|
||||
|
||||
EAPI void elm_theme_overlay_add(const char *item);
|
||||
EAPI void elm_theme_overlay_del(const char *item);
|
||||
EAPI void elm_theme_extension_add(const char *item);
|
||||
EAPI void elm_theme_extension_del(const char *item);
|
||||
EAPI void elm_theme_flush(void);
|
||||
EAPI Elm_Theme *elm_theme_new(void);
|
||||
EAPI void elm_theme_free(Elm_Theme *th);
|
||||
EAPI void elm_theme_overlay_add(Elm_Theme *th, const char *item);
|
||||
EAPI void elm_theme_overlay_del(Elm_Theme *th, const char *item);
|
||||
EAPI void elm_theme_extension_add(Elm_Theme *th, const char *item);
|
||||
EAPI void elm_theme_extension_del(Elm_Theme *th, const char *item);
|
||||
EAPI void elm_theme_set(Elm_Theme *th, const char *theme);
|
||||
EAPI const char *elm_theme_get(Elm_Theme *th);
|
||||
EAPI void elm_theme_flush(Elm_Theme *th);
|
||||
EAPI void elm_theme_full_flush(void);
|
||||
|
||||
EAPI void elm_theme_all_set(const char *theme);
|
||||
|
||||
|
||||
EAPI void elm_object_theme_set(Evas_Object *obj, Elm_Theme *th);
|
||||
EAPI Elm_Theme *elm_object_theme_get(Evas_Object *obj);
|
||||
|
||||
EAPI Evas_Object *elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type);
|
||||
EAPI void elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj);
|
||||
EAPI void elm_win_resize_object_del(Evas_Object *obj, Evas_Object *subobj);
|
||||
|
|
|
@ -94,7 +94,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->btn, "button", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->btn, "button", "base", elm_widget_style_get(obj));
|
||||
if (wd->icon)
|
||||
edje_object_part_swallow(wd->btn, "elm.swallow.content", wd->icon);
|
||||
if (wd->btn_label)
|
||||
|
@ -345,7 +345,7 @@ elm_fileselector_button_add(Evas_Object *parent)
|
|||
elm_widget_can_focus_set(obj, 1);
|
||||
|
||||
wd->btn = edje_object_add(e);
|
||||
_elm_theme_set(wd->btn, "button", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->btn, "button", "base", "default");
|
||||
edje_object_signal_callback_add(wd->btn, "elm,action,click", "",
|
||||
_signal_clicked, obj);
|
||||
edje_object_signal_callback_add(wd->btn, "elm,action,click", "",
|
||||
|
|
|
@ -34,7 +34,7 @@ static void
|
|||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
_elm_theme_set(wd->img, "bg", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->img, "bg", "base", elm_widget_style_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -86,7 +86,7 @@ elm_bg_add(Evas_Object *parent)
|
|||
elm_widget_can_focus_set(obj, 0);
|
||||
|
||||
wd->img = edje_object_add(e);
|
||||
_elm_theme_set(wd->img, "bg", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->img, "bg", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->img);
|
||||
return obj;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->bbl, "bubble", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->bbl, "bubble", "base", elm_widget_style_get(obj));
|
||||
edje_object_part_text_set(wd->bbl, "elm.text", wd->label);
|
||||
edje_object_part_text_set(wd->bbl, "elm.info", wd->info);
|
||||
edje_object_scale_set(wd->bbl, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
|
@ -106,7 +106,7 @@ elm_bubble_add(Evas_Object *parent)
|
|||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
|
||||
wd->bbl = edje_object_add(e);
|
||||
_elm_theme_set(wd->bbl, "bubble", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->bbl, "bubble", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->bbl);
|
||||
|
||||
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
|
||||
|
@ -299,7 +299,7 @@ elm_bubble_corner_set(Evas_Object *obj, const char *corner)
|
|||
ELM_CHECK_WIDTYPE(obj, widtype);
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->bbl, "bubble", corner, elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->bbl, "bubble", corner, elm_widget_style_get(obj));
|
||||
if (wd->icon)
|
||||
edje_object_part_swallow(wd->bbl, "elm.swallow.icon", wd->icon);
|
||||
if (wd->content)
|
||||
|
|
|
@ -79,7 +79,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->btn, "button", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->btn, "button", "base", elm_widget_style_get(obj));
|
||||
if (wd->icon)
|
||||
edje_object_part_swallow(wd->btn, "elm.swallow.content", wd->icon);
|
||||
if (wd->label)
|
||||
|
@ -250,7 +250,7 @@ elm_button_add(Evas_Object *parent)
|
|||
elm_widget_can_focus_set(obj, 1 );
|
||||
|
||||
wd->btn = edje_object_add(e);
|
||||
_elm_theme_set(wd->btn, "button", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->btn, "button", "base", "default");
|
||||
edje_object_signal_callback_add(wd->btn, "elm,action,click", "",
|
||||
_signal_clicked, obj);
|
||||
edje_object_signal_callback_add(wd->btn, "elm,action,press", "",
|
||||
|
|
|
@ -84,7 +84,7 @@ _theme_hook(Evas_Object *obj)
|
|||
|
||||
if (it->selected)
|
||||
edje_object_signal_emit(it->base, "elm,state,selected", "elm");
|
||||
_elm_theme_set(it->base, "carousel", "item", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, it->base, "carousel", "item", elm_widget_style_get(obj));
|
||||
edje_object_scale_set(it->base, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
if (it->icon)
|
||||
{
|
||||
|
@ -171,7 +171,7 @@ elm_carousel_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
elm_smart_scroller_theme_set(wd->scr, "carousel", "base", "default");
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "carousel", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
elm_smart_scroller_policy_set(wd->scr,
|
||||
ELM_SMART_SCROLLER_POLICY_AUTO,
|
||||
|
@ -210,7 +210,7 @@ elm_carousel_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, Ev
|
|||
it->func = func;
|
||||
it->data = data;
|
||||
it->base = edje_object_add(evas_object_evas_get(obj));
|
||||
_elm_theme_set(it->base, "carousel", "item", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, it->base, "carousel", "item", elm_widget_style_get(obj));
|
||||
edje_object_signal_callback_add(it->base, "elm,action,click", "elm",
|
||||
_select, it);
|
||||
elm_widget_sub_object_add(obj, it->base);
|
||||
|
|
|
@ -60,7 +60,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->chk, "check", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->chk, "check", "base", elm_widget_style_get(obj));
|
||||
if (wd->icon)
|
||||
edje_object_signal_emit(wd->chk, "elm,state,icon,visible", "elm");
|
||||
else
|
||||
|
@ -193,7 +193,7 @@ elm_check_add(Evas_Object *parent)
|
|||
elm_widget_disable_hook_set(obj, _disable_hook);
|
||||
|
||||
wd->chk = edje_object_add(e);
|
||||
_elm_theme_set(wd->chk, "check", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->chk, "check", "base", "default");
|
||||
edje_object_signal_callback_add(wd->chk, "elm,action,check,on", "",
|
||||
_signal_check_on, obj);
|
||||
edje_object_signal_callback_add(wd->chk, "elm,action,check,off", "",
|
||||
|
|
|
@ -212,13 +212,13 @@ _time_update(Evas_Object *obj)
|
|||
}
|
||||
|
||||
if ((wd->seconds) && (wd->am_pm))
|
||||
_elm_theme_set(wd->clk, "clock", "base-all", style);
|
||||
_elm_theme_object_set(obj, wd->clk, "clock", "base-all", style);
|
||||
else if (wd->seconds)
|
||||
_elm_theme_set(wd->clk, "clock", "base-seconds", style);
|
||||
_elm_theme_object_set(obj, wd->clk, "clock", "base-seconds", style);
|
||||
else if (wd->am_pm)
|
||||
_elm_theme_set(wd->clk, "clock", "base-am_pm", style);
|
||||
_elm_theme_object_set(obj, wd->clk, "clock", "base-am_pm", style);
|
||||
else
|
||||
_elm_theme_set(wd->clk, "clock", "base", style);
|
||||
_elm_theme_object_set(obj, wd->clk, "clock", "base", style);
|
||||
edje_object_scale_set(wd->clk, elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
|
||||
|
@ -228,7 +228,7 @@ _time_update(Evas_Object *obj)
|
|||
|
||||
if ((!wd->seconds) && (i >= 4)) break;
|
||||
wd->digit[i] = edje_object_add(evas_object_evas_get(wd->clk));
|
||||
_elm_theme_set(wd->digit[i], "clock", "flipdigit", style);
|
||||
_elm_theme_object_set(obj, wd->digit[i], "clock", "flipdigit", style);
|
||||
edje_object_scale_set(wd->digit[i], elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
if (wd->edit && (wd->digedit & (1 << i)))
|
||||
|
@ -249,7 +249,7 @@ _time_update(Evas_Object *obj)
|
|||
if (wd->am_pm)
|
||||
{
|
||||
wd->ampm = edje_object_add(evas_object_evas_get(wd->clk));
|
||||
_elm_theme_set(wd->ampm, "clock", "flipampm", style);
|
||||
_elm_theme_object_set(obj, wd->ampm, "clock", "flipampm", style);
|
||||
edje_object_scale_set(wd->ampm, elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
if (wd->edit)
|
||||
|
|
|
@ -131,7 +131,7 @@ _prop_change(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
|
|||
eina_stringshare_replace(&_elm_config->theme, val);
|
||||
if (val)
|
||||
{
|
||||
_elm_theme_parse(val);
|
||||
_elm_theme_parse(NULL, val);
|
||||
free(val);
|
||||
_elm_rescale();
|
||||
}
|
||||
|
@ -299,7 +299,7 @@ _config_free(void)
|
|||
static void
|
||||
_config_apply(void)
|
||||
{
|
||||
_elm_theme_parse(_elm_config->theme);
|
||||
_elm_theme_parse(NULL, _elm_config->theme);
|
||||
if (_elm_config->modules) _elm_module_parse(_elm_config->modules);
|
||||
ecore_animator_frametime_set(1.0 / _elm_config->fps);
|
||||
edje_frametime_set(1.0 / _elm_config->fps);
|
||||
|
@ -578,7 +578,7 @@ _elm_config_sub_init(void)
|
|||
if (s)
|
||||
{
|
||||
eina_stringshare_replace(&_elm_config->theme, s);
|
||||
_elm_theme_parse(s);
|
||||
_elm_theme_parse(NULL, s);
|
||||
free(s);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->base, "conformant", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->base, "conformant", "base", elm_widget_style_get(obj));
|
||||
if (wd->content)
|
||||
edje_object_part_swallow(wd->base, "elm.swallow.content", wd->content);
|
||||
edje_object_scale_set(wd->base, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
|
@ -228,7 +228,7 @@ elm_conformant_add(Evas_Object *parent)
|
|||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
|
||||
wd->base = edje_object_add(evas);
|
||||
_elm_theme_set(wd->base, "conformant", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->base, "conformant", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->base);
|
||||
|
||||
#ifdef HAVE_ELEMENTARY_X
|
||||
|
|
|
@ -258,7 +258,7 @@ _theme_hook(Evas_Object *obj)
|
|||
const char *t;
|
||||
|
||||
t = eina_stringshare_add(elm_entry_entry_get(obj));
|
||||
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
elm_entry_entry_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
edje_object_scale_set(wd->ent, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
|
@ -1240,9 +1240,9 @@ _get_item(void *data, Evas_Object *edje, const char *part, const char *item)
|
|||
}
|
||||
o = edje_object_add(evas_object_evas_get(data));
|
||||
if (!strncmp(item, "emoticon/", 9))
|
||||
ok = _elm_theme_set(o, "entry", item, elm_widget_style_get(data));
|
||||
ok = _elm_theme_object_set(data, o, "entry", item, elm_widget_style_get(data));
|
||||
if (!ok)
|
||||
_elm_theme_set(o, "entry/emoticon", "wtf", elm_widget_style_get(data));
|
||||
_elm_theme_object_set(data, o, "entry/emoticon", "wtf", elm_widget_style_get(data));
|
||||
return o;
|
||||
}
|
||||
|
||||
|
@ -1291,7 +1291,7 @@ elm_entry_add(Evas_Object *parent)
|
|||
evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_MOVE,
|
||||
_mouse_move, obj);
|
||||
|
||||
_elm_theme_set(wd->ent, "entry", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->ent, "entry", "base", "default");
|
||||
edje_object_signal_callback_add(wd->ent, "entry,changed", "elm.text",
|
||||
_signal_entry_changed, obj);
|
||||
edje_object_signal_callback_add(wd->ent, "selection,start", "elm.text",
|
||||
|
@ -1379,7 +1379,7 @@ elm_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line)
|
|||
wd->linewrap = EINA_FALSE;
|
||||
wd->char_linewrap = EINA_FALSE;
|
||||
t = eina_stringshare_add(elm_entry_entry_get(obj));
|
||||
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
elm_entry_entry_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
_sizing_eval(obj);
|
||||
|
@ -1426,7 +1426,7 @@ elm_entry_password_set(Evas_Object *obj, Eina_Bool password)
|
|||
wd->linewrap = EINA_FALSE;
|
||||
wd->char_linewrap = EINA_FALSE;
|
||||
t = eina_stringshare_add(elm_entry_entry_get(obj));
|
||||
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
elm_entry_entry_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
_sizing_eval(obj);
|
||||
|
@ -1563,7 +1563,7 @@ elm_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap)
|
|||
if(wd->linewrap)
|
||||
wd->char_linewrap = EINA_FALSE;
|
||||
t = eina_stringshare_add(elm_entry_entry_get(obj));
|
||||
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
elm_entry_entry_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
_sizing_eval(obj);
|
||||
|
@ -1593,7 +1593,7 @@ elm_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap)
|
|||
if(wd->char_linewrap)
|
||||
wd->linewrap = EINA_FALSE;
|
||||
t = eina_stringshare_add(elm_entry_entry_get(obj));
|
||||
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
elm_entry_entry_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
_sizing_eval(obj);
|
||||
|
@ -1618,7 +1618,7 @@ elm_entry_editable_set(Evas_Object *obj, Eina_Bool editable)
|
|||
if (wd->editable == editable) return;
|
||||
wd->editable = editable;
|
||||
t = eina_stringshare_add(elm_entry_entry_get(obj));
|
||||
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
|
||||
elm_entry_entry_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
_sizing_eval(obj);
|
||||
|
|
|
@ -36,7 +36,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->frm, "frame", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->frm, "frame", "base", elm_widget_style_get(obj));
|
||||
if (wd->content)
|
||||
edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->content);
|
||||
edje_object_scale_set(wd->frm, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
|
@ -106,7 +106,7 @@ elm_frame_add(Evas_Object *parent)
|
|||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
|
||||
wd->frm = edje_object_add(e);
|
||||
_elm_theme_set(wd->frm, "frame", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->frm, "frame", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->frm);
|
||||
|
||||
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
|
||||
|
|
|
@ -372,7 +372,7 @@ _theme_hook(Evas_Object *obj)
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Item_Block *itb;
|
||||
if (!wd) return;
|
||||
elm_smart_scroller_theme_set(wd->scr, "genlist", "base", elm_widget_style_get(obj));
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "genlist", "base", elm_widget_style_get(obj));
|
||||
// edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
EINA_INLIST_FOREACH(wd->blocks, itb)
|
||||
{
|
||||
|
@ -833,7 +833,7 @@ _item_realize(Elm_Genlist_Item *it, int in, int calc)
|
|||
strncat(buf, "/", sizeof(buf) - strlen(buf));
|
||||
strncat(buf, it->itc->item_style, sizeof(buf) - strlen(buf));
|
||||
|
||||
_elm_theme_set(it->base, "genlist", buf, elm_widget_style_get(it->wd->obj));
|
||||
_elm_theme_object_set(it->wd->obj, it->base, "genlist", buf, elm_widget_style_get(it->wd->obj));
|
||||
it->spacer = evas_object_rectangle_add(evas_object_evas_get(it->wd->obj));
|
||||
evas_object_color_set(it->spacer, 0, 0, 0, 0);
|
||||
elm_widget_sub_object_add(it->wd->obj, it->spacer);
|
||||
|
@ -1487,6 +1487,7 @@ elm_genlist_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "genlist", "base", elm_widget_style_get(obj));
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
|
||||
elm_smart_scroller_bounce_allow_set(wd->scr, 0, 1);
|
||||
|
|
|
@ -77,7 +77,7 @@ _theme_hook(Evas_Object *obj)
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
// FIXME: hover contents doesnt seem to propagate resizes properly
|
||||
_elm_theme_set(wd->cov, "hover", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->cov, "hover", "base", elm_widget_style_get(obj));
|
||||
edje_object_scale_set(wd->cov, elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
_reval_content(obj);
|
||||
|
@ -288,7 +288,7 @@ elm_hover_add(Evas_Object *parent)
|
|||
evas_object_event_callback_add(wd->hov, EVAS_CALLBACK_HIDE, _hov_hide, obj);
|
||||
|
||||
wd->cov = edje_object_add(e);
|
||||
_elm_theme_set(wd->cov, "hover", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->cov, "hover", "base", "default");
|
||||
elm_widget_sub_object_add(obj, wd->cov);
|
||||
edje_object_signal_callback_add(wd->cov, "elm,action,dismiss", "",
|
||||
_signal_dismiss, obj);
|
||||
|
|
|
@ -47,10 +47,9 @@ static void
|
|||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
|
||||
if (!wd) return;
|
||||
if (wd->stdicon)
|
||||
_elm_theme_icon_set(wd->img, wd->stdicon, "default");
|
||||
_elm_theme_object_icon_set(obj, wd->img, wd->stdicon, "default");
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
||||
|
@ -185,7 +184,7 @@ elm_icon_standard_set(Evas_Object *obj, const char *name)
|
|||
|
||||
if ((!wd) || (!name)) return EINA_FALSE;
|
||||
eina_stringshare_replace(&wd->stdicon, name);
|
||||
ret = _elm_theme_icon_set(wd->img, name, "default");
|
||||
ret = _elm_theme_object_icon_set(obj, wd->img, name, "default");
|
||||
_sizing_eval(obj);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -75,9 +75,9 @@ _theme_hook(Evas_Object *obj)
|
|||
_index_box_clear(obj, wd->bx[0], 0);
|
||||
_index_box_clear(obj, wd->bx[1], 1);
|
||||
if (wd->horizontal)
|
||||
_elm_theme_set(wd->base, "index", "base/horizontal", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->base, "index", "base/horizontal", elm_widget_style_get(obj));
|
||||
else
|
||||
_elm_theme_set(wd->base, "index", "base/vertical", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->base, "index", "base/vertical", elm_widget_style_get(obj));
|
||||
edje_object_part_swallow(wd->base, "elm.swallow.event.0", wd->event[0]);
|
||||
edje_object_part_swallow(wd->base, "elm.swallow.index.0", wd->bx[0]);
|
||||
if (edje_object_part_exists(wd->base, "elm.swallow.index.1"))
|
||||
|
@ -197,9 +197,9 @@ _index_box_auto_fill(Evas_Object *obj, Evas_Object *box, int level)
|
|||
o = edje_object_add(evas_object_evas_get(obj));
|
||||
it->base = o;
|
||||
if (i & 0x1)
|
||||
_elm_theme_set(o, "index", "item_odd/vertical", "default");
|
||||
_elm_theme_object_set(obj, o, "index", "item_odd/vertical", "default");
|
||||
else
|
||||
_elm_theme_set(o, "index", "item/vertical", "default");
|
||||
_elm_theme_object_set(obj, o, "index", "item/vertical", "default");
|
||||
edje_object_part_text_set(o, "elm.text", it->letter);
|
||||
edje_object_size_min_restricted_calc(o, &mw, &mh, 0, 0);
|
||||
evas_object_size_hint_min_set(o, mw, mh);
|
||||
|
@ -494,7 +494,7 @@ elm_index_add(Evas_Object *parent)
|
|||
wd->horizontal = EINA_FALSE;
|
||||
|
||||
wd->base = edje_object_add(e);
|
||||
_elm_theme_set(wd->base, "index", "base/vertical", "default");
|
||||
_elm_theme_object_set(obj, wd->base, "index", "base/vertical", "default");
|
||||
elm_widget_resize_object_set(obj, wd->base);
|
||||
|
||||
o = evas_object_rectangle_add(e);
|
||||
|
|
|
@ -71,9 +71,9 @@ _theme_hook(Evas_Object *obj)
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
if (wd->linewrap)
|
||||
_elm_theme_set(wd->lbl, "label", "base_wrap", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base_wrap", elm_widget_style_get(obj));
|
||||
else
|
||||
_elm_theme_set(wd->lbl, "label", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base", elm_widget_style_get(obj));
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
edje_object_scale_set(wd->lbl, elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
|
@ -144,7 +144,7 @@ elm_label_add(Evas_Object *parent)
|
|||
wd->linewrap = EINA_FALSE;
|
||||
|
||||
wd->lbl = edje_object_add(e);
|
||||
_elm_theme_set(wd->lbl, "label", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base", "default");
|
||||
wd->label = eina_stringshare_add("<br>");
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", "<br>");
|
||||
elm_widget_resize_object_set(obj, wd->lbl);
|
||||
|
@ -211,9 +211,9 @@ elm_label_line_wrap_set(Evas_Object *obj, Eina_Bool wrap)
|
|||
wd->linewrap = wrap;
|
||||
t = eina_stringshare_add(elm_label_label_get(obj));
|
||||
if (wd->linewrap)
|
||||
_elm_theme_set(wd->lbl, "label", "base_wrap", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base_wrap", elm_widget_style_get(obj));
|
||||
else
|
||||
_elm_theme_set(wd->lbl, "label", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base", elm_widget_style_get(obj));
|
||||
elm_label_label_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
wd->changed = 1;
|
||||
|
|
|
@ -203,7 +203,7 @@ elm_layout_theme_set(Evas_Object *obj, const char *clas, const char *group, cons
|
|||
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return EINA_FALSE;
|
||||
Eina_Bool ret = _elm_theme_set(wd->lay, clas, group, style);
|
||||
Eina_Bool ret = _elm_theme_object_set(obj, wd->lay, clas, group, style);
|
||||
if (ret) _request_sizing_eval(obj);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -568,16 +568,16 @@ _fix_items(Evas_Object *obj)
|
|||
if (wd->mode == ELM_LIST_COMPRESS)
|
||||
{
|
||||
if (it->even)
|
||||
_elm_theme_set(it->base, "list", "item_compress", style);
|
||||
_elm_theme_object_set(obj, it->base, "list", "item_compress", style);
|
||||
else
|
||||
_elm_theme_set(it->base, "list", "item_compress_odd", style);
|
||||
_elm_theme_object_set(obj, it->base, "list", "item_compress_odd", style);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (it->even)
|
||||
_elm_theme_set(it->base, "list", "item", style);
|
||||
_elm_theme_object_set(obj, it->base, "list", "item", style);
|
||||
else
|
||||
_elm_theme_set(it->base, "list", "item_odd", style);
|
||||
_elm_theme_object_set(obj, it->base, "list", "item_odd", style);
|
||||
}
|
||||
stacking = edje_object_data_get(it->base, "stacking");
|
||||
if (stacking)
|
||||
|
|
|
@ -1140,7 +1140,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
elm_smart_scroller_theme_set(wd->scr, "map", "base", elm_widget_style_get(obj));
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "map", "base", elm_widget_style_get(obj));
|
||||
// edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -1459,8 +1459,8 @@ _group_bubble_create(Marker_Group *group)
|
|||
|
||||
group->wd->opened_bubbles = eina_list_append(group->wd->opened_bubbles, group);
|
||||
group->bubble = edje_object_add(evas_object_evas_get(group->obj));
|
||||
_elm_theme_set(group->bubble, "map", "marker_bubble",
|
||||
elm_widget_style_get(group->wd->obj));
|
||||
_elm_theme_object_set(group->wd->obj, group->bubble, "map", "marker_bubble",
|
||||
elm_widget_style_get(group->wd->obj));
|
||||
evas_object_smart_member_add(group->bubble,
|
||||
group->wd->obj);
|
||||
elm_widget_sub_object_add(group->wd->obj, group->bubble);
|
||||
|
@ -1476,8 +1476,7 @@ _group_bubble_create(Marker_Group *group)
|
|||
group->rect = evas_object_rectangle_add(evas_object_evas_get(group->obj));
|
||||
evas_object_color_set(group->rect, 0, 0, 0, 0);
|
||||
evas_object_repeat_events_set(group->rect, EINA_TRUE);
|
||||
evas_object_smart_member_add(group->rect,
|
||||
group->wd->obj);
|
||||
evas_object_smart_member_add(group->rect, group->wd->obj);
|
||||
elm_widget_sub_object_add(group->wd->obj, group->rect);
|
||||
|
||||
evas_object_event_callback_add(group->rect, EVAS_CALLBACK_MOUSE_UP, _group_bubble_mouse_up_cb, group);
|
||||
|
@ -1666,7 +1665,7 @@ elm_map_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
elm_smart_scroller_theme_set(wd->scr, "map", "base", "default");
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "map", "base", "default");
|
||||
evas_object_smart_callback_add(wd->scr, "scroll", _scr, obj);
|
||||
evas_object_smart_callback_add(wd->scr, "drag", _scr, obj);
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
|
@ -2315,7 +2314,7 @@ elm_map_marker_add(Evas_Object *obj, double lon, double lat, Elm_Map_Marker_Clas
|
|||
style = marker->clas_group->style;
|
||||
|
||||
o = edje_object_add(evas_object_evas_get(obj));
|
||||
_elm_theme_set(o, "map/marker", style, elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, o, "map/marker", style, elm_widget_style_get(obj));
|
||||
s = edje_object_data_get(o, "size_w");
|
||||
clas_group->priv.edje_w = atoi(s);
|
||||
s = edje_object_data_get(o, "size_h");
|
||||
|
@ -2336,7 +2335,7 @@ elm_map_marker_add(Evas_Object *obj, double lon, double lat, Elm_Map_Marker_Clas
|
|||
style = marker->clas->style;
|
||||
|
||||
o = edje_object_add(evas_object_evas_get(obj));
|
||||
_elm_theme_set(o, "map/marker", style, elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, o, "map/marker", style, elm_widget_style_get(obj));
|
||||
s = edje_object_data_get(o, "size_w");
|
||||
clas->priv.edje_w = atoi(s);
|
||||
s = edje_object_data_get(o, "size_h");
|
||||
|
|
|
@ -105,19 +105,19 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
ll = eina_list_append(ll, item->items);
|
||||
if (item->separator)
|
||||
_elm_theme_set(item->o, "menu", "separator",
|
||||
elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, item->o, "menu", "separator",
|
||||
elm_widget_style_get(obj));
|
||||
else if (item->bx)
|
||||
{
|
||||
_elm_theme_set(item->o, "menu", "item_with_submenu",
|
||||
elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, item->o, "menu", "item_with_submenu",
|
||||
elm_widget_style_get(obj));
|
||||
elm_menu_item_label_set(item, item->label);
|
||||
elm_menu_item_icon_set(item, item->icon);
|
||||
}
|
||||
else
|
||||
{
|
||||
_elm_theme_set(item->o, "menu", "item",
|
||||
elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, item->o, "menu", "item",
|
||||
elm_widget_style_get(obj));
|
||||
elm_menu_item_label_set(item, item->label);
|
||||
elm_menu_item_icon_set(item, item->icon);
|
||||
}
|
||||
|
@ -342,7 +342,7 @@ _item_obj_create(Elm_Menu_Item *item)
|
|||
item->o = edje_object_add(evas_object_evas_get(wd->bx));
|
||||
evas_object_size_hint_weight_set(item->o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_fill_set(item->o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
_elm_theme_set(item->o, "menu", "item", elm_widget_style_get(item->menu));
|
||||
_elm_theme_object_set(item->menu, item->o, "menu", "item", elm_widget_style_get(item->menu));
|
||||
edje_object_signal_callback_add(item->o, "elm,action,click", "",
|
||||
_menu_item_select, item);
|
||||
edje_object_signal_callback_add(item->o, "elm,action,activate", "",
|
||||
|
@ -358,7 +358,7 @@ _item_separator_obj_create(Elm_Menu_Item *item)
|
|||
item->o = edje_object_add(evas_object_evas_get(wd->bx));
|
||||
evas_object_size_hint_weight_set(item->o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_fill_set(item->o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
_elm_theme_set(item->o, "menu", "separator", elm_widget_style_get(item->menu));
|
||||
_elm_theme_object_set(item->menu, item->o, "menu", "separator", elm_widget_style_get(item->menu));
|
||||
edje_object_signal_callback_add(item->o, "elm,action,activate", "",
|
||||
_menu_item_activate, item);
|
||||
evas_object_show(item->o);
|
||||
|
@ -380,7 +380,7 @@ _item_submenu_obj_create(Elm_Menu_Item *item)
|
|||
evas_object_show(item->bx);
|
||||
elm_hover_content_set(item->hv, elm_hover_best_content_location_get(item->hv, ELM_HOVER_AXIS_VERTICAL), item->bx);
|
||||
|
||||
_elm_theme_set(item->o, "menu", "item_with_submenu", elm_widget_style_get(item->menu));
|
||||
_elm_theme_object_set(item->menu, item->o, "menu", "item_with_submenu", elm_widget_style_get(item->menu));
|
||||
elm_menu_item_label_set(item, item->label);
|
||||
elm_menu_item_icon_set(item, item->icon);
|
||||
|
||||
|
|
|
@ -70,9 +70,9 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->notify, "notify", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "default");
|
||||
if (wd->block_events)
|
||||
_elm_theme_set(wd->block_events, "notify", "block_events", "default");
|
||||
_elm_theme_object_set(obj, wd->block_events, "notify", "block_events", "default");
|
||||
edje_object_scale_set(wd->notify, elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
_sizing_eval(obj);
|
||||
|
@ -385,31 +385,31 @@ elm_notify_orient_set(Evas_Object *obj, Elm_Notify_Orient orient)
|
|||
switch (orient)
|
||||
{
|
||||
case ELM_NOTIFY_ORIENT_TOP:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "default");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_CENTER:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "center");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "center");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_BOTTOM:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "bottom");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "bottom");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_LEFT:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "left");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "left");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_RIGHT:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "right");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "right");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_TOP_LEFT:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "top_left");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "top_left");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_TOP_RIGHT:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "top_right");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "top_right");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_BOTTOM_LEFT:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "bottom_left");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "bottom_left");
|
||||
break;
|
||||
case ELM_NOTIFY_ORIENT_BOTTOM_RIGHT:
|
||||
_elm_theme_set(wd->notify, "notify", "base", "bottom_right");
|
||||
_elm_theme_object_set(obj, wd->notify, "notify", "base", "bottom_right");
|
||||
break;
|
||||
}
|
||||
_resize(obj, NULL, obj, NULL);
|
||||
|
@ -469,7 +469,7 @@ elm_notify_repeat_events_set(Evas_Object *obj, Eina_Bool repeat)
|
|||
if (!repeat)
|
||||
{
|
||||
wd->block_events = edje_object_add(evas_object_evas_get(obj));
|
||||
_elm_theme_set(wd->block_events, "notify", "block_events", "default");
|
||||
_elm_theme_object_set(obj, wd->block_events, "notify", "block_events", "default");
|
||||
elm_widget_resize_object_set(obj, wd->block_events);
|
||||
edje_object_signal_callback_add(wd->block_events, "elm,action,clicked", "elm", _signal_block_clicked, obj);
|
||||
}
|
||||
|
|
|
@ -266,7 +266,7 @@ elm_pager_content_push(Evas_Object *obj, Evas_Object *content)
|
|||
evas_object_clip_set(it->base, wd->clip);
|
||||
elm_widget_sub_object_add(obj, it->base);
|
||||
elm_widget_sub_object_add(obj, it->content);
|
||||
_elm_theme_set(it->base, "pager", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, it->base, "pager", "base", elm_widget_style_get(obj));
|
||||
edje_object_signal_callback_add(it->base, "elm,action,hide,finished", "",
|
||||
_signal_hide_finished, it);
|
||||
evas_object_event_callback_add(it->content,
|
||||
|
|
|
@ -46,6 +46,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "panel", "base", elm_widget_style_get(obj));
|
||||
// scale = (elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
// edje_object_scale_set(wd->scr, scale);
|
||||
_sizing_eval(obj);
|
||||
|
@ -150,8 +151,8 @@ elm_panel_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(evas);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "panel", "base", "left");
|
||||
elm_smart_scroller_bounce_allow_set(wd->scr, 0, 0);
|
||||
elm_smart_scroller_theme_set(wd->scr, "panel", "base", "left");
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF,
|
||||
ELM_SMART_SCROLLER_POLICY_OFF);
|
||||
|
@ -203,7 +204,7 @@ elm_panel_orient_set(Evas_Object *obj, Elm_Panel_Orient orient)
|
|||
case ELM_PANEL_ORIENT_BOTTOM:
|
||||
break;
|
||||
case ELM_PANEL_ORIENT_LEFT:
|
||||
elm_smart_scroller_theme_set(wd->scr, "panel", "base", "left");
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "panel", "base", "left");
|
||||
case ELM_PANEL_ORIENT_RIGHT:
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -97,7 +97,7 @@ elm_photo_add(Evas_Object *parent)
|
|||
elm_widget_can_focus_set(obj, 0);
|
||||
|
||||
wd->frm = edje_object_add(e);
|
||||
_elm_theme_set(wd->frm, "photo", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->frm, "photo", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->frm);
|
||||
|
||||
wd->img = _els_smart_icon_add(e);
|
||||
|
|
|
@ -709,7 +709,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
elm_smart_scroller_theme_set(wd->scr, "photocam", "base", elm_widget_style_get(obj));
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "photocam", "base", elm_widget_style_get(obj));
|
||||
// edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -967,7 +967,7 @@ elm_photocam_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
elm_smart_scroller_theme_set(wd->scr, "photocam", "base", "default");
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "photocam", "base", "default");
|
||||
evas_object_smart_callback_add(wd->scr, "scroll", _scr, obj);
|
||||
evas_object_smart_callback_add(wd->scr, "drag", _scr, obj);
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
|
|
|
@ -23,6 +23,16 @@
|
|||
// Why EAPI in a private header ?
|
||||
// EAPI is temporaty - that widget api will change, but makign it EAPI right now to indicate its bound for externalness
|
||||
|
||||
struct _Elm_Theme
|
||||
{
|
||||
Eina_List *overlay;
|
||||
Eina_List *themes;
|
||||
Eina_List *extension;
|
||||
Eina_Hash *cache;
|
||||
const char *theme;
|
||||
int ref;
|
||||
};
|
||||
|
||||
typedef enum _Elm_Engine
|
||||
{
|
||||
ELM_SOFTWARE_X11,
|
||||
|
@ -88,9 +98,11 @@ struct _Elm_Module
|
|||
void _elm_win_shutdown(void);
|
||||
void _elm_win_rescale(void);
|
||||
|
||||
int _elm_theme_set(Evas_Object *o, const char *clas, const char *group, const char *style);
|
||||
int _elm_theme_icon_set(Evas_Object *o, const char *group, const char *style);
|
||||
int _elm_theme_parse(const char *theme);
|
||||
int _elm_theme_object_set(Evas_Object *parent, Evas_Object *o, const char *clas, const char *group, const char *style);
|
||||
int _elm_theme_object_icon_set(Evas_Object *parent, Evas_Object *o, const char *group, const char *style);
|
||||
int _elm_theme_set(Elm_Theme *th, Evas_Object *o, const char *clas, const char *group, const char *style);
|
||||
int _elm_theme_icon_set(Elm_Theme *th, Evas_Object *o, const char *group, const char *style);
|
||||
int _elm_theme_parse(Elm_Theme *th, const char *theme);
|
||||
void _elm_theme_shutdown(void);
|
||||
|
||||
void _elm_module_init(void);
|
||||
|
@ -144,6 +156,8 @@ EAPI void elm_widget_scroll_freeze_pop(Evas_Object *obj);
|
|||
EAPI int elm_widget_scroll_freeze_get(const Evas_Object *obj);
|
||||
EAPI void elm_widget_scale_set(Evas_Object *obj, double scale);
|
||||
EAPI double elm_widget_scale_get(const Evas_Object *obj);
|
||||
EAPI void elm_widget_theme_set(Evas_Object *obj, Elm_Theme *th);
|
||||
EAPI Elm_Theme *elm_widget_theme_get(const Evas_Object *obj);
|
||||
EAPI void elm_widget_style_set(Evas_Object *obj, const char *style);
|
||||
EAPI const char *elm_widget_style_get(const Evas_Object *obj);
|
||||
EAPI void elm_widget_type_set(Evas_Object *obj, const char *type);
|
||||
|
|
|
@ -69,9 +69,9 @@ _theme_hook(Evas_Object *obj)
|
|||
if (!wd) return;
|
||||
edje_object_part_unswallow(NULL, wd->spacer);
|
||||
if (wd->horizontal)
|
||||
_elm_theme_set(wd->progressbar, "progressbar", "horizontal", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->progressbar, "progressbar", "horizontal", elm_widget_style_get(obj));
|
||||
else
|
||||
_elm_theme_set(wd->progressbar, "progressbar", "vertical", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->progressbar, "progressbar", "vertical", elm_widget_style_get(obj));
|
||||
if (wd->inverted)
|
||||
edje_object_signal_emit(wd->progressbar, "elm,state,inverted,on", "elm");
|
||||
else
|
||||
|
@ -202,7 +202,7 @@ elm_progressbar_add(Evas_Object *parent)
|
|||
wd->val = MIN_RATIO_LVL;
|
||||
|
||||
wd->progressbar = edje_object_add(e);
|
||||
_elm_theme_set(wd->progressbar, "progressbar", "horizontal", "default");
|
||||
_elm_theme_object_set(obj, wd->progressbar, "progressbar", "horizontal", "default");
|
||||
elm_widget_resize_object_set(obj, wd->progressbar);
|
||||
|
||||
wd->spacer = evas_object_rectangle_add(e);
|
||||
|
|
|
@ -83,7 +83,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->chk, "radio", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->chk, "radio", "base", elm_widget_style_get(obj));
|
||||
if (wd->icon)
|
||||
edje_object_signal_emit(wd->chk, "elm,state,icon,visible", "elm");
|
||||
else
|
||||
|
@ -228,7 +228,7 @@ elm_radio_add(Evas_Object *parent)
|
|||
elm_widget_disable_hook_set(obj, _disable_hook);
|
||||
|
||||
wd->chk = edje_object_add(e);
|
||||
_elm_theme_set(wd->chk, "radio", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->chk, "radio", "base", "default");
|
||||
edje_object_signal_callback_add(wd->chk, "elm,action,radio,on", "", _signal_radio_on, obj);
|
||||
edje_object_signal_callback_add(wd->chk, "elm,action,radio,toggle", "", _signal_radio_on, obj);
|
||||
elm_widget_resize_object_set(obj, wd->chk);
|
||||
|
|
|
@ -216,8 +216,8 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
elm_smart_scroller_theme_set(wd->scr, "grid", "base",
|
||||
elm_widget_style_get(obj));
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "grid", "base",
|
||||
elm_widget_style_get(obj));
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
||||
|
@ -459,8 +459,8 @@ _cell_realize(Elm_Grid_Cell *cell)
|
|||
_elm_config->scale);
|
||||
evas_object_smart_member_add(cell->base, cell->wd->pan_smart);
|
||||
elm_widget_sub_object_add(cell->wd->self, cell->base);
|
||||
_elm_theme_set(cell->base, "grid", "cell/default",
|
||||
elm_widget_style_get(cell->wd->self));
|
||||
_elm_theme_object_set(cell->wd->self, cell->base, "grid", "cell/default",
|
||||
elm_widget_style_get(cell->wd->self));
|
||||
cell->spacer = evas_object_rectangle_add(evas_object_evas_get(cell->wd->self));
|
||||
evas_object_color_set(cell->spacer, 0, 0, 0, 0);
|
||||
elm_widget_sub_object_add(cell->wd->self, cell->spacer);
|
||||
|
@ -955,7 +955,7 @@ elm_scrolled_grid_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
elm_smart_scroller_theme_set(wd->scr, "grid", "base", "default");
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "grid", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
|
||||
evas_object_smart_callback_add(wd->scr, "drag,start", _scr_drag_start, obj);
|
||||
|
|
|
@ -88,11 +88,9 @@ _theme_hook(Evas_Object *obj)
|
|||
if (!wd) return;
|
||||
if (wd->scr)
|
||||
{
|
||||
// elm_smart_scroller_theme_set(wd->scr, "scroller", "base", elm_widget_style_get(obj));
|
||||
elm_smart_scroller_theme_set(wd->scr,
|
||||
wd->widget_name,
|
||||
wd->widget_base,
|
||||
elm_widget_style_get(obj));
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr,
|
||||
wd->widget_name, wd->widget_base,
|
||||
elm_widget_style_get(obj));
|
||||
// edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
}
|
||||
_sizing_eval(obj);
|
||||
|
@ -308,10 +306,9 @@ elm_scroller_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
// elm_smart_scroller_theme_set(wd->scr,
|
||||
// wd->widget_name,
|
||||
// wd->widget_base,
|
||||
// elm_widget_style_get(obj));
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr,
|
||||
wd->widget_name, wd->widget_base,
|
||||
elm_widget_style_get(obj));
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
|
||||
_changed_size_hints, obj);
|
||||
|
|
|
@ -35,9 +35,9 @@ _theme_hook(Evas_Object *obj)
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
if (wd->horizontal)
|
||||
_elm_theme_set(wd->sep, "separator", "horizontal", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->sep, "separator", "horizontal", elm_widget_style_get(obj));
|
||||
else
|
||||
_elm_theme_set(wd->sep, "separator", "vertical", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->sep, "separator", "vertical", elm_widget_style_get(obj));
|
||||
edje_object_scale_set(wd->sep, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ elm_separator_add(Evas_Object *parent)
|
|||
elm_widget_can_focus_set(obj, 0);
|
||||
|
||||
wd->sep = edje_object_add(e);
|
||||
_elm_theme_set(wd->sep, "separator", "vertical", "default");
|
||||
_elm_theme_object_set(obj, wd->sep, "separator", "vertical", "default");
|
||||
elm_widget_resize_object_set(obj, wd->sep);
|
||||
_sizing_eval(obj);
|
||||
return obj;
|
||||
|
|
|
@ -95,9 +95,9 @@ _theme_hook(Evas_Object *obj)
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
if (wd->horizontal)
|
||||
_elm_theme_set(wd->slider, "slider", "horizontal", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->slider, "slider", "horizontal", elm_widget_style_get(obj));
|
||||
else
|
||||
_elm_theme_set(wd->slider, "slider", "vertical", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->slider, "slider", "vertical", elm_widget_style_get(obj));
|
||||
if (wd->inverted)
|
||||
edje_object_signal_emit(wd->slider, "elm,state,inverted,on", "elm");
|
||||
else
|
||||
|
@ -319,7 +319,7 @@ elm_slider_add(Evas_Object *parent)
|
|||
wd->val_max = 1.0;
|
||||
|
||||
wd->slider = edje_object_add(e);
|
||||
_elm_theme_set(wd->slider, "slider", "horizontal", "default");
|
||||
_elm_theme_object_set(obj, wd->slider, "slider", "horizontal", "default");
|
||||
elm_widget_resize_object_set(obj, wd->slider);
|
||||
edje_object_signal_callback_add(wd->slider, "drag", "*", _drag, obj);
|
||||
edje_object_signal_callback_add(wd->slider, "drag,start", "*", _drag_start, obj);
|
||||
|
|
|
@ -74,7 +74,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->slideshow, "slideshow", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->slideshow, "slideshow", "base", "default");
|
||||
edje_object_scale_set(wd->slideshow, elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
_sizing_eval(obj);
|
||||
|
@ -232,7 +232,7 @@ elm_slideshow_add(Evas_Object *parent)
|
|||
wd->previous = NULL;
|
||||
|
||||
wd->slideshow = edje_object_add(e);
|
||||
_elm_theme_set(wd->slideshow, "slideshow", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->slideshow, "slideshow", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->slideshow);
|
||||
evas_object_show(wd->slideshow);
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->spinner, "spinner", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->spinner, "spinner", "base", elm_widget_style_get(obj));
|
||||
edje_object_part_swallow(wd->spinner, "elm.swallow.entry", wd->ent);
|
||||
_write_label(obj);
|
||||
edje_object_message_signal_process(wd->spinner);
|
||||
|
@ -517,7 +517,7 @@ elm_spinner_add(Evas_Object *parent)
|
|||
wd->editable = EINA_TRUE;
|
||||
|
||||
wd->spinner = edje_object_add(e);
|
||||
_elm_theme_set(wd->spinner, "spinner", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->spinner, "spinner", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->spinner);
|
||||
edje_object_signal_callback_add(wd->spinner, "drag", "*", _drag, obj);
|
||||
edje_object_signal_callback_add(wd->spinner, "drag,start", "*",
|
||||
|
|
|
@ -7,13 +7,38 @@
|
|||
* Functions to modify the theme in the currently running app.
|
||||
*/
|
||||
|
||||
static Eina_List *overlay = NULL;
|
||||
static Elm_Theme theme_default =
|
||||
{
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, 1
|
||||
};
|
||||
|
||||
static Eina_List *themes = NULL;
|
||||
static Eina_List *extension = NULL;
|
||||
static Eina_Hash *cache = NULL;
|
||||
|
||||
static void
|
||||
_elm_theme_clear(Elm_Theme *th)
|
||||
{
|
||||
const char *p;
|
||||
EINA_LIST_FREE(th->themes, p)
|
||||
eina_stringshare_del(p);
|
||||
EINA_LIST_FREE(th->overlay, p)
|
||||
eina_stringshare_del(p);
|
||||
EINA_LIST_FREE(th->extension, p)
|
||||
eina_stringshare_del(p);
|
||||
if (th->cache)
|
||||
{
|
||||
eina_hash_free(th->cache);
|
||||
th->cache = NULL;
|
||||
}
|
||||
if (th->theme)
|
||||
{
|
||||
eina_stringshare_del(th->theme);
|
||||
th->theme = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
_elm_theme_find_try(const char *f, const char *group)
|
||||
_elm_theme_find_try(Elm_Theme *th, const char *f, const char *group)
|
||||
{
|
||||
const char *file;
|
||||
|
||||
|
@ -22,7 +47,7 @@ _elm_theme_find_try(const char *f, const char *group)
|
|||
file = eina_stringshare_add(f);
|
||||
if (file)
|
||||
{
|
||||
eina_hash_add(cache, group, file);
|
||||
eina_hash_add(th->cache, group, file);
|
||||
return file;
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +55,7 @@ _elm_theme_find_try(const char *f, const char *group)
|
|||
}
|
||||
|
||||
static const char *
|
||||
_elm_theme_theme_element_try(const char *home, const char *f, const char *group)
|
||||
_elm_theme_theme_element_try(Elm_Theme *th, const char *home, const char *f, const char *group)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
const char *file = NULL;
|
||||
|
@ -38,27 +63,27 @@ _elm_theme_theme_element_try(const char *home, const char *f, const char *group)
|
|||
if ((f[0] == '/') || ((f[0] == '.') && (f[1] == '/')) ||
|
||||
((f[0] == '.') && (f[1] == '.') && (f[2] == '/')) ||
|
||||
(isalpha(f[0]) && f[1] == ':'))
|
||||
return _elm_theme_find_try(f, group);
|
||||
return _elm_theme_find_try(th, f, group);
|
||||
else if (((f[0] == '~') && (f[1] == '/')))
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/%s", home, f + 2);
|
||||
return _elm_theme_find_try(buf, group);
|
||||
return _elm_theme_find_try(th, buf, group);
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "%s/.elementary/themes/%s.edj", home, f);
|
||||
file = _elm_theme_find_try(buf, group);
|
||||
file = _elm_theme_find_try(th, buf, group);
|
||||
if (file) return file;
|
||||
snprintf(buf, sizeof(buf), "%s/themes/%s.edj", _elm_data_dir, f);
|
||||
file = _elm_theme_find_try(buf, group);
|
||||
file = _elm_theme_find_try(th, buf, group);
|
||||
return file;
|
||||
}
|
||||
|
||||
static const char *
|
||||
_elm_theme_group_file_find(const char *group)
|
||||
_elm_theme_group_file_find(Elm_Theme *th, const char *group)
|
||||
{
|
||||
const Eina_List *l;
|
||||
const char *f;
|
||||
static const char *home = NULL;
|
||||
const char *file = eina_hash_find(cache, group);
|
||||
const char *file = eina_hash_find(th->cache, group);
|
||||
|
||||
if (file) return file;
|
||||
if (!home)
|
||||
|
@ -66,123 +91,420 @@ _elm_theme_group_file_find(const char *group)
|
|||
home = getenv("HOME");
|
||||
if (!home) home = "";
|
||||
}
|
||||
EINA_LIST_FOREACH(overlay, l, f)
|
||||
EINA_LIST_FOREACH(th->overlay, l, f)
|
||||
{
|
||||
file = _elm_theme_theme_element_try(home, f, group);
|
||||
file = _elm_theme_theme_element_try(th, home, f, group);
|
||||
if (file) return file;
|
||||
}
|
||||
EINA_LIST_FOREACH(themes, l, f)
|
||||
EINA_LIST_FOREACH(th->themes, l, f)
|
||||
{
|
||||
file = _elm_theme_theme_element_try(home, f, group);
|
||||
file = _elm_theme_theme_element_try(th, home, f, group);
|
||||
if (file) return file;
|
||||
}
|
||||
EINA_LIST_FOREACH(extension, l, f)
|
||||
EINA_LIST_FOREACH(th->extension, l, f)
|
||||
{
|
||||
file = _elm_theme_theme_element_try(home, f, group);
|
||||
file = _elm_theme_theme_element_try(th, home, f, group);
|
||||
if (file) return file;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_object_set(Evas_Object *parent, Evas_Object *o, const char *clas, const char *group, const char *style)
|
||||
{
|
||||
Elm_Theme *th = NULL;
|
||||
if (parent) th = elm_widget_theme_get(parent);
|
||||
return _elm_theme_set(th, o, clas, group, style);
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_object_icon_set(Evas_Object *parent, Evas_Object *o, const char *group, const char *style)
|
||||
{
|
||||
Elm_Theme *th = NULL;
|
||||
if (parent) th = elm_widget_theme_get(parent);
|
||||
return _elm_theme_icon_set(th, o, group, style);
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_set(Elm_Theme *th, Evas_Object *o, const char *clas, const char *group, const char *style)
|
||||
{
|
||||
const char *file;
|
||||
char buf2[1024];
|
||||
int ok;
|
||||
|
||||
if (!th) th = &(theme_default);
|
||||
snprintf(buf2, sizeof(buf2), "elm/%s/%s/%s", clas, group, style);
|
||||
file = _elm_theme_group_file_find(th, buf2);
|
||||
if (file)
|
||||
{
|
||||
ok = edje_object_file_set(o, file, buf2);
|
||||
if (ok) return 1;
|
||||
}
|
||||
snprintf(buf2, sizeof(buf2), "elm/%s/%s/default", clas, group);
|
||||
file = _elm_theme_group_file_find(th, buf2);
|
||||
if (!file) return 0;
|
||||
ok = edje_object_file_set(o, file, buf2);
|
||||
return ok;
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_icon_set(Elm_Theme *th, Evas_Object *o, const char *group, const char *style)
|
||||
{
|
||||
const char *file;
|
||||
char buf2[1024];
|
||||
int w, h;
|
||||
|
||||
if (!th) th = &(theme_default);
|
||||
snprintf(buf2, sizeof(buf2), "elm/icon/%s/%s", group, style);
|
||||
file = _elm_theme_group_file_find(th, buf2);
|
||||
if (file)
|
||||
{
|
||||
_els_smart_icon_file_edje_set(o, file, buf2);
|
||||
_els_smart_icon_size_get(o, &w, &h);
|
||||
if (w > 0) return 1;
|
||||
}
|
||||
snprintf(buf2, sizeof(buf2), "elm/icon/%s/default", group);
|
||||
file = _elm_theme_group_file_find(th, buf2);
|
||||
if (!file) return 0;
|
||||
_els_smart_icon_file_edje_set(o, file, buf2);
|
||||
_els_smart_icon_size_get(o, &w, &h);
|
||||
return (w > 0);
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_parse(Elm_Theme *th, const char *theme)
|
||||
{
|
||||
Eina_List *names = NULL;
|
||||
const char *p, *pe;
|
||||
|
||||
if (!th) th = &(theme_default);
|
||||
if (theme)
|
||||
{
|
||||
p = theme;
|
||||
pe = p;
|
||||
for (;;)
|
||||
{
|
||||
if ((*pe == ':') || (*pe == 0))
|
||||
{ // p -> pe == 'name:'
|
||||
if (pe > p)
|
||||
{
|
||||
char *n = malloc(pe - p + 1);
|
||||
if (n)
|
||||
{
|
||||
const char *nn;
|
||||
|
||||
strncpy(n, p, pe - p);
|
||||
n[pe - p] = 0;
|
||||
nn = eina_stringshare_add(n);
|
||||
if (nn) names = eina_list_append(names, nn);
|
||||
free(n);
|
||||
}
|
||||
}
|
||||
if (*pe == 0) break;
|
||||
p = pe + 1;
|
||||
pe = p;
|
||||
}
|
||||
else
|
||||
pe++;
|
||||
}
|
||||
}
|
||||
p = eina_list_data_get(eina_list_last(names));
|
||||
if ((!p) || ((p) && (strcmp(p, "default"))))
|
||||
{
|
||||
p = eina_stringshare_add("default");
|
||||
if (p) names = eina_list_append(names, p);
|
||||
}
|
||||
if (th->cache) eina_hash_free(th->cache);
|
||||
th->cache = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
|
||||
|
||||
EINA_LIST_FREE(th->themes, p) eina_stringshare_del(p);
|
||||
|
||||
th->themes = names;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
_elm_theme_shutdown(void)
|
||||
{
|
||||
_elm_theme_clear(&(theme_default));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new specific theme
|
||||
*
|
||||
* This creates an empty specific theme that only uses the default theme. A
|
||||
* specific theme has its own private set of extensions and overlays too
|
||||
* (which are empty by default). Specific themes do not fall back to themes
|
||||
* of parent objects. They are not intended for this use. Use styles, overlays
|
||||
* and extensions when needed, but avoid specific themes unless there is no
|
||||
* other way (example: you want to have a preview of a new theme you are
|
||||
* selecting in a "theme selector" window. The preview is inside a scroller
|
||||
* and should display what the theme you selected will look like, but not
|
||||
* actually apply it yet. The child of the scroller will have a specific
|
||||
* theme set to show this preview before the user decides to apply it to all
|
||||
* applications).
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI Elm_Theme *
|
||||
elm_theme_new(void)
|
||||
{
|
||||
Elm_Theme *th = calloc(1, sizeof(Elm_Theme));
|
||||
if (!th) return NULL;
|
||||
th->ref = 1;
|
||||
th->themes = eina_list_append(th->themes, eina_stringshare_add("default"));
|
||||
themes = eina_list_append(themes, th);
|
||||
return th;
|
||||
}
|
||||
|
||||
/**
|
||||
* Free a specific theme
|
||||
*
|
||||
* @param th The theme to free
|
||||
*
|
||||
* This frees a theme created with elm_theme_new().
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_free(Elm_Theme *th)
|
||||
{
|
||||
th->ref--;
|
||||
if (th->ref < 1)
|
||||
{
|
||||
_elm_theme_clear(th);
|
||||
themes = eina_list_remove(themes, th);
|
||||
free(th);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepends a theme overlay to the list of overlays
|
||||
*
|
||||
* @param item The name of the theme overlay
|
||||
* @param th The theme to add to, or if NULL, the default theme
|
||||
* @param item The Edje file path to be used
|
||||
*
|
||||
* Use this if your application needs to provide some custom overlay theme
|
||||
* (An Edje file that replaces some default styles of widgets) where adding
|
||||
* new styles, or changing system theme configuration is not possible. Do
|
||||
* NOT use this instead of a proper system theme configuration. Use proper
|
||||
* configuration files, profiles, environment variables etc. to set a theme
|
||||
* so that the theme can be altered by simple confiugration by a user. Using
|
||||
* this call to achieve that effect is abusing the API and will create lots
|
||||
* of trouble.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_overlay_add(const char *item)
|
||||
elm_theme_overlay_add(Elm_Theme *th, const char *item)
|
||||
{
|
||||
const char *f = eina_stringshare_add(item);
|
||||
|
||||
if (f) overlay = eina_list_prepend(overlay, f);
|
||||
elm_theme_flush();
|
||||
if (!th) th = &(theme_default);
|
||||
if (f) th->overlay = eina_list_prepend(th->overlay, f);
|
||||
elm_theme_flush(th);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a theme overlay from the list of overlays
|
||||
*
|
||||
* @param th The theme to delete from, or if NULL, the default theme
|
||||
* @param item The name of the theme overlay
|
||||
*
|
||||
* See elm_theme_overlay_add().
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_overlay_del(const char *item)
|
||||
elm_theme_overlay_del(Elm_Theme *th, const char *item)
|
||||
{
|
||||
const Eina_List *l;
|
||||
const char *f, *s;
|
||||
|
||||
if (!th) th = &(theme_default);
|
||||
s = eina_stringshare_add(item);
|
||||
EINA_LIST_FOREACH(overlay, l, f)
|
||||
EINA_LIST_FOREACH(th->overlay, l, f)
|
||||
if (f == s)
|
||||
{
|
||||
eina_stringshare_del(f);
|
||||
overlay = eina_list_remove_list(overlay, (Eina_List *)l);
|
||||
th->overlay = eina_list_remove_list(th->overlay, (Eina_List *)l);
|
||||
break;
|
||||
}
|
||||
eina_stringshare_del(s);
|
||||
elm_theme_flush();
|
||||
elm_theme_flush(th);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepends a theme extension to the list of extensions.
|
||||
*
|
||||
* @param item The name of the theme extension
|
||||
* @param th The theme to add to, or if NULL, the default theme
|
||||
* @param item The Edje file path to be used
|
||||
*
|
||||
* This is intended when an application needs more styles of widgets or new
|
||||
* widget themes that the default does not provide (or may not provide). The
|
||||
* application has "extended" usage by coming up with new custom style names
|
||||
* for widgets for specific uses, but as these are not "standard", they are
|
||||
* not guaranteed to be provided by a default theme. This means the
|
||||
* application is required to provide these extra elements itself in specific
|
||||
* Edje files. This call adds one of those Edje files to the theme search
|
||||
* path to be search after the default theme. The use of this call is
|
||||
* encouraged when default styles do not meet the needs of the application.
|
||||
* Use this call instead of elm_theme_overlay_add() for almost all cases.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_extension_add(const char *item)
|
||||
elm_theme_extension_add(Elm_Theme *th, const char *item)
|
||||
{
|
||||
const char *f = eina_stringshare_add(item);
|
||||
|
||||
if (f) extension = eina_list_append(extension, f);
|
||||
elm_theme_flush();
|
||||
if (!th) th = &(theme_default);
|
||||
if (f) th->extension = eina_list_append(th->extension, f);
|
||||
elm_theme_flush(th);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a theme extension from the list of extensions.
|
||||
*
|
||||
* @param th The theme to delete from, or if NULL, the default theme
|
||||
* @param item The name of the theme extension
|
||||
*
|
||||
* See elm_theme_extension_add().
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_extension_del(const char *item)
|
||||
elm_theme_extension_del(Elm_Theme *th, const char *item)
|
||||
{
|
||||
const Eina_List *l;
|
||||
const char *f, *s;
|
||||
|
||||
if (!th) th = &(theme_default);
|
||||
s = eina_stringshare_add(item);
|
||||
EINA_LIST_FOREACH(extension, l, f)
|
||||
EINA_LIST_FOREACH(th->extension, l, f)
|
||||
if (f == s)
|
||||
{
|
||||
eina_stringshare_del(f);
|
||||
extension = eina_list_remove_list(extension, (Eina_List *)l);
|
||||
th->extension = eina_list_remove_list(th->extension, (Eina_List *)l);
|
||||
break;
|
||||
}
|
||||
eina_stringshare_del(s);
|
||||
elm_theme_flush();
|
||||
elm_theme_flush(th);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the theme search order for the given theme
|
||||
*
|
||||
* @param th The theme to set the search order, or if NULL, the default theme
|
||||
* @param theme Theme search string
|
||||
*
|
||||
* This sets the search string for the theme in path-notation from first
|
||||
* theme to search, to last, delimited by the : character. Example:
|
||||
*
|
||||
* "shiny:/path/to/file.edj:default"
|
||||
*
|
||||
* See the ELM_THEME environment variable for more information.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_set(Elm_Theme *th, const char *theme)
|
||||
{
|
||||
if (!th) th = &(theme_default);
|
||||
_elm_theme_parse(th, theme);
|
||||
if (th->theme)
|
||||
{
|
||||
eina_stringshare_del(th->theme);
|
||||
th->theme = NULL;
|
||||
}
|
||||
elm_theme_flush(th);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the theme search order
|
||||
*
|
||||
* @param th The theme to get the search order, or if NULL, the default theme
|
||||
* @return The internal search order path
|
||||
*
|
||||
* See elm_theme_set() for more information.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI const char *
|
||||
elm_theme_get(Elm_Theme *th)
|
||||
{
|
||||
if (!th->theme)
|
||||
{
|
||||
Eina_List *l;
|
||||
const char *f;
|
||||
char *tmp;
|
||||
int len;
|
||||
|
||||
len = 0;
|
||||
EINA_LIST_FOREACH(th->themes, l, f)
|
||||
{
|
||||
len + strlen(f);
|
||||
if (l->next) len += 1;
|
||||
}
|
||||
tmp = alloca(len + 1);
|
||||
tmp[0] = 0;
|
||||
EINA_LIST_FOREACH(th->themes, l, f)
|
||||
{
|
||||
strcat(tmp, f);
|
||||
if (l->next) strcat(tmp, ":");
|
||||
}
|
||||
th->theme = eina_stringshare_add(tmp);
|
||||
}
|
||||
return th->theme;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush the current theme.
|
||||
*
|
||||
* @param th Theme to flush
|
||||
*
|
||||
* This flushes caches that let elementary know where to find theme elements
|
||||
* in the given theme. If @p th is NULL, then the default theme is flushed.
|
||||
* Call this call if source theme data has changed in such a way as to
|
||||
* make any caches Elementary kept invalid.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_flush(void)
|
||||
elm_theme_flush(Elm_Theme *th)
|
||||
{
|
||||
if (cache) eina_hash_free(cache);
|
||||
cache = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
|
||||
if (!th) th = &(theme_default);
|
||||
if (th->cache) eina_hash_free(th->cache);
|
||||
th->cache = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
|
||||
_elm_win_rescale();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the theme in the current app to theme @p theme
|
||||
* This flushes all themems (default and specific ones).
|
||||
*
|
||||
* This will flush all themes in the current application context, by calling
|
||||
* elm_theme_flush() on each of them.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_theme_full_flush(void)
|
||||
{
|
||||
Eina_List *l;
|
||||
Elm_Theme *th;
|
||||
|
||||
EINA_LIST_FOREACH(themes, l, th)
|
||||
{
|
||||
elm_theme_flush(th);
|
||||
}
|
||||
elm_theme_flush(&(theme_default));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the theme for all elementary using applications on the current display
|
||||
*
|
||||
* @param theme The name of the theme to use
|
||||
* @param theme The name of the theme to use. Format same as the ELM_THEME
|
||||
* environment variable.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
|
@ -196,117 +518,47 @@ elm_theme_all_set(const char *theme)
|
|||
ecore_x_window_prop_string_set(ecore_x_window_root_first_get(),
|
||||
atom, theme);
|
||||
#endif
|
||||
elm_theme_set(NULL, theme);
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_set(Evas_Object *o, const char *clas, const char *group, const char *style)
|
||||
/**
|
||||
* Set a specific theme to be used for this object and its children
|
||||
*
|
||||
* @param obj The object to set the theme on
|
||||
* @param th The theme to set
|
||||
*
|
||||
* This sets a specific theme that will be used for the given object and any
|
||||
* child objects it has. If @p th is NULL then the theme to be used is
|
||||
* cleared and the object will inherit its theme from its parent (which
|
||||
* ultimately will use the default theme if no specific themes are set).
|
||||
*
|
||||
* Use special themes with great care as this will annoy users and make
|
||||
* configuration difficult. Avoid any custom themes at all if it can be
|
||||
* helped.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI void
|
||||
elm_object_theme_set(Evas_Object *obj, Elm_Theme *th)
|
||||
{
|
||||
const char *file;
|
||||
char buf2[1024];
|
||||
int ok;
|
||||
|
||||
snprintf(buf2, sizeof(buf2), "elm/%s/%s/%s", clas, group, style);
|
||||
file = _elm_theme_group_file_find(buf2);
|
||||
if (file)
|
||||
{
|
||||
ok = edje_object_file_set(o, file, buf2);
|
||||
if (ok) return 1;
|
||||
}
|
||||
snprintf(buf2, sizeof(buf2), "elm/%s/%s/default", clas, group);
|
||||
file = _elm_theme_group_file_find(buf2);
|
||||
if (!file) return 0;
|
||||
ok = edje_object_file_set(o, file, buf2);
|
||||
return ok;
|
||||
elm_widget_theme_set(obj, th);
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_icon_set(Evas_Object *o, const char *group, const char *style)
|
||||
/**
|
||||
* Get the specific theme to be used
|
||||
*
|
||||
* @param obj The object to get the specific theme from
|
||||
* @return The specifc theme set.
|
||||
*
|
||||
* This will return a specific theme set, or NULL if no specific theme is
|
||||
* set on that object. It will not return inherited themes from parents, only
|
||||
* the specific theme set for that specific object. See elm_object_theme_set()
|
||||
* for more information.
|
||||
*
|
||||
* @ingroup Theme
|
||||
*/
|
||||
EAPI Elm_Theme *
|
||||
elm_object_theme_get(Evas_Object *obj)
|
||||
{
|
||||
const char *file;
|
||||
char buf2[1024];
|
||||
int w, h;
|
||||
|
||||
snprintf(buf2, sizeof(buf2), "elm/icon/%s/%s", group, style);
|
||||
file = _elm_theme_group_file_find(buf2);
|
||||
if (file)
|
||||
{
|
||||
_els_smart_icon_file_edje_set(o, file, buf2);
|
||||
_els_smart_icon_size_get(o, &w, &h);
|
||||
if (w > 0) return 1;
|
||||
}
|
||||
snprintf(buf2, sizeof(buf2), "elm/icon/%s/default", group);
|
||||
file = _elm_theme_group_file_find(buf2);
|
||||
if (!file) return 0;
|
||||
_els_smart_icon_file_edje_set(o, file, buf2);
|
||||
_els_smart_icon_size_get(o, &w, &h);
|
||||
return (w > 0);
|
||||
}
|
||||
|
||||
int
|
||||
_elm_theme_parse(const char *theme)
|
||||
{
|
||||
Eina_List *names = NULL;
|
||||
const char *p, *pe;
|
||||
|
||||
p = theme;
|
||||
pe = p;
|
||||
for (;;)
|
||||
{
|
||||
if ((*pe == ':') || (*pe == 0))
|
||||
{ // p -> pe == 'name:'
|
||||
if (pe > p)
|
||||
{
|
||||
char *n = malloc(pe - p + 1);
|
||||
if (n)
|
||||
{
|
||||
const char *nn;
|
||||
|
||||
strncpy(n, p, pe - p);
|
||||
n[pe - p] = 0;
|
||||
nn = eina_stringshare_add(n);
|
||||
if (nn)
|
||||
names = eina_list_append(names, nn);
|
||||
free(n);
|
||||
}
|
||||
}
|
||||
if (*pe == 0) break;
|
||||
p = pe + 1;
|
||||
pe = p;
|
||||
}
|
||||
else
|
||||
pe++;
|
||||
}
|
||||
p = eina_list_data_get(eina_list_last(names));
|
||||
if ((!p) || ((p) && (strcmp(p, "default"))))
|
||||
{
|
||||
p = eina_stringshare_add("default");
|
||||
if (p)
|
||||
names = eina_list_append(names, p);
|
||||
}
|
||||
if (cache)
|
||||
eina_hash_free(cache);
|
||||
cache = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
|
||||
|
||||
EINA_LIST_FREE(themes, p)
|
||||
eina_stringshare_del(p);
|
||||
|
||||
themes = names;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
_elm_theme_shutdown(void)
|
||||
{
|
||||
const char *p;
|
||||
EINA_LIST_FREE(themes, p)
|
||||
eina_stringshare_del(p);
|
||||
EINA_LIST_FREE(overlay, p)
|
||||
eina_stringshare_del(p);
|
||||
EINA_LIST_FREE(extension, p)
|
||||
eina_stringshare_del(p);
|
||||
if (cache)
|
||||
{
|
||||
eina_hash_free(cache);
|
||||
cache = NULL;
|
||||
}
|
||||
return elm_widget_theme_get(obj);
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ static void
|
|||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
_elm_theme_set(wd->children.frm, "thumb", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->children.frm, "thumb", "base", elm_widget_style_get(obj));
|
||||
}
|
||||
|
||||
#ifdef HAVE_ELEMENTARY_ETHUMB
|
||||
|
@ -473,7 +473,7 @@ elm_thumb_add(Evas_Object *parent)
|
|||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
|
||||
wd->children.frm = edje_object_add(evas);
|
||||
_elm_theme_set(wd->children.frm, "thumb", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->children.frm, "thumb", "base", "default");
|
||||
elm_widget_sub_object_add(obj, wd->children.frm);
|
||||
|
||||
edje_object_size_min_calc(obj, &minw, &minh);
|
||||
|
|
|
@ -69,7 +69,7 @@ _theme_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_elm_theme_set(wd->tgl, "toggle", "base", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->tgl, "toggle", "base", elm_widget_style_get(obj));
|
||||
if (wd->icon)
|
||||
edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm");
|
||||
else
|
||||
|
@ -177,7 +177,7 @@ elm_toggle_add(Evas_Object *parent)
|
|||
elm_widget_disable_hook_set(obj, _disable_hook);
|
||||
|
||||
wd->tgl = edje_object_add(e);
|
||||
_elm_theme_set(wd->tgl, "toggle", "base", "default");
|
||||
_elm_theme_object_set(obj, wd->tgl, "toggle", "base", "default");
|
||||
wd->ontext = eina_stringshare_add("ON");
|
||||
wd->offtext = eina_stringshare_add("OFF");
|
||||
edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,on", "",
|
||||
|
|
|
@ -177,9 +177,10 @@ _theme_hook(Evas_Object *obj)
|
|||
const Eina_List *l;
|
||||
Elm_Toolbar_Item *it;
|
||||
const char *style = elm_widget_style_get(obj);
|
||||
int scale = 0;
|
||||
double scale = 0;
|
||||
|
||||
if (!wd) return;
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", elm_widget_style_get(obj));
|
||||
scale = (elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
// edje_object_scale_set(wd->scr, scale);
|
||||
EINA_LIST_FOREACH(wd->items, l, it)
|
||||
|
@ -193,7 +194,7 @@ _theme_hook(Evas_Object *obj)
|
|||
edje_object_signal_emit(it->base, "elm,state,selected", "elm");
|
||||
if (it->disabled)
|
||||
edje_object_signal_emit(it->base, "elm,state,disabled", "elm");
|
||||
_elm_theme_set(it->base, "toolbar", "item", style);
|
||||
_elm_theme_object_set(obj, it->base, "toolbar", "item", style);
|
||||
if (it->icon)
|
||||
{
|
||||
int ms = 0;
|
||||
|
@ -207,7 +208,7 @@ _theme_hook(Evas_Object *obj)
|
|||
edje_object_part_text_set(it->base, "elm.text", it->label);
|
||||
}
|
||||
else
|
||||
_elm_theme_set(it->base, "toolbar", "separator", style);
|
||||
_elm_theme_object_set(obj, it->base, "toolbar", "separator", style);
|
||||
|
||||
mw = mh = -1;
|
||||
if (!it->separator)
|
||||
|
@ -321,8 +322,8 @@ elm_toolbar_add(Evas_Object *parent)
|
|||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
elm_smart_scroller_widget_set(wd->scr, obj);
|
||||
elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", "default");
|
||||
elm_smart_scroller_bounce_allow_set(wd->scr, 1, 0);
|
||||
elm_smart_scroller_theme_set(wd->scr, "toolbar", "base", "default");
|
||||
elm_widget_resize_object_set(obj, wd->scr);
|
||||
elm_smart_scroller_policy_set(wd->scr,
|
||||
ELM_SMART_SCROLLER_POLICY_AUTO,
|
||||
|
@ -415,7 +416,7 @@ elm_toolbar_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, Eva
|
|||
it->data = data;
|
||||
it->separator = EINA_FALSE;
|
||||
it->base = edje_object_add(evas_object_evas_get(obj));
|
||||
_elm_theme_set(it->base, "toolbar", "item", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, it->base, "toolbar", "item", elm_widget_style_get(obj));
|
||||
edje_object_signal_callback_add(it->base, "elm,action,click", "elm",
|
||||
_select, it);
|
||||
elm_widget_sub_object_add(obj, it->base);
|
||||
|
|
|
@ -39,6 +39,7 @@ struct _Smart_Data
|
|||
int scroll_hold;
|
||||
int scroll_freeze;
|
||||
double scale;
|
||||
Elm_Theme *theme;
|
||||
const char *style;
|
||||
|
||||
int child_drag_x_locked;
|
||||
|
@ -212,6 +213,7 @@ elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj)
|
|||
{
|
||||
API_ENTRY return;
|
||||
double scale, pscale = elm_widget_scale_get(sobj);
|
||||
Elm_Theme *th, *pth = elm_widget_theme_get(sobj);
|
||||
|
||||
sd->subobjs = eina_list_append(sd->subobjs, sobj);
|
||||
if (!sd->child_can_focus)
|
||||
|
@ -232,7 +234,8 @@ elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj)
|
|||
evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
|
||||
evas_object_smart_callback_call(obj, "sub-object-add", sobj);
|
||||
scale = elm_widget_scale_get(sobj);
|
||||
if (scale != pscale) elm_widget_theme(sobj);
|
||||
th = elm_widget_theme_get(sobj);
|
||||
if ((scale != pscale) || (th != pth)) elm_widget_theme(sobj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -877,6 +880,7 @@ EAPI double
|
|||
elm_widget_scale_get(const Evas_Object *obj)
|
||||
{
|
||||
API_ENTRY return 1.0;
|
||||
// FIXME: save walking up the tree by storingcaching parent scale
|
||||
if (sd->scale == 0.0)
|
||||
{
|
||||
if (sd->parent_obj)
|
||||
|
@ -887,6 +891,33 @@ elm_widget_scale_get(const Evas_Object *obj)
|
|||
return sd->scale;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_widget_theme_set(Evas_Object *obj, Elm_Theme *th)
|
||||
{
|
||||
API_ENTRY return;
|
||||
if (sd->theme != th)
|
||||
{
|
||||
if (sd->theme) elm_theme_free(sd->theme);
|
||||
sd->theme = th;
|
||||
if (th) th->ref++;
|
||||
elm_widget_theme(obj);
|
||||
}
|
||||
}
|
||||
|
||||
EAPI Elm_Theme *
|
||||
elm_widget_theme_get(const Evas_Object *obj)
|
||||
{
|
||||
API_ENTRY return NULL;
|
||||
if (!sd->theme)
|
||||
{
|
||||
if (sd->parent_obj)
|
||||
return elm_widget_theme_get(sd->parent_obj);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
return sd->theme;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_widget_style_set(Evas_Object *obj, const char *style)
|
||||
{
|
||||
|
@ -1081,6 +1112,7 @@ _smart_del(Evas_Object *obj)
|
|||
if (sd->del_func) sd->del_func(obj);
|
||||
if (sd->style) eina_stringshare_del(sd->style);
|
||||
if (sd->type) eina_stringshare_del(sd->type);
|
||||
if (sd->theme) elm_theme_free(sd->theme);
|
||||
free(sd);
|
||||
}
|
||||
|
||||
|
|
|
@ -1590,7 +1590,7 @@ static void
|
|||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
_elm_theme_set(wd->frm, "win", "inwin", elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->frm, "win", "inwin", elm_widget_style_get(obj));
|
||||
if (wd->content)
|
||||
edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->content);
|
||||
_sizing_eval(obj);
|
||||
|
@ -1657,7 +1657,7 @@ elm_win_inwin_add(Evas_Object *obj)
|
|||
elm_widget_theme_hook_set(obj2, _theme_hook);
|
||||
|
||||
wd->frm = edje_object_add(win->evas);
|
||||
_elm_theme_set(wd->frm, "win", "inwin", "default");
|
||||
_elm_theme_object_set(obj, wd->frm, "win", "inwin", "default");
|
||||
elm_widget_resize_object_set(obj2, wd->frm);
|
||||
|
||||
evas_object_smart_callback_add(obj2, "sub-object-del", _sub_del, obj2);
|
||||
|
|
|
@ -978,10 +978,10 @@ elm_smart_scroller_single_dir_get(Evas_Object *obj)
|
|||
}
|
||||
|
||||
void
|
||||
elm_smart_scroller_theme_set(Evas_Object *obj, const char *clas, const char *group, const char *style)
|
||||
elm_smart_scroller_object_theme_set(Evas_Object *parent, Evas_Object *obj, const char *clas, const char *group, const char *style)
|
||||
{
|
||||
API_ENTRY return;
|
||||
_elm_theme_set(sd->edje_obj, clas, group, style);
|
||||
_elm_theme_object_set(parent, sd->edje_obj, clas, group, style);
|
||||
if (sd->pan_obj)
|
||||
edje_object_part_swallow(sd->edje_obj, "elm.swallow.content", sd->pan_obj);
|
||||
sd->vbar_visible = !sd->vbar_visible;
|
||||
|
@ -2305,7 +2305,8 @@ _smart_add(Evas_Object *obj)
|
|||
|
||||
o = edje_object_add(evas_object_evas_get(obj));
|
||||
sd->edje_obj = o;
|
||||
_elm_theme_set(o, "scroller", "base", "default");
|
||||
// FIXME: null parent obj ... :(
|
||||
_elm_theme_object_set(NULL, o, "scroller", "base", "default");
|
||||
edje_object_signal_callback_add(o, "drag", "elm.dragable.vbar", _smart_edje_drag_v, sd);
|
||||
edje_object_signal_callback_add(o, "drag,start", "elm.dragable.vbar", _smart_edje_drag_v_start, sd);
|
||||
edje_object_signal_callback_add(o, "drag,stop", "elm.dragable.vbar", _smart_edje_drag_v_stop, sd);
|
||||
|
|
|
@ -23,7 +23,7 @@ void elm_smart_scroller_policy_get (Evas_Object *obj, Elm_Smart_Scr
|
|||
Evas_Object *elm_smart_scroller_edje_object_get (Evas_Object *obj);
|
||||
void elm_smart_scroller_single_dir_set (Evas_Object *obj, Eina_Bool single_dir);
|
||||
Eina_Bool elm_smart_scroller_single_dir_get (Evas_Object *obj);
|
||||
void elm_smart_scroller_theme_set (Evas_Object *obj, const char *clas, const char *group, const char *style);
|
||||
void elm_smart_scroller_object_theme_set (Evas_Object *parent, Evas_Object *obj, const char *clas, const char *group, const char *style);
|
||||
void elm_smart_scroller_hold_set (Evas_Object *obj, Eina_Bool hold);
|
||||
void elm_smart_scroller_freeze_set (Evas_Object *obj, Eina_Bool freeze);
|
||||
void elm_smart_scroller_bounce_allow_set (Evas_Object *obj, Eina_Bool horiz, Eina_Bool vert);
|
||||
|
|
Loading…
Reference in New Issue