1
#include "edje_private.h"
2
#include "edje_part_helper.h"
3
#include "efl_canvas_layout_part_text.eo.h"
4
#define MY_CLASS EFL_CANVAS_LAYOUT_PART_TEXT_CLASS
6
PROXY_IMPLEMENTATION(text, MY_CLASS, EINA_FALSE)
7
#undef PROXY_IMPLEMENTATION
10
_efl_canvas_layout_part_text_efl_text_text_set(Eo *obj,
11
void *_pd EINA_UNUSED, const char *text)
13
PROXY_DATA_GET(obj, pd);
14
_edje_efl_text_text_set(obj, pd->ed, pd->part, text, EINA_FALSE, EINA_FALSE);
17
EOLIAN static const char *
18
_efl_canvas_layout_part_text_efl_text_text_get(const Eo *obj,
19
void *_pd EINA_UNUSED)
21
PROXY_DATA_GET(obj, pd);
22
return _edje_efl_text_text_get(obj, pd->ed, pd->part, EINA_FALSE, EINA_FALSE);
25
EOLIAN static const char *
26
_efl_canvas_layout_part_text_efl_text_markup_markup_get(const Eo *obj,
27
void *_pd EINA_UNUSED)
29
PROXY_DATA_GET(obj, pd);
30
return _edje_efl_text_text_get(obj, pd->ed, pd->part, EINA_FALSE, EINA_TRUE);
34
_efl_canvas_layout_part_text_efl_text_markup_markup_set(Eo *obj,
35
void *_pd EINA_UNUSED, const char *text)
37
PROXY_DATA_GET(obj, pd);
38
_edje_efl_text_text_set(obj, pd->ed, pd->part, text, EINA_FALSE, EINA_TRUE);
41
/* More Efl.Text.* API (@since 1.22) */
44
_efl_canvas_layout_part_text_efl_text_style_text_background_type_set(Eo *obj,
45
void *_pd EINA_UNUSED,
46
Efl_Text_Style_Background_Type type)
48
Edje_User_Defined *eud;
50
PROXY_DATA_GET(obj, pd);
51
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
53
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
55
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_NONE;
56
efl_text_background_type_set(pd->rp->object, type);
59
EOLIAN static Efl_Text_Style_Background_Type
60
_efl_canvas_layout_part_text_efl_text_style_text_background_type_get(const Eo *obj,
61
void *_pd EINA_UNUSED)
64
PROXY_DATA_GET(obj, pd);
65
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT)
66
return EFL_TEXT_STYLE_BACKGROUND_TYPE_NONE;
68
return efl_text_background_type_get(pd->rp->object);
71
#define TEXT_COLOR_IMPL(x, X) \
73
_efl_canvas_layout_part_text_efl_text_style_ ##x ##_color_set(Eo *obj, \
74
void *_pd EINA_UNUSED, \
75
unsigned char r, unsigned char g, unsigned char b, unsigned char a) \
77
Edje_User_Defined *eud; \
79
PROXY_DATA_GET(obj, pd); \
80
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return; \
82
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part); \
84
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_COLOR_ ##X; \
85
efl_ ##x ##_color_set(pd->rp->object, r, g, b, a); \
89
_efl_canvas_layout_part_text_efl_text_style_ ##x ##_color_get(const Eo *obj, \
90
void *_pd EINA_UNUSED, \
91
unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a) \
93
PROXY_DATA_GET(obj, pd); \
94
*r = *g = *b = *a = 0; \
95
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return; \
96
efl_ ##x ##_color_get(pd->rp->object, r, g, b, a); \
99
TEXT_COLOR_IMPL(text_background, BACKING)
100
TEXT_COLOR_IMPL(text_glow, GLOW)
101
TEXT_COLOR_IMPL(text_secondary_glow, GLOW2)
102
TEXT_COLOR_IMPL(text, NORMAL)
103
TEXT_COLOR_IMPL(text_outline, OUTLINE)
104
TEXT_COLOR_IMPL(text_shadow, SHADOW)
105
TEXT_COLOR_IMPL(text_strikethrough, STRIKETHROUGH)
106
TEXT_COLOR_IMPL(text_underline, UNDERLINE)
107
TEXT_COLOR_IMPL(text_secondary_underline, UNDERLINE2)
108
TEXT_COLOR_IMPL(text_underline_dashed, UNDERLINE_DASHED)
111
_efl_canvas_layout_part_text_efl_text_style_text_effect_type_set(Eo *obj,
112
void *_pd EINA_UNUSED,
113
Efl_Text_Style_Effect_Type type)
115
Edje_User_Defined *eud;
117
PROXY_DATA_GET(obj, pd);
118
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
120
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
122
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_EFFECT_TYPE;
123
efl_text_effect_type_set(pd->rp->object, type);
127
_efl_canvas_layout_part_text_efl_text_format_ellipsis_set(Eo *obj,
128
void *_pd EINA_UNUSED, double value)
130
Edje_User_Defined *eud;
132
PROXY_DATA_GET(obj, pd);
133
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
135
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
137
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_ELLIPSIS;
138
efl_text_ellipsis_set(pd->rp->object, value);
142
_efl_canvas_layout_part_text_efl_text_format_ellipsis_get(const Eo *obj,
143
void *_pd EINA_UNUSED)
145
PROXY_DATA_GET(obj, pd);
146
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return 0.0;
148
return efl_text_ellipsis_get(pd->rp->object);
152
_efl_canvas_layout_part_text_efl_text_font_properties_font_family_set(Eo *obj,
153
void *_pd EINA_UNUSED, const char *font)
155
Edje_User_Defined *eud;
157
PROXY_DATA_GET(obj, pd);
158
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
161
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
163
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_FONT;
164
efl_text_font_family_set(pd->rp->object, font);
167
EOLIAN static const char *
168
_efl_canvas_layout_part_text_efl_text_font_properties_font_family_get(const Eo *obj,
169
void *_pd EINA_UNUSED)
171
PROXY_DATA_GET(obj, pd);
172
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return NULL;
174
return efl_text_font_family_get(pd->rp->object);
178
_efl_canvas_layout_part_text_efl_text_font_properties_font_size_set(Eo *obj,
179
void *_pd EINA_UNUSED, Efl_Font_Size size)
181
Edje_User_Defined *eud;
183
PROXY_DATA_GET(obj, pd);
184
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
187
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
189
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_FONT;
190
efl_text_font_size_set(pd->rp->object, size);
193
EOLIAN static Efl_Font_Size
194
_efl_canvas_layout_part_text_efl_text_font_properties_font_size_get(const Eo *obj,
195
void *_pd EINA_UNUSED)
197
PROXY_DATA_GET(obj, pd);
198
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return 0;
200
return efl_text_font_size_get(pd->rp->object);
204
_efl_canvas_layout_part_text_efl_text_style_text_shadow_direction_set(Eo *obj,
205
void *_pd EINA_UNUSED,
206
Efl_Text_Style_Shadow_Direction type)
208
Edje_User_Defined *eud;
210
PROXY_DATA_GET(obj, pd);
211
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
213
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
215
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_SHADOW_DIRECTION;
216
efl_text_shadow_direction_set(pd->rp->object, type);
220
_efl_canvas_layout_part_text_efl_text_style_text_strikethrough_type_set(Eo *obj,
221
void *_pd EINA_UNUSED,
222
Efl_Text_Style_Strikethrough_Type type)
224
Edje_User_Defined *eud;
226
PROXY_DATA_GET(obj, pd);
227
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
229
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
231
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_STRIKETHROUGH_TYPE;
232
efl_text_strikethrough_type_set(pd->rp->object, type);
236
_efl_canvas_layout_part_text_efl_text_style_text_underline_type_set(Eo *obj,
237
void *_pd EINA_UNUSED,
238
Efl_Text_Style_Underline_Type type)
240
Edje_User_Defined *eud;
242
PROXY_DATA_GET(obj, pd);
243
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
246
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
248
eud->u.text_style.types = EDJE_PART_TEXT_PROP_UNDERLINE_TYPE;
249
efl_text_underline_type_set(pd->rp->object, type);
253
_efl_canvas_layout_part_text_efl_text_style_text_underline_height_set(Eo *obj,
254
void *_pd EINA_UNUSED,
257
Edje_User_Defined *eud;
259
PROXY_DATA_GET(obj, pd);
260
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
262
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
264
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_UNDERLINE_HEIGHT;
265
efl_text_underline_height_set(pd->rp->object, value);
269
_efl_canvas_layout_part_text_efl_text_style_text_underline_dashed_width_set(Eo *obj,
270
void *_pd EINA_UNUSED,
273
Edje_User_Defined *eud;
275
PROXY_DATA_GET(obj, pd);
276
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
278
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
280
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_WIDTH;
281
efl_text_underline_dashed_width_set(pd->rp->object, value);
285
_efl_canvas_layout_part_text_efl_text_style_text_underline_dashed_gap_set(Eo *obj,
286
void *_pd EINA_UNUSED,
289
Edje_User_Defined *eud;
291
PROXY_DATA_GET(obj, pd);
292
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
294
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
296
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_GAP;
297
efl_text_underline_dashed_gap_set(pd->rp->object, value);
301
_efl_canvas_layout_part_text_efl_text_format_wrap_set(Eo *obj,
302
void *_pd EINA_UNUSED, Efl_Text_Format_Wrap wrap)
304
Edje_User_Defined *eud;
306
PROXY_DATA_GET(obj, pd);
307
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
309
eud = _edje_user_text_style_definition_fetch(pd->ed, pd->part);
311
eud->u.text_style.types |= EDJE_PART_TEXT_PROP_WRAP;
312
efl_text_wrap_set(pd->rp->object, wrap);
315
EOLIAN static Efl_Text_Format_Wrap
316
_efl_canvas_layout_part_text_efl_text_format_wrap_get(const Eo *obj,
317
void *_pd EINA_UNUSED)
319
PROXY_DATA_GET(obj, pd);
321
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT)
322
return EFL_TEXT_FORMAT_WRAP_NONE;
324
return efl_text_wrap_get(pd->rp->object);
327
static Edje_Part_Text_Prop *
328
_prop_new(Eina_List **props, Edje_Part_Text_Prop_Type type)
330
Edje_Part_Text_Prop *prop;
332
prop = malloc(sizeof(*prop));
335
*props = eina_list_append(*props, prop);
341
_canvas_layout_user_text_collect(Edje *ed, Edje_User_Defined *eud)
344
Eina_List **props = &eud->u.text_style.props;
346
rp = _edje_real_part_recursive_get(&ed, eud->part);
349
if (eud->u.text_style.types == EDJE_PART_TEXT_PROP_NONE) return;
351
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_BACKING_TYPE)
353
Edje_Part_Text_Prop *prop;
355
prop = _prop_new(props, EDJE_PART_TEXT_PROP_BACKING_TYPE);
356
prop->val.backing = efl_text_background_type_get(rp->object);
358
#define STYLE_COLOR_COLLECT(x, X) \
359
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_COLOR_ ##X) \
361
Edje_Part_Text_Prop *prop; \
362
prop = _prop_new(props, EDJE_PART_TEXT_PROP_COLOR_ ##X); \
363
efl_ ##x ##_color_get(rp->object, \
364
&prop->val.color.r, &prop->val.color.g, \
365
&prop->val.color.b, &prop->val.color.a); \
368
STYLE_COLOR_COLLECT(text_background, BACKING)
369
STYLE_COLOR_COLLECT(text_glow, GLOW)
370
STYLE_COLOR_COLLECT(text_secondary_glow, GLOW2)
371
STYLE_COLOR_COLLECT(text, NORMAL)
372
STYLE_COLOR_COLLECT(text_outline, OUTLINE)
373
STYLE_COLOR_COLLECT(text_shadow, SHADOW)
374
STYLE_COLOR_COLLECT(text_strikethrough, STRIKETHROUGH)
375
STYLE_COLOR_COLLECT(text_underline, UNDERLINE)
376
STYLE_COLOR_COLLECT(text_secondary_underline, UNDERLINE2)
377
STYLE_COLOR_COLLECT(text_underline_dashed, UNDERLINE_DASHED)
378
#undef STYLE_COLOR_COLLECT
380
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_EFFECT_TYPE)
382
Edje_Part_Text_Prop *prop;
384
prop = _prop_new(props, EDJE_PART_TEXT_PROP_EFFECT_TYPE);
385
prop->val.effect = efl_text_effect_type_get(rp->object);
388
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_ELLIPSIS)
390
Edje_Part_Text_Prop *prop;
392
prop = _prop_new(props, EDJE_PART_TEXT_PROP_ELLIPSIS);
393
prop->val.nd = efl_text_ellipsis_get(rp->object);
396
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_FONT)
398
Edje_Part_Text_Prop *prop;
400
prop = _prop_new(props, EDJE_PART_TEXT_PROP_FONT);
401
prop->val.font.font = efl_text_font_family_get(rp->object);
402
prop->val.font.size = efl_text_font_size_get(rp->object);
405
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_SHADOW_DIRECTION)
407
Edje_Part_Text_Prop *prop;
409
prop = _prop_new(props, EDJE_PART_TEXT_PROP_SHADOW_DIRECTION);
410
prop->val.shadow = efl_text_shadow_direction_get(rp->object);
413
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_STRIKETHROUGH_TYPE)
415
Edje_Part_Text_Prop *prop;
417
prop = _prop_new(props, EDJE_PART_TEXT_PROP_STRIKETHROUGH_TYPE);
418
prop->val.strikethrough_type = efl_text_strikethrough_type_get(rp->object);
421
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_GAP)
423
Edje_Part_Text_Prop *prop;
425
prop = _prop_new(props, EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_GAP);
426
prop->val.ni = efl_text_underline_dashed_gap_get(rp->object);
429
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_WIDTH)
431
Edje_Part_Text_Prop *prop;
433
prop = _prop_new(props, EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_WIDTH);
434
prop->val.ni = efl_text_underline_dashed_width_get(rp->object);
437
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_UNDERLINE_TYPE)
439
Edje_Part_Text_Prop *prop;
441
prop = _prop_new(props, EDJE_PART_TEXT_PROP_UNDERLINE_TYPE);
442
prop->val.ni = efl_text_underline_type_get(rp->object);
445
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_UNDERLINE_HEIGHT)
447
Edje_Part_Text_Prop *prop;
449
prop = _prop_new(props, EDJE_PART_TEXT_PROP_UNDERLINE_HEIGHT);
450
prop->val.ni = efl_text_underline_height_get(rp->object);
453
if (eud->u.text_style.types & EDJE_PART_TEXT_PROP_WRAP)
455
Edje_Part_Text_Prop *prop;
457
prop = _prop_new(props, EDJE_PART_TEXT_PROP_WRAP);
458
prop->val.wrap = efl_text_wrap_get(rp->object);
464
_canvas_layout_user_text_apply(Edje_User_Defined *eud, Eo *obj,
465
Edje_Part_Text_Prop *prop)
470
case EDJE_PART_TEXT_PROP_BACKING_TYPE:
471
efl_text_background_type_set(
477
#define STYLE_COLOR_CASE(x, X) \
478
case EDJE_PART_TEXT_PROP_COLOR_##X : \
479
efl_##x ##_color_set(efl_part(obj, \
484
prop->val.color.a); \
487
STYLE_COLOR_CASE(text_background, BACKING)
488
STYLE_COLOR_CASE(text_glow, GLOW)
489
STYLE_COLOR_CASE(text_secondary_glow, GLOW2)
490
STYLE_COLOR_CASE(text, NORMAL)
491
STYLE_COLOR_CASE(text_outline, OUTLINE)
492
STYLE_COLOR_CASE(text_shadow, SHADOW)
493
STYLE_COLOR_CASE(text_strikethrough, STRIKETHROUGH)
494
STYLE_COLOR_CASE(text_underline, UNDERLINE)
495
STYLE_COLOR_CASE(text_secondary_underline, UNDERLINE2)
496
STYLE_COLOR_CASE(text_underline_dashed, UNDERLINE_DASHED)
497
#undef STYLE_COLOR_CASE
499
case EDJE_PART_TEXT_PROP_EFFECT_TYPE:
500
efl_text_effect_type_set(
506
case EDJE_PART_TEXT_PROP_ELLIPSIS:
507
efl_text_ellipsis_set(efl_part(obj,
512
case EDJE_PART_TEXT_PROP_FONT:
513
efl_text_font_family_set(efl_part(obj,
515
prop->val.font.font);
516
efl_text_font_size_set(efl_part(obj,
518
prop->val.font.size);
521
case EDJE_PART_TEXT_PROP_SHADOW_DIRECTION:
522
efl_text_shadow_direction_set(
528
case EDJE_PART_TEXT_PROP_STRIKETHROUGH_TYPE:
529
efl_text_strikethrough_type_set(
532
prop->val.strikethrough_type);
535
case EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_WIDTH:
536
efl_text_underline_dashed_width_set(
542
case EDJE_PART_TEXT_PROP_UNDERLINE_DASHED_GAP:
543
efl_text_underline_dashed_gap_set(
549
case EDJE_PART_TEXT_PROP_UNDERLINE_TYPE:
550
efl_text_underline_type_set(
553
prop->val.underline_type);
556
case EDJE_PART_TEXT_PROP_UNDERLINE_HEIGHT:
557
efl_text_underline_height_set(
563
case EDJE_PART_TEXT_PROP_WRAP:
564
efl_text_wrap_set(efl_part(obj,
576
_efl_canvas_layout_part_text_text_expand_set(Eo *obj,
577
void *_pd EINA_UNUSED,
578
Efl_Canvas_Layout_Part_Text_Expand type)
580
Edje_User_Defined *eud;
582
PROXY_DATA_GET(obj, pd);
583
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) return;
585
eud = _edje_user_text_expand_definition_fetch(pd->ed, pd->part);
586
eud->u.text_expand.expand = type;
587
pd->rp->typedata.text->expand = type;
591
EOLIAN static Efl_Canvas_Layout_Part_Text_Expand
592
_efl_canvas_layout_part_text_text_expand_get(const Eo *obj,
593
void *_pd EINA_UNUSED)
595
PROXY_DATA_GET(obj, pd);
596
return pd->rp->typedata.text->expand;
599
#include "efl_canvas_layout_part_text.eo.c"