2005-04-02 09:11:04 -08:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
|
|
|
#include "e.h"
|
|
|
|
|
|
|
|
/* TODO List:
|
|
|
|
* - export to libe
|
|
|
|
* - use e_path to search for available fonts
|
|
|
|
*/
|
|
|
|
|
2005-04-27 23:27:25 -07:00
|
|
|
static char _fn_buf[1024];
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_init(void)
|
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
/* all init stuff is in e_config */
|
2005-04-02 09:11:04 -08:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_shutdown(void)
|
|
|
|
{
|
|
|
|
/* e_config will do this */
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_apply(void)
|
|
|
|
{
|
2005-04-27 23:27:25 -07:00
|
|
|
char buf[1024];
|
2005-08-14 15:22:17 -07:00
|
|
|
Evas_List *l;
|
2005-04-02 09:11:04 -08:00
|
|
|
E_Font_Fallback *eff;
|
2005-04-27 23:27:25 -07:00
|
|
|
int blen, len;
|
2005-04-02 09:11:04 -08:00
|
|
|
|
|
|
|
/* setup edje fallback list */
|
2005-04-27 23:27:25 -07:00
|
|
|
blen = sizeof(buf) - 1;
|
2005-04-29 12:42:19 -07:00
|
|
|
buf[0] = 0;
|
2005-04-27 23:27:25 -07:00
|
|
|
buf[blen] = 0;
|
2005-08-14 15:22:17 -07:00
|
|
|
l = e_config->font_fallbacks;
|
|
|
|
if (l)
|
2005-04-02 09:11:04 -08:00
|
|
|
{
|
2005-08-14 15:22:17 -07:00
|
|
|
eff = evas_list_data(l);
|
2005-04-27 23:27:25 -07:00
|
|
|
len = strlen(eff->name);
|
|
|
|
if (len < blen)
|
|
|
|
{
|
|
|
|
strcpy(buf, eff->name);
|
|
|
|
blen -= len;
|
|
|
|
}
|
2005-08-14 15:22:17 -07:00
|
|
|
for (l = evas_list_next(l); l; l = l->next)
|
2005-04-27 23:27:25 -07:00
|
|
|
{
|
2005-08-14 15:22:17 -07:00
|
|
|
eff = evas_list_data(l);
|
2005-04-29 12:42:19 -07:00
|
|
|
len = 1;
|
|
|
|
if (len < blen)
|
|
|
|
{
|
|
|
|
strcat(buf, ",");
|
|
|
|
blen -= len;
|
|
|
|
}
|
|
|
|
len = strlen(eff->name);
|
|
|
|
if (len < blen)
|
|
|
|
{
|
|
|
|
strcat(buf, eff->name);
|
|
|
|
blen -= len;
|
|
|
|
}
|
2005-04-27 23:27:25 -07:00
|
|
|
}
|
|
|
|
edje_fontset_append_set(buf);
|
|
|
|
}
|
2005-04-29 12:42:19 -07:00
|
|
|
else
|
|
|
|
edje_fontset_append_set(NULL);
|
2005-04-02 09:11:04 -08:00
|
|
|
|
|
|
|
/* setup edje text classes */
|
2005-08-14 15:22:17 -07:00
|
|
|
for (l = e_config->font_defaults; l; l = l->next)
|
2005-04-02 09:11:04 -08:00
|
|
|
{
|
2005-08-14 15:22:17 -07:00
|
|
|
E_Font_Default *efd;
|
|
|
|
|
|
|
|
efd = evas_list_data(l);
|
2005-04-02 09:11:04 -08:00
|
|
|
edje_text_class_set(efd->text_class, efd->font, efd->size);
|
|
|
|
}
|
2005-08-14 15:22:17 -07:00
|
|
|
|
|
|
|
/* Update borders */
|
2005-09-28 10:36:35 -07:00
|
|
|
for (l = e_border_client_list(); l; l = l->next)
|
2005-08-14 15:22:17 -07:00
|
|
|
{
|
|
|
|
E_Border *bd;
|
|
|
|
|
|
|
|
bd = l->data;
|
|
|
|
e_border_frame_recalc(bd);
|
|
|
|
}
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI Evas_List *
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_available_list(void)
|
|
|
|
{
|
2006-04-30 04:54:04 -07:00
|
|
|
Evas_List *evas_fonts;
|
|
|
|
Evas_List *e_fonts;
|
|
|
|
Evas_List *l;
|
|
|
|
E_Manager *man;
|
|
|
|
E_Container *con;
|
|
|
|
|
|
|
|
man = e_manager_current_get();
|
|
|
|
if (!man) return NULL;
|
|
|
|
con = e_container_current_get(man);
|
|
|
|
if (!con) con = e_container_number_get(man, 0);
|
|
|
|
if (!con) return NULL;
|
2005-05-19 20:09:44 -07:00
|
|
|
|
2006-04-30 04:54:04 -07:00
|
|
|
evas_fonts = evas_font_available_list(con->bg_evas);
|
|
|
|
|
|
|
|
e_fonts = NULL;
|
|
|
|
for (l = evas_fonts; l; l = l->next)
|
2005-05-19 20:09:44 -07:00
|
|
|
{
|
2006-04-30 04:54:04 -07:00
|
|
|
E_Font_Available *efa;
|
|
|
|
const char *evas_font;
|
|
|
|
|
|
|
|
efa = E_NEW(E_Font_Available, 1);
|
|
|
|
evas_font = l->data;
|
|
|
|
efa->name = evas_stringshare_add(evas_font);
|
|
|
|
e_fonts = evas_list_append(e_fonts, efa);
|
|
|
|
}
|
|
|
|
|
|
|
|
evas_font_available_list_free(con->bg_evas, evas_fonts);
|
|
|
|
|
|
|
|
return e_fonts;
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-05-30 20:01:53 -07:00
|
|
|
e_font_available_list_free(Evas_List *available)
|
2005-04-02 09:11:04 -08:00
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
E_Font_Available *efa;
|
2006-04-30 04:54:04 -07:00
|
|
|
|
2005-04-21 23:31:48 -07:00
|
|
|
while (available)
|
2006-04-30 04:54:04 -07:00
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
efa = available->data;
|
|
|
|
available = evas_list_remove_list(available, available);
|
2005-12-03 07:39:25 -08:00
|
|
|
if (efa->name) evas_stringshare_del(efa->name);
|
2006-04-30 04:54:04 -07:00
|
|
|
E_FREE(efa);
|
|
|
|
}
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_fallback_clear(void)
|
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
E_Font_Fallback *eff;
|
2005-11-22 05:28:10 -08:00
|
|
|
|
2005-04-21 23:31:48 -07:00
|
|
|
while (e_config->font_fallbacks)
|
2005-04-21 21:25:51 -07:00
|
|
|
{
|
|
|
|
eff = e_config->font_fallbacks->data;
|
|
|
|
e_config->font_fallbacks = evas_list_remove_list(
|
|
|
|
e_config->font_fallbacks,
|
|
|
|
e_config->font_fallbacks);
|
2006-03-02 04:03:48 -08:00
|
|
|
if (eff->name) evas_stringshare_del(eff->name);
|
2005-04-02 09:11:04 -08:00
|
|
|
E_FREE(eff);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_fallback_append(const char *font)
|
|
|
|
{
|
|
|
|
E_Font_Fallback *eff;
|
|
|
|
|
|
|
|
e_font_fallback_remove (font);
|
|
|
|
|
|
|
|
eff = E_NEW(E_Font_Fallback, 1);
|
2005-12-03 07:39:25 -08:00
|
|
|
eff->name = evas_stringshare_add(font);
|
2005-04-21 21:25:51 -07:00
|
|
|
e_config->font_fallbacks = evas_list_append(e_config->font_fallbacks, eff);
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_fallback_prepend(const char *font)
|
|
|
|
{
|
|
|
|
E_Font_Fallback *eff;
|
|
|
|
|
|
|
|
e_font_fallback_remove (font);
|
|
|
|
|
|
|
|
eff = E_NEW(E_Font_Fallback, 1);
|
2005-12-04 04:03:59 -08:00
|
|
|
eff->name = evas_stringshare_add(font);
|
2005-04-21 21:25:51 -07:00
|
|
|
e_config->font_fallbacks = evas_list_prepend(e_config->font_fallbacks, eff);
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_fallback_remove(const char *font)
|
|
|
|
{
|
|
|
|
Evas_List *next;
|
2005-04-21 21:25:51 -07:00
|
|
|
|
2005-04-21 23:31:48 -07:00
|
|
|
for (next = e_config->font_fallbacks; next; next = next->next)
|
2005-04-02 09:11:04 -08:00
|
|
|
{
|
|
|
|
E_Font_Fallback *eff;
|
|
|
|
|
|
|
|
eff = evas_list_data(next);
|
|
|
|
if (!strcmp(eff->name, font))
|
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
e_config->font_fallbacks = evas_list_remove_list(
|
|
|
|
e_config->font_fallbacks, next);
|
2005-12-03 07:39:25 -08:00
|
|
|
if (eff->name) evas_stringshare_del(eff->name);
|
2005-04-02 09:11:04 -08:00
|
|
|
E_FREE(eff);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI Evas_List *
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_fallback_list(void)
|
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
return e_config->font_fallbacks;
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_default_set(const char *text_class, const char *font, int size)
|
|
|
|
{
|
|
|
|
E_Font_Default *efd;
|
|
|
|
Evas_List *next;
|
|
|
|
|
|
|
|
/* search for the text class */
|
2005-04-21 23:31:48 -07:00
|
|
|
for (next = e_config->font_defaults; next; next = next->next)
|
2005-04-02 09:11:04 -08:00
|
|
|
{
|
|
|
|
efd = evas_list_data(next);
|
|
|
|
if (!strcmp(efd->text_class, text_class))
|
|
|
|
{
|
2005-12-03 07:39:25 -08:00
|
|
|
if (efd->font) evas_stringshare_del(efd->font);
|
|
|
|
efd->font = evas_stringshare_add(font);
|
2005-04-02 09:11:04 -08:00
|
|
|
efd->size = size;
|
|
|
|
/* move to the front of the list */
|
2005-04-21 21:25:51 -07:00
|
|
|
e_config->font_defaults = evas_list_remove_list(
|
|
|
|
e_config->font_defaults, next);
|
|
|
|
e_config->font_defaults = evas_list_prepend(
|
|
|
|
e_config->font_defaults, efd);
|
2005-04-02 09:11:04 -08:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* the text class doesnt exist */
|
|
|
|
efd = E_NEW(E_Font_Default, 1);
|
2005-12-03 07:39:25 -08:00
|
|
|
efd->text_class = evas_stringshare_add(text_class);
|
|
|
|
efd->font = evas_stringshare_add(font);
|
2005-04-02 09:11:04 -08:00
|
|
|
efd->size = size;
|
|
|
|
|
2005-04-21 21:25:51 -07:00
|
|
|
e_config->font_defaults = evas_list_prepend(e_config->font_defaults, efd);
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* returns a pointer to the data, return null if nothing if found.
|
|
|
|
*/
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Font_Default *
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_default_get(const char *text_class)
|
|
|
|
{
|
2005-04-29 03:48:07 -07:00
|
|
|
E_Font_Default *efd = NULL, *defd = NULL;
|
2005-04-02 09:11:04 -08:00
|
|
|
Evas_List *next;
|
|
|
|
|
|
|
|
/* search for the text class */
|
2005-04-21 23:31:48 -07:00
|
|
|
for (next = e_config->font_defaults; next; next = next->next)
|
2005-04-02 09:11:04 -08:00
|
|
|
{
|
|
|
|
efd = evas_list_data(next);
|
|
|
|
if (!strcmp(efd->text_class, text_class))
|
|
|
|
{
|
|
|
|
/* move to the front of the list */
|
2005-04-21 21:25:51 -07:00
|
|
|
e_config->font_defaults = evas_list_remove_list(
|
|
|
|
e_config->font_defaults, next);
|
|
|
|
e_config->font_defaults = evas_list_prepend(
|
|
|
|
e_config->font_defaults, efd);
|
2005-04-02 09:11:04 -08:00
|
|
|
return efd;
|
|
|
|
}
|
2005-04-27 23:27:25 -07:00
|
|
|
if (!strcmp(efd->text_class, "default"))
|
|
|
|
defd = efd;
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
2005-04-27 23:27:25 -07:00
|
|
|
if (!defd)
|
|
|
|
defd = efd;
|
|
|
|
return defd;
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_default_remove(const char *text_class)
|
|
|
|
{
|
|
|
|
E_Font_Default *efd;
|
|
|
|
Evas_List *next;
|
|
|
|
|
|
|
|
/* search for the text class */
|
2005-04-21 23:31:48 -07:00
|
|
|
for (next = e_config->font_defaults; next; next = next->next)
|
2005-04-02 09:11:04 -08:00
|
|
|
{
|
|
|
|
efd = evas_list_data(next);
|
|
|
|
if (!strcmp(efd->text_class, text_class))
|
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
e_config->font_defaults = evas_list_remove_list(
|
|
|
|
e_config->font_defaults, next);
|
2005-12-03 07:39:25 -08:00
|
|
|
if (efd->text_class) evas_stringshare_del(efd->text_class);
|
|
|
|
if (efd->font) evas_stringshare_del(efd->font);
|
2005-04-02 09:11:04 -08:00
|
|
|
E_FREE(efd);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI Evas_List *
|
2005-04-02 09:11:04 -08:00
|
|
|
e_font_default_list(void)
|
|
|
|
{
|
2005-04-21 21:25:51 -07:00
|
|
|
return e_config->font_defaults;
|
2005-04-02 09:11:04 -08:00
|
|
|
}
|
|
|
|
|
2006-04-01 01:24:56 -08:00
|
|
|
/* return the default font name with fallbacks, font size is returned
|
|
|
|
* in size_ret. This function is needed when all hell breaks loose and
|
|
|
|
* we need a font name and size.
|
|
|
|
*/
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI const char *
|
2005-04-27 23:27:25 -07:00
|
|
|
e_font_default_string_get(const char *text_class, int *size_ret)
|
|
|
|
{
|
|
|
|
E_Font_Default *efd;
|
|
|
|
Evas_List *next;
|
|
|
|
E_Font_Fallback *eff;
|
|
|
|
int blen, len;
|
|
|
|
|
|
|
|
_fn_buf[0] = 0;
|
|
|
|
efd = e_font_default_get(text_class);
|
|
|
|
if (!efd)
|
|
|
|
{
|
|
|
|
if (size_ret) *size_ret = 0;
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
blen = sizeof(_fn_buf) - 1;
|
|
|
|
|
|
|
|
len = strlen(efd->font);
|
|
|
|
if (len < blen)
|
|
|
|
{
|
|
|
|
strcpy(_fn_buf, efd->font);
|
|
|
|
blen -= len;
|
|
|
|
}
|
|
|
|
|
|
|
|
next = e_config->font_fallbacks;
|
|
|
|
while (next)
|
|
|
|
{
|
|
|
|
eff = evas_list_data(next);
|
|
|
|
len = 1;
|
|
|
|
if (len < blen)
|
|
|
|
{
|
|
|
|
strcat(_fn_buf, ",");
|
|
|
|
blen -= len;
|
|
|
|
}
|
|
|
|
len = strlen(eff->name);
|
|
|
|
if (len < blen)
|
|
|
|
{
|
|
|
|
strcat(_fn_buf, eff->name);
|
|
|
|
blen -= len;
|
|
|
|
}
|
|
|
|
next = evas_list_next(next);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (size_ret) *size_ret = efd->size;
|
|
|
|
return _fn_buf;
|
|
|
|
}
|
|
|
|
|