From 94073c9bf642727d41a50c278d03a2b2f4af60ee Mon Sep 17 00:00:00 2001 From: James Bursa Date: Sat, 21 Jun 2003 13:18:00 +0000 Subject: [project @ 2003-06-21 13:18:00 by bursa] Add debug command line build. svn path=/import/netsurf/; revision=181 --- debug/fontd.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 debug/fontd.c (limited to 'debug/fontd.c') diff --git a/debug/fontd.c b/debug/fontd.c new file mode 100644 index 000000000..44440a930 --- /dev/null +++ b/debug/fontd.c @@ -0,0 +1,147 @@ +/** + * $Id: fontd.c,v 1.1 2003/06/21 13:18:00 bursa Exp $ + */ + +#include +#include +#include "netsurf/css/css.h" +#include "netsurf/debug/fontd.h" +#include "netsurf/utils/utils.h" +#include "netsurf/utils/log.h" + +/** + * font id = font family * 4 + bold * 2 + slanted + * font family: 0 = sans-serif, 1 = serif, ... + */ + +const char * const font_table[FONT_FAMILIES * 4] = { + /* sans-serif */ + "Homerton.Medium\\ELatin1", + "Homerton.Medium.Oblique\\ELatin1", + "Homerton.Bold\\ELatin1", + "Homerton.Bold.Oblique\\ELatin1", +}; + +static void font_close(struct font_data *data); + +/** + * functions + */ + +unsigned long font_width(struct font_data *font, const char * text, unsigned int length) +{ + int width; + + assert(font != 0 && text != 0); + + if (length == 0) + return 0; + + return length * 10; +} + +void font_position_in_string(const char* text, struct font_data* font, + unsigned int length, unsigned long x, int* char_offset, int* pixel_offset) +{ + assert(font != 0 && text != 0); + + *char_offset = x / 10; + *pixel_offset = x; + + return; +} + + +struct font_set *font_new_set() +{ + struct font_set *set = xcalloc(1, sizeof(*set)); + unsigned int i; + + for (i = 0; i < FONT_FAMILIES * 4; i++) + set->font[i] = 0; + + return set; +} + + +struct font_data *font_open(struct font_set *set, struct css_style *style) +{ + struct font_data *data; + unsigned int size = 16 * 11; + unsigned int f = 0; + + assert(set != 0); + + if (style->font_size.size == CSS_FONT_SIZE_LENGTH) + size = style->font_size.value.length.value * 16; + + switch (style->font_weight) { + case CSS_FONT_WEIGHT_BOLD: + case CSS_FONT_WEIGHT_600: + case CSS_FONT_WEIGHT_700: + case CSS_FONT_WEIGHT_800: + case CSS_FONT_WEIGHT_900: + f += FONT_BOLD; + break; + default: + break; + } + + switch (style->font_style) { + case CSS_FONT_STYLE_ITALIC: + case CSS_FONT_STYLE_OBLIQUE: + f += FONT_SLANTED; + break; + default: + break; + } + + for (data = set->font[f]; data != 0; data = data->next) + if (data->size == size) + return data; + + data = xcalloc(1, sizeof(*data)); + + data->size = size; + data->space_width = font_width(data, " ", 1); + + data->next = set->font[f]; + set->font[f] = data; + + return data; +} + + +void font_free_set(struct font_set *set) +{ + unsigned int i; + struct font_data *data, *next; + + assert(set != 0); + + for (i = 0; i < FONT_FAMILIES * 4; i++) { + for (data = set->font[i]; data != 0; data = next) { + next = data->next; + font_close(data); + } + } + + free(set); +} + + +void font_close(struct font_data *data) +{ + + free(data); +} + + +char * font_split(struct font_data *data, const char * text, unsigned int length, + unsigned int width, unsigned int *used_width) +{ + *used_width = width; + + return text + (width / 10); +} + -- cgit v1.2.3