arcdps_imgui\fonts/
font.rs
1use std::os::raw::c_int;
2
3use crate::fonts::atlas::{FontAtlas, FontId};
4use crate::fonts::glyph::FontGlyph;
5use crate::internal::{ImVector, RawCast};
6use crate::sys;
7
8#[repr(C)]
10pub struct Font {
11 index_advance_x: ImVector<f32>,
12 pub fallback_advance_x: f32,
13 pub font_size: f32,
14 index_lookup: ImVector<sys::ImWchar>,
15 glyphs: ImVector<FontGlyph>,
16 fallback_glyph: *const FontGlyph,
17 container_atlas: *mut FontAtlas,
18 config_data: *const sys::ImFontConfig,
19 pub config_data_count: i16,
20 pub fallback_char: sys::ImWchar,
21 pub ellipsis_char: sys::ImWchar,
22 pub dirty_lookup_tables: bool,
23 pub scale: f32,
24 pub ascent: f32,
25 pub descent: f32,
26 pub metrics_total_surface: c_int,
27 pub used_4k_pages_map: [u8; 2],
28}
29
30unsafe impl RawCast<sys::ImFont> for Font {}
31
32impl Font {
33 pub fn id(&self) -> FontId {
35 FontId(self as *const _)
36 }
37}
38
39#[test]
40fn test_font_memory_layout() {
41 use std::mem;
42 assert_eq!(mem::size_of::<Font>(), mem::size_of::<sys::ImFont>());
43 assert_eq!(mem::align_of::<Font>(), mem::align_of::<sys::ImFont>());
44 use sys::ImFont;
45 macro_rules! assert_field_offset {
46 ($l:ident, $r:ident) => {
47 assert_eq!(
48 memoffset::offset_of!(Font, $l),
49 memoffset::offset_of!(ImFont, $r)
50 );
51 };
52 }
53 assert_field_offset!(index_advance_x, IndexAdvanceX);
54 assert_field_offset!(fallback_advance_x, FallbackAdvanceX);
55 assert_field_offset!(font_size, FontSize);
56 assert_field_offset!(index_lookup, IndexLookup);
57 assert_field_offset!(glyphs, Glyphs);
58 assert_field_offset!(fallback_glyph, FallbackGlyph);
59 assert_field_offset!(container_atlas, ContainerAtlas);
60 assert_field_offset!(config_data, ConfigData);
61 assert_field_offset!(config_data_count, ConfigDataCount);
62 assert_field_offset!(fallback_char, FallbackChar);
63 assert_field_offset!(ellipsis_char, EllipsisChar);
64 assert_field_offset!(dirty_lookup_tables, DirtyLookupTables);
65 assert_field_offset!(scale, Scale);
66 assert_field_offset!(ascent, Ascent);
67 assert_field_offset!(descent, Descent);
68 assert_field_offset!(metrics_total_surface, MetricsTotalSurface);
69 assert_field_offset!(used_4k_pages_map, Used4kPagesMap);
70}