Add API for getting the available fonts
authorStafford Mitchell Horne <shorne@gmail.com>
Sun, 30 Apr 2006 11:39:44 +0000 (11:39 +0000)
committerStafford Mitchell Horne <shorne@gmail.com>
Sun, 30 Apr 2006 11:39:44 +0000 (11:39 +0000)
SVN revision: 22416

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

index e2982bf..0e67c88 100644 (file)
@@ -487,6 +487,9 @@ tile_mode);
    EAPI void              evas_font_cache_set               (Evas *e, int size);
    EAPI int               evas_font_cache_get               (Evas *e);
 
+   EAPI Evas_List       *evas_font_available_list          (Evas *e);
+   EAPI void             evas_font_available_list_free     (Evas *e, Evas_List *available);
+   
    typedef struct _Evas_Textblock_Style     Evas_Textblock_Style;
    typedef struct _Evas_Textblock_Cursor    Evas_Textblock_Cursor;
    typedef struct _Evas_Textblock_Rectangle Evas_Textblock_Rectangle;
index 3323c8c..fe54daf 100644 (file)
@@ -364,6 +364,78 @@ evas_font_load_hinting_set(Evas *evas, void *font, int hinting)
                                       hinting);
 }
 
+Evas_List *
+evas_font_dir_available_list(Evas *evas)
+{
+   Evas_List *l;
+   Evas_List *ll;
+   Evas_List *available = NULL;
+
+#ifdef HAVE_FONTCONFIG
+   /* Add font config fonts */
+   FcPattern *p;
+   FcFontSet *set;
+   FcObjectSet *os;
+   int i;
+  
+   p = FcPatternCreate();
+   os = FcObjectSetBuild(FC_FAMILY, FC_STYLE, NULL);
+   
+   if (p && os) set = FcFontList(NULL, p, os);
+   
+   if (p) FcPatternDestroy(p);
+   if (os) FcObjectSetDestroy(os);
+
+   if (set)
+     {   
+       for (i = 0; i < set->nfont; i++)
+         {
+            char * font;
+            
+            font = FcNameUnparse(set->fonts[i]);
+            available = evas_list_append(available, evas_stringshare_add(font));
+            free(font);                       
+         }
+         
+       FcFontSetDestroy(set); 
+     }
+#endif
+    
+   /* Add fonts in evas font_path*/
+   if (!evas->font_path) 
+     return available;
+   
+   for (l = evas->font_path; l; l = l->next)
+     {
+       Evas_Font_Dir *fd;
+       
+       fd = evas_hash_find(font_dirs, (char *)l->data);
+       fd = object_text_font_cache_dir_update((char *)l->data, fd);
+       if (fd && fd->aliases)
+         {
+            for (ll = fd->aliases; ll; ll = ll->next)
+              {
+                 Evas_Font_Alias *fa;
+                 
+                 fa = ll->data;
+                 available = evas_list_append(available, evas_stringshare_add((char *)fa->alias));             
+              }
+         }
+     }
+
+   return available;
+}
+
+void 
+evas_font_dir_available_list_free(Evas_List *available)
+{
+   while (available)
+     {
+       evas_stringshare_del(available->data);
+       available = evas_list_remove(available, available->data);
+     }
+}
+
 /* private stuff */
 static Evas_Bool
 font_cache_dir_free(Evas_Hash *hash, const char *key, void *data, void *fdata)
index f085834..5162425 100644 (file)
@@ -1101,6 +1101,38 @@ evas_font_cache_get(Evas *e)
  * FIXME: To be fixed.
  *
  */
+EAPI Evas_List *
+evas_font_available_list(Evas *e)
+{
+   MAGIC_CHECK(e, Evas, MAGIC_EVAS);
+   return NULL;
+   MAGIC_CHECK_END();
+
+   return evas_font_dir_available_list(e);
+}
+   
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ *
+ */
+EAPI void
+evas_font_available_list_free(Evas *e, Evas_List *available)
+{ 
+   MAGIC_CHECK(e, Evas, MAGIC_EVAS);
+   return;
+   MAGIC_CHECK_END();
+
+   return evas_font_dir_available_list_free(available); 
+}
+
+/**
+ * To be documented.
+ *
+ * FIXME: To be fixed.
+ *
+ */
 EAPI int
 evas_string_char_next_get(const char *str, int pos, int *decoded)
 {
index a7b237b..e1e4098 100644 (file)
@@ -597,6 +597,7 @@ struct _Evas_Func
    
    void (*font_hinting_set)                (void *data, void *font, int hinting);
    int  (*font_hinting_can_hint)           (void *data, int hinting);
+   
 /*    void (*image_rotation_set)              (void *data, void *image); */
 
 };
@@ -690,6 +691,8 @@ void evas_object_grabs_cleanup(Evas_Object *obj);
 void evas_key_grab_free(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers);
 void evas_font_dir_cache_free(void);
 char *evas_font_dir_cache_find(char *dir, char *font);
+Evas_List *evas_font_dir_available_list(Evas* evas);
+void evas_font_dir_available_list_free(Evas_List *available);
 void evas_font_free(Evas *evas, void *font);
 void *evas_font_load(Evas *evas, const char *name, const char *source, int size);
 void evas_font_load_hinting_set(Evas *evas, void *font, int hinting);