1 #include <Elementary.h>
4 typedef struct _Widget_Data Widget_Data;
12 Ecore_Job *deferred_recalc_job;
13 double slide_duration;
17 Elm_Wrap_Type linewrap;
18 Eina_Bool changed : 1;
19 Eina_Bool bgcolor : 1;
20 Eina_Bool ellipsis : 1;
21 Eina_Bool slidingmode : 1;
22 Eina_Bool slidingellipsis : 1;
25 static const char *widtype = NULL;
26 static void _del_hook(Evas_Object *obj);
27 static void _mirrored_set(Evas_Object *obj, Eina_Bool rtl);
28 static void _theme_hook(Evas_Object *obj);
29 static void _sizing_eval(Evas_Object *obj);
30 static int _get_value_in_key_string(const char *oldstring, const char *key, char **value);
31 static int _strbuf_key_value_replace(Eina_Strbuf *srcbuf, const char *key, const char *value, int deleteflag);
32 static int _stringshare_key_value_replace(const char **srcstring, const char *key, const char *value, int deleteflag);
33 static int _is_width_over(Evas_Object *obj);
34 static void _ellipsis_label_to_width(Evas_Object *obj);
35 static void _label_sliding_change(Evas_Object *obj);
38 _elm_recalc_job(void *data)
40 Widget_Data *wd = elm_widget_data_get(data);
41 Evas_Coord minw = -1, minh = -1;
44 evas_event_freeze(evas_object_evas_get(data));
45 wd->deferred_recalc_job = NULL;
46 evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, NULL);
47 if (wd->wrap_w > resw)
50 edje_object_size_min_restricted_calc(wd->lbl, &minw, &minh, resw, 0);
51 /* This is a hack to workaround the way min size hints are treated.
52 * If the minimum width is smaller than the restricted width, it means
53 * the mininmum doesn't matter. */
54 if ((minw <= resw) && (minw != wd->wrap_w))
56 Evas_Coord ominw = -1;
57 evas_object_size_hint_min_get(data, &ominw, NULL);
60 evas_object_size_hint_min_set(data, minw, minh);
61 evas_object_size_hint_max_set(data, wd->wrap_w, wd->wrap_h);
63 if ((wd->ellipsis) && (wd->linewrap) && (wd->wrap_h > 0) &&
64 (_is_width_over(data) == 1))
65 _ellipsis_label_to_width(data);
66 evas_event_thaw(evas_object_evas_get(data));
67 evas_event_thaw_eval(evas_object_evas_get(data));
71 _del_hook(Evas_Object *obj)
73 Widget_Data *wd = elm_widget_data_get(obj);
75 evas_event_freeze(evas_object_evas_get(obj));
76 if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job);
77 if (wd->label) eina_stringshare_del(wd->label);
78 if (wd->bg) evas_object_del(wd->bg);
80 evas_event_thaw(evas_object_evas_get(obj));
81 evas_event_thaw_eval(evas_object_evas_get(obj));
85 _theme_change(Evas_Object *obj)
87 Widget_Data *wd = elm_widget_data_get(obj);
90 _elm_theme_object_set(obj, wd->lbl, "label", "base",
91 elm_widget_style_get(obj));
95 _mirrored_set(Evas_Object *obj, Eina_Bool rtl)
97 Widget_Data *wd = elm_widget_data_get(obj);
99 edje_object_mirrored_set(wd->lbl, rtl);
103 _theme_hook(Evas_Object *obj)
105 Widget_Data *wd = elm_widget_data_get(obj);
107 evas_event_freeze(evas_object_evas_get(obj));
108 _elm_widget_mirrored_reload(obj);
109 _mirrored_set(obj, elm_widget_mirrored_get(obj));
111 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
112 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
113 edje_object_scale_set(wd->lbl, elm_widget_scale_get(obj) *
115 _label_sliding_change(obj);
117 evas_event_thaw(evas_object_evas_get(obj));
118 evas_event_thaw_eval(evas_object_evas_get(obj));
122 _sizing_eval(Evas_Object *obj)
124 Widget_Data *wd = elm_widget_data_get(obj);
125 Evas_Coord minw = -1, minh = -1;
126 Evas_Coord resw, resh;
131 evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
132 if ((resw == wd->lastw) && (!wd->changed)) return;
133 wd->changed = EINA_FALSE;
135 _elm_recalc_job(obj);
136 // FIXME: works ok. but NOT for genlist. what should genlist do?
137 // if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job);
138 // wd->deferred_recalc_job = ecore_job_add(_elm_recalc_job, obj);
142 evas_event_freeze(evas_object_evas_get(obj));
143 evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
144 edje_object_size_min_calc(wd->lbl, &minw, &minh);
145 if (wd->wrap_w > 0 && minw > wd->wrap_w) minw = wd->wrap_w;
146 if (wd->wrap_h > 0 && minh > wd->wrap_h) minh = wd->wrap_h;
147 evas_object_size_hint_min_set(obj, minw, minh);
148 evas_object_size_hint_max_set(obj, wd->wrap_w, wd->wrap_h);
149 if ((wd->ellipsis) && (_is_width_over(obj) == 1))
150 _ellipsis_label_to_width(obj);
151 evas_event_thaw(evas_object_evas_get(obj));
152 evas_event_thaw_eval(evas_object_evas_get(obj));
157 _lbl_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
159 Widget_Data *wd = elm_widget_data_get(data);
161 if (wd->linewrap) _sizing_eval(data);
165 _get_value_in_key_string(const char *oldstring, const char *key, char **value)
167 char *curlocater, *starttag, *endtag;
168 int firstindex = 0, foundflag = -1;
170 curlocater = strstr(oldstring, key);
173 int key_len = strlen(key);
174 starttag = curlocater;
175 endtag = curlocater + key_len;
176 if ((!endtag) || (*endtag != '='))
181 firstindex = abs(oldstring - curlocater);
182 firstindex += key_len + 1; // strlen("key") + strlen("=")
183 *value = (char *)oldstring + firstindex;
185 while (oldstring != starttag)
187 if (*starttag == '>')
192 if (*starttag == '<')
196 if (!starttag) break;
213 if ((foundflag) && (*starttag == '<') && (*endtag == '>'))
223 if (foundflag == 1) return 0;
230 _strbuf_key_value_replace(Eina_Strbuf *srcbuf, const char *key, const char *value, int deleteflag)
232 const char *srcstring = NULL;
233 Eina_Strbuf *repbuf = NULL, *diffbuf = NULL;
234 char *curlocater, *replocater;
235 char *starttag, *endtag;
236 int tagtxtlen = 0, insertflag = 0;
238 srcstring = eina_strbuf_string_get(srcbuf);
239 curlocater = strstr(srcstring, key);
245 int key_len = strlen(key);
248 starttag = strchr(srcstring, '<');
249 endtag = strchr(srcstring, '>');
250 tagtxtlen = endtag - starttag;
251 if (tagtxtlen <= 0) tagtxtlen = 0;
252 if ((starttag < curlocater) && (curlocater < endtag)) break;
253 if ((endtag) && ((endtag + 1)))
254 srcstring = endtag + 1;
257 } while (strlen(srcstring) > 1);
259 if ((starttag) && (endtag) && (tagtxtlen > key_len))
262 repbuf = eina_strbuf_new();
263 diffbuf = eina_strbuf_new();
264 eina_strbuf_append_n(repbuf, starttag, tagtxtlen);
265 srcstring = eina_strbuf_string_get(repbuf);
266 curlocater = strstr(srcstring, key);
269 eqchar = curlocater + key_len;
270 if ((curlocater) && (eqchar))
272 // some case at useless many whitespaces (key =value)
273 // find the separator(=) position
274 eqchar = strchr(curlocater + key_len, '=');
279 replocater = eqchar + 1;
280 while ((*replocater) &&
281 (*replocater != ' ') &&
282 (*replocater != '>'))
285 if ((replocater - curlocater) > key_len)
286 eina_strbuf_append_n(diffbuf, curlocater,
287 replocater-curlocater);
296 eina_strbuf_reset(repbuf);
302 if (!repbuf) repbuf = eina_strbuf_new();
303 if (!diffbuf) diffbuf = eina_strbuf_new();
307 eina_strbuf_append_printf(repbuf, "<%s=%s>", key, value);
308 eina_strbuf_prepend(srcbuf, eina_strbuf_string_get(repbuf));
314 eina_strbuf_prepend(diffbuf, "<");
315 eina_strbuf_append(diffbuf, ">");
316 eina_strbuf_replace_first(srcbuf, eina_strbuf_string_get(diffbuf), "");
320 eina_strbuf_append_printf(repbuf, "%s=%s", key, value);
321 eina_strbuf_replace_first(srcbuf, eina_strbuf_string_get(diffbuf), eina_strbuf_string_get(repbuf));
325 if (repbuf) eina_strbuf_free(repbuf);
326 if (diffbuf) eina_strbuf_free(diffbuf);
332 _stringshare_key_value_replace(const char **srcstring, const char *key, const char *value, int deleteflag)
334 Eina_Strbuf *sharebuf = NULL;
336 sharebuf = eina_strbuf_new();
337 eina_strbuf_append(sharebuf, *srcstring);
338 _strbuf_key_value_replace(sharebuf, key, value, deleteflag);
339 eina_stringshare_del(*srcstring);
340 *srcstring = eina_stringshare_add(eina_strbuf_string_get(sharebuf));
341 eina_strbuf_free(sharebuf);
347 _is_width_over(Evas_Object *obj)
349 Evas_Coord x, y, w, h;
350 Evas_Coord vx, vy, vw, vh;
351 Widget_Data *wd = elm_widget_data_get(obj);
354 evas_event_freeze(evas_object_evas_get(obj));
355 edje_object_part_geometry_get(wd->lbl, "elm.text", &x, &y, NULL, NULL);
356 /* Calc the formatted size with ellipsis turned off */
359 const Evas_Object *tb;
361 double ellipsis = 0.0;
362 Eina_Bool found_key = EINA_FALSE;
363 if (_get_value_in_key_string(wd->format, "ellipsis", &_kvalue) == 0)
365 ellipsis = atof(_kvalue);
366 found_key = EINA_TRUE;
369 if (_stringshare_key_value_replace(&wd->format,
370 "ellipsis", NULL, 1) == 0)
372 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
373 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
376 tb = edje_object_part_object_get(wd->lbl, "elm.text");
377 evas_object_textblock_size_formatted_get(tb, &w, &h);
382 elpbuf = eina_strbuf_new();
383 eina_strbuf_append_printf(elpbuf, "%f", ellipsis);
384 if (_stringshare_key_value_replace(&wd->format, "ellipsis",
385 eina_strbuf_string_get(elpbuf), 0) == 0)
387 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
388 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
390 eina_strbuf_free(elpbuf);
395 const Evas_Object *tb;
396 tb = edje_object_part_object_get(wd->lbl, "elm.text");
397 evas_object_textblock_size_formatted_get(tb, &w, &h);
399 evas_object_geometry_get(obj, &vx, &vy, &vw, &vh);
400 evas_event_thaw(evas_object_evas_get(obj));
401 evas_event_thaw_eval(evas_object_evas_get(obj));
403 if (w > wd->wrap_w || h > wd->wrap_h)
410 _ellipsis_fontsize_set(Evas_Object *obj, int fontsize)
412 Widget_Data *wd = elm_widget_data_get(obj);
413 Eina_Strbuf *fontbuf = NULL;
417 fontbuf = eina_strbuf_new();
418 eina_strbuf_append_printf(fontbuf, "%d", fontsize);
419 if (fontsize == 0) removeflag = 1; // remove fontsize tag
421 if (_stringshare_key_value_replace(&wd->format, "font_size", eina_strbuf_string_get(fontbuf), removeflag) == 0)
423 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
424 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
426 eina_strbuf_free(fontbuf);
430 _ellipsis_label_to_width(Evas_Object *obj)
432 Widget_Data *wd = elm_widget_data_get(obj);
434 int cur_fontsize = 0;
436 const char *minfont, *deffont, *maxfont;
437 int minfontsize, maxfontsize;
439 evas_event_freeze(evas_object_evas_get(obj));
440 minfont = edje_object_data_get(wd->lbl, "min_font_size");
441 if (minfont) minfontsize = atoi(minfont);
442 else minfontsize = 1;
443 maxfont = edje_object_data_get(wd->lbl, "max_font_size");
444 if (maxfont) maxfontsize = atoi(maxfont);
445 else maxfontsize = 1;
446 deffont = edje_object_data_get(wd->lbl, "default_font_size");
447 if (deffont) cur_fontsize = atoi(deffont);
448 else cur_fontsize = 1;
449 if (minfontsize > maxfontsize || cur_fontsize == 1) return; // theme is not ready for ellipsis
450 if (eina_stringshare_strlen(wd->label) <= 0) return;
452 if (_get_value_in_key_string(wd->format, "font_size", &kvalue) == 0)
454 if (kvalue != NULL) cur_fontsize = atoi(kvalue);
457 while (_is_width_over(obj))
459 if (cur_fontsize > minfontsize)
462 if (cur_fontsize < minfontsize) cur_fontsize = minfontsize;
463 _ellipsis_fontsize_set(obj, cur_fontsize);
470 evas_event_thaw(evas_object_evas_get(obj));
471 evas_event_thaw_eval(evas_object_evas_get(obj));
475 _label_sliding_change(Evas_Object *obj)
477 Widget_Data *wd = elm_widget_data_get(obj);
482 // dosen't support multiline sliding effect
485 wd->slidingmode = EINA_FALSE;
489 plaintxt = _elm_util_mkup_to_text(edje_object_part_text_get(wd->lbl, "elm.text"));
490 if (plaintxt != NULL)
492 plainlen = strlen(plaintxt);
495 // too short to slide label
498 wd->slidingmode = EINA_TRUE;
504 Edje_Message_Float_Set *msg = alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double)));
508 wd->slidingellipsis = EINA_TRUE;
509 elm_label_ellipsis_set(obj, EINA_FALSE);
513 msg->val[0] = wd->slide_duration;
515 edje_object_message_send(wd->lbl, EDJE_MESSAGE_FLOAT_SET, 0, msg);
516 edje_object_signal_emit(wd->lbl, "elm,state,slide,start", "elm");
520 edje_object_signal_emit(wd->lbl, "elm,state,slide,stop", "elm");
521 if (wd->slidingellipsis)
523 wd->slidingellipsis = EINA_FALSE;
524 elm_label_ellipsis_set(obj, EINA_TRUE);
530 _elm_label_label_set(Evas_Object *obj, const char *item, const char *label)
532 ELM_CHECK_WIDTYPE(obj, widtype);
533 Widget_Data *wd = elm_widget_data_get(obj);
535 if (item && strcmp(item, "default")) return;
536 if (!label) label = "";
537 eina_stringshare_replace(&wd->label, label);
538 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
539 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
545 _elm_label_label_get(const Evas_Object *obj, const char *item)
547 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
548 Widget_Data *wd = elm_widget_data_get(obj);
549 if (item && strcmp(item, "default")) return NULL;
550 if (!wd) return NULL;
555 elm_label_add(Evas_Object *parent)
561 ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
563 ELM_SET_WIDTYPE(widtype, "label");
564 elm_widget_type_set(obj, "label");
565 elm_widget_sub_object_add(parent, obj);
566 elm_widget_data_set(obj, wd);
567 elm_widget_del_hook_set(obj, _del_hook);
568 elm_widget_theme_hook_set(obj, _theme_hook);
569 elm_widget_can_focus_set(obj, EINA_FALSE);
570 elm_widget_text_set_hook_set(obj, _elm_label_label_set);
571 elm_widget_text_get_hook_set(obj, _elm_label_label_get);
573 wd->bgcolor = EINA_FALSE;
574 wd->bg = evas_object_rectangle_add(e);
575 evas_object_color_set(wd->bg, 0, 0, 0, 0);
577 wd->linewrap = ELM_WRAP_NONE;
578 wd->ellipsis = EINA_FALSE;
579 wd->slidingmode = EINA_FALSE;
580 wd->slidingellipsis = EINA_FALSE;
583 wd->slide_duration = 10;
585 wd->lbl = edje_object_add(e);
586 _elm_theme_object_set(obj, wd->lbl, "label", "base", "default");
587 wd->format = eina_stringshare_add("");
588 wd->label = eina_stringshare_add("<br>");
589 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
590 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
592 elm_widget_resize_object_set(obj, wd->lbl);
594 evas_object_event_callback_add(wd->lbl, EVAS_CALLBACK_RESIZE, _lbl_resize, obj);
596 _mirrored_set(obj, elm_widget_mirrored_get(obj));
603 elm_label_label_set(Evas_Object *obj, const char *label)
605 _elm_label_label_set(obj, NULL, label);
609 elm_label_label_get(const Evas_Object *obj)
611 return _elm_label_label_get(obj, NULL);
615 elm_label_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap)
617 ELM_CHECK_WIDTYPE(obj, widtype);
618 Widget_Data *wd = elm_widget_data_get(obj);
619 const char *wrap_str;
623 if (wd->linewrap == wrap) return;
625 len = strlen(wd->label);
626 if (len <= 0) return;
644 if (_stringshare_key_value_replace(&wd->format,
645 "wrap", wrap_str, 0) == 0)
647 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
648 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
655 elm_label_line_wrap_get(const Evas_Object *obj)
657 ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
658 Widget_Data *wd = elm_widget_data_get(obj);
659 if (!wd) return EINA_FALSE;
664 elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w)
666 ELM_CHECK_WIDTYPE(obj, widtype);
667 Widget_Data *wd = elm_widget_data_get(obj);
670 if (wd->wrap_w == w) return;
673 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
674 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
681 elm_label_wrap_width_get(const Evas_Object *obj)
683 ELM_CHECK_WIDTYPE(obj, widtype) 0;
684 Widget_Data *wd = elm_widget_data_get(obj);
690 elm_label_wrap_height_set(Evas_Object *obj,
693 ELM_CHECK_WIDTYPE(obj, widtype);
694 Widget_Data *wd = elm_widget_data_get(obj);
697 if (wd->wrap_h == h) return;
700 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
701 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
708 elm_label_wrap_height_get(const Evas_Object *obj)
710 ELM_CHECK_WIDTYPE(obj, widtype) 0;
711 Widget_Data *wd = elm_widget_data_get(obj);
717 elm_label_fontsize_set(Evas_Object *obj, int fontsize)
719 ELM_CHECK_WIDTYPE(obj, widtype);
720 Widget_Data *wd = elm_widget_data_get(obj);
721 Eina_Strbuf *fontbuf = NULL;
722 int len, removeflag = 0;
725 _elm_dangerous_call_check(__FUNCTION__);
726 len = strlen(wd->label);
727 if (len <= 0) return;
728 fontbuf = eina_strbuf_new();
729 eina_strbuf_append_printf(fontbuf, "%d", fontsize);
731 if (fontsize == 0) removeflag = 1; // remove fontsize tag
733 if (_stringshare_key_value_replace(&wd->format, "font_size", eina_strbuf_string_get(fontbuf), removeflag) == 0)
735 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
736 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
740 eina_strbuf_free(fontbuf);
744 elm_label_text_align_set(Evas_Object *obj, const char *alignmode)
746 ELM_CHECK_WIDTYPE(obj, widtype);
747 Widget_Data *wd = elm_widget_data_get(obj);
751 _elm_dangerous_call_check(__FUNCTION__);
752 len = strlen(wd->label);
753 if (len <= 0) return;
755 if (_stringshare_key_value_replace(&wd->format, "align", alignmode, 0) == 0)
757 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
758 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
766 elm_label_text_color_set(Evas_Object *obj,
772 ELM_CHECK_WIDTYPE(obj, widtype);
773 Widget_Data *wd = elm_widget_data_get(obj);
774 Eina_Strbuf *colorbuf = NULL;
778 _elm_dangerous_call_check(__FUNCTION__);
779 len = strlen(wd->label);
780 if (len <= 0) return;
781 colorbuf = eina_strbuf_new();
782 eina_strbuf_append_printf(colorbuf, "#%02X%02X%02X%02X", r, g, b, a);
784 if (_stringshare_key_value_replace(&wd->format, "color", eina_strbuf_string_get(colorbuf), 0) == 0)
786 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
787 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
791 eina_strbuf_free(colorbuf);
795 elm_label_background_color_set(Evas_Object *obj,
801 ELM_CHECK_WIDTYPE(obj, widtype);
802 Widget_Data *wd = elm_widget_data_get(obj);
804 evas_object_color_set(wd->bg, r, g, b, a);
807 _elm_dangerous_call_check(__FUNCTION__);
808 if (wd->bgcolor == EINA_FALSE)
811 edje_object_part_swallow(wd->lbl, "label.swallow.background", wd->bg);
816 elm_label_ellipsis_set(Evas_Object *obj, Eina_Bool ellipsis)
818 ELM_CHECK_WIDTYPE(obj, widtype);
819 Widget_Data *wd = elm_widget_data_get(obj);
820 Eina_Strbuf *fontbuf = NULL;
821 int len, removeflag = 0;
824 if (wd->ellipsis == ellipsis) return;
825 wd->ellipsis = ellipsis;
826 len = strlen(wd->label);
827 if (len <= 0) return;
829 if (ellipsis == EINA_FALSE) removeflag = 1; // remove fontsize tag
831 fontbuf = eina_strbuf_new();
832 eina_strbuf_append_printf(fontbuf, "%f", 1.0);
834 if (_stringshare_key_value_replace(&wd->format,
835 "ellipsis", eina_strbuf_string_get(fontbuf), removeflag) == 0)
837 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
838 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
842 eina_strbuf_free(fontbuf);
847 elm_label_slide_set(Evas_Object *obj,
850 ELM_CHECK_WIDTYPE(obj, widtype);
851 Widget_Data *wd = elm_widget_data_get(obj);
854 if (wd->slidingmode == slide) return;
855 wd->slidingmode = slide;
856 _label_sliding_change(obj);
862 elm_label_slide_get(Evas_Object *obj)
864 ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
865 Widget_Data *wd = elm_widget_data_get(obj);
866 if (!wd) return EINA_FALSE;
867 return wd->slidingmode;
871 elm_label_slide_duration_set(Evas_Object *obj, double duration)
873 ELM_CHECK_WIDTYPE(obj, widtype);
874 Widget_Data *wd = elm_widget_data_get(obj);
875 Edje_Message_Float_Set *msg = alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double)));
878 wd->slide_duration = duration;
880 msg->val[0] = wd->slide_duration;
881 edje_object_message_send(wd->lbl, EDJE_MESSAGE_FLOAT_SET, 0, msg);
885 elm_label_slide_duration_get(Evas_Object *obj)
887 ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
888 Widget_Data *wd = elm_widget_data_get(obj);
890 return wd->slide_duration;