Evas font: Added support for the freetype spacing tag.

This doesn't work nicely, as for some reason fontconfig doesn't work
nicely with ':spacing=mono' without a font name.
Doesn't work with fc-match either. It does work with fc-list, but that's
not what we'd like to use. It could be just an issue with my local
fontconfig configuration.

This fixes T865 although the problem is now with freetype.
This commit is contained in:
Tom Hacohen 2014-01-29 14:36:02 +00:00
parent 2cb9db171e
commit 19cde8f194
2 changed files with 32 additions and 1 deletions

View File

@ -290,6 +290,14 @@ static int _fc_width_map[] =
};
# endif
static int _fc_spacing_map[] =
{
FC_PROPORTIONAL,
FC_DUAL,
FC_MONO,
FC_CHARCELL
};
#endif
struct _Style_Map
@ -334,6 +342,14 @@ static Style_Map _style_slant_map[] =
{"italic", EVAS_FONT_SLANT_ITALIC}
};
static Style_Map _style_spacing_map[] =
{
{"proportional", EVAS_FONT_SPACING_PROPORTIONAL},
{"dualwidth", EVAS_FONT_SPACING_DUAL},
{"monospace", EVAS_FONT_SPACING_MONO},
{"charcell", EVAS_FONT_SPACING_CHARCELL}
};
#define _STYLE_MAP_LEN(x) (sizeof(x) / sizeof(*(x)))
/**
* @internal
@ -439,7 +455,7 @@ evas_font_desc_cmp(const Evas_Font_Description *a,
/* FIXME: Do actual comparison, i.e less than and bigger than. */
return !((a->name == b->name) && (a->weight == b->weight) &&
(a->slant == b->slant) && (a->width == b->width) &&
(a->lang == b->lang));
(a->spacing == b->spacing) && (a->lang == b->lang));
}
void
@ -483,6 +499,10 @@ evas_font_name_parse(Evas_Font_Description *fdesc, const char *name)
else if (!strncmp(name, ":width=", 7))
{
_SET_STYLE(width);
}
else if (!strncmp(name, ":spacing=", 9))
{
_SET_STYLE(spacing);
#undef _SET_STYLE
}
else if (!strncmp(name, ":lang=", 6))
@ -715,6 +735,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
p_nm = FcPatternBuild (NULL,
FC_WEIGHT, FcTypeInteger, _fc_weight_map[fdesc->weight],
FC_SLANT, FcTypeInteger, _fc_slant_map[fdesc->slant],
FC_SPACING, FcTypeInteger, _fc_spacing_map[fdesc->spacing],
#ifdef FC_WIDTH
FC_WIDTH, FcTypeInteger, _fc_width_map[fdesc->width],
#endif

View File

@ -92,10 +92,19 @@ enum _Evas_Font_Width
EVAS_FONT_WIDTH_ULTRAEXPANDED
};
enum _Evas_Font_Spacing
{
EVAS_FONT_SPACING_PROPORTIONAL,
EVAS_FONT_SPACING_DUAL,
EVAS_FONT_SPACING_MONO,
EVAS_FONT_SPACING_CHARCELL
};
typedef enum _Evas_Font_Style Evas_Font_Style;
typedef enum _Evas_Font_Slant Evas_Font_Slant;
typedef enum _Evas_Font_Weight Evas_Font_Weight;
typedef enum _Evas_Font_Width Evas_Font_Width;
typedef enum _Evas_Font_Spacing Evas_Font_Spacing;
/* General types - used for script type chceking */
#define OPAQUE_TYPE(type) struct __##type { int a; }; \
@ -713,6 +722,7 @@ struct _Evas_Font_Description
Evas_Font_Slant slant;
Evas_Font_Weight weight;
Evas_Font_Width width;
Evas_Font_Spacing spacing;
Eina_Bool is_new : 1;
};