diff options
Diffstat (limited to 'src/env.rs')
| -rw-r--r-- | src/env.rs | 41 |
1 files changed, 3 insertions, 38 deletions
@@ -7,14 +7,15 @@ use std::fs; use std::io::Cursor; use std::path::{Path, PathBuf}; -use fontdock::{FaceFromVec, FaceId, FontSource}; +use fontdock::{FaceId, FontSource}; use image::io::Reader as ImageReader; use image::{DynamicImage, GenericImageView, ImageFormat}; -use ttf_parser::Face; #[cfg(feature = "fs")] use fontdock::{FsIndex, FsSource}; +use crate::font::FaceBuf; + /// Encapsulates all environment dependencies (fonts, resources). #[derive(Debug)] pub struct Env { @@ -47,42 +48,6 @@ impl Env { /// A font loader that is backed by a dynamic source. pub type FontLoader = fontdock::FontLoader<Box<dyn FontSource<Face = FaceBuf>>>; -/// An owned font face. -pub struct FaceBuf { - data: Box<[u8]>, - face: Face<'static>, -} - -impl FaceBuf { - /// Get a reference to the underlying face. - pub fn get(&self) -> &Face<'_> { - // We can't implement Deref because that would leak the internal 'static - // lifetime. - &self.face - } - - /// The raw face data. - pub fn data(&self) -> &[u8] { - &self.data - } -} - -impl FaceFromVec for FaceBuf { - fn from_vec(vec: Vec<u8>, i: u32) -> Option<Self> { - let data = vec.into_boxed_slice(); - - // SAFETY: The slices's location is stable in memory since we don't - // touch it and it can't be touched from outside this type. - let slice: &'static [u8] = - unsafe { std::slice::from_raw_parts(data.as_ptr(), data.len()) }; - - Some(Self { - data, - face: Face::from_slice(slice, i).ok()?, - }) - } -} - /// Simplify font loader construction from an [`FsIndex`]. #[cfg(feature = "fs")] pub trait FsIndexExt { |
