- if (fs) {
- int j;
- SETTING_TRACE("fs->nfont = %d", fs->nfont);
-
- for (j = 0; j < fs->nfont; j++) {
- FcChar8 *family = NULL;
- FcChar8 *file = NULL;
-
- if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) {
- int preload_path_len = strlen(SETTING_FONT_PRELOAD_FONT_PATH);
- int download_path_len = strlen(SETTING_FONT_DOWNLOADED_FONT_PATH);
-
- if (file && (!strncmp((const char *)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len)
- || !strncmp((const char *)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len))) {
- char *family_result = NULL;
- FcChar8 *lang = NULL;
- int id = 0;
- if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
- break;
- }
- if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
- break;
- }
- family_result = (char *)family;
-
- /* Find proper family name for current locale. */
- while (locale && family && lang) {
- if (!strncmp(locale, (char *)lang, strlen((char *)lang))) {
- family_result = (char *)family;
- break;
- }
-
- /* I will set english as default family language. */
- /* If there is no proper family language for current locale, */
- /* we have to show the english family name. */
- if (!strcmp(lang, "en")) {
- family_result = (char *)family;
- }
- id++;
- if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
- break;
- }
- if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
- break;
- }
- }
-
- if (family_result) {
- SETTING_TRACE("-------- FONT - family_result = %s", (char *)family_result);
- if (strcmp(family_result, font_name) == 0) {
- ret = 1;
- break;
- }
- }
- }
- }
- }
- FcFontSetDestroy(fs);
- fs = NULL;
- }
- FcConfigDestroy(font_config);
- font_config = NULL;
- return ret;
-}
-
-
-static char *_get_default_font()
-{
- SETTING_TRACE_BEGIN;
- xmlDocPtr doc = NULL;
- xmlNodePtr cur = NULL;
- xmlNodePtr cur2 = NULL;
- xmlNodePtr cur3 = NULL;
- xmlChar *key = NULL;
- struct _xmlAttr *properties = NULL;
- char *default_font_name = NULL;
-
- doc = xmlParseFile(SETTING_DEFAULT_FONT_CONF_FILE);
-
- cur = xmlDocGetRootElement(doc);
-
- if (cur == NULL) {
- xmlFreeDoc(doc);
- doc = NULL;
- return NULL;
- }
-
- if (xmlStrcmp(cur->name, (const xmlChar *)"fontconfig")) {
- xmlFreeDoc(doc);
- doc = NULL;
- return NULL;
- }
-
- cur = cur->xmlChildrenNode;
-
- while (cur != NULL) {
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"match"))) {
- cur2 = cur->xmlChildrenNode;
- while (cur2 != NULL) {
- if ((!xmlStrcmp(cur2->name, (const xmlChar *)"edit"))) {
- properties = cur2->properties;
- /*find the "name" property*/
- while (NULL != properties) {
- if (!xmlStrcmp(properties->name, (const xmlChar *)"name")) {
- break;
- }
- properties = properties->next;
- }
-
- /*If the value of "name" property is "family", then get the child node string,
- it shall be the default font type*/
- if (NULL != properties && !xmlStrcmp(properties->children->content, (const xmlChar *)"family")) {
- cur3 = cur2->xmlChildrenNode;
- while (cur3 != NULL) {
- if ((!xmlStrcmp(cur3->name, (const xmlChar *)"string"))) {
- key = xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1);
- default_font_name = g_strdup((char *)key);
- xmlFree(key);
- key = NULL;
- xmlFreeDoc(doc);
- doc = NULL;
- return default_font_name;
- }
- cur3 = cur3->next;
- }
- }
- }
- cur2 = cur2->next;
- }
- }
- cur = cur->next;
- }
-
- xmlFreeDoc(doc);
- doc = NULL;
- return NULL;
-}
-
-static bool font_config_set(char *font_name)
-{
- SETTING_TRACE_BEGIN;
- Eina_List *text_classes = NULL;
- Elm_Text_Class *etc = NULL;
- const Eina_List *l = NULL;
- Eina_List *fo_list = NULL;
- Elm_Font_Overlay *efo = NULL;
-
- int font_size = __font_size_get();
- int size = 0;
-
- text_classes = elm_config_text_classes_list_get();
-
- fo_list = (Eina_List *)elm_config_font_overlay_list_get();
-
- Eina_List *ll = NULL;
- Eina_List *l_next = NULL;
-
- Eina_Bool slp_medium_exist = EINA_FALSE;
- Eina_Bool slp_roman_exist = EINA_FALSE;
- Eina_Bool slp_bold_exist = EINA_FALSE;
- Eina_Bool slp_regular_exist = EINA_FALSE;
-
- /* Tizen */
- Eina_Bool tizen_exist = EINA_FALSE;
-
- EINA_LIST_FOREACH_SAFE(fo_list, ll, l_next, efo) {
- if (!strcmp(efo->text_class, "tizen_medium")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_medium_exist = EINA_TRUE;
- } else if (!strcmp(efo->text_class, "tizen_roman")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_roman_exist = EINA_TRUE;
- } else if (!strcmp(efo->text_class, "tizen_bold")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_bold_exist = EINA_TRUE;
- } else if (!strcmp(efo->text_class, "tizen_regular")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_regular_exist = EINA_TRUE;
- }
-
- /* Tizen */
- if (!strcmp(efo->text_class, "tizen")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- tizen_exist = EINA_TRUE;
- }
-
- }
-
- /* if slp_XX do not exist, need to set them, font size is -100(100%) */
- if (slp_medium_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_medium", (const char *)font_name, MIDDLE_FONT_DPI);
- }
- if (slp_roman_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_roman", (const char *)font_name, MIDDLE_FONT_DPI);
- }
- if (slp_bold_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_bold", (const char *)font_name, MIDDLE_FONT_DPI);
- }
- if (slp_regular_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_regular", (const char *)font_name, MIDDLE_FONT_DPI);
- }
-
- /* Tizen */
- if (tizen_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI);
- }
-
- elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI);
-
- /* Tizen */
- elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI);
-
- EINA_LIST_FOREACH(text_classes, l, etc) {
- ll = NULL;
-
- size = font_size;
- EINA_LIST_FOREACH(fo_list, ll, efo) {
- if (!strcmp(etc->name, efo->text_class)) {
- size = efo->size;
- }
- }
- elm_config_font_overlay_set(etc->name, (const char *)font_name, size);
- }
- elm_config_text_classes_list_free(text_classes);
- text_classes = NULL;
-
- /* add new function */
-#ifdef USE_EFL_ASSIST
- ea_theme_system_font_set(font_name, font_size);
- ea_theme_system_fonts_apply();
-#endif
-
- elm_config_font_overlay_apply();
- elm_config_all_flush();
- elm_config_save();
- return 1;
-}
-
-static void __font_size_set()
-{
- SETTING_TRACE_BEGIN;
- Eina_List *text_classes = NULL;
- Elm_Text_Class *etc = NULL;
- const Eina_List *l = NULL;
- int font_size = __font_size_get();
- char *font_name = _get_cur_font();
-
- if (font_size == -1) {
- return;
- }
-
- text_classes = elm_config_text_classes_list_get();
-
- EINA_LIST_FOREACH(text_classes, l, etc) {
- elm_config_font_overlay_set(etc->name, font_name, font_size);
- }
-
- elm_config_text_classes_list_free(text_classes);
-
-#ifdef USE_EFL_ASSIST
- ea_theme_system_font_set(font_name, font_size);
- ea_theme_system_fonts_apply();
-#endif
-
- elm_config_font_overlay_apply();
- elm_config_all_flush();
- elm_config_save();
-
- text_classes = NULL;
- g_free(font_name);
-}
-
-static int __font_size_get()
-{
- SETTING_TRACE_BEGIN;
- int font_size = -1;
- int err = -1;
-
- int vconf_value = -1;
- if (system_setting_vconf_get_value_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &vconf_value)) {
- return -1;
- }
-
- switch (vconf_value) {
- case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
- font_size = SMALL_FONT_DPI;
- break;
- case SYSTEM_SETTINGS_FONT_SIZE_NORMAL:
- font_size = MIDDLE_FONT_DPI;
- break;
- case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
- font_size = LARGE_FONT_DPI;
- break;
- case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
- font_size = HUGE_FONT_DPI;
- break;
- case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
- font_size = GIANT_FONT_DPI;
- break;
- default:
- font_size = MIDDLE_FONT_DPI;
- break;
- }
- return font_size;
-}
-
-/*//////////////////////////////////////////////////////////////////////////////////////// */
-/*--------------------------------------- */
-int system_setting_get_locale_country(system_settings_key_e key, system_setting_data_type_e data_type, void **value)
-{
- SETTING_TRACE_BEGIN;
- char *vconf_value = NULL;
- if (system_setting_vconf_get_value_string(VCONFKEY_REGIONFORMAT, &vconf_value)) {
- return SYSTEM_SETTINGS_ERROR_IO_ERROR;
- }
-
- /* parsing validation */
- /* en_US.UTF-8 */
- char arr[20];
- snprintf(arr, 20, vconf_value);
- arr[5] = '\0';
- *value = strdup(arr);
- free(vconf_value);
- vconf_value = NULL;
-
- return SYSTEM_SETTINGS_ERROR_NONE;
-}
-
-int system_setting_set_locale_country(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
-{
- SETTING_TRACE_BEGIN;
- char *vconf_value = NULL;
- vconf_value = (char *)value;
-
- char *ext = "UTF-8";
-
- char arr[20];
- snprintf(arr, 20, "%s.%s", vconf_value, ext);
-
- if (system_setting_vconf_set_value_string(VCONFKEY_REGIONFORMAT, arr)) {
- return SYSTEM_SETTINGS_ERROR_IO_ERROR;
- }
- return SYSTEM_SETTINGS_ERROR_NONE;
-}
-
-int system_setting_set_changed_callback_locale_country(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
-{
- SETTING_TRACE_BEGIN;
- return system_setting_vconf_set_changed_cb(VCONFKEY_REGIONFORMAT, SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, 3, user_data);
-}
-
-int system_setting_unset_changed_callback_locale_country(system_settings_key_e key)
-{
- SETTING_TRACE_BEGIN;
- return system_setting_vconf_unset_changed_cb(VCONFKEY_REGIONFORMAT, 3);
-}
-
-
-/*--------------------------------------- */
-int system_setting_get_locale_language(system_settings_key_e key, system_setting_data_type_e data_type, void **value)
-{
- SETTING_TRACE_BEGIN;
- char *vconf_value = NULL;
- if (system_setting_vconf_get_value_string(VCONFKEY_LANGSET, &vconf_value)) {
- return SYSTEM_SETTINGS_ERROR_IO_ERROR;
- }
-
- /* parsing validation */
- /* en_US.UTF-8 */
- char arr[20];
- snprintf(arr, 20, vconf_value);
- arr[5] = '\0';
- *value = strdup(arr);
- free(vconf_value);
- vconf_value = NULL;
- return SYSTEM_SETTINGS_ERROR_NONE;
-}
-
-int system_setting_set_locale_language(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
-{
- SETTING_TRACE_BEGIN;
- char *vconf_value = NULL;
- vconf_value = (char *)value;
-
- char *ext = "UTF-8";
-
- char arr[20];
- snprintf(arr, 20, "%s.%s", vconf_value, ext);
-
- if (system_setting_vconf_set_value_string(VCONFKEY_LANGSET, arr)) {
- return SYSTEM_SETTINGS_ERROR_IO_ERROR;
- }
- return SYSTEM_SETTINGS_ERROR_NONE;
-}
-
-int system_setting_set_changed_callback_locale_language(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
-{
- SETTING_TRACE_BEGIN;
- /*return system_setting_vconf_set_changed_cb(VCONFKEY_LANGSET, SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, 3, user_data ); */
- return system_setting_vconf_set_changed_cb(VCONFKEY_LANGSET, SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, 100, user_data);
-}