--- /dev/null
+package imgui.font
+
+use package core
+#private_file gl :: package gl
+
+
+TrueTypeFont :: struct {
+ reader: io.Reader;
+
+ // NOTE: I don't know how useful these are, but they're at
+ // the beginning of the ttf file.
+ scalar_type : u32;
+ search_range : u16;
+ entry_selector : u16;
+ range_shift : u16;
+
+ table_map : map.Map(i32, TTTableInfo);
+ char_maps : [..] TTCmap;
+
+ version : u32;
+ font_revision : u32;
+ checksum_adjustment : u32;
+ magic_number : u32;
+ flags : u16;
+ units_per_em : u16;
+ // created : u64;
+ // modified : u64;
+ x_min : i16;
+ x_max : i16;
+ y_min : i16;
+ y_max : i16;
+ mac_style : u16;
+ lowest_rec_ppem : u16;
+ font_direction_hint : i16;
+ index_to_loc_format : TTIndexToLocFormat;
+ glyph_data_format : i16;
+
+ hhea : struct {
+ version : u32;
+ ascent : i16;
+ descent : i16;
+ line_gap : i16;
+ advance_width_max : u16;
+ min_left_side_bearing : i16;
+ min_right_side_bearing : i16;
+ x_max_extent : i16;
+ caret_slope_rise : i16;
+ caret_slope_run : i16;
+ caret_offset : i16;
+ metric_data_format : i16;
+ num_of_long_hor_metrics : u16;
+ };
+}
+
+TTTableInfo :: struct {
+ checksum : u32 = 0;
+ offset : u32 = 0;
+ length : u32 = 0;
+}
+
+TTIndexToLocFormat :: enum (i16) {
+ Short :: 0x00;
+ Long :: 0x01;
+}
+
+TTGlyph :: struct {
+ contour_count : i16;
+ x_min : i16;
+ x_max : i16;
+ y_min : i16;
+ y_max : i16;
+
+ points : [..] TTGlyphPoint;
+ contour_ends : [..] u16;
+}
+
+TTGlyphPoint :: struct {
+ on_curve : bool;
+ x : i16 = ~~0;
+ y : i16 = ~~0;
+}
+
+ttf_create :: (ttf_data: [] u8) -> TrueTypeFont {
+ ttf : TrueTypeFont;
+ ttf.reader = binary_reader_create(ttf_data);
+ map.init(^ttf.table_map, .{});
+ array.init(^ttf.char_maps);
+ ttf_read_offset_table(^ttf);
+ ttf_read_head_table(^ttf);
+ ttf_read_cmap_table(^ttf);
+ ttf_read_hhea_table(^ttf);
+
+ return ttf;
+}
+
#load "lib/events"
use package core
-use package imgui as imgui
-use package imgui.events as events
-use package gl as gl
+#private_file imgui :: package imgui
+#private_file events :: package imgui.events
+#private_file gl :: package gl
init :: () {
events.init();