summaryrefslogtreecommitdiff
path: root/debug/fontd.c
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-06-21 13:18:00 +0000
committerJames Bursa <james@netsurf-browser.org>2003-06-21 13:18:00 +0000
commit94073c9bf642727d41a50c278d03a2b2f4af60ee (patch)
tree18395e80cb5f3984844f88819354d9ed5064794c /debug/fontd.c
parent0c0ff3c59631d0968c888279195ea40d4a7fd824 (diff)
downloadnetsurf-94073c9bf642727d41a50c278d03a2b2f4af60ee.tar.gz
netsurf-94073c9bf642727d41a50c278d03a2b2f4af60ee.tar.bz2
[project @ 2003-06-21 13:18:00 by bursa]
Add debug command line build. svn path=/import/netsurf/; revision=181
Diffstat (limited to 'debug/fontd.c')
-rw-r--r--debug/fontd.c147
1 files changed, 147 insertions, 0 deletions
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 <assert.h>
+#include <stdio.h>
+#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);
+}
+