# Struct Database

    pub struct Database { /* private fields */ }

Expand description

A font database.

## Implementations§

§

### impl Database

#### pub fn new() -> Database

Create a new, empty `Database`.

Generic font families would be set to:

- `serif` - Times New Roman
- `sans-serif` - Arial
- `cursive` - Comic Sans MS
- `fantasy` - Impact (Papyrus on macOS)
- `monospace` - Courier New

#### pub fn load_font_data(&mut self, data: Vec<u8>)

Loads a font data into the `Database`.

Will load all font faces in case of a font collection.

#### pub fn load_font_source(&mut self, source: Source) -> TinyVec<[ID; 8]>

Loads a font from the given source into the `Database` and returns the ID of the loaded font.

Will load all font faces in case of a font collection.

#### pub fn load_font_file<P>(&mut self, path: P) -> Result<(), Error>
where P: AsRef<Path>,

Loads a font file into the `Database`.

Will load all font faces in case of a font collection.

#### pub fn load_fonts_dir<P>(&mut self, dir: P)
where P: AsRef<Path>,

Loads font files from the selected directory into the `Database`.

This method will scan directories recursively.

Will load `ttf`, `otf`, `ttc` and `otc` fonts.

Unlike other `load_*` methods, this one doesn’t return an error. It will simply skip malformed fonts and will print a warning into the log for each of them.

#### pub fn load_system_fonts(&mut self)

Attempts to load system fonts.

Supports Windows, Linux and macOS.

System fonts loading is a surprisingly complicated task, mostly unsolvable without interacting with system libraries. And since `fontdb` tries to be small and portable, this method will simply scan some predefined directories. Which means that fonts that are not in those directories must be added manually.

#### pub fn push_face_info(&mut self, info: FaceInfo) -> ID

Pushes a user-provided `FaceInfo` to the database.

In some cases, a caller might want to ignore the font’s metadata and provide their own. This method doesn’t parse the `source` font.

The `id` field should be set to `ID::dummy()` and will be then overwritten by this method.

#### pub fn remove_face(&mut self, id: ID)

Removes a font face by `id` from the database.

Returns `false` while attempting to remove a non-existing font face.

Useful when you want to ignore some specific font face(s) after loading a large directory with fonts. Or a specific face from a font.

#### pub fn is_empty(&self) -> bool

Returns `true` if the `Database` contains no font faces.

#### pub fn len(&self) -> usize

Returns the number of font faces in the `Database`.

Note that `Database` stores font faces, not fonts. For example, if a caller will try to load a font collection (`*.ttc`) that contains 5 faces, then the `Database` will load 5 font faces and this method will return 5, not 1.

#### pub fn set_serif_family<S>(&mut self, family: S)
where S: Into<String>,

Sets the family that will be used by `Family::Serif`.

#### pub fn set_sans_serif_family<S>(&mut self, family: S)
where S: Into<String>,

Sets the family that will be used by `Family::SansSerif`.

#### pub fn set_cursive_family<S>(&mut self, family: S)
where S: Into<String>,

Sets the family that will be used by `Family::Cursive`.

#### pub fn set_fantasy_family<S>(&mut self, family: S)
where S: Into<String>,

Sets the family that will be used by `Family::Fantasy`.

#### pub fn set_monospace_family<S>(&mut self, family: S)
where S: Into<String>,

Sets the family that will be used by `Family::Monospace`.

#### pub fn family_name<'a>(&'a self, family: &'a Family<'_>) -> &'a str

Returns the generic family name or the `Family::Name` itself.

Generic family names should be set via `Database::set_*_family` methods.

#### pub fn query(&self, query: &Query<'_>) -> Option<ID>

Performs a CSS-like query and returns the best matched font face.

#### pub fn faces(&self) -> impl Iterator<Item = &FaceInfo>

Returns an iterator over the internal storage.

This can be used for manual font matching.

#### pub fn face(&self, id: ID) -> Option<&FaceInfo>

Selects a `FaceInfo` by `id`.

Returns `None` if a face with such ID was already removed, or this ID belong to the other `Database`.

#### pub fn face_source(&self, id: ID) -> Option<(Source, u32)>

Returns font face storage and the face index by `ID`.

#### pub fn with_face_data<P, T>(&self, id: ID, p: P) -> Option<T>
where P: FnOnce(&[u8], u32) -> T,

Executes a closure with a font’s data.

We can’t return a reference to a font binary data because of lifetimes. So instead, you can use this method to process font’s data.

The closure accepts raw font data and font face index.

In case of `Source::File`, the font file will be memory mapped.

Returns `None` when font file loading failed.

##### §Example

ⓘ

    let is_variable = db.with_face_data(id, |font_data, face_index| {
        let font = ttf_parser::Face::from_slice(font_data, face_index).unwrap();
        font.is_variable()
    })?;

#### pub unsafe fn make_shared_face_data( &mut self, id: ID, ) -> Option<(Arc<dyn AsRef<[u8]> + Sync + Send>, u32)>

Makes the font data that backs the specified face id shared so that the application can hold a reference to it.

##### §Safety

If the face originates from a file from disk, then the file is mapped from disk. This is unsafe as another process may make changes to the file on disk, which may become visible in this process’ mapping and possibly cause crashes.

If the underlying font provides multiple faces, then all faces are updated to participate in the data sharing. If the face was previously marked for data sharing, then this function will return a clone of the existing reference.

#### pub fn make_face_data_unshared(&mut self, id: ID)

Transfers ownership of shared font data back to the font database. This is the reverse operation of `Self::make_shared_face_data`. If the font data belonging to the specified face is mapped from a file on disk, then that mapping is closed and the data becomes private to the process again.

## Trait Implementations§

§

### impl Clone for Database

§

#### fn clone(&self) -> Database

Returns a duplicate of the value. Read more
1.0.0 · Source§

#### fn clone_from(&mut self, source: &Self)

Performs copy-assignment from `source`. Read more
§

### impl Debug for Database

§

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

### impl Default for Database

§

#### fn default() -> Database

Returns the “default value” for a type. Read more

## Auto Trait Implementations§

§

### impl Freeze for Database

§

### impl !RefUnwindSafe for Database

§

### impl Send for Database

§

### impl Sync for Database

§

### impl Unpin for Database

§

### impl !UnwindSafe for Database

## Blanket Implementations§

Source§

### impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

#### fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

#### fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
§

### impl<T> Also for T

§

#### fn also<F>(self, block: F) -> Self
where F: FnOnce(&mut Self),

Apply a function to this value and return the (possibly) modified value.
Source§

### impl<T> Any for T
where T: 'static + ?Sized,

Source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
§

### impl<T, Res> Apply<Res> for T
where T: ?Sized,

§

#### fn apply<F>(self, f: F) -> Res
where F: FnOnce(Self) -> Res, Self: Sized,

Apply a function which takes the parameter by value.
§

#### fn apply_ref<F>(&self, f: F) -> Res
where F: FnOnce(&Self) -> Res,

Apply a function which takes the parameter by reference.
§

#### fn apply_mut<F>(&mut self, f: F) -> Res
where F: FnOnce(&mut Self) -> Res,

Apply a function which takes the parameter by mutable reference.
Source§

### impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

#### fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

### impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

#### fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

### impl<T> Borrow<T> for T
where T: ?Sized,

Source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

### impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

### impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

#### type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in `parameters` when converting.
Source§

#### fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts `self` into `C`, using the provided parameters.
Source§

### impl<T> CloneToUninit for T
where T: Clone,

Source§

#### unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (`clone_to_uninit`)
Performs copy-assignment from `self` to `dest`. Read more
Source§

### impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

#### fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
§

### impl<T> Downcast for T
where T: Any,

§

#### fn into_any(self: Box<T>) -> Box<dyn Any>

Convert `Box<dyn Trait>` (where `Trait: Downcast`) to `Box<dyn Any>`. `Box<dyn Any>` can then be further `downcast` into `Box<ConcreteType>` where `ConcreteType` implements `Trait`.
§

#### fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert `Rc<Trait>` (where `Trait: Downcast`) to `Rc<Any>`. `Rc<Any>` can then be further `downcast` into `Rc<ConcreteType>` where `ConcreteType` implements `Trait`.
§

#### fn as_any(&self) -> &(dyn Any + 'static)

Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot generate `&Any`’s vtable from `&Trait`’s.
§

#### fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot generate `&mut Any`’s vtable from `&mut Trait`’s.
§

### impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

#### fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert `Arc<Trait>` (where `Trait: Downcast`) to `Arc<Any>`. `Arc<Any>` can then be further `downcast` into `Arc<ConcreteType>` where `ConcreteType` implements `Trait`.
Source§

### impl<T> From<T> for T

Source§

#### fn from(t: T) -> T

Returns the argument unchanged.

Source§

### impl<T> FromAngle<T> for T

Source§

#### fn from_angle(angle: T) -> T

Performs a conversion from `angle`.
Source§

### impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

#### fn from_stimulus(other: U) -> T

Converts `other` into `Self`, while performing the appropriate scaling, rounding and clamping.
§

### impl<T> Instrument for T

§

#### fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [`Span`], returning an `Instrumented` wrapper. Read more
§

#### fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current `Span`, returning an `Instrumented` wrapper. Read more
Source§

### impl<T, U> Into<U> for T
where U: From<T>,

Source§

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

Source§

### impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

#### fn into_angle(self) -> U

Performs a conversion into `T`.
§

### impl<State, Message> IntoBoot<State, Message> for State

§

#### fn into_boot(self) -> (State, Task<Message>)

Turns some type into the initial state of some `Application`.
Source§

### impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

#### type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in `parameters` when converting.
Source§

#### fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts `self` into `C`, using the provided parameters.
Source§

### impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

#### fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

### impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

#### fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

### impl<T> IntoStimulus<T> for T

Source§

#### fn into_stimulus(self) -> T

Converts `self` into `T`, while performing the appropriate scaling, rounding and clamping.
§

### impl<T> NoneValue for T
where T: Default,

§

#### type NoneType = T

§

#### fn null_value() -> T

The none-equivalent value.
Source§

### impl<T> Same for T

Source§

#### type Output = T

Should always be `Self`
Source§

### impl<T> ToOwned for T
where T: Clone,

Source§

#### type Owned = T

The resulting type after obtaining ownership.
Source§

#### fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

#### fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

### impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

#### type Error = <C as TryFromComponents<T>>::Error

The error for when `try_into_colors` fails to cast.
Source§

#### fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

### impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

#### type Error = Infallible

The type returned in the event of a conversion error.
Source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

### impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

### impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

#### fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an `OutOfBounds` error is returned which contains the unclamped color. Read more
Source§

### impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

#### fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

### impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

#### fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
§

### impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

#### fn vzip(self) -> V

§

### impl<T> WithSubscriber for T

§

#### fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

#### fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

### impl<T> MaybeClone for T

§

### impl<T> MaybeDebug for T

§

### impl<T> MaybeSend for T
where T: Send,

§

### impl<T> MaybeSend for T
where T: Send,

§

### impl<T> MaybeSync for T
where T: Sync,

§

### impl<T> MaybeSync for T
where T: Sync,