Mercurial > repos > blastem
view nuklear_ui/font.c @ 1637:95880d947257
Fix for VRAM byte write order broke VDP FIFO testing ROM results. This change cleans up VRAM writes and fixes the regression while preserving the correct VRAM byte write order
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 11 Nov 2018 22:39:29 -0800 |
parents | 24508cb54f87 |
children | 253c62b7144e |
line wrap: on
line source
#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"); free(path); 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; }