You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
2.4 KiB
154 lines
2.4 KiB
struct v2 { |
|
int x; |
|
int y; |
|
}; |
|
|
|
struct v2u32 { |
|
u32 x; |
|
u32 y; |
|
}; |
|
|
|
struct v2f { |
|
f32 x; |
|
f32 y; |
|
}; |
|
|
|
struct line { |
|
struct v2f a; |
|
struct v2f b; |
|
}; |
|
|
|
struct line_contour { |
|
int ncontours; |
|
int from[MAX_CONTOURS]; |
|
struct line *data; |
|
}; |
|
|
|
struct intersection { |
|
f32 x; |
|
int dir; |
|
}; |
|
|
|
enum rgb_channel { |
|
RED = 0x000000FF, |
|
GREEN = 0x0000FF00, |
|
BLUE = 0x00FF0000, |
|
}; |
|
|
|
struct font_buffer { |
|
u8 *data; |
|
u64 offset; |
|
u64 size; |
|
}; |
|
|
|
struct font_directory { |
|
u32 cmap_offset; |
|
u32 head_offset; |
|
u32 hhea_offset; |
|
u32 loca_offset; |
|
u32 glyf_offset; |
|
u32 hmtx_offset; |
|
u32 maxp_offset; |
|
u32 post_offset; |
|
|
|
u32 cvt_offset; |
|
u32 cvt_size; |
|
|
|
u32 prep_offset; |
|
u32 prep_size; |
|
|
|
u32 fpgm_offset; |
|
u32 fpgm_size; |
|
}; |
|
|
|
union glyph_flag { |
|
struct { |
|
u8 on_curve : 1; |
|
u8 x_short : 1; |
|
u8 y_short : 1; |
|
u8 repeat : 1; |
|
u8 x_short_pos : 1; |
|
u8 y_short_pos : 1; |
|
u8 reserved1 : 1; |
|
u8 reserved2 : 1; |
|
}; |
|
u8 flag; |
|
}; |
|
|
|
enum compund_glyph_flag { |
|
ARG_1_AND_2_ARE_WORDS = 0x1, |
|
ARGS_ARE_XY_VALUES = 0x2, |
|
ROUND_XY_TO_GRID = 0x4, |
|
WE_HAVE_A_SCALE = 0x8, |
|
|
|
MORE_COMPONENTS = 0x20, |
|
WE_HAVE_AN_X_AND_Y_SCALE = 0x40, |
|
WE_HAVE_A_TWO_BY_TWO = 0x80, |
|
WE_HAVE_INSTRUCTIONS = 0x100, |
|
USE_MY_METRICS = 0x200, |
|
OVERLAP_COMPOUND = 0x400 |
|
}; |
|
|
|
struct maxp_table { |
|
u16 max_component_points; |
|
u16 max_component_contours; |
|
u16 max_storage; |
|
u16 max_fdefs; |
|
}; |
|
|
|
struct head_table { |
|
int itl_format; |
|
int units_per_em; |
|
}; |
|
|
|
struct hhea_table { |
|
int ascent; |
|
int descent; |
|
int line_gap; |
|
int max_advance; |
|
}; |
|
|
|
struct glyph_point { |
|
s16 x; |
|
s16 y; |
|
bool on_curve; |
|
}; |
|
|
|
struct glyph_segment { |
|
bool is_curve; |
|
struct v2f p0; |
|
struct v2f p1; |
|
struct v2f p2; |
|
}; |
|
|
|
struct glyph { |
|
s16 xmin, ymin; |
|
s16 xmax, ymax; |
|
|
|
s32 baseline; |
|
u16 advance; |
|
s16 lsb; |
|
|
|
u16 ncontours; |
|
u16 *end_pts_of_contours; |
|
struct glyph_point *points; |
|
}; |
|
|
|
struct ttf_font { |
|
struct font_buffer file; |
|
|
|
struct maxp_table maxp; |
|
struct head_table head; |
|
struct hhea_table hhea; |
|
|
|
s16 *cvt; |
|
int cmap_format; |
|
int is_monospace; |
|
|
|
struct font_directory dir; |
|
struct ttf_function *functions; |
|
|
|
u32 *storage; |
|
|
|
char *name; |
|
};
|
|
|