swf_types/
text.rs

1#[cfg(feature = "serde")]
2use ::serde::{Deserialize, Serialize};
3
4use super::basic_types::{Rect, StraightSRgba8};
5use super::float_is::Is;
6
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "PascalCase"))]
8#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
9pub enum CsmTableHint {
10  Thin,
11  Medium,
12  Thick,
13}
14
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16#[derive(Clone, Debug, PartialEq, Eq)]
17pub struct FontAlignmentZone {
18  pub data: Vec<FontAlignmentZoneData>,
19  pub has_x: bool,
20  pub has_y: bool,
21}
22
23#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24#[derive(Copy, Clone, Debug)]
25pub struct FontAlignmentZoneData {
26  pub origin: f32,
27  pub size: f32,
28}
29
30impl ::std::cmp::PartialEq for FontAlignmentZoneData {
31  fn eq(&self, other: &Self) -> bool {
32    self.origin.is(&other.origin) && self.size.is(&other.size)
33  }
34}
35
36impl ::std::cmp::Eq for FontAlignmentZoneData {}
37
38#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
39#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
40pub struct FontLayout {
41  pub ascent: u16,
42  pub descent: u16,
43  pub leading: u16,
44  pub advances: Vec<u16>,
45  pub bounds: Vec<Rect>,
46  pub kerning: Vec<KerningRecord>,
47}
48
49#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
51pub struct GlyphEntry {
52  pub index: usize,
53  pub advance: i32,
54}
55
56#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "PascalCase"))]
57#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
58pub enum GridFitting {
59  None,
60  Pixel,
61  SubPixel,
62}
63
64#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
65#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
66pub struct KerningRecord {
67  pub left: u16,
68  pub right: u16,
69  pub adjustment: i16,
70}
71
72#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "PascalCase"))]
73#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
74pub enum TextAlignment {
75  Left,
76  Right,
77  Center,
78  Justify,
79}
80
81impl ::std::default::Default for TextAlignment {
82  fn default() -> Self {
83    TextAlignment::Left
84  }
85}
86
87#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
88#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
89pub struct TextRecord {
90  #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
91  pub font_id: Option<u16>,
92  #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
93  pub color: Option<StraightSRgba8>,
94  pub offset_x: i16,
95  pub offset_y: i16,
96  #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
97  pub font_size: Option<u16>,
98  pub entries: Vec<GlyphEntry>,
99}
100
101#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "PascalCase"))]
102#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
103pub enum TextRenderer {
104  Normal,
105  Advanced,
106}
107
108#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
109pub enum EmSquareSize {
110  EmSquareSize1024,
111  EmSquareSize20480,
112}
113
114#[cfg(feature = "serde")]
115impl ::serde::Serialize for EmSquareSize {
116  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
117  where
118    S: ::serde::Serializer,
119  {
120    let sound_size: u64 = match self {
121      EmSquareSize::EmSquareSize1024 => 1024,
122      EmSquareSize::EmSquareSize20480 => 20480,
123    };
124    serializer.serialize_u64(sound_size)
125  }
126}
127
128#[cfg(feature = "serde")]
129impl<'de> ::serde::Deserialize<'de> for EmSquareSize {
130  fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
131  where
132    D: ::serde::Deserializer<'de>,
133  {
134    struct Visitor;
135
136    impl<'de> ::serde::de::Visitor<'de> for Visitor {
137      type Value = EmSquareSize;
138
139      fn expecting(&self, formatter: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
140        formatter.write_str("1024 or 20480")
141      }
142
143      fn visit_u64<E>(self, value: u64) -> Result<EmSquareSize, E>
144      where
145        E: ::serde::de::Error,
146      {
147        match value {
148          1024 => Ok(EmSquareSize::EmSquareSize1024),
149          20480 => Ok(EmSquareSize::EmSquareSize20480),
150          _ => Err(E::custom(format!("unknown EmSquareSize value: {}", value))),
151        }
152      }
153    }
154
155    deserializer.deserialize_u64(Visitor)
156  }
157}