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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
/*!
* @file buchstabensuppe.h
*/
#ifndef BUCHSTABENSUPPE_H
#define BUCHSTABENSUPPE_H
#include <buchstabensuppe/bitmap.h>
#include <stdbool.h>
#include <stddef.h>
// buffers
/*!
* @name UTF-32 Buffer API
* @{
*/
typedef struct bs_utf32_buffer {
uint32_t *bs_utf32_buffer;
size_t bs_utf32_buffer_len;
size_t bs_utf32_buffer_cap;
} bs_utf32_buffer_t;
bs_utf32_buffer_t bs_utf32_buffer_new(size_t);
void bs_utf32_buffer_free(bs_utf32_buffer_t *);
bool bs_utf32_buffer_append(uint32_t *, size_t, bs_utf32_buffer_t *);
bool bs_utf32_buffer_append_single(uint32_t, bs_utf32_buffer_t *);
bs_utf32_buffer_t bs_decode_utf8(const char *, size_t);
//! @}
/*!
* @name Font Rendering
* @{
*/
typedef struct hb_font_t hb_font_t;
typedef struct SFT_Font SFT_Font;
typedef struct bs_font {
hb_font_t *bs_font_hb;
SFT_Font *bs_font_schrift;
unsigned char *bs_font_file;
size_t bs_font_file_size;
unsigned int bs_font_pixel_height;
} bs_font_t;
enum bs_rendering_flag {
BS_RENDER_BINARY = 0x01,
BS_RENDER_NO_FALLBACK = 0x04,
};
typedef struct bs_context {
bs_font_t *bs_fonts;
size_t bs_fonts_len;
int bs_rendering_flags;
} bs_context_t;
void bs_context_init(bs_context_t *);
void bs_context_free(bs_context_t *);
bool bs_add_font(bs_context_t *, const char *, int, unsigned int);
typedef struct bs_cursor {
int bs_cursor_x;
int bs_cursor_y;
} bs_cursor_t;
bs_bitmap_t bs_render_utf8_string(bs_context_t *, const char *, size_t);
bool bs_render_grapheme_append(bs_context_t *, bs_bitmap_t *, bs_cursor_t *,
bs_utf32_buffer_t, size_t, size_t);
bool bs_render_utf32_string_append(bs_context_t *, bs_bitmap_t *,
bs_cursor_t *, bs_utf32_buffer_t);
//! @}
#endif
|