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/// Runtime data for a single font within a font atlas
9#[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    /// Returns the identifier of this font
34    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}