and make elm auto-scale much better on the fly - not perfect... but not to

shabby. also in theory should cover theme changes on the fly... haven't tested.



SVN revision: 37662
This commit is contained in:
Carsten Haitzler 2008-11-15 13:58:50 +00:00
parent 08c021a0c6
commit ee7131de29
16 changed files with 275 additions and 68 deletions

View File

@ -242,6 +242,7 @@ extern "C" {
};
EAPI Evas_Object *elm_anchorview_add(Evas_Object *parent);
EAPI void elm_anchorview_text_set(Evas_Object *obj, const char *text);
EAPI void elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_anchorview_hover_style_set(Evas_Object *obj, const char *style);
EAPI void elm_anchorview_hover_end(Evas_Object *obj);
/* smart callbacks called:
@ -264,6 +265,7 @@ extern "C" {
};
EAPI Evas_Object *elm_anchorblock_add(Evas_Object *parent);
EAPI void elm_anchorblock_text_set(Evas_Object *obj, const char *text);
EAPI void elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style);
EAPI void elm_anchorblock_hover_end(Evas_Object *obj);
/* smart callbacks called:
@ -272,7 +274,7 @@ extern "C" {
EAPI Evas_Object *elm_bubble_add(Evas_Object *parent);
EAPI void elm_bubble_label_set(Evas_Object *obj, const char *label);
EAPI void elm_bubble_info_set(Evas_Object *obj, const char *label);
EAPI void elm_bubble_info_set(Evas_Object *obj, const char *info);
EAPI void elm_bubble_content_set(Evas_Object *obj, Evas_Object *content);
EAPI void elm_bubble_icon_set(Evas_Object *obj, Evas_Object *icon);
/* smart callbacks called:

View File

@ -19,6 +19,13 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
_elm_theme_set(wd->img, "bg", "base", "default");
}
static void
_custom_resize(void *data, Evas *a, Evas_Object *obj, void *event_info)
{
@ -54,6 +61,7 @@ elm_bg_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_can_focus_set(obj, 0);
wd->img = edje_object_add(e);

View File

@ -7,9 +7,11 @@ struct _Widget_Data
{
Evas_Object *bbl;
Evas_Object *content, *icon;
const char *label, *info;
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
@ -18,9 +20,21 @@ static void
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->label) eina_stringshare_del(wd->label);
if (wd->info) eina_stringshare_del(wd->info);
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
_elm_theme_set(wd->bbl, "bubble", "base", "default");
edje_object_part_text_set(wd->bbl, "elm.text", wd->label);
edje_object_part_text_set(wd->bbl, "elm.info", wd->info);
_sizing_eval(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -76,6 +90,7 @@ elm_bubble_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
wd->bbl = edje_object_add(e);
_elm_theme_set(wd->bbl, "bubble", "base", "default");
@ -91,15 +106,21 @@ EAPI void
elm_bubble_label_set(Evas_Object *obj, const char *label)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->label) eina_stringshare_del(wd->label);
if (label) wd->label = eina_stringshare_add(label);
else wd->label = NULL;
edje_object_part_text_set(wd->bbl, "elm.text", label);
_sizing_eval(obj);
}
EAPI void
elm_bubble_info_set(Evas_Object *obj, const char *label)
elm_bubble_info_set(Evas_Object *obj, const char *info)
{
Widget_Data *wd = elm_widget_data_get(obj);
edje_object_part_text_set(wd->bbl, "elm.info", label);
if (wd->info) eina_stringshare_del(wd->info);
if (info) wd->info = eina_stringshare_add(info);
else wd->info = NULL;
edje_object_part_text_set(wd->bbl, "elm.info", info);
_sizing_eval(obj);
}

View File

@ -28,19 +28,18 @@ _del_hook(Evas_Object *obj)
static void
_theme_hook(Evas_Object *obj)
{
const char *label;
Evas_Object *icon;
Widget_Data *wd = elm_widget_data_get(obj);
// FIXME: this is wrong. edje needs to handle more of this.
label = eina_stringshare_add(wd->label);
icon = wd->icon;
_elm_theme_set(wd->btn, "x", "base", "default");
elm_button_label_set(obj, NULL);
elm_button_icon_set(obj, NULL);
_elm_theme_set(wd->btn, "button", "base", "default");
elm_button_label_set(obj, label);
elm_button_icon_set(obj, icon);
eina_stringshare_del(label);
if (wd->label)
edje_object_signal_emit(wd->btn, "elm,state,text,visible", "elm");
else
edje_object_signal_emit(wd->btn, "elm,state,text,hidden", "elm");
if (wd->icon)
edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
else
edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
edje_object_part_text_set(wd->btn, "elm.text", wd->label);
edje_object_message_signal_process(wd->btn);
_sizing_eval(obj);
}
@ -75,6 +74,7 @@ _sub_del(void *data, Evas_Object *obj, void *event_info)
evas_object_event_callback_del
(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
wd->icon = NULL;
edje_object_message_signal_process(wd->btn);
_sizing_eval(obj);
}
}
@ -148,6 +148,7 @@ elm_button_icon_set(Evas_Object *obj, Evas_Object *icon)
edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_changed_size_hints, obj);
edje_object_message_signal_process(wd->btn);
_sizing_eval(obj);
}
else

View File

@ -23,6 +23,7 @@ struct _Widget_Data
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static int _ticker(void *data);
static void _signal_clock_val_up(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _signal_clock_val_down(void *data, Evas_Object *obj, const char *emission, const char *source);
@ -42,6 +43,14 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
wd->cur.am_pm = !wd->cur.am_pm; /* hack - force update */
_time_update(obj);
}
static int
_ticker(void *data)
{
@ -350,6 +359,7 @@ elm_clock_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
wd->clk = edje_object_add(e);
elm_widget_resize_object_set(obj, wd->clk);

View File

@ -16,9 +16,11 @@ struct _Widget_Data
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _on_focus_hook(void *data, Evas_Object *obj);
static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static const char *_getbase(Evas_Object *obj);
static void _signal_entry_changed(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _signal_selection_start(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _signal_selection_changed(void *data, Evas_Object *obj, const char *emission, const char *source);
@ -36,6 +38,19 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
char *t;
t = elm_entry_entry_get(obj);
if (t) t = strdup(t);
_elm_theme_set(wd->ent, "entry", _getbase(obj), "default");
elm_entry_entry_set(obj, t);
if (t) free(t);
_sizing_eval(obj);
}
static void
_elm_win_recalc_job(void *data)
{
@ -95,6 +110,39 @@ _resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
evas_object_geometry_get(wd->ent, NULL, NULL, &ww, &hh);
}
static const char *
_getbase(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->editable)
{
if (wd->password) return "base-password";
else
{
if (wd->single_line) return "base-single";
else
{
if (wd->linewrap) return "base";
else return "base-nowrap";
}
}
}
else
{
if (wd->password) return "base-password";
else
{
if (wd->single_line) return "base-single-noedit";
else
{
if (wd->linewrap) return "base-noedit";
else return "base-nowrap-noedit";
}
}
}
return "base";
}
static void
_signal_entry_changed(void *data, Evas_Object *obj, const char *emission, const char *source)
{
@ -268,6 +316,7 @@ elm_entry_add(Evas_Object *parent)
elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_can_focus_set(obj, 1);
wd->linewrap = 1;
@ -295,39 +344,6 @@ elm_entry_add(Evas_Object *parent)
return obj;
}
static const char *
_getbase(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->editable)
{
if (wd->password) return "base-password";
else
{
if (wd->single_line) return "base-single";
else
{
if (wd->linewrap) return "base";
else return "base-nowrap";
}
}
}
else
{
if (wd->password) return "base-password";
else
{
if (wd->single_line) return "base-single-noedit";
else
{
if (wd->linewrap) return "base-noedit";
else return "base-nowrap-noedit";
}
}
}
return "base";
}
EAPI void
elm_entry_single_line_set(Evas_Object *obj, Evas_Bool single_line)
{
@ -366,7 +382,6 @@ elm_entry_entry_set(Evas_Object *obj, const char *entry)
{
Widget_Data *wd = elm_widget_data_get(obj);
edje_object_part_text_set(wd->ent, "elm.text", entry);
// debug
#if 0
{

View File

@ -10,6 +10,7 @@ struct _Widget_Data
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
@ -21,6 +22,12 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
_sizing_eval(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -66,6 +73,7 @@ elm_frame_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
wd->frm = edje_object_add(e);
_elm_theme_set(wd->frm, "frame", "base", "default");

View File

@ -11,6 +11,7 @@ struct _Widget_Data
Evas_Object *offset, *size;
Evas_Object *parent, *target;
Eina_List *subs;
const char *style;
};
struct _Subinfo
@ -21,9 +22,12 @@ struct _Subinfo
static void _del_pre_hook(Evas_Object *obj);
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _reval_content(Evas_Object *obj);
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
static void _hov_show_do(Evas_Object *obj);
static void _hov_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _hov_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _hov_show(void *data, Evas *e, Evas_Object *obj, void *event_info);
@ -46,6 +50,7 @@ _del_pre_hook(Evas_Object *obj)
evas_stringshare_del(si->swallow);
free(si);
}
if (wd->style) eina_stringshare_del(wd->style);
}
static void
@ -55,6 +60,22 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
// FIXME: hover contents doesnt seem to propagate resizes properly
if (wd->style)
_elm_theme_set(wd->cov, "hover", "base", wd->style);
else
_elm_theme_set(wd->cov, "hover", "base", "default");
edje_object_message_signal_process(wd->cov);
_reval_content(obj);
_sizing_eval(obj);
if (evas_object_visible_get(wd->cov)) _hov_show_do(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -71,6 +92,18 @@ _sizing_eval(Evas_Object *obj)
edje_object_part_swallow(wd->cov, "elm.swallow.size", wd->size);
}
static void
_reval_content(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
Eina_List *l;
for (l = wd->subs; l; l = l->next)
{
Subinfo *si = l->data;
edje_object_part_swallow(wd->hov, si->swallow, si->obj);
}
}
static void
_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
@ -81,7 +114,7 @@ _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info)
Subinfo *si = l->data;
if (si->obj == obj)
{
edje_object_part_swallow(wd->hov, si->swallow, obj);
edje_object_part_swallow(wd->hov, si->swallow, si->obj);
break;
}
}
@ -110,23 +143,10 @@ _sub_del(void *data, Evas_Object *obj, void *event_info)
}
static void
_hov_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
_hov_show_do(Evas_Object *obj)
{
_sizing_eval(data);
}
static void
_hov_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_sizing_eval(data);
}
static void
_hov_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
Widget_Data *wd = elm_widget_data_get(obj);
Eina_List *l;
// FIXME: use signals for show for hov
if (wd->cov)
{
evas_object_show(wd->cov);
@ -145,12 +165,29 @@ _hov_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
}
}
static void
_hov_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_sizing_eval(data);
}
static void
_hov_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_sizing_eval(data);
}
static void
_hov_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_hov_show_do(data);
}
static void
_hov_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
Eina_List *l;
// FIXME: use signals for hide for hov
if (wd->cov)
{
edje_object_signal_emit(wd->cov, "elm,action,hide", "elm");
@ -229,6 +266,7 @@ elm_hover_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_pre_hook_set(obj, _del_pre_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_del_hook_set(obj, _del_hook);
wd->hov = evas_object_rectangle_add(e);
@ -329,7 +367,6 @@ elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *conten
{
elm_widget_sub_object_add(obj, content);
edje_object_part_swallow(wd->cov, buf, content);
evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_changed_size_hints, obj);
si = ELM_NEW(Subinfo);
@ -344,6 +381,10 @@ EAPI void
elm_hover_style_set(Evas_Object *obj, const char *style)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->style) eina_stringshare_del(wd->style);
if (style) wd->style = eina_stringshare_add(style);
else wd->style = NULL;
_elm_theme_set(wd->cov, "hover", "base", style);
_reval_content(obj);
_sizing_eval(obj);
}

View File

@ -6,6 +6,7 @@ typedef struct _Widget_Data Widget_Data;
struct _Widget_Data
{
Evas_Object *img;
const char *stdicon;
Evas_Bool scale_up : 1;
Evas_Bool scale_down : 1;
Evas_Bool smooth : 1;
@ -14,6 +15,7 @@ struct _Widget_Data
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _mouse_up(void *data, Evas_Object *obj, void *event_info);
@ -21,9 +23,19 @@ static void
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->stdicon) eina_stringshare_del(wd->stdicon);
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->stdicon)
_elm_theme_icon_set(wd->img, wd->stdicon, "default");
_sizing_eval(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -74,6 +86,7 @@ elm_icon_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_can_focus_set(obj, 0);
wd->img = _els_smart_icon_add(e);
@ -97,6 +110,8 @@ elm_icon_file_set(Evas_Object *obj, const char *file, const char *group)
const char *p;
if (!file) return;
if (wd->stdicon) eina_stringshare_del(wd->stdicon);
wd->stdicon = NULL;
if (((p = strrchr(file, '.'))) && (!strcasecmp(p, ".edj")))
_els_smart_icon_file_edje_set(wd->img, file, group);
else
@ -110,6 +125,8 @@ elm_icon_standard_set(Evas_Object *obj, const char *name)
Widget_Data *wd = elm_widget_data_get(obj);
if (!name) return;
if (wd->stdicon) eina_stringshare_del(wd->stdicon);
wd->stdicon = eina_stringshare_add(name);
_elm_theme_icon_set(wd->img, name, "default");
_sizing_eval(obj);
}

View File

@ -9,6 +9,7 @@ struct _Widget_Data
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void
@ -18,6 +19,12 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
_sizing_eval(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -41,6 +48,7 @@ elm_label_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_can_focus_set(obj, 0);
wd->lbl = edje_object_add(e);

View File

@ -17,6 +17,7 @@ struct _Subinfo
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
@ -35,6 +36,12 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
_sizing_eval(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -97,6 +104,7 @@ elm_layout_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
wd->lay = edje_object_add(e);
elm_widget_resize_object_set(obj, wd->lay);

View File

@ -12,6 +12,7 @@ struct _Widget_Data
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _show_region_hook(void *data, Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
@ -23,6 +24,14 @@ _del_hook(Evas_Object *obj)
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
elm_smart_scroller_theme_set(wd->scr, "default");
_sizing_eval(obj);
}
static void
_show_region_hook(void *data, Evas_Object *obj)
{
@ -104,6 +113,7 @@ elm_scroller_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
wd->scr = elm_smart_scroller_add(e);
elm_widget_resize_object_set(obj, wd->scr);

View File

@ -9,9 +9,12 @@ struct _Widget_Data
Evas_Object *icon;
Evas_Bool state;
Evas_Bool *statep;
const char *label;
const char *ontext, *offtext;
};
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
@ -22,9 +25,36 @@ static void
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->label) eina_stringshare_del(wd->label);
if (wd->ontext) eina_stringshare_del(wd->ontext);
if (wd->offtext) eina_stringshare_del(wd->offtext);
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
_elm_theme_set(wd->tgl, "toggle", "base", "default");
if (wd->icon)
edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm");
else
edje_object_signal_emit(wd->tgl, "elm,state,icon,hidden", "elm");
if (wd->state)
edje_object_signal_emit(wd->tgl, "elm,state,toggle,on", "elm");
else
edje_object_signal_emit(wd->tgl, "elm,state,toggle,off", "elm");
if (wd->label)
edje_object_signal_emit(wd->tgl, "elm,state,text,visible", "elm");
else
edje_object_signal_emit(wd->tgl, "elm,state,text,hidden", "elm");
edje_object_part_text_set(wd->tgl, "elm.text", wd->label);
edje_object_part_text_set(wd->tgl, "elm.ontext", wd->ontext);
edje_object_part_text_set(wd->tgl, "elm.offtext", wd->offtext);
edje_object_message_signal_process(wd->tgl);
_sizing_eval(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -90,12 +120,17 @@ elm_toggle_add(Evas_Object *parent)
obj = elm_widget_add(e);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
wd->tgl = edje_object_add(e);
_elm_theme_set(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", "", _signal_toggle_on, obj);
edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,off", "", _signal_toggle_off, obj);
elm_widget_resize_object_set(obj, wd->tgl);
edje_object_part_text_set(wd->tgl, "elm.ontext", wd->ontext);
edje_object_part_text_set(wd->tgl, "elm.offtext", wd->offtext);
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
@ -108,14 +143,17 @@ elm_toggle_label_set(Evas_Object *obj, const char *label)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Coord mw, mh;
if (wd->label) eina_stringshare_del(wd->label);
if (label)
{
wd->label = eina_stringshare_add(label);
edje_object_signal_emit(wd->tgl, "elm,state,text,visible", "elm");
edje_object_message_signal_process(wd->tgl);
}
else
{
wd->label = NULL;
edje_object_signal_emit(wd->tgl, "elm,state,text,hidden", "elm");
edje_object_message_signal_process(wd->tgl);
}
@ -145,6 +183,12 @@ EAPI void
elm_toggle_states_labels_set(Evas_Object *obj, const char *onlabel, const char *offlabel)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->ontext) eina_stringshare_del(wd->ontext);
if (wd->offtext) eina_stringshare_del(wd->offtext);
if (onlabel) wd->ontext = eina_stringshare_add(onlabel);
else wd->ontext = NULL;
if (offlabel) wd->offtext = eina_stringshare_add(offlabel);
else wd->offtext = NULL;
edje_object_part_text_set(wd->tgl, "elm.ontext", onlabel);
edje_object_part_text_set(wd->tgl, "elm.offtext", offlabel);
_sizing_eval(obj);

View File

@ -124,10 +124,10 @@ elm_widget_theme(Evas_Object *obj)
Eina_List *l;
API_ENTRY return;
if (sd->theme_func) sd->theme_func(obj);
for (l = sd->subobjs; l; l = l->next) elm_widget_theme(l->data);
if (sd->resize_obj) elm_widget_theme(sd->resize_obj);
if (sd->hover_obj) elm_widget_theme(sd->hover_obj);
if (sd->theme_func) sd->theme_func(obj);
}
EAPI void

View File

@ -337,6 +337,18 @@ elm_smart_scroller_single_dir_get(Evas_Object *obj)
return sd->one_dir_at_a_time;
}
void
elm_smart_scroller_theme_set(Evas_Object *obj, const char *style)
{
API_ENTRY return;
_elm_theme_set(sd->edje_obj, "scroller", "base", style);
if (sd->pan_obj)
edje_object_part_swallow(sd->edje_obj, "elm.swallow.content", sd->pan_obj);
sd->vbar_visible = !sd->vbar_visible;
sd->hbar_visible = !sd->hbar_visible;
_smart_scrollbar_bar_visibility_adjust(sd);
}
/* local subsystem functions */
static void
_smart_edje_drag_v(void *data, Evas_Object *obj, const char *emission, const char *source)

View File

@ -23,3 +23,5 @@ 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, Evas_Bool single_dir);
Evas_Bool elm_smart_scroller_single_dir_get (Evas_Object *obj);
void elm_smart_scroller_theme_set (Evas_Object *obj, const char *style);