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_win_recalc_job(void *data)
40 Widget_Data *wd = elm_widget_data_get(data);
41 Evas_Coord minw = -1, minh = -1;
42 Evas_Coord resw, resh;
45 wd->deferred_recalc_job = NULL;
47 evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
48 if (wd->wrap_w > resw)
50 if (wd->wrap_h > resh)
53 if (wd->wrap_h == -1) /* open source routine */
55 edje_object_size_min_restricted_calc(wd->lbl, &minw, &minh, resw, 0);
56 /* This is a hack to workaround the way min size hints are treated.
57 * If the minimum width is smaller than the restricted width, it means
58 * the mininmum doesn't matter. */
59 if ((minw <= resw) && (minw != wd->wrap_w))
61 Evas_Coord ominw = -1;
62 evas_object_size_hint_min_get(data, &ominw, NULL);
66 else /* ellipsis && linewrap && wrap_height_set routine */
68 edje_object_size_min_restricted_calc(wd->lbl, &minw, &minh, 0, resh);
69 if ((minh <= resh) && (minh != wd->wrap_h))
71 Evas_Coord ominh = -1;
72 evas_object_size_hint_min_get(data, NULL, &ominh);
76 evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
78 if (minh > wd->wrap_h)
82 evas_object_size_hint_min_set(data, minw, minh);
83 evas_object_size_hint_max_set(data, wd->wrap_w, wd->wrap_h);
85 if ((wd->ellipsis) && (wd->linewrap) && (wd->wrap_h > 0) &&
86 (_is_width_over(data) == 1))
87 _ellipsis_label_to_width(data);
91 _del_hook(Evas_Object *obj)
93 Widget_Data *wd = elm_widget_data_get(obj);
95 if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job);
96 if (wd->label) eina_stringshare_del(wd->label);
97 if (wd->bg) evas_object_del(wd->bg);
102 _theme_change(Evas_Object *obj)
104 Widget_Data *wd = elm_widget_data_get(obj);
107 _elm_theme_object_set(obj, wd->lbl, "label", "base",
108 elm_widget_style_get(obj));
112 _mirrored_set(Evas_Object *obj, Eina_Bool rtl)
114 Widget_Data *wd = elm_widget_data_get(obj);
116 edje_object_mirrored_set(wd->lbl, rtl);
120 _theme_hook(Evas_Object *obj)
122 Widget_Data *wd = elm_widget_data_get(obj);
124 _elm_widget_mirrored_reload(obj);
125 _mirrored_set(obj, elm_widget_mirrored_get(obj));
127 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
128 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
129 edje_object_scale_set(wd->lbl, elm_widget_scale_get(obj) *
131 _label_sliding_change(obj);
136 _sizing_eval(Evas_Object *obj)
138 Widget_Data *wd = elm_widget_data_get(obj);
139 Evas_Coord minw = -1, minh = -1;
140 Evas_Coord resw, resh;
145 evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
146 if ((resw == wd->lastw) && (!wd->changed)) return;
147 wd->changed = EINA_FALSE;
149 _elm_win_recalc_job(obj);
150 // FIXME: works ok. but NOT for genlist. what should genlist do?
151 // if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job);
152 // wd->deferred_recalc_job = ecore_job_add(_elm_win_recalc_job, obj);
156 evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
157 edje_object_size_min_calc(wd->lbl, &minw, &minh);
158 if (wd->wrap_w > 0 && minw > wd->wrap_w) minw = wd->wrap_w;
159 if (wd->wrap_h > 0 && minh > wd->wrap_h) minh = wd->wrap_h;
160 evas_object_size_hint_min_set(obj, minw, minh);
161 evas_object_size_hint_max_set(obj, wd->wrap_w, wd->wrap_h);
162 if ((wd->ellipsis) && (_is_width_over(obj) == 1))
163 _ellipsis_label_to_width(obj);
168 _lbl_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
170 Widget_Data *wd = elm_widget_data_get(data);
172 if (wd->linewrap) _sizing_eval(data);
176 _get_value_in_key_string(const char *oldstring, const char *key, char **value)
178 char *curlocater, *starttag, *endtag;
179 int firstindex = 0, foundflag = -1;
181 curlocater = strstr(oldstring, key);
184 int key_len = strlen(key);
185 starttag = curlocater;
186 endtag = curlocater + key_len;
187 if ((!endtag) || (*endtag != '='))
192 firstindex = abs(oldstring - curlocater);
193 firstindex += key_len + 1; // strlen("key") + strlen("=")
194 *value = (char *)oldstring + firstindex;
196 while (oldstring != starttag)
198 if (*starttag == '>')
203 if (*starttag == '<')
207 if (!starttag) break;
224 if ((foundflag) && (*starttag == '<') && (*endtag == '>'))
234 if (foundflag == 1) return 0;
241 _strbuf_key_value_replace(Eina_Strbuf *srcbuf, const char *key, const char *value, int deleteflag)
243 const char *srcstring = NULL;
244 Eina_Strbuf *repbuf = NULL, *diffbuf = NULL;
245 char *curlocater, *replocater;
246 char *starttag, *endtag;
247 int tagtxtlen = 0, insertflag = 0;
249 srcstring = eina_strbuf_string_get(srcbuf);
250 curlocater = strstr(srcstring, key);
256 int key_len = strlen(key);
259 starttag = strchr(srcstring, '<');
260 endtag = strchr(srcstring, '>');
261 tagtxtlen = endtag - starttag;
262 if (tagtxtlen <= 0) tagtxtlen = 0;
263 if ((starttag < curlocater) && (curlocater < endtag)) break;
264 if ((endtag) && ((endtag + 1)))
265 srcstring = endtag + 1;
268 } while (strlen(srcstring) > 1);
270 if ((starttag) && (endtag) && (tagtxtlen > key_len))
273 repbuf = eina_strbuf_new();
274 diffbuf = eina_strbuf_new();
275 eina_strbuf_append_n(repbuf, starttag, tagtxtlen);
276 srcstring = eina_strbuf_string_get(repbuf);
277 curlocater = strstr(srcstring, key);
280 eqchar = curlocater + key_len;
281 if ((curlocater) && (eqchar))
283 // some case at useless many whitespaces (key =value)
284 // find the separator(=) position
285 eqchar = strchr(curlocater + key_len, '=');
290 replocater = eqchar + 1;
291 while ((*replocater) &&
292 (*replocater != ' ') &&
293 (*replocater != '>'))
296 if ((replocater - curlocater) > key_len)
297 eina_strbuf_append_n(diffbuf, curlocater,
298 replocater-curlocater);
307 eina_strbuf_reset(repbuf);
313 if (!repbuf) repbuf = eina_strbuf_new();
314 if (!diffbuf) diffbuf = eina_strbuf_new();
318 eina_strbuf_append_printf(repbuf, "<%s=%s>", key, value);
319 eina_strbuf_prepend(srcbuf, eina_strbuf_string_get(repbuf));
325 eina_strbuf_prepend(diffbuf, "<");
326 eina_strbuf_append(diffbuf, ">");
327 eina_strbuf_replace_first(srcbuf, eina_strbuf_string_get(diffbuf), "");
331 eina_strbuf_append_printf(repbuf, "%s=%s", key, value);
332 eina_strbuf_replace_first(srcbuf, eina_strbuf_string_get(diffbuf), eina_strbuf_string_get(repbuf));
336 if (repbuf) eina_strbuf_free(repbuf);
337 if (diffbuf) eina_strbuf_free(diffbuf);
343 _stringshare_key_value_replace(const char **srcstring, const char *key, const char *value, int deleteflag)
345 Eina_Strbuf *sharebuf = NULL;
347 sharebuf = eina_strbuf_new();
348 eina_strbuf_append(sharebuf, *srcstring);
349 _strbuf_key_value_replace(sharebuf, key, value, deleteflag);
350 eina_stringshare_del(*srcstring);
351 *srcstring = eina_stringshare_add(eina_strbuf_string_get(sharebuf));
352 eina_strbuf_free(sharebuf);
358 _is_width_over(Evas_Object *obj)
360 Evas_Coord x, y, w, h;
361 Evas_Coord vx, vy, vw, vh;
362 Widget_Data *wd = elm_widget_data_get(obj);
365 edje_object_part_geometry_get(wd->lbl, "elm.text", &x, &y, NULL, NULL);
366 /* Calc the formatted size with ellipsis turned off */
369 const Evas_Object *tb;
371 double ellipsis = 0.0;
372 Eina_Bool found_key = EINA_FALSE;
373 if (_get_value_in_key_string(wd->format, "ellipsis", &_kvalue) == 0)
375 ellipsis = atof(_kvalue);
376 found_key = EINA_TRUE;
379 if (_stringshare_key_value_replace(&wd->format,
380 "ellipsis", NULL, 1) == 0)
382 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
383 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
386 tb = edje_object_part_object_get(wd->lbl, "elm.text");
387 evas_object_textblock_size_formatted_get(tb, &w, &h);
392 elpbuf = eina_strbuf_new();
393 eina_strbuf_append_printf(elpbuf, "%f", ellipsis);
394 if (_stringshare_key_value_replace(&wd->format, "ellipsis",
395 eina_strbuf_string_get(elpbuf), 0) == 0)
397 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
398 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
400 eina_strbuf_free(elpbuf);
405 const Evas_Object *tb;
406 tb = edje_object_part_object_get(wd->lbl, "elm.text");
407 evas_object_textblock_size_formatted_get(tb, &w, &h);
409 evas_object_geometry_get(obj, &vx, &vy, &vw, &vh);
411 if (w > wd->wrap_w || h > wd->wrap_h)
418 _ellipsis_fontsize_set(Evas_Object *obj, int fontsize)
420 Widget_Data *wd = elm_widget_data_get(obj);
421 Eina_Strbuf *fontbuf = NULL;
425 fontbuf = eina_strbuf_new();
426 eina_strbuf_append_printf(fontbuf, "%d", fontsize);
427 if (fontsize == 0) removeflag = 1; // remove fontsize tag
429 if (_stringshare_key_value_replace(&wd->format, "font_size", eina_strbuf_string_get(fontbuf), removeflag) == 0)
431 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
432 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
434 eina_strbuf_free(fontbuf);
438 _ellipsis_label_to_width(Evas_Object *obj)
440 Widget_Data *wd = elm_widget_data_get(obj);
442 int cur_fontsize = 0;
444 const char *minfont, *deffont, *maxfont;
445 int minfontsize, maxfontsize;
447 minfont = edje_object_data_get(wd->lbl, "min_font_size");
448 if (minfont) minfontsize = atoi(minfont);
449 else minfontsize = 1;
450 maxfont = edje_object_data_get(wd->lbl, "max_font_size");
451 if (maxfont) maxfontsize = atoi(maxfont);
452 else maxfontsize = 1;
453 deffont = edje_object_data_get(wd->lbl, "default_font_size");
454 if (deffont) cur_fontsize = atoi(deffont);
455 else cur_fontsize = 1;
456 if (minfontsize > maxfontsize || cur_fontsize == 1) return; // theme is not ready for ellipsis
457 if (eina_stringshare_strlen(wd->label) <= 0) return;
459 if (_get_value_in_key_string(wd->format, "font_size", &kvalue) == 0)
461 if (kvalue != NULL) cur_fontsize = atoi(kvalue);
464 /* TODO : Remove ellipsis logic in elm_lable and use ellipsis feature in evas textblock */
465 _ellipsis_fontsize_set(obj, cur_fontsize);
469 while (_is_width_over(obj))
471 if (cur_fontsize > minfontsize)
474 if (cur_fontsize < minfontsize) cur_fontsize = minfontsize;
475 _ellipsis_fontsize_set(obj, cur_fontsize);
486 _label_sliding_change(Evas_Object *obj)
488 Widget_Data *wd = elm_widget_data_get(obj);
493 // dosen't support multiline sliding effect
496 wd->slidingmode = EINA_FALSE;
500 plaintxt = _elm_util_mkup_to_text(edje_object_part_text_get(wd->lbl, "elm.text"));
501 if (plaintxt != NULL)
503 plainlen = strlen(plaintxt);
506 // too short to slide label
509 wd->slidingmode = EINA_TRUE;
515 Edje_Message_Float_Set *msg = alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double)));
519 wd->slidingellipsis = EINA_TRUE;
520 elm_label_ellipsis_set(obj, EINA_FALSE);
524 msg->val[0] = wd->slide_duration;
526 edje_object_message_send(wd->lbl, EDJE_MESSAGE_FLOAT_SET, 0, msg);
527 edje_object_signal_emit(wd->lbl, "elm,state,slide,start", "elm");
531 edje_object_signal_emit(wd->lbl, "elm,state,slide,stop", "elm");
532 if (wd->slidingellipsis)
534 wd->slidingellipsis = EINA_FALSE;
535 elm_label_ellipsis_set(obj, EINA_TRUE);
541 _elm_label_label_set(Evas_Object *obj, const char *item, const char *label)
543 ELM_CHECK_WIDTYPE(obj, widtype);
544 Widget_Data *wd = elm_widget_data_get(obj);
546 if (item && strcmp(item, "default")) return;
547 if (!label) label = "";
548 eina_stringshare_replace(&wd->label, label);
549 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
550 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
556 _elm_label_label_get(const Evas_Object *obj, const char *item)
558 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
559 Widget_Data *wd = elm_widget_data_get(obj);
560 if (item && strcmp(item, "default")) return NULL;
561 if (!wd) return NULL;
566 _translate_hook(Evas_Object *obj)
568 evas_object_smart_callback_call(obj, "language,changed", NULL);
572 elm_label_add(Evas_Object *parent)
578 ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
580 ELM_SET_WIDTYPE(widtype, "label");
581 elm_widget_type_set(obj, "label");
582 elm_widget_sub_object_add(parent, obj);
583 elm_widget_data_set(obj, wd);
584 elm_widget_del_hook_set(obj, _del_hook);
585 elm_widget_theme_hook_set(obj, _theme_hook);
586 elm_widget_can_focus_set(obj, EINA_FALSE);
587 elm_widget_text_set_hook_set(obj, _elm_label_label_set);
588 elm_widget_text_get_hook_set(obj, _elm_label_label_get);
589 elm_widget_translate_hook_set(obj, _translate_hook);
591 wd->bgcolor = EINA_FALSE;
592 wd->bg = evas_object_rectangle_add(e);
593 evas_object_color_set(wd->bg, 0, 0, 0, 0);
595 wd->linewrap = ELM_WRAP_NONE;
596 wd->ellipsis = EINA_FALSE;
597 wd->slidingmode = EINA_FALSE;
598 wd->slidingellipsis = EINA_FALSE;
601 wd->slide_duration = 10;
603 wd->lbl = edje_object_add(e);
604 _elm_theme_object_set(obj, wd->lbl, "label", "base", "default");
605 wd->format = eina_stringshare_add("");
606 wd->label = eina_stringshare_add("<br>");
607 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
608 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
610 elm_widget_resize_object_set(obj, wd->lbl);
612 evas_object_event_callback_add(wd->lbl, EVAS_CALLBACK_RESIZE, _lbl_resize, obj);
614 _mirrored_set(obj, elm_widget_mirrored_get(obj));
621 elm_label_label_set(Evas_Object *obj, const char *label)
623 _elm_label_label_set(obj, NULL, label);
627 elm_label_label_get(const Evas_Object *obj)
629 return _elm_label_label_get(obj, NULL);
633 elm_label_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap)
635 ELM_CHECK_WIDTYPE(obj, widtype);
636 Widget_Data *wd = elm_widget_data_get(obj);
637 const char *wrap_str;
641 if (wd->linewrap == wrap) return;
643 len = strlen(wd->label);
644 if (len <= 0) return;
662 if (_stringshare_key_value_replace(&wd->format,
663 "wrap", wrap_str, 0) == 0)
665 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
666 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
673 elm_label_line_wrap_get(const Evas_Object *obj)
675 ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
676 Widget_Data *wd = elm_widget_data_get(obj);
677 if (!wd) return EINA_FALSE;
682 elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w)
684 ELM_CHECK_WIDTYPE(obj, widtype);
685 Widget_Data *wd = elm_widget_data_get(obj);
688 if (wd->wrap_w == w) return;
691 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
692 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
699 elm_label_wrap_width_get(const Evas_Object *obj)
701 ELM_CHECK_WIDTYPE(obj, widtype) 0;
702 Widget_Data *wd = elm_widget_data_get(obj);
708 elm_label_wrap_height_set(Evas_Object *obj,
711 ELM_CHECK_WIDTYPE(obj, widtype);
712 Widget_Data *wd = elm_widget_data_get(obj);
715 if (wd->wrap_h == h) return;
718 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
719 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
726 elm_label_wrap_height_get(const Evas_Object *obj)
728 ELM_CHECK_WIDTYPE(obj, widtype) 0;
729 Widget_Data *wd = elm_widget_data_get(obj);
735 elm_label_fontsize_set(Evas_Object *obj, int fontsize)
737 ELM_CHECK_WIDTYPE(obj, widtype);
738 Widget_Data *wd = elm_widget_data_get(obj);
739 Eina_Strbuf *fontbuf = NULL;
740 int len, removeflag = 0;
743 _elm_dangerous_call_check(__FUNCTION__);
744 len = strlen(wd->label);
745 if (len <= 0) return;
746 fontbuf = eina_strbuf_new();
747 eina_strbuf_append_printf(fontbuf, "%d", fontsize);
749 if (fontsize == 0) removeflag = 1; // remove fontsize tag
751 if (_stringshare_key_value_replace(&wd->format, "font_size", eina_strbuf_string_get(fontbuf), removeflag) == 0)
753 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
754 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
758 eina_strbuf_free(fontbuf);
762 elm_label_text_align_set(Evas_Object *obj, const char *alignmode)
764 ELM_CHECK_WIDTYPE(obj, widtype);
765 Widget_Data *wd = elm_widget_data_get(obj);
769 _elm_dangerous_call_check(__FUNCTION__);
770 len = strlen(wd->label);
771 if (len <= 0) return;
773 if (_stringshare_key_value_replace(&wd->format, "align", alignmode, 0) == 0)
775 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
776 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
784 elm_label_text_color_set(Evas_Object *obj,
790 ELM_CHECK_WIDTYPE(obj, widtype);
791 Widget_Data *wd = elm_widget_data_get(obj);
792 Eina_Strbuf *colorbuf = NULL;
796 _elm_dangerous_call_check(__FUNCTION__);
797 len = strlen(wd->label);
798 if (len <= 0) return;
799 colorbuf = eina_strbuf_new();
800 eina_strbuf_append_printf(colorbuf, "#%02X%02X%02X%02X", r, g, b, a);
802 if (_stringshare_key_value_replace(&wd->format, "color", eina_strbuf_string_get(colorbuf), 0) == 0)
804 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
805 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
809 eina_strbuf_free(colorbuf);
813 elm_label_background_color_set(Evas_Object *obj,
819 ELM_CHECK_WIDTYPE(obj, widtype);
820 Widget_Data *wd = elm_widget_data_get(obj);
822 evas_object_color_set(wd->bg, r, g, b, a);
824 _elm_dangerous_call_check(__FUNCTION__);
825 if (wd->bgcolor == EINA_FALSE)
828 edje_object_part_swallow(wd->lbl, "label.swallow.background", wd->bg);
833 elm_label_ellipsis_set(Evas_Object *obj, Eina_Bool ellipsis)
835 ELM_CHECK_WIDTYPE(obj, widtype);
836 Widget_Data *wd = elm_widget_data_get(obj);
837 Eina_Strbuf *fontbuf = NULL;
838 int len, removeflag = 0;
841 if (wd->ellipsis == ellipsis) return;
842 wd->ellipsis = ellipsis;
843 len = strlen(wd->label);
844 if (len <= 0) return;
846 if (ellipsis == EINA_FALSE) removeflag = 1; // remove fontsize tag
848 fontbuf = eina_strbuf_new();
849 eina_strbuf_append_printf(fontbuf, "%f", 1.0);
851 if (_stringshare_key_value_replace(&wd->format,
852 "ellipsis", eina_strbuf_string_get(fontbuf), removeflag) == 0)
854 edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
855 edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
859 eina_strbuf_free(fontbuf);
864 elm_label_slide_set(Evas_Object *obj,
867 ELM_CHECK_WIDTYPE(obj, widtype);
868 Widget_Data *wd = elm_widget_data_get(obj);
871 if (wd->slidingmode == slide) return;
872 wd->slidingmode = slide;
873 _label_sliding_change(obj);
879 elm_label_slide_get(Evas_Object *obj)
881 ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
882 Widget_Data *wd = elm_widget_data_get(obj);
883 if (!wd) return EINA_FALSE;
884 return wd->slidingmode;
888 elm_label_slide_duration_set(Evas_Object *obj, double duration)
890 ELM_CHECK_WIDTYPE(obj, widtype);
891 Widget_Data *wd = elm_widget_data_get(obj);
892 Edje_Message_Float_Set *msg = alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double)));
895 wd->slide_duration = duration;
897 msg->val[0] = wd->slide_duration;
898 edje_object_message_send(wd->lbl, EDJE_MESSAGE_FLOAT_SET, 0, msg);
902 elm_label_slide_duration_get(Evas_Object *obj)
904 ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
905 Widget_Data *wd = elm_widget_data_get(obj);
907 return wd->slide_duration;