summaryrefslogtreecommitdiff
path: root/legacy/edje/src/lib/edje_text.c
diff options
context:
space:
mode:
Diffstat (limited to 'legacy/edje/src/lib/edje_text.c')
-rw-r--r--legacy/edje/src/lib/edje_text.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/legacy/edje/src/lib/edje_text.c b/legacy/edje/src/lib/edje_text.c
index cb53fa6..6436f52 100644
--- a/legacy/edje/src/lib/edje_text.c
+++ b/legacy/edje/src/lib/edje_text.c
@@ -337,7 +337,6 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
337 Edje_Part_Description_Text *chosen_desc) 337 Edje_Part_Description_Text *chosen_desc)
338{ 338{
339 const char *text = NULL; 339 const char *text = NULL;
340 const char *str;
341 const char *font; 340 const char *font;
342 char *font2 = NULL; 341 char *font2 = NULL;
343 char *sfont = NULL; 342 char *sfont = NULL;
@@ -345,6 +344,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
345 Evas_Coord tw, th; 344 Evas_Coord tw, th;
346 Evas_Coord sw, sh; 345 Evas_Coord sw, sh;
347 int inlined_font = 0, free_text = 0; 346 int inlined_font = 0, free_text = 0;
347 Eina_Bool same_text = EINA_FALSE;
348 FLOAT_T sc; 348 FLOAT_T sc;
349 349
350 sc = ed->scale; 350 sc = ed->scale;
@@ -352,7 +352,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
352 text = edje_string_get(&chosen_desc->text.text); 352 text = edje_string_get(&chosen_desc->text.text);
353 font = _edje_text_class_font_get(ed, chosen_desc, &size, &sfont); 353 font = _edje_text_class_font_get(ed, chosen_desc, &size, &sfont);
354 354
355 if (ep->text.text) text = (char *) ep->text.text; 355 if (ep->text.text) text = ep->text.text;
356 if (ep->text.font) font = ep->text.font; 356 if (ep->text.font) font = ep->text.font;
357 if (ep->text.size > 0) size = ep->text.size; 357 if (ep->text.size > 0) size = ep->text.size;
358 358
@@ -408,28 +408,35 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
408 } 408 }
409 409
410 size = params->type.text.size; 410 size = params->type.text.size;
411 if (!text) text = "";
412
413 if ((text == ep->text.cache.in_str)
414 || (text && ep->text.cache.in_str && !strcmp(ep->text.cache.in_str, text)))
415 {
416 text = ep->text.cache.in_str;
417 same_text = EINA_TRUE;
418 }
411 419
412 if ((ep->text.cache.in_size == size) && 420 if ((ep->text.cache.in_size == size) &&
413 (ep->text.cache.in_w == sw) && 421 (ep->text.cache.in_w == sw) &&
414 (ep->text.cache.in_h == sh) && 422 (ep->text.cache.in_h == sh) &&
415 (ep->text.cache.in_str) && 423 (ep->text.cache.in_str) &&
416 (text) && 424 same_text &&
417 (!strcmp(ep->text.cache.in_str, text)) &&
418 (ep->text.cache.align_x == params->type.text.align.x) && 425 (ep->text.cache.align_x == params->type.text.align.x) &&
419 (ep->text.cache.align_y == params->type.text.align.y) && 426 (ep->text.cache.align_y == params->type.text.align.y) &&
420 (ep->text.cache.elipsis == params->type.text.elipsis) && 427 (ep->text.cache.elipsis == params->type.text.elipsis) &&
421 (ep->text.cache.fit_x == chosen_desc->text.fit_x) && 428 (ep->text.cache.fit_x == chosen_desc->text.fit_x) &&
422 (ep->text.cache.fit_y == chosen_desc->text.fit_y)) 429 (ep->text.cache.fit_y == chosen_desc->text.fit_y))
423 { 430 {
424 text = (char *)ep->text.cache.out_str; 431 text = ep->text.cache.out_str;
425 size = ep->text.cache.out_size; 432 size = ep->text.cache.out_size;
426 433
427 if (!text) text = "";
428
429 goto arrange_text; 434 goto arrange_text;
430 } 435 }
431 if (ep->text.cache.in_str) eina_stringshare_del(ep->text.cache.in_str); 436 if (!same_text)
432 ep->text.cache.in_str = eina_stringshare_add(text); 437 {
438 eina_stringshare_replace(&ep->text.cache.in_str, text);
439 }
433 ep->text.cache.in_size = size; 440 ep->text.cache.in_size = size;
434 if (chosen_desc->text.fit_x && (ep->text.cache.in_str && eina_stringshare_strlen(ep->text.cache.in_str) > 0)) 441 if (chosen_desc->text.fit_x && (ep->text.cache.in_str && eina_stringshare_strlen(ep->text.cache.in_str) > 0))
435 { 442 {
@@ -570,9 +577,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
570 text = _edje_text_fit_x(ed, ep, params, text, font, size, sw, &free_text); 577 text = _edje_text_fit_x(ed, ep, params, text, font, size, sw, &free_text);
571 } 578 }
572 579
573 str = eina_stringshare_add(text); 580 eina_stringshare_replace(&ep->text.cache.out_str, text);
574 if (ep->text.cache.out_str) eina_stringshare_del(ep->text.cache.out_str);
575 ep->text.cache.out_str = str;
576 ep->text.cache.in_w = sw; 581 ep->text.cache.in_w = sw;
577 ep->text.cache.in_h = sh; 582 ep->text.cache.in_h = sh;
578 ep->text.cache.out_size = size; 583 ep->text.cache.out_size = size;