2 * Copyright (c) 2011-2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 #include "sst_utils_wrapper.h"
20 #include <fontconfig/fontconfig.h>
21 #include <Ecore_Evas.h>
22 #include <efl_extension.h>
23 #include "system_settings.h"
28 #define SMALL_FONT_DPI (-90)
30 #define SMALL_FONT_DPI (-80)
33 #define MIDDLE_FONT_DPI (-100)
36 #define LARGE_FONT_DPI (-110)
38 #define LARGE_FONT_DPI (-150)
41 #define HUGE_FONT_DPI (-190)
42 #define GIANT_FONT_DPI (-250)
44 #define SETTING_FONT_PRELOAD_FONT_PATH _TZ_SYS_RO_SHARE"/fonts"
45 #define SETTING_FONT_DOWNLOADED_FONT_PATH _TZ_SYS_SHARE"/fonts"
47 #define SETTING_FONT_TIZEN_FONT_ALIAS "Tizen"
48 #define SETTING_FONT_TIZEN_DEFAULT_FONT_ALIAS "TizenDefaultFont"
50 static char* _get_main_font_family(char *alias)
54 FcConfig *font_config = NULL;
55 FcChar8 *family = NULL;
59 font_config = FcInitLoadConfigAndFonts();
60 if (NULL == font_config) {
61 ERR("FcInitLoadConfigAndFonts() Fail");
65 pat = FcPatternBuild(0, FC_FAMILY, FcTypeString, alias, NULL);
67 ERR("FcPatternBuild() Fail");
68 FcConfigDestroy(font_config);
72 FcConfigSubstitute(font_config, pat, FcMatchPattern);
73 FcDefaultSubstitute(pat);
76 set = FcFontSort(font_config, pat, FcTrue, NULL, &res);
79 FcPatternGetString(set->fonts[0], FC_FAMILY, 0, &family);
81 ret = strdup((char*)family);
83 FcFontSetDestroy(set);
86 FcPatternDestroy(pat);
87 FcConfigDestroy(font_config);
92 API bool sstu_is_valid_image(char *path)
97 if (ecore_evas_init()) {
98 ERR("ecore_evas_init() Fail");
102 ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL);
103 evas = ecore_evas_get(ee);
105 void *img = evas_object_image_add(evas);
106 evas_object_image_file_set(img, path, NULL);
107 int ret = evas_object_image_load_error_get(img);
113 ERR("Invalid(%s)", path);
117 ecore_evas_shutdown();
121 API void sstu_font_config_set_notification()
125 API int sstu_is_available_font(char *font_name)
130 FcConfig *font_config;
133 RETV_IF(NULL == font_name, -1);
135 font_config = FcInitLoadConfigAndFonts();
136 if (NULL == font_config)
137 ERR("FcInitLoadConfigAndFonts() Fail");
139 char *locale = setlocale(0, NULL);
140 os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, NULL);
142 ERR("FcObjectSetBuild() Fail");
143 FcConfigDestroy(font_config);
147 pat = FcPatternCreate();
149 ERR("FcPatternCreate() Fail");
150 FcObjectSetDestroy(os);
151 FcConfigDestroy(font_config);
155 fs = FcFontList(font_config, pat, os);
156 FcPatternDestroy(pat);
157 FcObjectSetDestroy(os);
159 ERR("FcFontList() Fail");
160 FcConfigDestroy(font_config);
164 INFO("fs->nfont = %d", fs->nfont);
167 for (i = 0; i < fs->nfont; i++) {
168 FcChar8 *file = NULL;
169 FcChar8 *family = NULL;
172 result = FcPatternGetString(fs->fonts[i], FC_FILE, 0, &file);
173 if (FcResultMatch != result || NULL == file) {
174 ERR("FcPatternGetString() Fail(%d)", result);
175 FcFontSetDestroy(fs);
176 FcConfigDestroy(font_config);
179 const char *preloaded = SETTING_FONT_PRELOAD_FONT_PATH;
180 const char *downloaded = SETTING_FONT_DOWNLOADED_FONT_PATH;
181 int preload_len = sizeof(SETTING_FONT_PRELOAD_FONT_PATH) - 1;
182 int download_len = sizeof(SETTING_FONT_DOWNLOADED_FONT_PATH) - 1;
184 if (SST_EQUAL == strncmp((char*)file, preloaded, preload_len)
185 || SST_EQUAL == strncmp((char*)file, downloaded, download_len)) {
186 char *family_result = NULL;
187 FcChar8 *lang = NULL;
189 if (FcPatternGetString(fs->fonts[i], FC_FAMILY, id, &family) != FcResultMatch)
191 if (FcPatternGetString(fs->fonts[i], FC_FAMILYLANG, id, &lang) != FcResultMatch)
193 family_result = (char*)family;
195 /* Find proper family name for current locale. */
196 while (locale && family && lang) {
197 if (SST_EQUAL == strncmp(locale, (char*)lang, strlen((char*)lang))) {
198 family_result = (char*)family;
202 /* I will set english as default family language. */
203 /* If there is no proper family language for current locale, */
204 /* we have to show the english family name. */
205 if (SST_EQUAL == strcmp((char*)lang, "en"))
206 family_result = (char*)family;
209 if (FcPatternGetString(fs->fonts[i], FC_FAMILY, id, &family) != FcResultMatch)
211 if (FcPatternGetString(fs->fonts[i], FC_FAMILYLANG, id, &lang) != FcResultMatch)
216 DBG("family = %s", family_result);
217 if (strcmp(family_result, font_name) == 0) {
224 FcFontSetDestroy(fs);
225 FcConfigDestroy(font_config);
229 API char* sstu_get_default_font()
231 return _get_main_font_family(SETTING_FONT_TIZEN_DEFAULT_FONT_ALIAS);
234 static int _get_font_size()
238 int vconf_value = -1;
239 if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &vconf_value)) {
240 ERR("vconf_get_int() Fail");
244 switch (vconf_value) {
245 case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
246 font_size = SMALL_FONT_DPI;
248 case SYSTEM_SETTINGS_FONT_SIZE_NORMAL:
249 font_size = MIDDLE_FONT_DPI;
251 case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
252 font_size = LARGE_FONT_DPI;
254 case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
255 font_size = HUGE_FONT_DPI;
257 case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
258 font_size = GIANT_FONT_DPI;
261 font_size = MIDDLE_FONT_DPI;
267 API bool sstu_set_font_config(char *font_name)
269 int font_size = _get_font_size();
270 return eext_config_font_set(font_name, font_size);
273 API void sstu_set_font_size()
275 int font_size = _get_font_size();
276 char *font_name = NULL;
277 font_name = vconf_get_str(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME);
278 eext_config_font_set(font_name, font_size);