billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=d53c4c5742c3aca1557c877ff7256c110273b626

commit d53c4c5742c3aca1557c877ff7256c110273b626
Author: Boris Faure <[email protected]>
Date:   Sun Sep 14 17:30:30 2014 +0200

    try to guess a scalable default font. Closes T1426
---
 src/bin/config.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/bin/config.h |  4 +++
 src/bin/main.c   |  3 +++
 3 files changed, 81 insertions(+)

diff --git a/src/bin/config.c b/src/bin/config.c
index 97d9990..df9d19b 100644
--- a/src/bin/config.c
+++ b/src/bin/config.c
@@ -341,6 +341,76 @@ _add_default_keys(Config *config)
 #undef ADD_KB
 }
 
+
+void
+config_default_font_set(Config *config, Evas *evas)
+{
+   Eina_List *fontlist, *l;
+   const char *fname;
+   Eina_Bool dejavu_found = EINA_FALSE,
+             bitstream_found = EINA_FALSE,
+             droid_found = EINA_FALSE,
+             liberation_found = EINA_FALSE;
+
+   if (config->font_set) return;
+
+#define FONT_DEJAVU     "DejaVu Sans Mono:style=Book"
+#define FONT_LIBERATION "Liberation Mono:style=Regular"
+#define FONT_DROID      "Droid Sans Mono:style=Regular"
+#define FONT_BITSTREAM  "Bitstream Vera Sans Mono:style=Roman"
+
+   fontlist = evas_font_available_list(evas);
+   if (!fontlist) return;
+
+   EINA_LIST_FOREACH(fontlist, l, fname)
+     {
+        if (strncmp(fname, FONT_DEJAVU, strlen(FONT_DEJAVU)) == 0)
+          dejavu_found = EINA_TRUE;
+        else if (strncmp(fname, FONT_LIBERATION, strlen(FONT_LIBERATION)) == 0)
+          liberation_found = EINA_TRUE;
+        else if (strncmp(fname, FONT_DROID, strlen(FONT_DROID)) == 0)
+          droid_found = EINA_TRUE;
+        else if (strncmp(fname, FONT_BITSTREAM, strlen(FONT_BITSTREAM)) == 0)
+          bitstream_found = EINA_TRUE;
+     }
+
+   evas_font_available_list_free(evas, fontlist);
+
+   fname = config->font.name;
+   config->font_set = EINA_TRUE;
+   if (dejavu_found)
+     {
+        config->font.name = eina_stringshare_add(FONT_DEJAVU);
+     }
+   else if (liberation_found)
+     {
+        config->font.name = eina_stringshare_add(FONT_LIBERATION);
+     }
+   else if (droid_found)
+     {
+        config->font.name = eina_stringshare_add(FONT_DROID);
+     }
+   else if (bitstream_found)
+     {
+        config->font.name = eina_stringshare_add(FONT_BITSTREAM);
+     }
+   else
+     {
+        config->font_set = EINA_FALSE;
+     }
+
+   if (config->font_set)
+     {
+        config->font.bitmap = EINA_FALSE;
+        config->font.size = 12;
+        eina_stringshare_del(fname);
+     }
+#undef FONT_DEJAVU
+#undef FONT_LIBERATION
+#undef FONT_DROID
+#undef FONT_BITSTREAM
+}
+
 Config *
 config_load(const char *key)
 {
@@ -461,6 +531,10 @@ config_load(const char *key)
              _add_default_keys(config);
           }
      }
+   else
+     {
+        config->font_set = 1;
+     }
 
    if (config)
      config->config_key = eina_stringshare_add(key); /* not in eet */
diff --git a/src/bin/config.h b/src/bin/config.h
index 75ea1e5..f11e8f0 100644
--- a/src/bin/config.h
+++ b/src/bin/config.h
@@ -1,6 +1,8 @@
 #ifndef _CONFIG_H__
 #define _CONFIG_H__ 1
 
+#include <Evas.h>
+
 typedef struct _Config Config;
 typedef struct _Config_Color Config_Color;
 typedef struct _Config_Keys Config_Keys;
@@ -74,6 +76,7 @@ struct _Config
    Eina_List        *keys;
 
    Eina_Bool         temporary; /* not in EET */
+   Eina_Bool         font_set; /* not in EET */
    const char       *config_key; /* not in EET, the key that config was loaded 
*/
 };
 
@@ -84,6 +87,7 @@ void config_save(Config *config, const char *key);
 Config *config_load(const char *key);
 Config *config_fork(Config *config);
 void config_del(Config *config);
+void config_default_font_set(Config *config, Evas *evas);
 
 const char *config_theme_path_get(const Config *config);
 const char *config_theme_path_default_get(const Config *config);
diff --git a/src/bin/main.c b/src/bin/main.c
index e39acbc..ecbd1db 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -2094,6 +2094,8 @@ main_win_new(const char *name, const char *role, const 
char *title,
         return NULL;
      }
 
+   config_default_font_set(config, evas_object_evas_get(wn->win));
+
    wn->config = config_fork(config);
    
    evas_object_event_callback_add(wn->win, EVAS_CALLBACK_DEL, _cb_del, wn);
@@ -2702,6 +2704,7 @@ main_ipc_new(Ipc_Instance *inst)
                   free(file);
                }
           }
+        wn->config->font_set = EINA_TRUE;
         wn->config->temporary = EINA_TRUE;
      }
 

-- 


Reply via email to