cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=32cffb4494c46fa3705062c8e43294bf8f5eca87

commit 32cffb4494c46fa3705062c8e43294bf8f5eca87
Author: ali <ali198...@gmail.com>
Date:   Mon Jul 29 20:18:37 2019 +0000

    evas_textblock: change font-size/font-family only using EFL.Text.Font 
Interface
    
    Currently:
    User cannot change font size only, he needs to set both font and font size 
with (**efl_text_font_font_set**)
    To change size only, you need to make two calls, one to get font 
(**efl_text_font_font_get**) , then pass it again with new size to 
(**efl_text_font_font_set**).
    
    New Behaviour:
    If user want to change size only, then he passes NULL as font argument to 
keep same font.
    If user want to change font only, then he passes 0 as font-size argument, 
to keep same font-size.
    
    Notes:
    This is not best solution, but it better than current behaviour.
    I think best solution to have separate function to set font size, but It 
might break current api or duplicate functions.
    
    Reviewed-by: Cedric BAIL <cedric.b...@free.fr>
    Differential Revision: https://phab.enlightenment.org/D9158
---
 src/lib/efl/interfaces/efl_text_font.eo     |  3 +++
 src/lib/evas/canvas/evas_object_text.c      | 42 ++++++++++++++++-------------
 src/lib/evas/canvas/evas_object_textblock.c |  4 +--
 src/tests/evas/evas_test_textblock.c        | 30 +++++++++++++++++++++
 4 files changed, 58 insertions(+), 21 deletions(-)

diff --git a/src/lib/efl/interfaces/efl_text_font.eo 
b/src/lib/efl/interfaces/efl_text_font.eo
index 27d32d6433..31ded3e43e 100644
--- a/src/lib/efl/interfaces/efl_text_font.eo
+++ b/src/lib/efl/interfaces/efl_text_font.eo
@@ -63,6 +63,9 @@ interface @beta Efl.Text_Font {
               to get an idea). Alternatively, youe can use the full path to a 
font
               file.
 
+              To skip changing font family pass null as font family.
+              To skip changing font size pass 0 as font size.
+
               See also @.font.get, @.font_source.get.
             ]]
          }
diff --git a/src/lib/evas/canvas/evas_object_text.c 
b/src/lib/evas/canvas/evas_object_text.c
index 40277e2ef4..1f8f340f89 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -455,34 +455,38 @@ _evas_text_efl_text_font_font_set(Eo *eo_obj, 
Evas_Text_Data *o, const char *fon
    Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, 
EFL_CANVAS_OBJECT_CLASS);
    Evas_Font_Description *fdesc;
 
-   if ((!font) || (size <= 0)) return;
+   if (!font && size <= 0) return;
 
    evas_object_async_block(obj);
    if ((size == o->cur.size) &&
        (o->cur.font && !strcmp(font, o->cur.font))) return;
 
-   /* We can't assume the given font is same with current fdesc by comparing 
string.
-      Since Evas starts to supporting "auto" for language,
-      the given font string should be parsed once before comparing it. */
-   fdesc = evas_font_desc_new();
+   if (font)
+     {
+        /* We can't assume the given font is same with current fdesc by 
comparing string.
+           Since Evas starts to supporting "auto" for language,
+           the given font string should be parsed once before comparing it. */
+        fdesc = evas_font_desc_new();
 
-   /* Set default language according to locale. */
-   eina_stringshare_replace(&(fdesc->lang), evas_font_lang_normalize("auto"));
-   evas_font_name_parse(fdesc, font);
+        /* Set default language according to locale. */
+        eina_stringshare_replace(&(fdesc->lang), 
evas_font_lang_normalize("auto"));
+        evas_font_name_parse(fdesc, font);
 
-   if (o->cur.fdesc && !evas_font_desc_cmp(fdesc, o->cur.fdesc) &&
-       (size == o->cur.size))
-     {
-        evas_font_desc_unref(fdesc);
-        return;
-     }
+        if (o->cur.fdesc && !evas_font_desc_cmp(fdesc, o->cur.fdesc) &&
+            (size == o->cur.size))
+          {
+             evas_font_desc_unref(fdesc);
+             return;
+          }
 
-   if (o->cur.fdesc) evas_font_desc_unref(o->cur.fdesc);
-   o->cur.fdesc = fdesc;
+        if (o->cur.fdesc) evas_font_desc_unref(o->cur.fdesc);
+        o->cur.fdesc = fdesc;
+        eina_stringshare_replace(&o->cur.font, font);
+        o->prev.font = NULL;
+     }
 
-   o->cur.size = size;
-   eina_stringshare_replace(&o->cur.font, font);
-   o->prev.font = NULL;
+   if ( size > 0 )
+      o->cur.size = size;
 
    _evas_text_font_reload(eo_obj, o);
 }
diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 510f6ce05a..1135527ad2 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -15808,13 +15808,13 @@ _efl_canvas_text_efl_text_font_font_set(Eo *obj 
EINA_UNUSED, Efl_Canvas_Text_Dat
 
    Eina_Stringshare *nfont;
 
-   if (o->default_format.info.size != size)
+   if (size > 0 && o->default_format.info.size != size)
      {
         o->default_format.info.size = size;
         changed = EINA_TRUE;
      }
 
-   if (o->default_format.info.font != font)
+   if (font && o->default_format.info.font != font)
      {
         nfont = eina_stringshare_add(font);
         if (nfont == _FMT_INFO(font))
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index dc3f22d136..ef81ae3172 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -4654,6 +4654,35 @@ EFL_START_TEST(efl_canvas_text_markup)
 }
 EFL_END_TEST
 
+EFL_START_TEST(efl_text_font)
+{
+   START_EFL_CANVAS_TEXT_TEST();
+
+   efl_text_set(txt, "\n\n\n");
+
+   const char * font;
+   int font_size;
+   efl_text_font_set(txt, "Sans", 20);
+   efl_text_font_set(txt, NULL, 0);
+
+   efl_text_font_get(txt, &font, &font_size);
+   fail_if(20 != font_size);
+   fail_if(strcmp(font,"Sans"));
+
+   efl_text_font_set(txt, NULL, 30);
+   efl_text_font_get(txt, &font, &font_size);
+   fail_if(30 != font_size);
+   fail_if(strcmp(font,"Sans"));
+
+   efl_text_font_set(txt, "arial", 0);
+   efl_text_font_get(txt, &font, &font_size);
+   fail_if(30 != font_size);
+   fail_if(strcmp(font,"arial"));
+
+   END_EFL_CANVAS_TEXT_TEST();
+}
+EFL_END_TEST
+
 void evas_test_textblock(TCase *tc)
 {
    tcase_add_test(tc, evas_textblock_simple);
@@ -4686,5 +4715,6 @@ void evas_test_textblock(TCase *tc)
    tcase_add_test(tc, efl_text);
    tcase_add_test(tc, efl_canvas_text_cursor);
    tcase_add_test(tc, efl_canvas_text_markup);
+   tcase_add_test(tc, efl_text_font);
 }
 

-- 


Reply via email to