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