mirror of
https://github.com/penpot/penpot.git
synced 2025-04-30 21:26:19 +02:00
♻️ Refactor Custom Fonts allocations (#6146)
* ♻️ Refactor Custom Fonts allocations * 💄 Remove commented code --------- Co-authored-by: Belén Albeza <belen@hey.com>
This commit is contained in:
parent
065b50f5a2
commit
6eb686c06b
1 changed files with 10 additions and 15 deletions
|
@ -8,7 +8,7 @@ pub static DEFAULT_FONT: &'static str = "robotomono-regular";
|
||||||
pub static DEFAULT_EMOJI_FONT: &'static str = "noto-color-emoji";
|
pub static DEFAULT_EMOJI_FONT: &'static str = "noto-color-emoji";
|
||||||
|
|
||||||
pub struct FontStore {
|
pub struct FontStore {
|
||||||
// TODO: we should probably have just one of those
|
font_mgr: FontMgr,
|
||||||
font_provider: textlayout::TypefaceFontProvider,
|
font_provider: textlayout::TypefaceFontProvider,
|
||||||
font_collection: textlayout::FontCollection,
|
font_collection: textlayout::FontCollection,
|
||||||
debug_font: Font,
|
debug_font: Font,
|
||||||
|
@ -16,23 +16,24 @@ pub struct FontStore {
|
||||||
|
|
||||||
impl FontStore {
|
impl FontStore {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
|
let font_mgr = FontMgr::new();
|
||||||
|
|
||||||
let mut font_provider = skia::textlayout::TypefaceFontProvider::new();
|
let mut font_provider = skia::textlayout::TypefaceFontProvider::new();
|
||||||
|
|
||||||
let default_font = skia::FontMgr::default()
|
let default_font = font_mgr
|
||||||
.new_from_data(DEFAULT_FONT_BYTES, None)
|
.new_from_data(DEFAULT_FONT_BYTES, None)
|
||||||
.expect("Failed to load font");
|
.expect("Failed to load font");
|
||||||
|
|
||||||
font_provider.register_typeface(default_font, DEFAULT_FONT);
|
font_provider.register_typeface(default_font, DEFAULT_FONT);
|
||||||
|
|
||||||
let emoji_font = skia::FontMgr::default()
|
let emoji_font = font_mgr
|
||||||
.new_from_data(EMOJI_FONT_BYTES, None)
|
.new_from_data(EMOJI_FONT_BYTES, None)
|
||||||
.expect("Failed to load font");
|
.expect("Failed to load font");
|
||||||
|
|
||||||
font_provider.register_typeface(emoji_font, DEFAULT_EMOJI_FONT);
|
font_provider.register_typeface(emoji_font, DEFAULT_EMOJI_FONT);
|
||||||
|
|
||||||
let mut font_collection = skia::textlayout::FontCollection::new();
|
let mut font_collection = skia::textlayout::FontCollection::new();
|
||||||
font_collection.set_default_font_manager(FontMgr::default(), None);
|
font_collection.set_default_font_manager(FontMgr::from(font_provider.clone()), None);
|
||||||
font_collection.set_dynamic_font_manager(FontMgr::from(font_provider.clone()));
|
|
||||||
|
|
||||||
let debug_typeface = font_provider
|
let debug_typeface = font_provider
|
||||||
.match_family_style("robotomono-regular", skia::FontStyle::default())
|
.match_family_style("robotomono-regular", skia::FontStyle::default())
|
||||||
|
@ -41,6 +42,7 @@ impl FontStore {
|
||||||
let debug_font = skia::Font::new(debug_typeface, 10.0);
|
let debug_font = skia::Font::new(debug_typeface, 10.0);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
font_mgr,
|
||||||
font_provider,
|
font_provider,
|
||||||
font_collection,
|
font_collection,
|
||||||
debug_font,
|
debug_font,
|
||||||
|
@ -65,14 +67,15 @@ impl FontStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
let alias = format!("{}", family);
|
let alias = format!("{}", family);
|
||||||
let typeface = skia::FontMgr::default()
|
let typeface = self
|
||||||
|
.font_mgr
|
||||||
.new_from_data(font_data, None)
|
.new_from_data(font_data, None)
|
||||||
.ok_or("Failed to create typeface")?;
|
.ok_or("Failed to create typeface")?;
|
||||||
|
|
||||||
self.font_provider
|
self.font_provider
|
||||||
.register_typeface(typeface, alias.as_str());
|
.register_typeface(typeface, alias.as_str());
|
||||||
|
|
||||||
self.refresh_font_collection();
|
self.font_collection.clear_caches();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -81,12 +84,4 @@ impl FontStore {
|
||||||
let serialized = format!("{}", family);
|
let serialized = format!("{}", family);
|
||||||
self.font_provider.family_names().any(|x| x == serialized)
|
self.font_provider.family_names().any(|x| x == serialized)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn refresh_font_collection(&mut self) {
|
|
||||||
self.font_collection = skia::textlayout::FontCollection::new();
|
|
||||||
self.font_collection
|
|
||||||
.set_default_font_manager(FontMgr::default(), None);
|
|
||||||
self.font_collection
|
|
||||||
.set_dynamic_font_manager(FontMgr::from(self.font_provider.clone()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue