1
/* Legacy API implementations based on internal EO calls */
3
#include "edje_private.h"
4
#include "edje_part_helper.h"
6
#define GET_REAL_PART_ON_FAIL_RETURN(x) Edje_Real_Part *rp;\
9
ed = _edje_fetch(obj);\
11
rp = _edje_real_part_recursive_get(&ed, part);\
15
edje_object_load_error_get(const Eo *obj)
19
ed = _edje_fetch(obj);
20
if (!ed) return EDJE_LOAD_ERROR_GENERIC;
21
return ed->load_error;
25
edje_object_part_geometry_get(const Edje_Object *obj, const char *part, int *x, int *y, int *w, int *h)
29
EINA_SAFETY_ON_NULL_RETURN_VAL(part, EINA_FALSE);
31
// Similar to geometry_get(efl_part(obj, part), x, y, w, h) but the bool
32
// return value matters here.
34
ed = _edje_fetch(obj);
44
/* Need to recalc before providing the object. */
47
rp = _edje_real_part_recursive_get(&ed, part);
64
edje_object_part_state_get(const Edje_Object *obj, const char * part, double *val_ret)
67
efl_canvas_layout_part_state_get(efl_part(obj, part), &str, val_ret);
72
edje_object_message_signal_process(Edje_Object *obj)
74
efl_layout_signal_process(obj, EINA_FALSE);
79
edje_object_message_signal_recursive_process(Edje_Object *obj)
81
efl_layout_signal_process(obj, EINA_TRUE);
85
edje_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
89
ed = _edje_fetch(obj);
90
if (!ed || ed->delete_me) return;
91
_edje_object_signal_callback_add(obj, ed, emission, source, func, NULL, NULL, data);
95
edje_object_signal_callback_del_full(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
97
Edje_Signal_Callback_Group *gp;
98
Edje *ed = _edje_fetch(obj);
101
if (!ed || ed->delete_me) return NULL;
103
gp = (Edje_Signal_Callback_Group *) ed->callbacks;
104
if (!gp) return NULL;
106
emission = eina_stringshare_add(emission);
107
source = eina_stringshare_add(source);
109
// We can cast here as the function won't be used and is just going to be used for comparison
110
ok = _edje_signal_callback_disable(gp, emission, source, func, NULL, NULL, data);
115
for (unsigned i = 0; i < gp->matches->matches_count; ++i)
117
if (emission == gp->matches->matches[i].signal &&
118
source == gp->matches->matches[i].source &&
119
func == gp->matches->matches[i].legacy &&
120
gp->flags[i].legacy &&
121
!gp->flags[i].delete_me)
123
gp->flags[i].delete_me = EINA_TRUE;
124
//return gp->custom_data[i];
130
eina_stringshare_del(emission);
131
eina_stringshare_del(source);
133
// Note: This function seems to have returned NULL since ~2013, despite
134
// what the documentation says.
139
edje_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func)
141
// Legacy del_full seems to have been sloppy with NULL data, as that would
142
// match the first callback found. Keeping this legacy behaviour unchanged.
143
return edje_object_signal_callback_del_full(obj, emission, source, func, NULL);
147
edje_object_signal_emit(Evas_Object *obj, const char *emission, const char *source)
149
efl_layout_signal_emit(obj, emission, source);
153
edje_object_part_external_param_set(Eo *obj, const char *part, const Edje_External_Param *param)
155
Edje *ed = _edje_fetch(obj);
156
return _edje_object_part_external_param_set(ed, part, param);
160
edje_object_part_external_param_get(const Eo *obj, const char *part, Edje_External_Param *param)
162
Edje *ed = _edje_fetch(obj);
163
return _edje_object_part_external_param_get(ed, part, param);
166
EAPI Edje_External_Param_Type
167
edje_object_part_external_param_type_get(const Eo *obj, const char *part, const char *param)
169
Edje *ed = _edje_fetch(obj);
170
return _edje_object_part_external_param_type_get(ed, part, param);
174
edje_object_part_external_object_get(const Edje_Object *obj, const char *part)
176
return efl_content_get(efl_part(obj, part));
179
/* Legacy only. Shall we deprecate this API? */
181
edje_object_part_external_content_get(const Edje_Object *obj, const char *part, const char *content)
183
Edje *ed = _edje_fetch(obj);
184
return _edje_object_part_external_content_get(ed, part, content);
187
/* Efl.Ui.I18n APIs */
189
edje_object_mirrored_set(Edje_Object *obj, Eina_Bool rtl)
191
efl_ui_mirrored_set(obj, rtl);
194
EAPI Eina_Bool edje_object_mirrored_get(const Edje_Object *obj)
196
return efl_ui_mirrored_get(obj);
199
EAPI void edje_object_language_set(Edje_Object *obj, const char *language)
201
efl_ui_language_set(obj, language);
204
EAPI const char *edje_object_language_get(const Edje_Object *obj)
206
return efl_ui_language_get(obj);
209
EAPI Eina_Bool edje_object_scale_set(Edje_Object *obj, double scale)
211
efl_gfx_entity_scale_set(obj, scale);
215
EAPI double edje_object_scale_get(const Edje_Object *obj)
217
return efl_gfx_entity_scale_get(obj);
220
/* Legacy part drag APIs */
222
edje_object_part_drag_dir_get(const Evas_Object *obj, const char *part)
224
return (Edje_Drag_Dir)efl_ui_drag_dir_get(efl_part(obj, part));
228
edje_object_part_drag_value_set(Evas_Object *obj, const char *part, double dx, double dy)
230
return efl_ui_drag_value_set(efl_part(obj, part), dx, dy);
234
edje_object_part_drag_value_get(const Evas_Object *obj, const char *part, double *dx, double *dy)
236
return efl_ui_drag_value_get(efl_part(obj, part), dx, dy);
240
edje_object_part_drag_size_set(Evas_Object *obj, const char *part, double dw, double dh)
242
return efl_ui_drag_size_set(efl_part(obj, part), dw, dh);
246
edje_object_part_drag_size_get(const Evas_Object *obj, const char *part, double *dw, double *dh)
248
return efl_ui_drag_size_get(efl_part(obj, part), dw, dh);
252
edje_object_part_drag_step_set(Evas_Object *obj, const char *part, double dx, double dy)
254
return efl_ui_drag_step_set(efl_part(obj, part), dx, dy);
258
edje_object_part_drag_step_get(const Evas_Object *obj, const char *part, double *dx, double *dy)
260
return efl_ui_drag_step_get(efl_part(obj, part), dx, dy);
264
edje_object_part_drag_page_set(Evas_Object *obj, const char *part, double dx, double dy)
266
return efl_ui_drag_page_set(efl_part(obj, part), dx, dy);
270
edje_object_part_drag_page_get(const Evas_Object *obj, const char *part, double *dx, double *dy)
272
return efl_ui_drag_page_get(efl_part(obj, part), dx, dy);
276
edje_object_part_drag_step(Evas_Object *obj, const char *part, double dx, double dy)
278
return efl_ui_drag_step_move(efl_part(obj, part), dx, dy);
282
edje_object_part_drag_page(Evas_Object *obj, const char *part, double dx, double dy)
284
return efl_ui_drag_page_move(efl_part(obj, part), dx, dy);
288
edje_object_part_text_cursor_begin_set(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
290
GET_REAL_PART_ON_FAIL_RETURN()
291
_edje_text_cursor_begin(rp, _edje_text_cursor_get(rp, cur));
295
edje_object_part_text_cursor_end_set(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
297
GET_REAL_PART_ON_FAIL_RETURN()
298
_edje_text_cursor_end(rp, _edje_text_cursor_get(rp, cur));
302
edje_object_part_text_cursor_pos_set(Edje_Object *obj, const char * part EINA_UNUSED, Edje_Cursor cur, int pos)
304
GET_REAL_PART_ON_FAIL_RETURN()
305
_edje_text_cursor_pos_set(rp, _edje_text_cursor_get(rp, cur), pos);
309
edje_object_part_text_cursor_pos_get(const Edje_Object *obj, const char * part EINA_UNUSED, Edje_Cursor cur)
311
GET_REAL_PART_ON_FAIL_RETURN(0)
312
return _edje_text_cursor_pos_get(rp, _edje_text_cursor_get(rp, cur));
316
edje_object_part_text_cursor_coord_set(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur, int x, int y)
318
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
319
return _edje_text_cursor_coord_set(rp, _edje_text_cursor_get(rp, cur), x, y);
323
edje_object_part_text_cursor_line_begin_set(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
325
GET_REAL_PART_ON_FAIL_RETURN()
326
_edje_text_cursor_line_begin(rp, _edje_text_cursor_get(rp, cur));
330
edje_object_part_text_cursor_line_end_set(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
332
GET_REAL_PART_ON_FAIL_RETURN()
333
_edje_text_cursor_line_end(rp, _edje_text_cursor_get(rp, cur));
337
edje_object_part_text_cursor_prev(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
339
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
340
return _edje_text_cursor_prev(rp, _edje_text_cursor_get(rp, cur));
344
edje_object_part_text_cursor_next(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
346
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
347
return _edje_text_cursor_next(rp, _edje_text_cursor_get(rp, cur));
351
edje_object_part_text_cursor_down(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
353
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
354
return _edje_text_cursor_down(rp, _edje_text_cursor_get(rp, cur));
358
edje_object_part_text_cursor_up(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
360
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
361
return _edje_text_cursor_up(rp, _edje_text_cursor_get(rp, cur));
365
edje_object_part_text_cursor_copy(Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur, Edje_Cursor dst)
367
GET_REAL_PART_ON_FAIL_RETURN()
368
_edje_text_cursor_copy(rp, _edje_text_cursor_get(rp, cur), _edje_text_cursor_get(rp, dst));
372
edje_object_part_text_cursor_content_get(const Edje_Object *obj, const char *part EINA_UNUSED, Edje_Cursor cur)
374
GET_REAL_PART_ON_FAIL_RETURN(NULL)
375
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
377
return _edje_entry_cursor_content_get(rp, cur);
384
edje_object_part_text_cursor_geometry_get(const Edje_Object *obj, const char * part EINA_UNUSED, int *x, int *y, int *w, int *h)
386
GET_REAL_PART_ON_FAIL_RETURN()
387
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
389
_edje_entry_cursor_geometry_get(rp, x, y, w, h, NULL);
396
edje_object_part_text_hide_visible_password(Eo *obj, const char *part)
398
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
399
Eina_Bool int_ret = EINA_FALSE;
400
if (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) return EINA_FALSE;
401
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
402
(!rp->typedata.text))
407
if (rp->part->entry_mode == EDJE_ENTRY_EDIT_MODE_PASSWORD)
408
int_ret = _edje_entry_hide_visible_password(ed, rp);
414
edje_object_part_text_cursor_is_format_get(const Eo *obj, const char *part, Edje_Cursor cur)
416
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
417
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
419
return _edje_entry_cursor_is_format_get(rp, cur);
425
edje_object_part_text_cursor_is_visible_format_get(const Eo *obj, const char *part, Edje_Cursor cur)
427
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
428
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
430
return _edje_entry_cursor_is_visible_format_get(rp, cur);
436
EAPI const Eina_List *
437
edje_object_part_text_anchor_list_get(const Eo *obj, const char *part)
439
GET_REAL_PART_ON_FAIL_RETURN(NULL)
440
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
441
return _edje_entry_anchors_list(rp);
446
EAPI const Eina_List *
447
edje_object_part_text_anchor_geometry_get(const Eo *obj, const char *part, const char *anchor)
449
GET_REAL_PART_ON_FAIL_RETURN(NULL)
450
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
451
return _edje_entry_anchor_geometry_get(rp, anchor);
457
edje_object_part_text_style_user_push(Eo *obj, const char *part, const char *style)
459
Evas_Textblock_Style *ts;
460
GET_REAL_PART_ON_FAIL_RETURN()
462
if (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) return;
464
ts = evas_textblock_style_new();
465
evas_textblock_style_set(ts, style);
466
evas_object_textblock_style_user_push(rp->object, ts);
467
evas_textblock_style_free(ts);
468
ed->recalc_hints = EINA_TRUE;
469
#ifdef EDJE_CALC_CACHE
470
rp->invalidate = EINA_TRUE;
476
edje_object_part_text_style_user_pop(Eo *obj, const char *part)
478
GET_REAL_PART_ON_FAIL_RETURN()
479
if (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) return;
481
evas_object_textblock_style_user_pop(rp->object);
482
ed->recalc_hints = EINA_TRUE;
483
#ifdef EDJE_CALC_CACHE
484
rp->invalidate = EINA_TRUE;
490
edje_object_part_text_style_user_peek(const Eo *obj, const char *part)
493
const Evas_Textblock_Style *ts;
495
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
497
ed = _edje_fetch(obj);
499
if (!ed) return NULL;
500
rp = _edje_real_part_recursive_get(&ed, part);
501
if (!rp) return NULL;
502
if (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) return NULL;
504
ts = evas_object_textblock_style_user_peek(rp->object);
506
return evas_textblock_style_get(ts);
511
EAPI const Eina_List *
512
edje_object_part_text_item_list_get(const Eo *obj, const char *part)
514
GET_REAL_PART_ON_FAIL_RETURN(NULL)
515
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
516
return _edje_entry_items_list(rp);
522
edje_object_part_text_item_geometry_get(const Eo *obj, const char *part, const char *item, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
524
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
525
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
527
return _edje_entry_item_geometry_get(rp, item, cx, cy, cw, ch);
534
edje_object_text_insert_filter_callback_add(Eo *obj, const char *part, Edje_Text_Filter_Cb func, void *data)
536
Edje_Text_Insert_Filter_Callback *cb;
538
EINA_SAFETY_ON_NULL_RETURN(part);
540
ed = _edje_fetch(obj);
543
cb = calloc(1, sizeof(Edje_Text_Insert_Filter_Callback));
544
cb->part = eina_stringshare_add(part);
546
cb->data = (void *)data;
547
ed->text_insert_filter_callbacks =
548
eina_list_append(ed->text_insert_filter_callbacks, cb);
552
edje_object_text_insert_filter_callback_del(Eo *obj, const char *part, Edje_Text_Filter_Cb func)
554
Edje_Text_Insert_Filter_Callback *cb;
557
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
559
ed = _edje_fetch(obj);
561
if (!ed) return NULL;
562
EINA_LIST_FOREACH(ed->text_insert_filter_callbacks, l, cb)
564
if ((!strcmp(cb->part, part)) && (cb->func == func))
566
void *data = cb->data;
567
ed->text_insert_filter_callbacks =
568
eina_list_remove_list(ed->text_insert_filter_callbacks, l);
569
eina_stringshare_del(cb->part);
579
edje_object_text_insert_filter_callback_del_full(Eo *obj, const char *part, Edje_Text_Filter_Cb func, void *data)
581
Edje_Text_Insert_Filter_Callback *cb;
584
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
586
ed = _edje_fetch(obj);
588
if (!ed) return NULL;
589
EINA_LIST_FOREACH(ed->text_insert_filter_callbacks, l, cb)
591
if ((!strcmp(cb->part, part)) && (cb->func == func) &&
594
void *tmp = cb->data;
595
ed->text_insert_filter_callbacks =
596
eina_list_remove_list(ed->text_insert_filter_callbacks, l);
597
eina_stringshare_del(cb->part);
607
edje_object_text_markup_filter_callback_add(Eo *obj, const char *part, Edje_Markup_Filter_Cb func, void *data)
609
Edje_Markup_Filter_Callback *cb;
611
EINA_SAFETY_ON_NULL_RETURN(part);
613
ed = _edje_fetch(obj);
616
cb = calloc(1, sizeof(Edje_Markup_Filter_Callback));
617
cb->part = eina_stringshare_add(part);
619
cb->data = (void *)data;
620
ed->markup_filter_callbacks =
621
eina_list_append(ed->markup_filter_callbacks, cb);
625
edje_object_text_markup_filter_callback_del(Eo *obj, const char *part, Edje_Markup_Filter_Cb func)
627
Edje_Markup_Filter_Callback *cb;
630
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
632
ed = _edje_fetch(obj);
634
if (!ed) return NULL;
635
EINA_LIST_FOREACH(ed->markup_filter_callbacks, l, cb)
637
if ((!strcmp(cb->part, part)) && (cb->func == func))
639
void *data = cb->data;
640
ed->markup_filter_callbacks =
641
eina_list_remove_list(ed->markup_filter_callbacks, l);
642
eina_stringshare_del(cb->part);
652
edje_object_text_markup_filter_callback_del_full(Eo *obj, const char *part, Edje_Markup_Filter_Cb func, void *data)
654
Edje_Markup_Filter_Callback *cb;
657
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
659
ed = _edje_fetch(obj);
661
if (!ed) return NULL;
662
EINA_LIST_FOREACH(ed->markup_filter_callbacks, l, cb)
664
if ((!strcmp(cb->part, part)) && (cb->func == func) &&
667
void *tmp = cb->data;
668
ed->markup_filter_callbacks =
669
eina_list_remove_list(ed->markup_filter_callbacks, l);
670
eina_stringshare_del(cb->part);
680
edje_object_part_text_user_insert(const Eo *obj, const char *part, const char *text)
684
EINA_SAFETY_ON_NULL_RETURN(part);
686
ed = _edje_fetch(obj);
689
rp = _edje_real_part_recursive_get(&ed, part);
691
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
692
_edje_entry_user_insert(rp, text);
696
_edje_object_part_text_raw_append(Edje *ed, Evas_Object *obj, Edje_Real_Part *rp, const char *part, const char *text)
698
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
699
(!rp->typedata.text)) return EINA_TRUE;
700
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
701
_edje_entry_text_markup_append(rp, text);
704
if (rp->typedata.text->text)
707
int len_added = strlen(text);
708
int len_old = strlen(rp->typedata.text->text);
709
new = malloc(len_old + len_added + 1);
710
memcpy(new, rp->typedata.text->text, len_old);
711
memcpy(new + len_old, text, len_added);
712
new[len_old + len_added] = '\0';
713
eina_stringshare_replace(&rp->typedata.text->text, new);
718
eina_stringshare_replace(&rp->typedata.text->text, text);
721
ed->dirty = EINA_TRUE;
723
#ifdef EDJE_CALC_CACHE
724
rp->invalidate = EINA_TRUE;
727
if (ed->text_change.func)
728
ed->text_change.func(ed->text_change.data, obj, part);
733
edje_object_part_text_append(Eo *obj, const char *part, const char *text)
737
EINA_SAFETY_ON_NULL_RETURN(part);
739
ed = _edje_fetch(obj);
742
rp = _edje_real_part_recursive_get(&ed, part);
744
if ((rp->part->type != EDJE_PART_TYPE_TEXTBLOCK)) return;
745
_edje_object_part_text_raw_append(ed, obj, rp, part, text);
746
ed->dirty = EINA_TRUE;
747
ed->recalc_call = EINA_TRUE;
748
ed->recalc_hints = EINA_TRUE;
749
#ifdef EDJE_CALC_CACHE
750
rp->invalidate = EINA_TRUE;
753
if (ed->text_change.func)
754
ed->text_change.func(ed->text_change.data, obj, part);
758
edje_object_part_text_escaped_set(Eo *obj, const char *part, const char *text)
763
EINA_SAFETY_ON_NULL_RETURN_VAL(part, EINA_FALSE);
765
ed = _edje_fetch(obj);
767
if (!ed) return EINA_FALSE;
768
rp = _edje_real_part_recursive_get(&ed, part);
769
if (!rp) return EINA_FALSE;
770
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
771
(!rp->typedata.text)) return EINA_FALSE;
772
if (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK &&
773
rp->part->type != EDJE_PART_TYPE_TEXT)
775
if ((rp->part->type == EDJE_PART_TYPE_TEXT) && (text))
778
char *esc_start = NULL, *esc_end = NULL;
781
sbuf = eina_strbuf_new();
786
if ((*p == 0) || (esc_end) || (esc_start))
792
escape = evas_textblock_escape_string_range_get
793
(esc_start, esc_end + 1);
794
if (escape) eina_strbuf_append(sbuf, escape);
795
esc_start = esc_end = NULL;
799
if (!s) s = esc_start; /* This would happen when there is & that isn't escaped */
800
eina_strbuf_append_length(sbuf, s, p - s);
809
if (!s) s = esc_start; /* This would happen when there is & that isn't escaped */
812
eina_strbuf_append_length(sbuf, s, p - s);
825
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, eina_strbuf_string_get(sbuf));
826
_edje_user_define_string(ed, part, rp->typedata.text->text, EDJE_TEXT_TYPE_ESCAPED);
827
eina_strbuf_free(sbuf);
830
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, text);
831
_edje_user_define_string(ed, part, rp->typedata.text->text, EDJE_TEXT_TYPE_ESCAPED);
837
_edje_text_escape(const char *text)
841
const char *text_end;
844
if (!text) return NULL;
846
txt = eina_strbuf_new();
847
text_len = strlen(text);
849
text_end = text + text_len;
850
while (text < text_end)
853
const char *escaped = evas_textblock_string_escape_get(text, &advance);
856
eina_strbuf_append_char(txt, text[0]);
860
eina_strbuf_append(txt, escaped);
865
ret = eina_strbuf_string_steal(txt);
866
eina_strbuf_free(txt);
871
_edje_text_unescape(const char *text)
875
const char *text_end, *last, *escape_start;
878
if (!text) return NULL;
880
txt = eina_strbuf_new();
881
text_len = strlen(text);
883
text_end = text + text_len;
886
for (; text < text_end; text++)
900
len = text - escape_start;
905
eina_strbuf_append_n(txt, str, len);
910
else if ((*text == ';') && (escape_start))
913
const char *str = evas_textblock_escape_string_range_get(escape_start, text);
920
len = text + 1 - escape_start;
923
eina_strbuf_append_n(txt, str, len);
930
if (!last && escape_start)
933
if (last && (text > last))
935
size_t len = text - last;
936
eina_strbuf_append_n(txt, last, len);
939
ret = eina_strbuf_string_steal(txt);
940
eina_strbuf_free(txt);
945
edje_object_part_text_unescaped_set(Eo *obj, const char *part, const char *text_to_escape)
948
Eina_Bool int_ret = EINA_FALSE;
950
EINA_SAFETY_ON_NULL_RETURN_VAL(part, EINA_FALSE);
952
ed = _edje_fetch(obj);
954
if (!ed) return EINA_FALSE;
955
rp = _edje_real_part_recursive_get(&ed, part);
956
if (!rp) return EINA_FALSE;
957
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
958
(!rp->typedata.text)) return EINA_FALSE;
959
if (rp->part->type == EDJE_PART_TYPE_TEXT)
960
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, text_to_escape);
961
else if (rp->part->type == EDJE_PART_TYPE_TEXTBLOCK)
963
char *text = _edje_text_escape(text_to_escape);
965
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, text);
968
_edje_user_define_string(ed, part, rp->typedata.text->text, EDJE_TEXT_TYPE_UNESCAPED);
974
edje_object_part_text_unescaped_get(const Eo *obj, const char *part)
978
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
980
ed = _edje_fetch(obj);
982
if (!ed) return NULL;
984
/* Need to recalc before providing the object. */
987
rp = _edje_real_part_recursive_get(&ed, part);
988
if (!rp) return NULL;
989
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
990
(!rp->typedata.text)) return NULL;
991
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
993
const char *t = _edje_entry_text_get(rp);
994
return _edje_text_unescape(t);
998
if (rp->part->type == EDJE_PART_TYPE_TEXT)
1000
return strdup(rp->typedata.text->text);
1002
if (rp->part->type == EDJE_PART_TYPE_TEXTBLOCK)
1004
const char *t = evas_object_textblock_text_markup_get(rp->object);
1005
return _edje_text_unescape(t);
1013
_edje_object_part_text_insert(Edje *ed, Edje_Real_Part *rp, const char *text)
1016
if ((rp->part->type != EDJE_PART_TYPE_TEXTBLOCK)) return;
1017
if (rp->part->entry_mode <= EDJE_ENTRY_EDIT_MODE_NONE) return;
1018
_edje_entry_text_markup_insert(rp, text);
1019
ed->dirty = EINA_TRUE;
1020
ed->recalc_call = EINA_TRUE;
1021
ed->recalc_hints = EINA_TRUE;
1022
#ifdef EDJE_CALC_CACHE
1023
rp->invalidate = EINA_TRUE;
1029
edje_object_part_text_insert(Eo *obj, const char *part, const char *text)
1033
EINA_SAFETY_ON_NULL_RETURN(part);
1035
ed = _edje_fetch(obj);
1038
rp = _edje_real_part_recursive_get(&ed, part);
1039
_edje_object_part_text_insert(ed, rp, text);
1040
if (ed->text_change.func)
1041
ed->text_change.func(ed->text_change.data, obj, part);
1044
/* Calc interface APIs */
1047
edje_object_update_hints_set(Edje_Object *obj, Eina_Bool update)
1049
efl_layout_calc_auto_update_hints_set(obj, update);
1053
edje_object_update_hints_get(const Edje_Object *obj)
1055
return efl_layout_calc_auto_update_hints_get(obj);
1059
edje_object_size_min_calc(Edje_Object *obj, int *minw, int *minh)
1061
edje_object_size_min_restricted_calc(obj, minw, minh, 0, 0);
1065
edje_object_size_min_restricted_calc(Edje_Object *obj, int *minw, int *minh, int restrictedw, int restrictedh)
1067
Eina_Size2D sz = { restrictedw, restrictedh };
1070
ed = _edje_fetch(obj);
1073
if (minw) *minw = sz.w;
1074
if (minh) *minh = sz.h;
1077
sz = efl_layout_calc_size_min(obj, EINA_SIZE2D(restrictedw, restrictedh));
1078
if (minw) *minw = sz.w;
1079
if (minh) *minh = sz.h;
1083
edje_object_parts_extends_calc(Edje_Object *obj, int *x, int *y, int *w, int *h)
1085
Eina_Rect r = EINA_RECT_ZERO();
1088
ed = _edje_fetch(obj);
1089
if (ed) r = efl_layout_calc_parts_extends(obj);
1094
return (ed != NULL);
1098
edje_object_freeze(Edje_Object *obj)
1100
return efl_layout_calc_freeze(obj);
1104
edje_object_thaw(Edje_Object *obj)
1106
return efl_layout_calc_thaw(obj);
1110
edje_object_calc_force(Edje_Object *obj)
1112
efl_layout_calc_force(obj);
1116
edje_object_play_set(Evas_Object *obj, Eina_Bool play)
1118
efl_player_paused_set(obj, !play);
1122
edje_object_play_get(const Evas_Object *obj)
1124
if (!efl_isa(obj, EFL_CANVAS_LAYOUT_CLASS)) return EINA_FALSE;
1125
return !efl_player_paused_get(obj);
1129
edje_object_transition_duration_factor_set(Evas_Object *obj, double scale)
1131
if (scale <= 0.0) return;
1132
efl_player_playback_speed_set(obj, 1.0/scale);
1136
edje_object_transition_duration_factor_get(const Evas_Object *obj)
1138
double speed = efl_player_playback_speed_get(obj);
1140
if (speed <= 0.0) speed = 1.0;
1145
edje_object_size_min_get(const Edje_Object *obj, int *minw, int *minh)
1148
sz = efl_layout_group_size_min_get(obj);
1149
if (minw) *minw = sz.w;
1150
if (minh) *minh = sz.h;
1154
edje_object_size_max_get(const Edje_Object *obj, int *maxw, int *maxh)
1157
sz = efl_layout_group_size_max_get(obj);
1158
if (maxw) *maxw = sz.w;
1159
if (maxh) *maxh = sz.h;
1163
edje_object_part_exists(const Eo *obj, const char *part)
1165
return efl_layout_group_part_exist_get(obj, part);