Enlightenment CVS committal

Author  : shorne
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        Makefile.am e_fm.c e_font.c e_font.h e_includes.h 
        e_int_config_fonts.c e_widget_ilist.c e_widget_ilist.h 
Added Files:
        e_widget_font_preview.c e_widget_font_preview.h 


Log Message:

Overhaul for font configuration (hope people like it)
 * Added Preview for font
 * Basic is really basic (sets up all classes in one go)
 * Ability to use font scaling (Normal, Smal, Big)


===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/Makefile.am,v
retrieving revision 1.183
retrieving revision 1.184
diff -u -3 -r1.183 -r1.184
--- Makefile.am 6 Apr 2007 01:00:54 -0000       1.183
+++ Makefile.am 3 May 2007 23:19:40 -0000       1.184
@@ -189,7 +189,8 @@
 e_int_config_mouse.h \
 e_mouse.h \
 e_order.h \
-e_exec.h
+e_exec.h \
+e_widget_font_preview.h
  
 enlightenment_src = \
 e_user.c \
@@ -354,6 +355,7 @@
 e_mouse.c \
 e_order.c \
 e_exec.c \
+e_widget_font_preview.c \
 $(ENLIGHTENMENTHEADERS)
 
 enlightenment_SOURCES = \
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.c,v
retrieving revision 1.152
retrieving revision 1.153
diff -u -3 -r1.152 -r1.153
--- e_fm.c      3 May 2007 17:24:13 -0000       1.152
+++ e_fm.c      3 May 2007 23:19:40 -0000       1.153
@@ -914,7 +914,7 @@
 {
    Evas_Object *oic;
    char buf[4096], *p;
-   
+
    if (ici->icon)
      {
        /* custom icon */
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_font.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- e_font.c    5 Apr 2007 11:59:09 -0000       1.22
+++ e_font.c    3 May 2007 23:19:40 -0000       1.23
@@ -369,7 +369,7 @@
 }
 
 EAPI void
-e_font_default_set(const char *text_class, const char *font, int size)
+e_font_default_set(const char *text_class, const char *font, Evas_Font_Size 
size)
 {
    E_Font_Default *efd;
    Evas_List *next;
@@ -465,7 +465,7 @@
  * we need a font name and size.
  */
 EAPI const char *
-e_font_default_string_get(const char *text_class, int *size_ret)
+e_font_default_string_get(const char *text_class, Evas_Font_Size *size_ret)
 {
    E_Font_Default *efd;
    Evas_List *next;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_font.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_font.h    5 Apr 2007 11:59:10 -0000       1.7
+++ e_font.h    3 May 2007 23:19:40 -0000       1.8
@@ -14,9 +14,9 @@
 
 struct _E_Font_Default
 {
-   const char *text_class;
-   const char *font;
-   int         size;
+   const char     *text_class;
+   const char     *font;
+   Evas_Font_Size  size;
 };
 
 struct _E_Font_Fallback
@@ -54,11 +54,11 @@
 EAPI Evas_List         *e_font_fallback_list(void);
 
 /* setup edje text classes */
-EAPI void              e_font_default_set(const char *text_class, const char 
*font, int size);
+EAPI void              e_font_default_set(const char *text_class, const char 
*font, Evas_Font_Size size);
 EAPI E_Font_Default    *e_font_default_get(const char *text_class);
 EAPI void              e_font_default_remove(const char *text_class);
 EAPI Evas_List         *e_font_default_list(void);
-EAPI const char        *e_font_default_string_get(const char *text_class, int 
*size_ret);
+EAPI const char        *e_font_default_string_get(const char *text_class, 
Evas_Font_Size *size_ret);
     
 #endif
 #endif
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_includes.h,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -3 -r1.154 -r1.155
--- e_includes.h        6 Apr 2007 01:00:54 -0000       1.154
+++ e_includes.h        3 May 2007 23:19:40 -0000       1.155
@@ -165,3 +165,4 @@
 #include "e_int_config_mouse.h"
 #include "e_order.h"
 #include "e_exec.h"
+#include "e_widget_font_preview.h"
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_fonts.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -3 -r1.44 -r1.45
--- e_int_config_fonts.c        17 Apr 2007 08:57:20 -0000      1.44
+++ e_int_config_fonts.c        3 May 2007 23:19:40 -0000       1.45
@@ -3,6 +3,7 @@
  */
 #include "e.h"
 
+typedef struct _E_Font_Size_Data E_Font_Size_Data;
 typedef struct _E_Text_Class_Pair E_Text_Class_Pair;
 typedef struct _CFText_Class CFText_Class;
 
@@ -12,15 +13,31 @@
 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
 static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
 static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
-static void _fill_ilist(E_Config_Dialog_Data *cfdata);
 
-static void _ilist_font_cb_change(void *data, Evas_Object *obj);
-static void _enabled_font_cb_change(void *data, Evas_Object *obj);
-static void _enabled_fallback_cb_change(void *data, Evas_Object *obj);
+static void _basic_font_cb_change(void *data, Evas_Object *obj);
+static void _basic_enable_cb_change(void *data, Evas_Object *obj);
+static void _basic_style_cb_change(void *data, Evas_Object *obj);
+static void _basic_init_data_fill(E_Config_Dialog_Data *cfdata);
+
+static void _adv_class_cb_change(void *data, Evas_Object *obj);
+static void _adv_enabled_font_cb_change(void *data, Evas_Object *obj);
+static void _adv_enabled_fallback_cb_change(void *data, Evas_Object *obj);
+static void _adv_font_cb_change(void *data, Evas_Object *obj);
+static void _adv_style_cb_change(void *data, Evas_Object *obj);
+static void _size_cb_change(void *data);
+
 static int  _sort_fonts(void *data1, void *data2);
-static void _size_cb_change(void *data, Evas_Object *obj);
-static void _font_cb_change(void *data, Evas_Object *obj);
-static void _style_cb_change(void *data, Evas_Object *obj);
+static void _font_list_load(E_Config_Dialog_Data *cfdata, const char 
*cur_font);
+static void _size_list_load(E_Config_Dialog_Data *cfdata, Evas_List 
*size_list, Evas_Font_Size cur_size, int clear);
+static void _class_list_load(E_Config_Dialog_Data *cfdata);
+static void _font_preview_update(E_Config_Dialog_Data *cfdata);
+
+struct _E_Font_Size_Data
+{
+   E_Config_Dialog_Data *cfdata;
+   const char           *size_str;
+   Evas_Font_Size        size;
+};
 
 struct _E_Text_Class_Pair
 {
@@ -30,11 +47,11 @@
 
 struct _CFText_Class
 {
-   const char  *class_name;
-   const char  *class_description;
-   const char  *font;
-   const char   *style;
-   double       size;
+   const char    *class_name;
+   const char    *class_description;
+   const char    *font;
+   const char     *style;
+   Evas_Font_Size  size;
    unsigned char enabled : 1;
 };
 
@@ -99,6 +116,8 @@
    /* Font Data */
    Evas_Hash    *font_hash;
    Evas_List    *font_list;
+   Evas_List    *font_px_list;
+   Evas_List    *font_scale_list;
 
    /* Current data */
    char                *cur_font;
@@ -119,11 +138,12 @@
        Evas_Object *class_list;
        Evas_Object *font_list;
        Evas_Object *style_list;
-          
-       Evas_Object *font;
-       Evas_Object *size;
+
+       Evas_Object *size_list;
        Evas_Object *enabled;
 
+       Evas_Object *preview;
+
        /* Font Fallbacks */
        Evas_Object *fallback_list; /* Selecting a list entry starts edit*/
      }
@@ -159,6 +179,7 @@
    Evas_List *font_list;
    Evas_List *next;
    E_Font_Default *efd;
+   E_Font_Size_Data *size_data;
    CFText_Class *tc;
    int i;
    
@@ -224,6 +245,57 @@
    
    /* Fill Hinting */
    cfdata->hinting = e_config->font_hinting;
+
+   size_data = E_NEW(E_Font_Size_Data, 1);
+   size_data->cfdata = cfdata;
+   size_data->size_str = evas_stringshare_add(_("Tiny"));
+   size_data->size = -50;
+   cfdata->font_scale_list = evas_list_append(cfdata->font_scale_list, 
size_data);
+
+   size_data = E_NEW(E_Font_Size_Data, 1);
+   size_data->cfdata = cfdata;
+   size_data->size_str = evas_stringshare_add(_("Small"));
+   size_data->size = -80;
+   cfdata->font_scale_list = evas_list_append(cfdata->font_scale_list, 
size_data);
+
+   size_data = E_NEW(E_Font_Size_Data, 1);
+   size_data->cfdata = cfdata;
+   size_data->size_str = evas_stringshare_add(_("Normal"));
+   size_data->size = -100;
+   cfdata->font_scale_list = evas_list_append(cfdata->font_scale_list, 
size_data);
+
+   size_data = E_NEW(E_Font_Size_Data, 1);
+   size_data->cfdata = cfdata;
+   size_data->size_str = evas_stringshare_add(_("Big"));
+   size_data->size = -150;
+   cfdata->font_scale_list = evas_list_append(cfdata->font_scale_list, 
size_data);
+
+   size_data = E_NEW(E_Font_Size_Data, 1);
+   size_data->cfdata = cfdata;
+   size_data->size_str = evas_stringshare_add(_("Really Big"));
+   size_data->size = -190;
+   cfdata->font_scale_list = evas_list_append(cfdata->font_scale_list, 
size_data);
+
+   size_data = E_NEW(E_Font_Size_Data, 1);
+   size_data->cfdata = cfdata;
+   size_data->size_str = evas_stringshare_add(_("Huge"));
+   size_data->size = -250;
+   cfdata->font_scale_list = evas_list_append(cfdata->font_scale_list, 
size_data);
+
+   for (i = 5; i < 21; i++)
+     {
+       char str[16];
+
+       str[0] = 0;
+       snprintf(str, sizeof(str), _("%d pixels"), i);
+
+       size_data = E_NEW(E_Font_Size_Data, 1);   
+       size_data->cfdata = cfdata;      
+       size_data->size_str = evas_stringshare_add(str);         
+       size_data->size = i;
+       cfdata->font_px_list = evas_list_append(cfdata->font_px_list, 
size_data);
+     }
+
    return;
 }
 
@@ -248,7 +320,6 @@
      {
        cfdata->font_list = evas_list_remove_list(cfdata->font_list, 
cfdata->font_list);
      }
-
    
    while ((l = cfdata->text_classes))
      {
@@ -260,6 +331,26 @@
        if (tc->style) evas_stringshare_del(tc->style);
         E_FREE(tc);
      }
+     
+   while ((l = cfdata->font_scale_list))
+     {
+        E_Font_Size_Data *size_data;
+
+        size_data = l->data;
+        cfdata->font_scale_list = 
evas_list_remove_list(cfdata->font_scale_list, l);
+       if (size_data->size_str) evas_stringshare_del(size_data->size_str);
+        E_FREE(size_data);
+     }
+
+   while ((l = cfdata->font_px_list))
+     {
+        E_Font_Size_Data *size_data;
+
+        size_data = l->data;
+       cfdata->font_px_list = evas_list_remove_list(cfdata->font_scale_list, 
l);
+        if (size_data->size_str) evas_stringshare_del(size_data->size_str);
+        E_FREE(size_data);
+     }
    
    E_FREE(cfdata->cur_font);
    E_FREE(cfdata->cur_style);
@@ -270,39 +361,60 @@
 _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
 {
    Evas_List *next;
-   CFText_Class *tc;
-      
-   /* Save current data */
-   if (cfdata->cur_index >= 0)
-     {
-       tc = evas_list_nth(cfdata->text_classes, cfdata->cur_index);
-       tc->enabled = cfdata->cur_enabled;
-       tc->size = cfdata->cur_size;
-       if (cfdata->cur_font)
-         tc->font = evas_stringshare_add(cfdata->cur_font);
-       if (cfdata->cur_style)
-         tc->style = evas_stringshare_add(cfdata->cur_style);
-     }
+   int i;
 
-   for (next = cfdata->text_classes; next; next = next->next)
+   if (cfdata->cur_enabled && cfdata->cur_font == NULL)
+     return 0;
+
+   for (i = 0; text_class_predefined_names[i].class_description; i++ )
      {
-       tc = next->data;
+       if (!text_class_predefined_names[i].class_name) continue; 
 
-       if (!tc->class_name) continue;
-       
-       if (tc->enabled && tc->font) 
+       if (cfdata->cur_enabled)
          {
-            const char *name;
-            name = e_font_fontconfig_name_get(tc->font, tc->style);
-            e_font_default_set(tc->class_name, name, tc->size);
-            evas_stringshare_del(name);
+            const char *class_name;
+            const char *font_name;
+
+            class_name = text_class_predefined_names[i].class_name;
+            font_name = e_font_fontconfig_name_get(cfdata->cur_font, 
cfdata->cur_style);
+            e_font_default_set(class_name, font_name, cfdata->cur_size);
+
+            if (i == 1)
+              e_font_default_set("e_basic_font", font_name, cfdata->cur_size);
+
+            evas_stringshare_del(font_name);
          }
        else
-         e_font_default_remove(tc->class_name);
+         {
+            e_font_default_remove(text_class_predefined_names[i].class_name);
+            if (i == 1)
+              e_font_default_remove("e_basic_font");
+         }
      }
 
    e_font_apply();
    e_config_save_queue();
+
+
+   /* Apply to advanced */
+   for (next = cfdata->text_classes; next; next = next->next)
+     {
+       CFText_Class *tc;
+
+       tc = next->data;
+       tc->size = cfdata->cur_size;
+
+       if (tc->font) evas_stringshare_del(tc->font);
+       if (cfdata->cur_font)
+         tc->font = evas_stringshare_add(cfdata->cur_font);
+
+       if (tc->style) evas_stringshare_del(tc->style);
+       if (cfdata->cur_style)
+         tc->style = evas_stringshare_add(cfdata->cur_style);
+
+       tc->enabled = cfdata->cur_enabled;
+     }
+
    return 1;
 }
 
@@ -322,99 +434,128 @@
 static Evas_Object *
 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data 
*cfdata)
 {
-   Evas_Object *ot, *ob, *of, *ott;
-   Evas_Coord w;
-
+   Evas_Object *ot, *ob, *of;
+      
    cfdata->cur_index = -1;
    cfdata->evas = evas;
-   cfdata->gui.font = NULL;
-   
+
    ot = e_widget_table_add(evas, 0);
 
-   of = e_widget_framelist_add(evas, _("Font Classes"), 0);
-   ob = e_widget_ilist_add(evas, 16, 16, NULL);
-   cfdata->gui.class_list = ob;
-   _fill_ilist(cfdata);
-   e_widget_ilist_multi_select_set(ob, 1);
-   e_widget_min_size_get(ob, &w, NULL);
-   e_widget_min_size_set(ob, w, 250);
-   e_widget_on_change_hook_set(ob, _ilist_font_cb_change, cfdata);
-   e_widget_framelist_object_append(of, ob);
-   e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
+   cfdata->gui.class_list = NULL;
+
+   ob = e_widget_check_add(evas, _("Enable Custom Font Classes"), 
&(cfdata->cur_enabled));
+   cfdata->gui.enabled = ob;
+   e_widget_on_change_hook_set(ob, _basic_enable_cb_change, cfdata);
+   e_widget_disabled_set(ob, 0);
+   e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 0, 1, 0);
 
    of = e_widget_framelist_add(evas, _("Fonts"), 1);
    ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_font));
    cfdata->gui.font_list = ob;
-   e_widget_on_change_hook_set(ob, _font_cb_change, cfdata);
-   evas_event_freeze(evas_object_evas_get(ob));
-   edje_freeze();
-   e_widget_ilist_freeze(ob);
+   e_widget_on_change_hook_set(ob, _basic_font_cb_change, cfdata);
+   e_widget_ilist_go(ob);
+   e_widget_framelist_object_append(of, ob);
+   e_widget_table_object_append(ot, of, 0, 1, 1, 1, 1, 1, 1, 1);
 
-   if (cfdata->font_hash == NULL)
+   of = e_widget_framelist_add(evas, _("Size"), 1);
+   ob = e_widget_ilist_add(evas, 16, 16, NULL);
+   cfdata->gui.size_list = ob;
+   e_widget_ilist_go(ob);
+   e_widget_min_size_set(ob, 100, 200);
+   e_widget_framelist_object_append(of, ob);
+   e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1);
+
+   ob = e_widget_font_preview_add(evas, _("Basic preview text: 123: 
我的天空!"));
+   cfdata->gui.preview = ob;
+   e_widget_table_object_append(ot, ob, 0, 2, 2, 1, 1, 0, 1, 0);
+
+   _basic_init_data_fill(cfdata);
+
+   e_dialog_resizable_set(cfd->dia, 1);
+   return ot;
+}
+
+static void
+_basic_style_cb_change(void *data, Evas_Object *obj)
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   _font_preview_update(cfdata);
+}
+
+static void
+_basic_font_cb_change(void *data, Evas_Object *obj)
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   _font_preview_update(cfdata);
+}
+
+static void
+_basic_enable_cb_change(void *data, Evas_Object *obj)
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   e_widget_disabled_set(cfdata->gui.font_list, !cfdata->cur_enabled);
+   e_widget_disabled_set(cfdata->gui.size_list, !cfdata->cur_enabled);
+
+   if (!cfdata->cur_enabled)
      {
-       Evas_List *fonts;
-       
-       fonts = evas_font_available_list(evas);
-       cfdata->font_hash = e_font_available_list_parse(fonts);
-       evas_hash_foreach(cfdata->font_hash, _font_hash_cb, cfdata);
-       if (cfdata->font_list)
-         {
-            cfdata->font_list = evas_list_sort(cfdata->font_list, 
-                                               
evas_list_count(cfdata->font_list), 
-                                               _sort_fonts);
-         }
-       evas_font_available_list_free(evas, fonts);
+       e_widget_ilist_unselect(cfdata->gui.font_list);
+       e_widget_ilist_unselect(cfdata->gui.size_list);
      }
+}
 
-   if (cfdata->font_list) 
-     {
-       Evas_List *next;
+/* fill the basic dialog with inital data and select it */
+static void
+_basic_init_data_fill(E_Config_Dialog_Data *cfdata) 
+{
+   Evas_Object *ob;
+   E_Font_Default *efd;
+   const char *init_font;
+   Evas_Font_Size init_size;
 
-       for (next = cfdata->font_list; next; next = next->next) 
+   init_font = NULL;
+   init_size = -100;
+
+   /* Get inital basic basic */
+   efd = e_font_default_get("e_basic_font"); 
+   if (efd)
+     { 
+       if (efd->font) 
          {
-            char *f;
-            
-            f = next->data;
-            e_widget_ilist_append(ob, NULL, f, NULL, NULL, f);
+            E_Font_Properties *efp;
+            efp = e_font_fontconfig_name_parse(efd->font);
+            init_font = evas_stringshare_add(efp->name);
+            e_font_properties_free(efp);
          }
+       init_size = efd->size;              
      }
-   
-   e_widget_ilist_go(ob);
-   e_widget_min_size_get(ob, &w, NULL);
-   e_widget_min_size_set(ob, w, 250);
-   e_widget_ilist_thaw(ob);
-   edje_thaw();
-   evas_event_thaw(evas_object_evas_get(ob));
-   e_widget_framelist_object_append(of, ob);
-   e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1);
 
-   of = e_widget_framelist_add(evas, _("Styles"), 1);
-   ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_style));
-   cfdata->gui.style_list = ob;
-   e_widget_on_change_hook_set(ob, _style_cb_change, cfdata);
-   e_widget_ilist_go(ob);
-   e_widget_min_size_set(ob, 125, 250);
-   e_widget_framelist_object_append(of, ob);
-   e_widget_table_object_append(ot, of, 2, 0, 1, 1, 1, 1, 1, 1);
-   
-   ob = e_widget_check_add(evas, _("Enable Font Class"), 
&(cfdata->cur_enabled));
-   cfdata->gui.enabled = ob;
-   e_widget_on_change_hook_set(ob, _enabled_font_cb_change, cfdata);
-   e_widget_disabled_set(ob, 1);
-   e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 0, 1, 0);
-   ott = e_widget_table_add(evas, 1);
-   ob = e_widget_label_add(evas, _("Font Size:"));
-   e_widget_table_object_append(ott, ob, 0, 0, 1, 1, 1, 0, 1, 0);
-   ob = e_widget_slider_add(evas, 1, 0, _("%2.1f pixels"), 5.0, 25.0, 0.5, 0, 
-                           &(cfdata->cur_size), NULL, 25);
-   cfdata->gui.size = ob;
-   e_widget_disabled_set(ob, 1);
-   e_widget_on_change_hook_set(ob, _size_cb_change, cfdata);
-   e_widget_table_object_append(ott, ob, 1, 0, 2, 1, 1, 0, 1, 0);
+   /* Check based on efd */
+   ob = cfdata->gui.enabled;
+   if (efd == NULL)
+     e_widget_check_checked_set(ob, 0);
+   else if (!strcmp(efd->text_class, "default"))
+     e_widget_check_checked_set(ob, 0);
+   else 
+     e_widget_check_checked_set(ob, 1);
 
-   e_widget_table_object_append(ot, ott, 1, 1, 2, 1, 1, 0, 1, 0);
-   e_dialog_resizable_set(cfd->dia, 1);
-   return ot;
+   /* Populate font list (Select current font) */
+   _font_list_load(cfdata, init_font);
+   
+   /* Populate size list (Select current font) */
+   _size_list_load(cfdata, cfdata->font_scale_list, init_size, 1);
+       
 }
 
 static int
@@ -478,7 +619,7 @@
 static Evas_Object *
 _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata)
 {
-   Evas_Object *ot, *ob, *of, *ott;
+   Evas_Object *ot, *ob, *of, *ol;
    Evas_Coord w;
    E_Radio_Group *rg;
    Evas_List *next;
@@ -486,92 +627,62 @@
 
    cfdata->cur_index = -1;
    cfdata->evas = evas;
-   cfdata->gui.font = NULL;
-   
-   ot = e_widget_table_add(evas, 0);
+ 
+   /* Serup Section List */
+   ol = e_widget_list_add(evas, 0, 0);
 
+   /* Table for Font Class Setup */ 
+   ot = e_widget_table_add(evas, 0);
    of = e_widget_framelist_add(evas, _("Font Classes"), 0);
    ob = e_widget_ilist_add(evas, 16, 16, NULL);
    cfdata->gui.class_list = ob;
-   _fill_ilist(cfdata);
+   _class_list_load(cfdata);
    e_widget_ilist_multi_select_set(ob, 1);
    e_widget_min_size_get(ob, &w, NULL);
    e_widget_min_size_set(ob, w, 250);
-   e_widget_on_change_hook_set(ob, _ilist_font_cb_change, cfdata);
+   e_widget_on_change_hook_set(ob, _adv_class_cb_change, cfdata);
    e_widget_framelist_object_append(of, ob);
-   e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
+   e_widget_table_object_append(ot, of, 0, 0, 1, 2, 1, 1, 1, 1);
 
    of = e_widget_framelist_add(evas, _("Fonts"), 1);
    ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_font));
    cfdata->gui.font_list = ob;
-   e_widget_on_change_hook_set(ob, _font_cb_change, cfdata);
-   evas_event_freeze(evas_object_evas_get(ob));
-   edje_freeze();
-   e_widget_ilist_freeze(ob);
-
-   if (cfdata->font_hash == NULL)
-     {
-       Evas_List *fonts;
-       
-       fonts = evas_font_available_list(evas);
-       cfdata->font_hash = e_font_available_list_parse(fonts);
-       evas_hash_foreach(cfdata->font_hash, _font_hash_cb, cfdata);
-       if (cfdata->font_list)
-         {
-            cfdata->font_list = evas_list_sort(cfdata->font_list, 
-                                               
evas_list_count(cfdata->font_list), 
-                                               _sort_fonts);
-         }
-       evas_font_available_list_free(evas, fonts);
-     }
-
-   if (cfdata->font_list) 
-     {
-       Evas_List *next;
-
-       for (next = cfdata->font_list; next; next = next->next) 
-         {
-            char *f;
-            
-            f = next->data;
-            e_widget_ilist_append(ob, NULL, f, NULL, NULL, f);
-         }
-     }
-   
-   e_widget_ilist_go(ob);
-   e_widget_min_size_get(ob, &w, NULL);
-   e_widget_min_size_set(ob, w, 250);
-   e_widget_ilist_thaw(ob);
-   edje_thaw();
-   evas_event_thaw(evas_object_evas_get(ob));
+   e_widget_on_change_hook_set(ob, _adv_font_cb_change, cfdata);
+   _font_list_load(cfdata, NULL);
    e_widget_framelist_object_append(of, ob);
-   e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1);
+   e_widget_table_object_append(ot, of, 1, 0, 1, 2, 1, 1, 1, 1);
 
    of = e_widget_framelist_add(evas, _("Styles"), 1);
    ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_style));
    cfdata->gui.style_list = ob;
-   e_widget_on_change_hook_set(ob, _style_cb_change, cfdata);
+   e_widget_on_change_hook_set(ob, _adv_style_cb_change, cfdata);
    e_widget_ilist_go(ob);
-   e_widget_min_size_set(ob, 125, 250);
+   e_widget_min_size_set(ob, 125, 125);
    e_widget_framelist_object_append(of, ob);
    e_widget_table_object_append(ot, of, 2, 0, 1, 1, 1, 1, 1, 1);
-   
+  
+   of = e_widget_framelist_add(evas, _("Size"), 1);
+   ob = e_widget_ilist_add(evas, 16, 16, NULL);
+   cfdata->gui.size_list = ob;
+   e_widget_ilist_go(ob);
+   e_widget_min_size_set(ob, 125, 125);
+   e_widget_framelist_object_append(of, ob);
+   e_widget_table_object_append(ot, of, 2, 1, 1, 1, 1, 1, 1, 1);
+
    ob = e_widget_check_add(evas, _("Enable Font Class"), 
&(cfdata->cur_enabled));
    cfdata->gui.enabled = ob;
-   e_widget_on_change_hook_set(ob, _enabled_font_cb_change, cfdata);
-   e_widget_disabled_set(ob, 1);
-   e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 0, 1, 0);
-   ott = e_widget_table_add(evas, 1);
-   ob = e_widget_label_add(evas, _("Font Size:"));
-   e_widget_table_object_append(ott, ob, 0, 0, 1, 1, 1, 0, 1, 0);
-   ob = e_widget_slider_add(evas, 1, 0, _("%2.1f pixels"), 5.0, 25.0, 0.5, 0, 
-                           &(cfdata->cur_size), NULL, 25);
-   cfdata->gui.size = ob;
+   e_widget_on_change_hook_set(ob, _adv_enabled_font_cb_change, cfdata);
    e_widget_disabled_set(ob, 1);
-   e_widget_on_change_hook_set(ob, _size_cb_change, cfdata);
-   e_widget_table_object_append(ott, ob, 1, 0, 2, 1, 1, 0, 1, 0);
-   e_widget_table_object_append(ot, ott, 1, 1, 2, 1, 1, 0, 1, 0);
-   
+   e_widget_table_object_append(ot, ob, 0, 2, 1, 1, 1, 0, 1, 0); 
+
+   ob = e_widget_font_preview_add(evas, _("Advanced Preview Text.. 
我真的会写中文"));
+   cfdata->gui.preview = ob;
+   e_widget_table_object_append(ot, ob, 1, 2, 2, 1, 1, 0, 1, 0);
+
+   e_widget_list_object_append(ol, ot, 1, 1, 0.5);
+
+
+   /* Frame for Hinting Setup */
    of = e_widget_framelist_add(evas, _("Hinting"), 1);
    rg = e_widget_radio_group_new(&(cfdata->hinting));
    option_enable = evas_font_hinting_can_hint(evas, 
EVAS_FONT_HINTING_BYTECODE);
@@ -586,13 +697,13 @@
    ob = e_widget_radio_add(evas, _("None"), 2, rg);
    e_widget_disabled_set(ob, !option_enable);
    e_widget_framelist_object_append(of, ob);
-   e_widget_table_object_append(ot, of, 0, 2, 3, 1, 1, 0, 1, 0);
+   e_widget_list_object_append(ol, of, 1, 1, 0.5);
 
+   /* Frame for Fallbacks Setup */
    of = e_widget_framelist_add(evas, _("Font Fallbacks"), 0);
    ob = e_widget_config_list_add(evas, e_widget_entry_add, _("Fallback Name"), 
2);
    cfdata->gui.fallback_list = ob;
    e_widget_framelist_object_append(of, ob);
-   e_widget_table_object_append(ot, of, 0, 3, 3, 1, 1, 0, 1, 0);
    option_enable = 0;
    for (next = e_font_fallback_list(); next; next = next->next)
      {
@@ -606,17 +717,18 @@
    ob = e_widget_check_add(evas, _("Enable Fallbacks"), 
&(cfdata->cur_fallbacks_enabled));
    e_widget_config_list_object_append(cfdata->gui.fallback_list, ob, 
                                      0, 3, 2, 1, 1, 1, 1, 1);
-   e_widget_on_change_hook_set(ob, _enabled_fallback_cb_change, cfdata);
+   e_widget_on_change_hook_set(ob, _adv_enabled_fallback_cb_change, cfdata);
    e_widget_check_checked_set(ob, option_enable);
    e_widget_change(ob);
-   
+   e_widget_list_object_append(ol, of, 1, 1, 0.5);
+
    e_dialog_resizable_set(cfd->dia, 1);
-   return ot;
+   return ol;
 }
 
 /* Private Font Class Functions */
 static void 
-_fill_ilist(E_Config_Dialog_Data *cfdata) 
+_class_list_load(E_Config_Dialog_Data *cfdata) 
 {
    Evas *evas;
    Evas_List *next;
@@ -628,7 +740,7 @@
    e_widget_ilist_freeze(cfdata->gui.class_list);
    e_widget_ilist_clear(cfdata->gui.class_list);
    
-   /* Fill In Ilist */
+   /* Fill in Class Ilist */
    for (next = cfdata->text_classes; next; next = next->next)
      {
        CFText_Class *tc;
@@ -658,8 +770,9 @@
    evas_event_thaw(evas);
 }
 
+/* Called whenever class list selection changes */
 static void
-_ilist_font_cb_change(void *data, Evas_Object *obj)
+_adv_class_cb_change(void *data, Evas_Object *obj)
 {
    int indx;
    E_Config_Dialog_Data *cfdata;
@@ -682,14 +795,17 @@
          tc->style = evas_stringshare_add(cfdata->cur_style);
        if (cfdata->gui.style_list)
          e_widget_ilist_unselect(cfdata->gui.style_list);
+       if (cfdata->gui.size_list)
+         e_widget_ilist_unselect(cfdata->gui.size_list);
      }
    
+   /* If no class is selected unselect all and return */
    indx = e_widget_ilist_selected_get(cfdata->gui.class_list);
    if (indx < 0) 
      {
        e_widget_disabled_set(cfdata->gui.enabled, 1);
-       e_widget_disabled_set(cfdata->gui.font, 1);
-       e_widget_disabled_set(cfdata->gui.size, 1);
+       e_widget_disabled_set(cfdata->gui.font_list, 1);
+       e_widget_disabled_set(cfdata->gui.size_list, 1);
        e_widget_check_checked_set(cfdata->gui.enabled, 0);
        if (cfdata->gui.font_list)
          e_widget_ilist_unselect(cfdata->gui.font_list);
@@ -700,13 +816,13 @@
    cfdata->cur_index = indx;
 
    e_widget_disabled_set(cfdata->gui.enabled, 0);
-   e_widget_disabled_set(cfdata->gui.font, !tc->enabled);
-   e_widget_disabled_set(cfdata->gui.size, !tc->enabled);
+   e_widget_disabled_set(cfdata->gui.font_list, !tc->enabled);
+   e_widget_disabled_set(cfdata->gui.size_list, !tc->enabled);
    e_widget_check_checked_set(cfdata->gui.enabled, tc->enabled);
 
-   /* Basic GUI Parts */
    if (cfdata->gui.font_list) 
      { 
+       /* Select the configured font */
        for (indx = 0; indx < e_widget_ilist_count(cfdata->gui.font_list); 
indx++) 
          {
             const char *f;
@@ -719,14 +835,10 @@
               }
          }
      }
-   /* Advanced GUI */
-   if (cfdata->gui.font)
-     e_widget_entry_text_set(cfdata->gui.font, tc->font);
-   e_widget_slider_value_double_set(cfdata->gui.size, tc->size);
 }
 
 static void
-_enabled_font_cb_change(void *data, Evas_Object *obj)
+_adv_enabled_font_cb_change(void *data, Evas_Object *obj)
 {
    E_Config_Dialog_Data *cfdata;
    Evas_List *l;
@@ -734,8 +846,9 @@
    
    cfdata = data;   
    if (!cfdata) return;
-   e_widget_disabled_set(cfdata->gui.font, !cfdata->cur_enabled);
-   e_widget_disabled_set(cfdata->gui.size, !cfdata->cur_enabled);
+   e_widget_disabled_set(cfdata->gui.font_list, !cfdata->cur_enabled);
+   e_widget_disabled_set(cfdata->gui.style_list, !cfdata->cur_enabled);
+   e_widget_disabled_set(cfdata->gui.size_list, !cfdata->cur_enabled);
   
    /* Search class list fot selected and enable Icon */ 
    for (n = 0, l = e_widget_ilist_items_get(cfdata->gui.class_list); l; l = 
l->next, n++) 
@@ -764,15 +877,23 @@
 }
 
 static void
-_size_cb_change(void *data, Evas_Object *obj)
+_size_cb_change(void *data)
 {
    E_Config_Dialog_Data *cfdata;
+   E_Font_Size_Data *size_data;
    Evas_List *l;
    int n;
    
-   cfdata = data;
+   size_data = data;
+   cfdata = size_data->cfdata;
    if (!cfdata) return;
-   
+
+   cfdata->cur_size = size_data->size;
+
+   _font_preview_update(cfdata);
+
+   if (!cfdata->gui.class_list) return;
+
    for (n = 0, l = e_widget_ilist_items_get(cfdata->gui.class_list); l; l = 
l->next, n++) 
      {
        E_Ilist_Item *i;
@@ -784,11 +905,11 @@
 
        tc = evas_list_nth(cfdata->text_classes, n);
        tc->size = cfdata->cur_size;
-     }
+     }   
 }
 
 static void 
-_font_cb_change(void *data, Evas_Object *obj) 
+_adv_font_cb_change(void *data, Evas_Object *obj) 
 {
    E_Config_Dialog_Data *cfdata;
    CFText_Class *tc;
@@ -799,7 +920,7 @@
    cfdata = data;
    if (!cfdata) return;
  
-   /* Set up the new font name */
+   /* Set up the new font name for each selected class */
    for (n = 0, l = e_widget_ilist_items_get(cfdata->gui.class_list); l; l = 
l->next, n++) 
      {
        E_Ilist_Item *i;
@@ -840,7 +961,7 @@
        evas_event_thaw(evas_object_evas_get(cfdata->gui.style_list));
      }
 
-   
+   /* select configured style from list */ 
    if (tc && tc->style) 
      { 
        for (n = 0; n < e_widget_ilist_count(cfdata->gui.style_list); n++) 
@@ -855,10 +976,135 @@
               }
          }
      }
+
+   /* load and select size list */
+   if (tc)
+     {
+       cfdata->cur_size = tc->size;
+
+       _size_list_load(cfdata, cfdata->font_scale_list, tc->size, 1);
+       _size_list_load(cfdata, cfdata->font_px_list, tc->size, 0);
+     }
+
+   _font_preview_update(cfdata);
+}
+
+static void
+_size_list_load(E_Config_Dialog_Data *cfdata, Evas_List *size_list, 
Evas_Font_Size cur_size, int clear)
+{
+   Evas_List *next;
+   Evas_Object *ob;
+   Evas *evas;
+   int n;
+
+   ob = cfdata->gui.size_list;
+   evas = evas_object_evas_get(ob);
+
+   evas_event_freeze(evas);    
+   edje_freeze();      
+   e_widget_ilist_freeze(ob);
+   if (clear) e_widget_ilist_clear(ob);
+   for (next = size_list; next; next = next->next)       
+     {     
+       E_Font_Size_Data *size_data;
+
+       size_data = next->data;
+       e_widget_ilist_append(ob, NULL, size_data->size_str, _size_cb_change, 
+             size_data, NULL);     
+     }
+       
+   e_widget_ilist_go(ob);      
+   e_widget_ilist_thaw(ob);    
+   edje_thaw();
+   evas_event_thaw(evas);
+
+   for (n = 0; n < e_widget_ilist_count(ob); n++)        
+     {
+       E_Font_Size_Data *size_data;
+      
+       size_data = e_widget_ilist_nth_data_get(ob, n); 
+       if (cur_size == size_data->size)
+         {
+            e_widget_ilist_selected_set(ob, n);
+            break;
+         }     
+     }
+}
+
+static void
+_font_list_load(E_Config_Dialog_Data *cfdata, const char *cur_font)
+{
+   int n;
+   Evas_List *next;
+   Evas_Object *ob;
+   Evas *evas;
+   Evas_Coord w;
+
+   ob = cfdata->gui.font_list;
+   evas = evas_object_evas_get(ob);
+
+   evas_event_freeze(evas);
+   edje_freeze();
+   e_widget_ilist_freeze(ob);
+
+   /* Load Hash a single time */
+   if (cfdata->font_hash == NULL)
+     {
+       Evas_List *fonts;
+       
+       fonts = evas_font_available_list(evas);
+       cfdata->font_hash = e_font_available_list_parse(fonts);
+       evas_hash_foreach(cfdata->font_hash, _font_hash_cb, cfdata);
+       if (cfdata->font_list)
+         {
+            cfdata->font_list = evas_list_sort(cfdata->font_list, 
+                                               
evas_list_count(cfdata->font_list), 
+                                               _sort_fonts);
+         }
+       evas_font_available_list_free(evas, fonts);
+     }
+
+   /* Load the list */
+   if (cfdata->font_list) 
+     {
+       Evas_List *next;
+
+       for (next = cfdata->font_list; next; next = next->next) 
+         {
+            const char *f;
+            
+            f = next->data;
+            e_widget_ilist_append(ob, NULL, f, NULL, NULL, f);
+         }
+     }
+   
+   e_widget_ilist_go(ob);
+   e_widget_min_size_get(ob, &w, NULL);
+   e_widget_min_size_set(ob, w, 250);
+   e_widget_ilist_thaw(ob);
+   edje_thaw();
+   evas_event_thaw(evas);
+
+   if (!cur_font) return;
+
+   /* Select Current Font */
+   n = 0;
+   for (next = cfdata->font_list; next; next = next->next) 
+     {
+       const char *f;
+            
+       f = next->data;
+       if (cur_font && !strcasecmp(f, cur_font)) 
+         {  
+            e_widget_ilist_selected_set(ob, n);
+            break;
+         }     
+       n++;      
+     }
 }
 
 static void 
-_style_cb_change(void *data, Evas_Object *obj) 
+_adv_style_cb_change(void *data, Evas_Object *obj) 
 {
    E_Config_Dialog_Data *cfdata;
    Evas_List *l;
@@ -882,11 +1128,13 @@
        if (cfdata->cur_style)
          tc->style = evas_stringshare_add(cfdata->cur_style);
      }
+
+   _font_preview_update(cfdata);
 }
 
 /* Private Font Fallback Functions */
 static void 
-_enabled_fallback_cb_change(void *data, Evas_Object *obj)
+_adv_enabled_fallback_cb_change(void *data, Evas_Object *obj)
 {
    E_Config_Dialog_Data *cfdata;
    
@@ -903,4 +1151,17 @@
    if (!data2) return -1;
    
    return e_util_strcmp(data1, data2);
+}
+
+static void
+_font_preview_update(E_Config_Dialog_Data *cfdata)
+{
+   /* update preview */
+   if (cfdata->cur_font)
+     {
+       const char *name;     
+       name = e_font_fontconfig_name_get(cfdata->cur_font, cfdata->cur_style);
+       e_widget_font_preview_font_set(cfdata->gui.preview, name, 
cfdata->cur_size);     
+       evas_stringshare_del(name);
+     }
 }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_ilist.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -3 -r1.31 -r1.32
--- e_widget_ilist.c    2 May 2007 17:16:08 -0000       1.31
+++ e_widget_ilist.c    3 May 2007 23:19:40 -0000       1.32
@@ -218,6 +218,21 @@
    return e_ilist_nth_icon_get(wd->o_ilist, n);
 }
 
+EAPI void *
+e_widget_ilist_nth_data_get(Evas_Object *obj, int n)
+{
+   E_Widget_Data *wd;
+   E_Widget_Callback *wcb;
+   
+   wd = e_widget_data_get(obj);
+   wcb = evas_list_nth(wd->callbacks, n);
+
+   if (!wcb) 
+     return NULL;
+   else 
+     return wcb->data;
+}
+
 EAPI Evas_Object *
 e_widget_ilist_selected_icon_get(Evas_Object *obj)
 {
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_ilist.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- e_widget_ilist.h    20 Apr 2007 20:07:05 -0000      1.16
+++ e_widget_ilist.h    3 May 2007 23:19:40 -0000       1.17
@@ -25,6 +25,7 @@
 EAPI int          e_widget_ilist_count(Evas_Object *obj);
 EAPI void         e_widget_ilist_clear(Evas_Object *obj);
 EAPI int          e_widget_ilist_nth_is_header(Evas_Object *obj, int n);
+EAPI void        *e_widget_ilist_nth_data_get(Evas_Object *obj, int n);
 EAPI void         e_widget_ilist_freeze(Evas_Object *obj);
 EAPI void         e_widget_ilist_thaw(Evas_Object *obj);
 EAPI void         e_widget_ilist_multi_select_set(Evas_Object *obj, int multi);



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to