1use face::Face;
2use ffi;
3
4#[derive(Copy, Clone)]
5pub struct TrueTypeOS2Table {
6 raw: ffi::TT_OS2_Internal
7}
8
9impl TrueTypeOS2Table {
10 pub fn from_face(face: &mut Face) -> Option<Self> {
11 unsafe {
12 let os2 = ffi::FT_Get_Sfnt_Table(face.raw_mut() as *mut ffi::FT_FaceRec, ffi::ft_sfnt_os2) as ffi::TT_OS2_Internal;
13 if !os2.is_null() && (*os2).version != 0xffff {
14 Some(TrueTypeOS2Table { raw: os2 })
15 } else {
16 None
17 }
18 }
19 }
20
21 #[inline(always)]
22 pub fn version(self) -> ffi::FT_UShort {
23 unsafe { (*self.raw).version }
24 }
25
26 #[inline(always)]
27 pub fn avg_char_width(self) -> ffi::FT_Short {
28 unsafe { (*self.raw).xAvgCharWidth }
29 }
30
31 #[inline(always)]
32 pub fn us_weight_class(self) -> ffi::FT_UShort {
33 unsafe { (*self.raw).usWeightClass }
34 }
35
36 #[inline(always)]
37 pub fn us_width_class(self) -> ffi::FT_UShort {
38 unsafe { (*self.raw).usWidthClass }
39 }
40
41 #[inline(always)]
42 pub fn fs_type(self) -> ffi::FT_Short {
43 unsafe { (*self.raw).fsType }
44 }
45
46 #[inline(always)]
47 pub fn y_subscript_x_size(self) -> ffi::FT_Short {
48 unsafe { (*self.raw).ySubscriptXSize }
49 }
50
51 #[inline(always)]
52 pub fn y_subscript_y_size(self) -> ffi::FT_Short {
53 unsafe { (*self.raw).ySubscriptYSize }
54 }
55
56 #[inline(always)]
57 pub fn y_subscript_x_offset(self) -> ffi::FT_Short {
58 unsafe { (*self.raw).ySubscriptXOffset }
59 }
60
61 #[inline(always)]
62 pub fn y_subscript_y_offset(self) -> ffi::FT_Short {
63 unsafe { (*self.raw).ySubscriptYOffset }
64 }
65
66 #[inline(always)]
67 pub fn y_superscript_x_size(self) -> ffi::FT_Short {
68 unsafe { (*self.raw).ySuperscriptXSize }
69 }
70
71 #[inline(always)]
72 pub fn y_superscript_y_size(self) -> ffi::FT_Short {
73 unsafe { (*self.raw).ySuperscriptYSize }
74 }
75
76 #[inline(always)]
77 pub fn y_superscript_x_offset(self) -> ffi::FT_Short {
78 unsafe { (*self.raw).ySuperscriptXOffset }
79 }
80
81 #[inline(always)]
82 pub fn y_superscript_y_offset(self) -> ffi::FT_Short {
83 unsafe { (*self.raw).ySuperscriptYOffset }
84 }
85
86 #[inline(always)]
87 pub fn y_strikeout_size(self) -> ffi::FT_Short {
88 unsafe { (*self.raw).yStrikeoutSize }
89 }
90
91 #[inline(always)]
92 pub fn y_strikeout_position(self) -> ffi::FT_Short {
93 unsafe { (*self.raw).yStrikeoutPosition }
94 }
95
96 #[inline(always)]
97 pub fn s_family_class(self) -> ffi::FT_Short {
98 unsafe { (*self.raw).sFamilyClass }
99 }
100
101 #[inline(always)]
102 pub fn x_height(self) -> ffi::FT_Short {
103 unsafe { (*self.raw).sxHeight }
104 }
105}