mirror of
https://github.com/servo/servo.git
synced 2025-08-11 08:25:32 +01:00
fonts: Add FontIdentifier
and LocalFontIdentifier
(#31658)
Instead of using a simple `Atom` to identify a local font, use a data structure. This allows us to carry more information necessary to identify a local font (such as a path on MacOS). We need this for the new version of WebRender, as fonts on MacOS now require a path. This has a lot of benefits: 1. We can avoid loading fonts without paths on MacOS, which should avoid a lot of problems with flakiness and ensure we always load the same font for a given identifier. 2. This clarifies the difference between web fonts and local fonts, though there is more work to do here. 3. This avoid a *lot* of font shenanigans, such as trying to work backwards from the name of the font to the path of the font we actually matched. In general, we can remove a lot of code trying to accomplish these shenanigans. 4. Getting the font bytes always returns an `Arc` now avoiding an extra full font copy in the case of Canvas.
This commit is contained in:
parent
b1debf2068
commit
e5fbb3d487
17 changed files with 365 additions and 320 deletions
|
@ -24,6 +24,7 @@ use style::values::computed::font::{GenericFontFamily, SingleFontFamily};
|
|||
use unicode_script::Script;
|
||||
use webrender_api::FontInstanceKey;
|
||||
|
||||
use crate::font_cache_thread::FontIdentifier;
|
||||
use crate::font_context::{FontContext, FontSource};
|
||||
use crate::font_template::FontTemplateDescriptor;
|
||||
use crate::platform::font::{FontHandle, FontTable};
|
||||
|
@ -78,7 +79,7 @@ pub trait FontHandleMethods: Sized {
|
|||
fn table_for_tag(&self, _: FontTableTag) -> Option<FontTable>;
|
||||
|
||||
/// A unique identifier for the font, allowing comparison.
|
||||
fn identifier(&self) -> Atom;
|
||||
fn identifier(&self) -> &FontIdentifier;
|
||||
}
|
||||
|
||||
// Used to abstract over the shaper's choice of fixed int representation.
|
||||
|
@ -202,7 +203,7 @@ impl Font {
|
|||
}
|
||||
|
||||
/// A unique identifier for the font, allowing comparison.
|
||||
pub fn identifier(&self) -> Atom {
|
||||
pub fn identifier(&self) -> &FontIdentifier {
|
||||
self.handle.identifier()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue