4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #include <setting-font-main.h>
22 #include <dd-deviced.h>
23 #include <fontconfig/fontconfig.h>
24 #include <unicode/uloc.h>
25 #include <libxml/xmlmemory.h>
26 #include <libxml/parser.h>
27 #include <setting-font-font-size.h>
29 #include <eventsystem.h>
32 #define SETTING_FONT_MAX_LEN 10
33 #define FONT_BUF_SIZE 256
35 static int setting_font_main_create(void *cb);
36 static int setting_font_main_destroy(void *cb);
37 static int setting_font_main_update(void *cb);
38 static int setting_font_main_cleanup(void *cb);
40 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it);
41 static void _slider_mouse_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
42 static int setting_font_style_is_exist_string(const Eina_List *list, const char *key);
43 static void __setting_get_font_size_str(void *data, int size);
44 static void __setting_get_font_type_str(void *data, char *font_data);
46 setting_view setting_view_font_main = {
47 .create = setting_font_main_create,
48 .destroy = setting_font_main_destroy,
49 .update = setting_font_main_update,
50 .cleanup = setting_font_main_cleanup,
54 char *get_example_style_text(const char *font_size, const char *font_type)
56 char default_example_str[MAX_COMMON_BUFFER_LEN + 1] = {0, };
57 snprintf(default_example_str, MAX_COMMON_BUFFER_LEN,
58 "<color=#000000><font_size=%s><font=%s>%s<br>%s<br>%s</font></font_size></color>",
60 "<align=middle>ABCDE</align>",
61 "<align=middle>abcde</align>",
62 "<align=middle>12345!@#$</align>");
64 return (char *)g_strdup(default_example_str);
67 static int format_font_name_by_id(char *font_data, char *font_name_id, char *temp, int bufsize)
69 retvm_if(font_data == NULL, 0, "Invalid argument: event info is NULL");
71 char *pos = font_data;
72 char new_name[bufsize];
75 while (*pos != '\0') {
76 /*SETTING_TRACE(">>> %c", *pos); */
78 SETTING_TRACE(">>> empty ' ' ");
79 new_name[count] = '\\';
81 new_name[count] = ' ';
83 new_name[count] = font_data[i];
90 new_name[count] = '\0';
91 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
92 if (safeStrCmp(font_name_id, "IDS_ST_BODY_CHOCO_COOKY") == 0) {
93 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
94 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_COOL_JAZZ") == 0) {
95 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
96 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_FONTSTYLE_ROSEMARY") == 0) {
97 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
98 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME") == 0) {
99 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
100 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_MARUBERI_JPN_DCM") == 0) {
101 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
102 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_POP_JPN_DCM") == 0) {
103 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
104 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDMINCHO_JPN") == 0) {
105 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
106 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDRGOTHICM_JPN") == 0) {
107 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
108 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDGOTHIC_M_FONT") == 0) {
109 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
110 } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_DEFAULT_FONT") == 0) {
111 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_DEFAULT_FONT"));
113 snprintf(trans_font_type_name, bufsize, "%s", font_name_id);
115 snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
119 char *_item_text_keystr2_get(void *data, Evas_Object *obj, const char *part)
121 setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
122 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
123 char *ret_str = NULL;
124 if (!strcmp(part, "elm.text.main.left")) {
125 if (item_data->keyStr2) {
126 char temp[FONT_BUF_SIZE] = {0,};
128 int ret = format_font_name_by_id(item_data->sub_desc, item_data->keyStr2, temp, FONT_BUF_SIZE);
130 if (ret == 0) { /* error condition */
131 SETTING_TRACE_ERROR("Error condition font");
134 SETTING_TRACE_DEBUG("temp : %s", (char *)temp);
135 ret_str = (char *)g_strdup(temp);
138 /*SETTING_TRACE_END; */
143 static Evas_Object *_font_size_slider_get(void *data, Evas_Object *obj,
148 retv_if(!data, NULL);
149 Setting_GenGroupItem_Data *item_data = data;
150 SETTING_TRACE(" --------------------> part:%s", part);
152 if (!safeStrCmp(part, "elm.icon")) { /* CENTER WHOLE */
153 /*SETTING_TRACE("item_data->swallow_type:%d", item_data->swallow_type); */
154 if (SWALLOW_Type_LAYOUT_5STEP_SLIDER == item_data->swallow_type) {
155 SETTING_TRACE("Add 5Step Slider");
157 Evas_Object *layout = elm_layout_add(obj);
158 Eina_Bool ret = elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "font_slider");
159 if (ret == EINA_TRUE) { /* error condition */
160 SETTING_TRACE("elm_layout_file_set - OK");
162 SETTING_TRACE_ERROR("elm_layout_file_set - FAILED");
165 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
167 Evas_Object *label = elm_label_add(obj);
168 elm_object_text_set(label, _("<color=#000000><font_size=23>A</font_size></color>"));
169 evas_object_show(label);
170 elm_object_part_content_set(layout, "left_text", label);
171 Evas_Object *label2 = elm_label_add(obj);
172 elm_object_text_set(label2, _("<color=#000000><font_size=30>A</font_size></color>"));
173 evas_object_show(label2);
174 elm_object_part_content_set(layout, "right_text", label2);
175 Evas_Object *li_slider =
176 setting_create_5step_slider(obj, item_data->evas,
177 item_data->l_swallow_path,
178 item_data->r_swallow_path,
179 item_data->chk_status,
180 item_data->isIndicatorVisible,
181 item_data->slider_min,
182 item_data->slider_max,
183 item_data->chk_change_cb,
184 item_data->start_change_cb,
185 item_data->stop_change_cb,
187 item_data->eo_check = li_slider;
188 item_data->mouse_up_cb = _slider_mouse_cb;
189 evas_object_event_callback_add(li_slider, EVAS_CALLBACK_MOUSE_UP, _slider_mouse_cb, item_data);
191 /*evas_object_size_hint_max_set(li_slider, 360, 6); */
192 elm_object_part_content_set(layout, "slider", li_slider);
195 SETTING_TRACE("item_data->keyStr:%s", item_data->keyStr);
196 SETTING_TRACE("item_data->sub_desc:%s", item_data->sub_desc);
198 Evas_Object *box = elm_box_add(obj);
199 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
200 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
201 elm_box_padding_set(box, 10, padding_h);
203 elm_box_pack_end(box, setting_create_blank_rect_customize(obj, 1, 20));
205 item_data->eo_check = setting_create_textbox(obj, item_data->sub_desc);
206 elm_box_pack_end(box, item_data->eo_check);
207 elm_box_pack_end(box, setting_create_blank_rect_customize(obj, 1, 20));
215 static int setting_font_style_is_exist_string(const Eina_List *list, const char *key)
218 if ((key == NULL) || (list == NULL)) {
222 for (l = list; l; l = eina_list_next(l)) {
223 if (l->data && (!strcmp((char *)l->data, key))) {
232 * [API] get a font list from current system
233 * REFACTORING: move this feature to system-settings
235 static Eina_List *__setting_font_main_available_list_get()
238 FcObjectSet *os = NULL;
239 FcFontSet *fs = NULL;
240 FcPattern *pat = NULL;
241 Eina_List *list = NULL;
242 FcConfig *font_config = NULL;
244 font_config = FcInitLoadConfigAndFonts();
246 setting_retvm_if(font_config == NULL, NULL, "Failed: FcInitLoadConfigAndFonts");
249 char *locale = setlocale(0, NULL);
251 pat = FcPatternCreate();
253 os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, (char *) 0);
256 fs = FcFontList(font_config, pat, os);
257 FcObjectSetDestroy(os);
262 FcPatternDestroy(pat);
268 SETTING_TRACE_DEBUG("fs->nfont = %d", fs->nfont);
270 for (j = 0; j < fs->nfont; j++) {
272 FcChar8 *family = NULL;
273 FcChar8 *file = NULL;
274 if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) {
275 /*SETTING_TRACE_DEBUG("FC_FILE : %s\n", file); */
276 int preload_path_len = safeStrLen(SETTING_FONT_PRELOAD_FONT_PATH);
277 int download_path_len = safeStrLen(SETTING_FONT_DOWNLOADED_FONT_PATH);
278 if (!safeStrNCmp((const char *)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) ||
279 !safeStrNCmp((const char *)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len)) {
280 char *family_result = NULL;
281 FcChar8 *lang = NULL;
283 if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
286 if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
289 family_result = (char *)family;
291 /* Find proper family name for current locale. */
292 while (locale && family && lang) {
293 if (!strncmp(locale, (char *)lang, strlen((char *)lang))) {
294 family_result = (char *)family;
298 /* I will set english as default family language. */
299 /* If there is no proper family language for current locale, */
300 /* we have to show the english family name. */
301 if (!strcmp(lang, "en")) {
302 family_result = (char *)family;
305 if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
308 if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
312 if (family_result && !setting_font_style_is_exist_string(list, family_result)) {
313 list = eina_list_sorted_insert(list, safeStrCmp, strdup(family_result));
314 SETTING_TRACE_DEBUG("-------- ADDED FONT - family = %s", family_result);
315 /* list = eina_list_append(list, family_result); */
316 /* for TEST because there's 1 font on target. */
321 FcFontSetDestroy(fs);
325 FcConfigDestroy(font_config);
329 int get_font_name_id(char *font_data, char *temp, int bufsize)
331 /*SETTING_TRACE("font data : %s", (char*)font_data); */
332 /*char trans_font_type_name[FONT_BUF_SIZE] = {0,}; */
333 /*SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name); */
334 if (safeStrCmp(font_data, "Choco cooky") == 0) {
335 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_CHOCO_COOKY");
336 } else if (safeStrCmp(font_data, "Cool jazz") == 0) {
337 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_COOL_JAZZ");
338 } else if (safeStrCmp(font_data, "Rosemary") == 0) {
339 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_FONTSTYLE_ROSEMARY");
340 } else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
341 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME");
342 } else if (safeStrCmp(font_data, "Maruberi") == 0) {
343 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_MARUBERI_JPN_DCM");
344 } else if (safeStrCmp(font_data, "POP") == 0) {
345 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_POP_JPN_DCM");
346 } else if (safeStrCmp(font_data, "UDMincho") == 0) {
347 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDMINCHO_JPN");
348 } else if (safeStrCmp(font_data, "UDRGothic") == 0) {
349 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDRGOTHICM_JPN");
350 } else if (safeStrCmp(font_data, "UDGothic") == 0) {
351 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDGOTHIC_M_FONT");
353 snprintf(temp, bufsize, "%s", font_data);
359 int get_font_name_str(char *font_type_name, char *trans_font_type_name, int bufsize)
361 /*SETTING_TRACE_BEGIN; */
362 if (safeStrCmp(font_type_name, "Choco cooky") == 0) {
363 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
364 /*SETTING_TRACE("%s", trans_font_type_name); */
365 } else if (safeStrCmp(font_type_name, "Cool jazz") == 0) {
366 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
367 /*SETTING_TRACE("%s", trans_font_type_name); */
368 } else if (safeStrCmp(font_type_name, "Rosemary") == 0) {
369 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
370 /*SETTING_TRACE("%s", trans_font_type_name); */
371 } else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0) {
372 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
373 /*SETTING_TRACE("%s", trans_font_type_name); */
374 } else if (safeStrCmp(font_type_name, "Maruberi") == 0) {
375 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
376 /*SETTING_TRACE("%s", trans_font_type_name); */
377 } else if (safeStrCmp(font_type_name, "POP") == 0) {
378 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
379 /*SETTING_TRACE("%s", trans_font_type_name); */
380 } else if (safeStrCmp(font_type_name, "UDMincho") == 0) {
381 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
382 /*SETTING_TRACE("%s", trans_font_type_name); */
383 } else if (safeStrCmp(font_type_name, "UDRGothic") == 0) {
384 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
385 /*SETTING_TRACE("%s", trans_font_type_name); */
387 snprintf(trans_font_type_name, bufsize, "%s", font_type_name);
388 /*SETTING_TRACE("%s", trans_font_type_name); */
394 static void __setting_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
396 SettingFontUG *ad = (SettingFontUG *) data;
397 SETTING_TRACE("send ug_destroy_me by callback");
398 if (ad->main_popup) {
399 evas_object_del(ad->main_popup);
400 ad->main_popup = NULL;
402 ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
404 ug_destroy_me(ad->ug);
407 static void _event_set_font_type_helper(char *font_name)
409 int ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_name);
410 if (ret == SYSTEM_SETTINGS_ERROR_NONE) {
412 /* set event system */
413 setting_set_event_system(SYS_EVENT_FONT_SET,
419 static Eina_Bool __font_type_change_call(void *data)
422 SettingFontUG *ad = (SettingFontUG *) data;
425 /*system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, ad->font_name); */
426 _event_set_font_type_helper(ad->font_name);
429 ad->font_type_timer = NULL;
430 return ECORE_CALLBACK_CANCEL;
433 static Eina_Bool __font_size_change_call(void *data)
436 SettingFontUG *ad = (SettingFontUG *) data;
438 ad->size_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
440 NULL, KeyStr_Loading, NULL, 3/*0*/, TRUE, TRUE);
445 ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, ad->ret_font_size);
447 SETTING_TRACE_ERROR("system call failed with error code %d", ret);
451 ad->font_size_idler = NULL;
452 return ECORE_CALLBACK_CANCEL;
455 static Eina_Bool __slide_timer(void *data)
458 Setting_GenGroupItem_Data *list_item = data;
459 SettingFontUG *ad = list_item->userdata;
461 double val = elm_slider_value_get(list_item->eo_check);
462 int value = (int)(val + 0.5);
463 SETTING_TRACE("val:%f", val);
464 elm_slider_value_set(list_item->eo_check, value);
465 list_item->chk_status = elm_slider_value_get(list_item->eo_check);
467 if (ad->init_font_size == list_item->chk_status) {
468 ad->size_change_flag = FALSE;
470 ad->size_change_flag = TRUE;
472 ad->ret_font_size = list_item->chk_status;
474 if (ad->font_example) {
475 __setting_get_font_size_str(ad, list_item->chk_status);
476 char *tmp = ad->font_example->sub_desc;
477 ad->font_example->sub_desc = get_example_style_text(ad->font_size_str, ad->font_type_str);
479 elm_entry_entry_set(ad->font_example->eo_check, ad->font_example->sub_desc);
484 return ECORE_CALLBACK_CANCEL;
487 static void __font_size_slider_value_change_cb(void *data, Evas_Object *obj, void *event_info)
490 retm_if(data == NULL, "Data parameter is NULL");
491 Setting_GenGroupItem_Data *list_item = data;
492 SettingFontUG *ad = list_item->userdata;
493 retm_if(ad == NULL, "ad parameter is NULL");
494 /*for sliding performance */
496 ecore_timer_del(ad->timer);
499 ad->timer = ecore_timer_add(0.2, (Ecore_Task_Cb)__slide_timer, list_item);
503 * [UI][expandable list][event handler:selection][font change]
505 void setting_font_main_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
509 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
510 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
511 elm_genlist_item_selected_set(subitem, 0);
512 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
513 ret_if(NULL == data_subItem);
515 SettingFontUG *ad = (SettingFontUG *) data;
518 /* if not change, return */
519 if (ad->prev_font == data_subItem->chk_status) {
520 SETTING_TRACE("NOT CHANGED ");
523 if (ad->font_change_status == SELECTED_FONT_CHANGE_IN_PROCESS) {
526 ad->subitem = data_subItem;
527 /* Fix PLM P131016-04680
528 when user check the option, make sure the radio button is checked for prev_font font item
529 the radio of new font item will be checked when user seleck "ok" on popup*/
530 elm_radio_value_set(ad->subitem->rgd, data_subItem->chk_status);
532 /* extract font name from tag mixed string */
533 SETTING_TRACE("ad->subitem->keyStr --> popup - get FONT : %s ", ad->subitem->keyStr);
534 SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
536 /* set font name to font main and font config */
537 /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
538 /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
541 ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
542 elm_object_item_data_set(ad->font_type->item, ad->font_type);
543 elm_genlist_item_update(ad->font_type->item);
546 if (ad->font_example) {
547 __setting_get_font_type_str(ad, ad->subitem->sub_desc);
548 char *tmp = ad->font_example->sub_desc;
549 SETTING_TRACE_DEBUG("ad->font_type_str:%s", ad->font_type_str);
550 ad->font_example->sub_desc = get_example_style_text(ad->font_size_str, ad->font_type_str);
552 elm_entry_entry_set(ad->font_example->eo_check, ad->font_example->sub_desc);
555 if (ad->init_font_type == data_subItem->chk_status) {
556 ad->type_change_flag = FALSE;
558 ad->type_change_flag = TRUE;
562 char *font_name = g_strdup(ad->subitem->sub_desc);
564 ad->prev_font = ad->subitem->chk_status;
565 G_FREE(ad->font_name);
566 ad->font_name = (char *)g_strdup(_(font_name));
567 SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
569 /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
570 if (ad->font_type_list != NULL) {
571 eina_list_free(ad->font_type_list);
572 ad->font_type_list = NULL;
576 static void __font_vconf_change_cb(keynode_t *key, void *data)
579 setting_retm_if(NULL == key, "key is NULL");
580 setting_retm_if(NULL == data, "data is NULL");
581 SettingFontUG *ad = (SettingFontUG *)data;
583 char *vconf_name = vconf_keynode_get_name(key);
585 if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME)) {
588 char *font_type_name = NULL;
589 int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
591 SETTING_TRACE("system-setting call failed with error code %d", ret);
593 SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
594 char *default_font_name = NULL;
595 default_font_name = _get_default_font();
596 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
597 if (!safeStrCmp(default_font_name, font_type_name)) {
598 snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
600 ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
604 G_FREE(ad->font_type->sub_desc);
605 ad->font_type->sub_desc = (char *)g_strdup(trans_font_type_name);
606 elm_object_item_data_set(ad->font_type->item, ad->font_type);
607 elm_genlist_item_update(ad->font_type->item);
608 SETTING_TRACE("ad->font_type->sub_desc:%s", trans_font_type_name);
610 if (elm_genlist_item_expanded_get(ad->font_type->item)) {
612 Setting_GenGroupItem_Data *font_type_subitem;
613 EINA_LIST_FOREACH(ad->font_type_list, l, font_type_subitem) {
614 if (font_type_subitem && !safeStrCmp(font_type_subitem->sub_desc, font_type_name)) {
616 if (font_type_subitem && font_type_subitem->rgd) {
617 elm_radio_value_set(font_type_subitem->rgd, font_type_subitem->chk_status);
618 if (ad->font_change_status != SELECTED_FONT_CHANGE_IN_PROCESS) {
619 ad->subitem = font_type_subitem;
629 SETTING_TRACE_ERROR("vconf_name is error");
634 #define SLIDER_MAX_VALUE 4
636 #define SLIDER_START_POINT_X _slider_startpoint_x()
637 #define SLIDER_END_POINT_X (_slider_get_width() - SLIDER_START_POINT_X)
638 #define SLIDER_LENGTH (SLIDER_END_POINT_X - SLIDER_START_POINT_X)
640 static int _slider_get_width()
643 //ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
649 static int _slider_endpoint_x()
651 if (_slider_get_width() == 720) /* M0 */
657 static int _slider_startpoint_x()
660 //ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
666 static void _slider_mouse_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
669 if (data == NULL || obj == NULL || event_info == NULL)
672 Setting_GenGroupItem_Data *list_item = data;
673 SettingFontUG *ad = list_item->userdata;
675 Evas_Object *slider = obj;
676 Evas_Event_Mouse_Down *ev = event_info;
679 int max_vol = SLIDER_MAX_VALUE;
680 int start_x = SLIDER_START_POINT_X;
681 double current = 0.0;
684 current = ev->canvas.x - start_x;
685 SETTING_TRACE("ev->canvas.x %d ", ev->canvas.x);
687 double dval = current * max_vol / SLIDER_LENGTH;
688 val = current * max_vol / SLIDER_LENGTH;
690 SETTING_TRACE("dval = %lf, val = %d, dval-val=%lf ", dval, val, (dval - val));
691 if ((dval - val) > 0.5)
695 if (val < 0) val = 0;
696 else if (val > max_vol) val = max_vol;
698 SETTING_TRACE("val = %d", val);
700 elm_slider_value_set(slider, val);
702 /*for sliding performance */
704 ecore_timer_del(ad->timer);
707 ad->timer = ecore_timer_add(0.2, (Ecore_Task_Cb)__slide_timer, list_item);
711 static Eina_Bool __font_change_call(void *data)
714 SettingFontUG *ad = (SettingFontUG *) data;
717 if (ad->size_change_flag == TRUE) {
718 system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, ad->ret_font_size);
721 if (ad->type_change_flag == TRUE) {
722 /* system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, ad->font_name); */
723 _event_set_font_type_helper(ad->font_name);
727 ad->font_type_timer = NULL;
728 return ECORE_CALLBACK_CANCEL;
731 static void setting_font_done_click_cb(void *data, Evas_Object *obj, void *event_info)
735 retm_if(data == NULL, "Data parameter is NULL");
736 SettingFontUG *ad = (SettingFontUG *) data;
738 SETTING_TRACE_DEBUG("ad->size_change_flag = %d", ad->size_change_flag);
739 SETTING_TRACE_DEBUG("ad->type_change_flag = %d", ad->type_change_flag);
741 if (ad->size_change_flag == TRUE || ad->type_change_flag == TRUE) {
742 if (ad->main_popup) {
743 evas_object_del(ad->main_popup);
744 ad->main_popup = NULL;
745 } /* font type popup */
747 ad->font_change_status = SELECTED_FONT_CHANGE_IN_PROCESS;
748 ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
750 NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE); /* 3 seconds to wait in maximum */
752 /* ecore timer for change actual font */
753 ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_change_call, ad);
755 /* Send destroy request */
756 ug_destroy_me(ad->ug);
760 static void setting_font_cancel_click_cb(void *data, Evas_Object *obj, void *event_info)
764 retm_if(data == NULL, "Data parameter is NULL");
765 SettingFontUG *ad = (SettingFontUG *) data;
767 /* Send destroy request */
768 ug_destroy_me(ad->ug);
771 static void __setting_get_font_size_str(void *data, int size)
775 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
776 SettingFontUG *ad = (SettingFontUG *) data;
780 ad->font_size_str = (char *)g_strdup("24");
783 ad->font_size_str = (char *)g_strdup("30");
786 ad->font_size_str = (char *)g_strdup("44");
789 ad->font_size_str = (char *)g_strdup("56");
792 ad->font_size_str = (char *)g_strdup("70");
795 ad->font_size_str = (char *)g_strdup("30");
799 static void __setting_get_font_type_str(void *data, char *font_data)
802 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
803 retv_if(font_data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
805 SettingFontUG *ad = (SettingFontUG *) data;
807 char *pos = font_data;
808 char new_name[FONT_BUF_SIZE];
811 while (*pos != '\0') {
813 SETTING_TRACE(">>> empty ' ' ");
814 new_name[count] = '\\';
816 new_name[count] = ' ';
818 new_name[count] = font_data[i];
825 new_name[count] = '\0';
827 ad->font_type_str = g_strdup(new_name);
830 /* ***************************************************
834 ***************************************************/
835 static int setting_font_main_create(void *cb)
839 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
841 SettingFontUG *ad = (SettingFontUG *) cb;
842 setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2));
843 ad->itc_1text_1icon_2.func.text_get = _item_text_keystr2_get;
845 setting_create_Gendial_itc("1icon", &(ad->itc_bg_1icon));
846 SETTING_TRACE("ad->itc_bg_1icon: %s ", ad->itc_bg_1icon);
847 ad->itc_bg_1icon.func.content_get = _font_size_slider_get;
849 retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
850 "win_main_layout is NULL");
851 ad->font_change_status = SELECTED_FONT_CHANGE_NONE;
853 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
856 _("IDS_ST_BUTTON_BACK"),
858 (setting_call_back_func)__setting_font_main_click_softkey_back_cb,
860 ad, &ad->genlist, &ad->navibar);
861 ad->navi_it_font = elm_naviframe_top_item_get(ad->navibar);
863 /* Title Cancel Button */
864 ad->btn_cancel = setting_create_button(ad->navibar, "IDS_MSG_ACBUTTON_CANCEL_ABB",
865 "naviframe/title_cancel",
866 setting_font_cancel_click_cb, ad);
867 elm_object_item_part_content_set(ad->navi_it_font, "title_left_btn", ad->btn_cancel);
868 /* Title Done Button */
869 ad->btn_done = setting_create_button(ad->navibar, "IDS_MSG_ACBUTTON_DONE_ABB",
870 "naviframe/title_done",
871 setting_font_done_click_cb, ad);
872 elm_object_item_part_content_set(ad->navi_it_font, "title_right_btn", ad->btn_done);
874 elm_genlist_mode_set(ad->genlist, ELM_LIST_COMPRESS);
875 evas_object_smart_callback_add(ad->genlist, "realized", __gl_realized_cb, ad);
877 char *font_name = NULL;
878 G_FREE(ad->font_type_str);
879 int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_name);
880 if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
881 SETTING_TRACE_ERROR("Failed to call system_settings_get_value_string with error cdoe %d", ret);
882 font_name = _get_default_font();
884 __setting_get_font_type_str(ad, font_name);
886 ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &size);
887 setting_retvm_if(ret != 0, SETTING_RETURN_SUCCESS, "fail to get vconf");
888 __setting_get_font_size_str(ad, size);
890 SETTING_TRACE_DEBUG("ad->font_size_str = %s", ad->font_size_str);
891 SETTING_TRACE_DEBUG("ad->font_type_str = %s", ad->font_type_str);
894 char *default_example_str = get_example_style_text(ad->font_size_str, ad->font_type_str);
897 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_bg_1icon),
899 ad, SWALLOW_Type_INVALID, NULL,
901 default_example_str, NULL);
903 if (ad->font_example) {
904 __BACK_POINTER_SET(ad->font_example);
906 SETTING_TRACE_ERROR("ad->font_example is NULL");
908 G_FREE(default_example_str);
910 /*2.Font Size..... */
911 setting_create_Gendial_field_titleItem(ad->genlist, &(itc_group_item), "IDS_ST_BODY_SIZE", NULL);
914 ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &size);
915 setting_retvm_if(ret != 0, SETTING_RETURN_SUCCESS, "fail to get vconf");
916 ad->init_font_size = size;
918 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_bg_1icon), NULL,
919 NULL, SWALLOW_Type_LAYOUT_5STEP_SLIDER,
921 NULL, size, "IDS_ST_BODY_SIZE",
923 __font_size_slider_value_change_cb);
926 ad->font_size->win_main = ad->win_main_layout;
927 ad->font_size->evas = ad->evas;
928 ad->font_size->slider_min = 0;
929 ad->font_size->slider_max = 4;
930 ad->font_size->isIndicatorVisible = 0;
931 ad->font_size->userdata = ad;
932 ad->font_size->start_change_cb = NULL;
933 ad->font_size->stop_change_cb = NULL;
934 ad->font_size->mouse_up_cb = _slider_mouse_cb;
935 __BACK_POINTER_SET(ad->font_size);
937 SETTING_TRACE_ERROR("ad->data_br_sli is NULL");
940 /*3.Font Type..... */
941 setting_create_Gendial_field_titleItem(ad->genlist, &(itc_group_item), "IDS_ST_BODY_TYPE", NULL);
942 Evas_Object *rgd = NULL;
944 int matched_font = -1;
945 G_FREE(ad->font_name);
946 ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &(ad->font_name));
947 if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
948 SETTING_TRACE_ERROR("Failed to call system_settings_get_value_string with error cdoe %d", ret);
949 ad->font_name = _get_default_font();
952 rgd = elm_radio_add(ad->genlist);
953 elm_radio_value_set(rgd, -1);
955 char *default_font_name = NULL;
956 default_font_name = _get_default_font();
957 if (NULL != default_font_name) {
958 /*char font_name_dispaly[FONT_BUF_SIZE] = {0,}; */
959 SETTING_TRACE_DEBUG("default_font_name:%s", default_font_name);
960 /*format_default_font(SETTING_DEFAULT_FONT_TYPE, font_name_dispaly,FONT_BUF_SIZE, default_font_name); */
961 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
962 setting_retvm_if(!item_data, SETTING_RETURN_SUCCESS, "calloc failed");
963 item_data->keyStr2 = (char *)g_strdup(SETTING_DEFAULT_FONT_TYPE);/*for display */
964 item_data->keyStr = (char *)g_strdup(_(SETTING_DEFAULT_FONT_TYPE));/*for tts reading */
965 item_data->swallow_type = SWALLOW_Type_1RADIO_RIGHT;
966 item_data->chk_status = i;
967 item_data->rgd = rgd;
968 item_data->chk_change_cb = NULL;
969 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
970 item_data->sub_desc = strdup(default_font_name); /*the real font type value */
971 item_data->item = elm_genlist_item_append(ad->genlist, &(ad->itc_1text_1icon_2), item_data, NULL, ELM_GENLIST_ITEM_NONE, setting_font_main_list_sel_cb, ad);
974 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
975 item_data->userdata = ad;
976 if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
981 ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
984 Eina_List *font_list = NULL;
986 char *font_data = NULL;
987 font_list = __setting_font_main_available_list_get();
988 EINA_LIST_FOREACH(font_list, l, font_data) {
989 if (safeStrCmp(default_font_name, (char *)font_data) != 0) {
990 char keyStr[FONT_BUF_SIZE] = {0,};
991 get_font_name_str((char *)font_data, keyStr, FONT_BUF_SIZE);
992 char temp[FONT_BUF_SIZE] = {0,};
993 /*int ret = get_font_name_tag(font_data, temp, FONT_BUF_SIZE); */
994 get_font_name_id((char *)font_data, temp, FONT_BUF_SIZE);
995 SETTING_TRACE_DEBUG("font data : %s", (char *)font_data);
996 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
997 setting_retvm_if(!item_data, SETTING_RETURN_SUCCESS, "calloc failed");
998 item_data->keyStr2 = (char *)g_strdup(temp);/*for display */
999 item_data->keyStr = (char *)g_strdup(keyStr);/*for tts reading */
1000 item_data->swallow_type = SWALLOW_Type_1RADIO_RIGHT;
1001 item_data->chk_status = i;
1002 item_data->rgd = rgd;
1003 item_data->chk_change_cb = NULL;
1004 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
1005 item_data->sub_desc = strdup((char *)font_data);
1006 item_data->item = elm_genlist_item_append(ad->genlist, &(ad->itc_1text_1icon_2), item_data, NULL, ELM_GENLIST_ITEM_NONE, setting_font_main_list_sel_cb, ad);
1009 item_data->userdata = ad;
1010 /*if (!safeStrCmp(ad->font_name, (const char*)font_data)) { */
1011 if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
1016 ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
1022 /* update check status */
1023 if (matched_font != -1) {
1024 elm_radio_value_set(rgd, matched_font);
1025 ad->init_font_type = matched_font;
1028 ad->prev_font = matched_font;
1029 G_FREE(default_font_name);
1032 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
1033 __font_vconf_change_cb, ad);
1035 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
1037 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
1038 __font_vconf_change_cb, ad);
1040 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
1042 /*__setting_font_main_genlist_item_create(ad); */
1047 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
1048 SETTING_TRACE(" w = %d h = %d <------------------------- ", w, h);
1050 setting_view_font_main.is_create = 1;
1051 return SETTING_RETURN_SUCCESS;
1054 static int setting_font_main_destroy(void *cb)
1056 SETTING_TRACE_BEGIN;
1058 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1060 SettingFontUG *ad = (SettingFontUG *) cb;
1061 int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
1062 __font_vconf_change_cb);
1064 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
1066 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
1067 __font_vconf_change_cb);
1069 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
1071 if (ad->font_name) {
1072 G_FREE(ad->font_name);
1073 ad->font_name = NULL;
1075 if (ad->font_size_str) {
1076 G_FREE(ad->font_size_str);
1077 ad->font_size_str = NULL;
1079 if (ad->font_type_str) {
1080 G_FREE(ad->font_type_str);
1081 ad->font_type_str = NULL;
1084 ecore_timer_del(ad->timer);
1087 if (ad->font_size_idler) {
1088 ecore_timer_del(ad->font_size_idler);
1089 ad->font_size_idler = NULL;
1091 if (ad->font_type_timer) {
1092 ecore_timer_del(ad->font_type_timer);
1093 ad->font_type_timer = NULL;
1096 if (ad->main_popup) {
1097 evas_object_del(ad->main_popup);
1098 ad->main_popup = NULL;
1101 if (ad->ly_main != NULL) {
1102 evas_object_del(ad->ly_main);
1105 if (ad->navi_it_font != NULL) {
1106 ad->navi_it_font = NULL;
1108 if (ad->font_type_list != NULL) {
1109 eina_list_free(ad->font_type_list);
1110 ad->font_type_list = NULL;
1113 setting_view_font_main.is_create = 0;
1115 return SETTING_RETURN_SUCCESS;
1118 static int setting_font_main_update(void *cb)
1120 SETTING_TRACE_BEGIN;
1122 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1124 SettingFontUG *ad = (SettingFontUG *) cb;
1126 if (ad->ly_main != NULL) {
1127 evas_object_show(ad->ly_main);
1131 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &value, &err);
1133 SETTING_TRACE_ERROR("get vconf failed");
1136 if (ad->font_size) {
1137 G_FREE(ad->font_size->sub_desc);
1138 ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(value));
1139 elm_object_item_data_set(ad->font_size->item, ad->font_size);
1140 elm_genlist_item_update(ad->font_size->item);
1142 /* setting_font_update_vconf_key(ad, SETTING_VCONF_INT_TYPE, INT_SLP_SETTING_LCD_TIMEOUT_NORMAL); */
1144 if (ad->font_type) {
1145 elm_genlist_item_update(ad->font_type->item);
1147 return SETTING_RETURN_SUCCESS;
1150 static int setting_font_main_cleanup(void *cb)
1153 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1155 SettingFontUG *ad = (SettingFontUG *) cb;
1157 if (ad->ly_main != NULL) {
1158 evas_object_hide(ad->ly_main);
1161 return SETTING_RETURN_SUCCESS;
1164 /* ***************************************************
1168 ***************************************************/
1170 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it)
1172 SETTING_TRACE_BEGIN;
1174 retv_if(data == NULL, EINA_FALSE);
1176 SettingFontUG *ad = (SettingFontUG *) data;
1178 if (ad->viewmode == FONT_SEL_VIEW_APPCONTROL) {
1180 if (app_control_create(&svc)) {
1184 app_control_add_extra_data(svc, "category", "FontType");
1185 app_control_add_extra_data(svc, "FontType", ad->font_name);
1187 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontType");
1188 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontType", ad->font_name);
1191 ug_send_result(ad->ug, svc);
1192 app_control_destroy(svc);
1193 } else if (ad->viewmode == FONT_SIZE_VIEW_APPCONTROL) {
1197 int ret = setting_set_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, ad->ret_font_size, &err);
1198 setting_retvm_if(ret == -1, EINA_FALSE, "Failed to set vconf");
1200 if (app_control_create(&svc)) {
1204 char font_size[SETTING_FONT_MAX_LEN] = {0,};
1205 snprintf(font_size, SETTING_FONT_MAX_LEN, "%d", ad->ret_font_size);
1207 app_control_add_extra_data(svc, "category", "FontSize");
1208 app_control_add_extra_data(svc, "FontSize", font_size);
1210 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontSize");
1211 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontSize", font_size);
1214 ug_send_result(ad->ug, svc);
1215 app_control_destroy(svc);
1217 /* Send destroy request */
1218 ug_destroy_me(ad->ug);