mirror of
https://github.com/storytold/deckcraft.git
synced 2026-11-10 04:19:33 -06:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1520a6692 |
@@ -169,7 +169,7 @@ impl FontDb {
|
|||||||
if bundled.contains(fam) {
|
if bundled.contains(fam) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if self.is_loaded(fam) || self.has_family(fam) {
|
if self.is_loaded(fam) || (self.system_fallback_enabled() && self.has_family(fam)) {
|
||||||
let f = self.face(fam, style);
|
let f = self.face(fam, style);
|
||||||
if f.family.eq_ignore_ascii_case(fam) && covers_cluster(&f, cluster) {
|
if f.family.eq_ignore_ascii_case(fam) && covers_cluster(&f, cluster) {
|
||||||
return f;
|
return f;
|
||||||
|
|||||||
@@ -976,6 +976,17 @@ impl FontDb {
|
|||||||
let _ = on;
|
let _ = on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Whether automatic system-font lookups (fallback by character, symbol and script families)
|
||||||
|
/// may touch installed fonts. Lookups of a family the document or host names are not gated.
|
||||||
|
pub(crate) fn system_fallback_enabled(&self) -> bool {
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
{
|
||||||
|
self.sys.lock().unwrap_or_else(std::sync::PoisonError::into_inner).enabled
|
||||||
|
}
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
/// Process-wide database: the bundled fonts, then the installed system fonts, cataloged the
|
/// Process-wide database: the bundled fonts, then the installed system fonts, cataloged the
|
||||||
/// first time a lookup by family name needs them (or ahead of time by
|
/// first time a lookup by family name needs them (or ahead of time by
|
||||||
/// [`FontDb::scan_in_background`]).
|
/// [`FontDb::scan_in_background`]).
|
||||||
@@ -1469,7 +1480,8 @@ impl FontDb {
|
|||||||
};
|
};
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
{
|
{
|
||||||
let cataloged: Vec<String> = self.read_catalog().iter().map(|e| e.family.clone()).collect();
|
let cataloged: Vec<String> =
|
||||||
|
if self.system_fallback_enabled() { self.read_catalog().iter().map(|e| e.family.clone()).collect() } else { Vec::new() };
|
||||||
for fam in SYSTEM_FALLBACKS.iter().filter(|f| f.contains("Symbol")) {
|
for fam in SYSTEM_FALLBACKS.iter().filter(|f| f.contains("Symbol")) {
|
||||||
if !self.is_loaded(fam) && cataloged.iter().any(|f| f.eq_ignore_ascii_case(fam)) {
|
if !self.is_loaded(fam) && cataloged.iter().any(|f| f.eq_ignore_ascii_case(fam)) {
|
||||||
self.load_cataloged(fam);
|
self.load_cataloged(fam);
|
||||||
|
|||||||
@@ -425,3 +425,11 @@ fn the_font_scan_skips_fifos_folders_and_link_loops() {
|
|||||||
assert!(fifo || n >= 1);
|
assert!(fifo || n >= 1);
|
||||||
let _ = std::fs::remove_dir_all(&dir);
|
let _ = std::fs::remove_dir_all(&dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn disabling_system_fallback_gates_automatic_family_loads() {
|
||||||
|
let db = FontDb::with_font_dirs(Vec::new());
|
||||||
|
assert!(cfg!(target_arch = "wasm32") || db.system_fallback_enabled());
|
||||||
|
db.set_system_fallback(false);
|
||||||
|
assert!(!db.system_fallback_enabled());
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user