mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-24 23:39:51 +03:00
make font face locations configurable options
svn path=/trunk/netsurf/; revision=6656
This commit is contained in:
parent
02de9ff8db
commit
3ed92be17e
@ -24,12 +24,15 @@
|
||||
|
||||
#include "css/css.h"
|
||||
#include "render/font.h"
|
||||
#include "desktop/options.h"
|
||||
#include "utils/utf8.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "framebuffer/fb_gui.h"
|
||||
#include "framebuffer/fb_font.h"
|
||||
#include "framebuffer/fb_options.h"
|
||||
#include "framebuffer/fb_findfile.h"
|
||||
|
||||
#define VERA_PATH "/usr/share/fonts/truetype/ttf-bitstream-vera/"
|
||||
|
||||
static FT_Library library;
|
||||
static FTC_Manager ft_cmanager;
|
||||
@ -45,13 +48,20 @@ typedef struct fb_faceid_s {
|
||||
int cidx; /* character map index for unicode */
|
||||
} fb_faceid_t;
|
||||
|
||||
/* defines for accesing the faces */
|
||||
#define FB_FACE_DEFAULT 0
|
||||
|
||||
static fb_faceid_t *fb_face_sans_serif; /* global default face */
|
||||
static fb_faceid_t *fb_face_sans_serif_bold; /* bold sans face */
|
||||
static fb_faceid_t *fb_face_sans_serif_italic; /* bold sans face */
|
||||
static fb_faceid_t *fb_face_sans_serif_italic_bold; /* bold sans face */
|
||||
static fb_faceid_t *fb_face_monospace; /* monospace face */
|
||||
static fb_faceid_t *fb_face_serif; /* serif face */
|
||||
#define FB_FACE_SANS_SERIF 0
|
||||
#define FB_FACE_SANS_SERIF_BOLD 1
|
||||
#define FB_FACE_SANS_SERIF_ITALIC 2
|
||||
#define FB_FACE_SANS_SERIF_ITALIC_BOLD 3
|
||||
#define FB_FACE_MONOSPACE 4
|
||||
#define FB_FACE_SERIF 5
|
||||
#define FB_FACE_SERIF_BOLD 6
|
||||
|
||||
#define FB_FACE_COUNT 7
|
||||
|
||||
static fb_faceid_t *fb_faces[FB_FACE_COUNT];
|
||||
|
||||
|
||||
utf8_convert_ret utf8_to_local_encoding(const char *string,
|
||||
@ -92,20 +102,27 @@ static FT_Error ft_face_requester(FTC_FaceID face_id, FT_Library library, FT_Po
|
||||
|
||||
/* create new framebuffer face and cause it to be loaded to check its ok */
|
||||
static fb_faceid_t *
|
||||
fb_new_face(const char *fontfile)
|
||||
fb_new_face(const char *option, const char *resname, const char *fontfile)
|
||||
{
|
||||
fb_faceid_t *newf;
|
||||
FT_Error error;
|
||||
FT_Face aface;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
newf = calloc(1, sizeof(fb_faceid_t));
|
||||
newf->fontfile = strdup(fontfile);
|
||||
|
||||
if (option != NULL) {
|
||||
newf->fontfile = strdup(option);
|
||||
} else {
|
||||
fb_find_resource(buf, resname, fontfile);
|
||||
newf->fontfile = strdup(buf);
|
||||
}
|
||||
|
||||
error = FTC_Manager_LookupFace(ft_cmanager, (FTC_FaceID)newf, &aface);
|
||||
if (error) {
|
||||
LOG(("Could not find font face %s (code %d)\n", fontfile, error));
|
||||
free(newf);
|
||||
newf = fb_face_sans_serif; /* use default */
|
||||
newf = fb_faces[FB_FACE_DEFAULT]; /* use default */
|
||||
}
|
||||
|
||||
return newf;
|
||||
@ -145,28 +162,53 @@ bool fb_font_init(void)
|
||||
|
||||
error = FTC_ImageCache_New(ft_cmanager, &ft_image_cache);
|
||||
|
||||
fb_face_sans_serif = NULL;
|
||||
fb_face_sans_serif = fb_new_face("/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf");
|
||||
if (fb_face_sans_serif == NULL) {
|
||||
fb_faces[FB_FACE_SANS_SERIF] = NULL;
|
||||
fb_faces[FB_FACE_SANS_SERIF] =
|
||||
fb_new_face(option_fb_face_sans_serif,
|
||||
"sans_serif.ttf",
|
||||
VERA_PATH"Vera.ttf");
|
||||
if (fb_faces[FB_FACE_SANS_SERIF] == NULL) {
|
||||
LOG(("Could not find default font (code %d)\n", error));
|
||||
FTC_Manager_Done(ft_cmanager );
|
||||
FT_Done_FreeType(library);
|
||||
return false;
|
||||
}
|
||||
|
||||
fb_face_monospace = fb_new_face("/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf");
|
||||
fb_faces[FB_FACE_SANS_SERIF_BOLD] =
|
||||
fb_new_face(option_fb_face_sans_serif_bold,
|
||||
"sans_serif_bold.ttf",
|
||||
VERA_PATH"VeraBd.ttf");
|
||||
|
||||
fb_face_serif = fb_new_face("/usr/share/fonts/truetype/ttf-bitstream-vera/VeraSe.ttf");
|
||||
|
||||
fb_face_sans_serif_bold = fb_new_face("/usr/share/fonts/truetype/ttf-bitstream-vera/VeraBd.ttf");
|
||||
fb_faces[FB_FACE_SANS_SERIF_ITALIC] =
|
||||
fb_new_face(option_fb_face_sans_serif_italic,
|
||||
"sans_serif_italic.ttf",
|
||||
VERA_PATH"VeraIt.ttf");
|
||||
|
||||
fb_face_sans_serif_italic = fb_new_face("/usr/share/fonts/truetype/ttf-bitstream-vera/VeraIt.ttf");
|
||||
fb_faces[FB_FACE_SANS_SERIF_ITALIC_BOLD] =
|
||||
fb_new_face(option_fb_face_sans_serif_italic_bold,
|
||||
"sans_serif_italic_bold.ttf",
|
||||
VERA_PATH"VeraBI.ttf");
|
||||
|
||||
fb_face_sans_serif_italic_bold = fb_new_face("/usr/share/fonts/truetype/ttf-bitstream-vera/VeraBI.ttf");
|
||||
fb_faces[FB_FACE_MONOSPACE] =
|
||||
fb_new_face(option_fb_face_monospace,
|
||||
"monospace.ttf",
|
||||
VERA_PATH"VeraMono.ttf");
|
||||
|
||||
fb_faces[FB_FACE_SERIF] =
|
||||
fb_new_face(option_fb_face_serif,
|
||||
"serif.ttf",
|
||||
VERA_PATH"VeraSe.ttf");
|
||||
|
||||
fb_faces[FB_FACE_SERIF_BOLD] =
|
||||
fb_new_face(option_fb_face_serif_bold,
|
||||
"serif_bold.ttf",
|
||||
VERA_PATH"VeraSeBd.ttf");
|
||||
|
||||
/* set the default render mode */
|
||||
//ft_load_type = FT_LOAD_MONOCHROME; /* faster but less pretty */
|
||||
ft_load_type = 0;
|
||||
if (option_fb_font_monochrome == true)
|
||||
ft_load_type = FT_LOAD_MONOCHROME; /* faster but less pretty */
|
||||
else
|
||||
ft_load_type = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -180,6 +222,8 @@ bool fb_font_finalise(void)
|
||||
|
||||
static void fb_fill_scalar(const struct css_style *style, FTC_Scaler srec)
|
||||
{
|
||||
int selected_face = FB_FACE_DEFAULT;
|
||||
|
||||
switch (style->font_family) {
|
||||
/*
|
||||
case CSS_FONT_FAMILY_CURSIVE:
|
||||
@ -188,11 +232,24 @@ static void fb_fill_scalar(const struct css_style *style, FTC_Scaler srec)
|
||||
break;
|
||||
*/
|
||||
case CSS_FONT_FAMILY_SERIF:
|
||||
srec->face_id = (FTC_FaceID)fb_face_serif;
|
||||
switch (style->font_weight) {
|
||||
case CSS_FONT_WEIGHT_700:
|
||||
case CSS_FONT_WEIGHT_800:
|
||||
case CSS_FONT_WEIGHT_900:
|
||||
case CSS_FONT_WEIGHT_BOLD:
|
||||
selected_face = FB_FACE_SERIF_BOLD;
|
||||
break;
|
||||
|
||||
case CSS_FONT_WEIGHT_NORMAL:
|
||||
default:
|
||||
selected_face = FB_FACE_SERIF;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case CSS_FONT_FAMILY_MONOSPACE:
|
||||
srec->face_id = (FTC_FaceID)fb_face_monospace;
|
||||
selected_face = FB_FACE_MONOSPACE;
|
||||
break;
|
||||
|
||||
case CSS_FONT_FAMILY_SANS_SERIF:
|
||||
@ -204,12 +261,12 @@ static void fb_fill_scalar(const struct css_style *style, FTC_Scaler srec)
|
||||
case CSS_FONT_WEIGHT_800:
|
||||
case CSS_FONT_WEIGHT_900:
|
||||
case CSS_FONT_WEIGHT_BOLD:
|
||||
srec->face_id = (FTC_FaceID)fb_face_sans_serif_italic_bold;
|
||||
selected_face = FB_FACE_SANS_SERIF_ITALIC_BOLD;
|
||||
break;
|
||||
|
||||
case CSS_FONT_WEIGHT_NORMAL:
|
||||
default:
|
||||
srec->face_id = (FTC_FaceID)fb_face_sans_serif_italic;
|
||||
selected_face = FB_FACE_SANS_SERIF_ITALIC;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -220,18 +277,20 @@ static void fb_fill_scalar(const struct css_style *style, FTC_Scaler srec)
|
||||
case CSS_FONT_WEIGHT_800:
|
||||
case CSS_FONT_WEIGHT_900:
|
||||
case CSS_FONT_WEIGHT_BOLD:
|
||||
srec->face_id = (FTC_FaceID)fb_face_sans_serif_bold;
|
||||
selected_face = FB_FACE_SANS_SERIF_BOLD;
|
||||
break;
|
||||
|
||||
case CSS_FONT_WEIGHT_NORMAL:
|
||||
default:
|
||||
srec->face_id = (FTC_FaceID)fb_face_sans_serif;
|
||||
selected_face = FB_FACE_SANS_SERIF;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
srec->face_id = (FTC_FaceID)fb_faces[selected_face];
|
||||
|
||||
if (style->font_size.value.length.unit == CSS_UNIT_PX) {
|
||||
srec->width = srec->height = style->font_size.value.length.value;
|
||||
srec->pixel = 1;
|
||||
|
@ -23,22 +23,46 @@
|
||||
|
||||
extern int option_fb_depth;
|
||||
extern int option_fb_refresh;
|
||||
extern bool option_fb_font_monochrome; /* render font monochrome */
|
||||
extern char *option_fb_device;
|
||||
extern char *option_fb_input_devpath;
|
||||
extern char *option_fb_input_glob;
|
||||
extern char *option_fb_face_sans_serif; /* default sans face */
|
||||
extern char *option_fb_face_sans_serif_bold; /* bold sans face */
|
||||
extern char *option_fb_face_sans_serif_italic; /* bold sans face */
|
||||
extern char *option_fb_face_sans_serif_italic_bold; /* bold sans face */
|
||||
extern char *option_fb_face_monospace; /* monospace face */
|
||||
extern char *option_fb_face_serif; /* serif face */
|
||||
extern char *option_fb_face_serif_bold; /* bold serif face */
|
||||
|
||||
#define EXTRA_OPTION_DEFINE \
|
||||
int option_fb_depth = 32; \
|
||||
int option_fb_refresh = 70; \
|
||||
bool option_fb_font_monochrome = false; \
|
||||
char *option_fb_device = 0; \
|
||||
char *option_fb_input_devpath = 0; \
|
||||
char *option_fb_input_glob = 0;
|
||||
char *option_fb_input_glob = 0; \
|
||||
char *option_fb_face_sans_serif; \
|
||||
char *option_fb_face_sans_serif_bold; \
|
||||
char *option_fb_face_sans_serif_italic; \
|
||||
char *option_fb_face_sans_serif_italic_bold; \
|
||||
char *option_fb_face_monospace; \
|
||||
char *option_fb_face_serif; \
|
||||
char *option_fb_face_serif_bold;
|
||||
|
||||
#define EXTRA_OPTION_TABLE \
|
||||
{ "fb_depth", OPTION_INTEGER, &option_fb_depth }, \
|
||||
{ "fb_refresh", OPTION_INTEGER, &option_fb_refresh }, \
|
||||
{ "fb_device", OPTION_STRING, &option_fb_device }, \
|
||||
{ "fb_input_devpath", OPTION_STRING, &option_fb_input_devpath }, \
|
||||
{ "fb_input_glob", OPTION_STRING, &option_fb_input_glob },
|
||||
{ "fb_input_glob", OPTION_STRING, &option_fb_input_glob }, \
|
||||
{ "fb_font_monochrome", OPTION_BOOL, &option_fb_font_monochrome }, \
|
||||
{ "fb_face_sans_serif", OPTION_STRING, &option_fb_face_sans_serif }, \
|
||||
{ "fb_face_sans_serif_bold", OPTION_STRING, &option_fb_face_sans_serif_bold }, \
|
||||
{ "fb_face_sans_serif_italic", OPTION_STRING, &option_fb_face_sans_serif_italic }, \
|
||||
{ "fb_face_sans_serif_italic_bold", OPTION_STRING, &option_fb_face_sans_serif_italic_bold }, \
|
||||
{ "fb_face_monospace", OPTION_STRING, &option_fb_face_monospace }, \
|
||||
{ "fb_face_serif", OPTION_STRING, &option_fb_face_serif }, \
|
||||
{ "fb_serif_bold", OPTION_STRING, &option_fb_face_serif_bold }
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user