(&mut self, font_size: u16, font_asset: Option<&'static FontAsset>)
| 158 | } |
| 159 | |
| 160 | fn metrics(&mut self, font_size: u16, font_asset: Option<&'static FontAsset>) -> FontMetrics { |
| 161 | let font_ptr = font_asset.map_or(0usize, |a| a as *const _ as usize); |
| 162 | let key = (font_size, font_ptr); |
| 163 | if let Some(&m) = self.font_metrics.get(&key) { |
| 164 | return m; |
| 165 | } |
| 166 | let (font, found) = if let Some(a) = font_asset { |
| 167 | let k = a.key(); |
| 168 | if let Some(data) = self.fonts.get(k) { |
| 169 | (Some(&data.font), true) |
| 170 | } else if self.default_font.as_ref().map(|d| d.key) == Some(k) { |
| 171 | (self.default_font.as_ref().map(|d| &d.font), true) |
| 172 | } else { |
| 173 | (self.default_font.as_ref().map(|d| &d.font), false) |
| 174 | } |
| 175 | } else { |
| 176 | (self.default_font.as_ref().map(|d| &d.font), true) |
| 177 | }; |
| 178 | let ref_dims = macroquad::text::measure_text("Xig", font, font_size, 1.0); |
| 179 | let m = FontMetrics { |
| 180 | height: ref_dims.height, |
| 181 | baseline_offset: ref_dims.offset_y, |
| 182 | }; |
| 183 | if found { |
| 184 | self.font_metrics.insert(key, m); |
| 185 | } |
| 186 | m |
| 187 | } |
| 188 | |
| 189 | /// Load the default font. Stored outside the cache and never evicted. |
| 190 | pub async fn load_default(asset: &'static FontAsset) { |
no test coverage detected