Evas font: added support for ':lang=' and fixed a possibly mem leak.
authorTom Hacohen <tom@stosb.com>
Mon, 1 Aug 2011 08:21:12 +0000 (08:21 +0000)
committerTom Hacohen <tom@stosb.com>
Mon, 1 Aug 2011 08:21:12 +0000 (08:21 +0000)
SVN revision: 61941

legacy/evas/src/lib/canvas/evas_font_dir.c
legacy/evas/src/lib/include/evas_private.h

index fa8e12256508b34b7c641287dc6a4137acea5487..b9259eac368a3e78294fcab29a1e9e458a789c76 100644 (file)
@@ -406,6 +406,7 @@ evas_font_desc_unref(Evas_Font_Description *fdesc)
      {
         eina_stringshare_del(fdesc->name);
         eina_stringshare_del(fdesc->fallbacks);
+        eina_stringshare_del(fdesc->lang);
         free(fdesc);
      }
 }
@@ -458,9 +459,9 @@ evas_font_name_parse(Evas_Font_Description *fdesc, const char *name)
 
    end = strchr(name, ':');
    if (!end)
-      fdesc->name = eina_stringshare_add(name);
+      eina_stringshare_replace(&(fdesc->name), name);
    else
-      fdesc->name = eina_stringshare_add_length(name, end - name);
+      eina_stringshare_replace_length(&(fdesc->name), name, end - name);
 
    while (end)
      {
@@ -484,7 +485,8 @@ evas_font_name_parse(Evas_Font_Description *fdesc, const char *name)
           }
         else if (!strncmp(name, ":lang=", 6))
           {
-             /* FIXME: handle lang. */
+             const char *tmp = name + 6;
+             eina_stringshare_replace_length(&(fdesc->lang), tmp, tend - tmp);
           }
      }
 }
@@ -733,6 +735,9 @@ evas_font_load(Evas *evas, Evas_Font_Description *fdesc, const char *source, Eva
                }
           }
 
+        if (fdesc->lang)
+           FcPatternAddString (p_nm, FC_LANG, (FcChar8 *) fdesc->lang);
+
        FcConfigSubstitute(NULL, p_nm, FcMatchPattern);
        FcDefaultSubstitute(p_nm);
 
index 507f4ed9b055bb3aa2ea3a3ffd7f62522ff15871..2db318d3319b6dc0cb10c3a9f4db567a105a78d5 100644 (file)
@@ -638,6 +638,7 @@ struct _Evas_Font_Description
    /* We assume everywhere this is stringshared */
    const char *name;
    const char *fallbacks;
+   const char *lang;
 
    Evas_Font_Slant slant;
    Evas_Font_Weight weight;