diff nuklear_ui/font.c @ 1541:f8ef74e7c800

Merged nuklear_ui into default
author Michael Pavone <pavone@retrodev.com>
date Sun, 25 Mar 2018 12:01:49 -0700
parents 4f6e8acd7b6a
children 24508cb54f87
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nuklear_ui/font.c	Sun Mar 25 12:01:49 2018 -0700
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "../util.h"
+#include "sfnt.h"
+
+char *default_font_path(void)
+{
+	FILE *fc_pipe = popen("fc-match -f '%{file}'", "r");
+	if (!fc_pipe) {
+		return NULL;
+	}
+	size_t buf_size = 128;
+	char *buffer = NULL;
+	size_t total = 0, read = 0;
+	do {
+		total += read;
+		buf_size *= 2;
+		buffer = realloc(buffer, buf_size);
+		if (!buffer) {
+			return NULL;
+		}
+		read = fread(buffer, 1, buf_size - total, fc_pipe);
+	} while (read == (buf_size - total));
+	total += read;
+	buffer[total] = 0;
+	
+	return buffer;
+}
+
+uint8_t *default_font(uint32_t *size_out)
+{
+	char *path = default_font_path();
+	if (!path) {
+		goto error;
+	}
+	FILE *f = fopen(path, "rb");
+	if (!f) {
+		goto error;
+	}
+	long size = file_size(f);
+	uint8_t *buffer = malloc(size);
+	if (size != fread(buffer, 1, size, f)) {
+		fclose(f);
+		goto error;
+	}
+	fclose(f);
+	sfnt_container *sfnt = load_sfnt(buffer, size);
+	if (!sfnt) {
+		free(buffer);
+		goto error;
+	}
+	return sfnt_flatten(sfnt->tables, size_out);
+error:
+	//TODO: try to find a suitable font in /usr/share/fonts as a fallback
+	return NULL;
+}
\ No newline at end of file