blob: 43ee74e82fa87ea2fc276f2def12d1559486cd78 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include "text.h"
#include <fcntl.h>
#include <mimalloc.h>
#include <unistd.h>
#include <utils.h>
#include "utils.h"
enum font_context_error_e wayc_font_context_init(struct font_context_s* ctx) {
wayc_notnull(ctx);
FT_Error err = FT_Init_FreeType(&ctx->library);
if (err) return FONT_CONTEXT_ERROR_LIBRARY;
return FONT_CONTEXT_ERROR_NONE;
}
void wayc_font_context_deinit(struct font_context_s* ctx) {
wayc_notnull(ctx);
FT_Done_FreeType(ctx->library);
}
enum font_error_e wayc_font_init(struct font_s* font,
struct font_context_s* ctx, const char* path) {
wayc_notnull(font);
wayc_notnull(ctx);
wayc_notnull(path);
i32 fd = open(path, O_RDONLY);
if (fd < 0) return FONT_ERROR_FILE_LOAD;
wayc_defer(close(fd));
usize size = lseek(fd, 0, SEEK_END);
if (size < 0) return FONT_ERROR_FILE_LOAD;
lseek(fd, 0, SEEK_SET);
font->data = (u8*)mi_malloc(size);
usize _read = read(fd, font->data, size);
if (_read != size) return FONT_ERROR_FILE_LOAD;
FT_Error err = FT_New_Memory_Face(ctx->library, (const FT_Byte*)font->data,
size, 0, &font->face);
if (err) return FONT_ERROR_FONT_LOAD;
return FONT_ERROR_NONE;
}
void wayc_font_deinit(struct font_s* font) {
wayc_notnull(font);
FT_Done_Face(font->face);
mi_free(font->data);
}
|