Fix subtraction overflow when comparing weights

This commit is contained in:
Jeremy Soller 2024-01-18 06:58:47 -07:00
parent 8457e68d98
commit 6aadfaddac
No known key found for this signature in database
GPG key ID: DCFCA852D3906975
2 changed files with 5 additions and 5 deletions

View file

@ -141,7 +141,7 @@ impl<'a> Iterator for FontFallbackIter<'a> {
let font_match_keys_iter = |is_mono| {
self.font_match_keys
.iter()
.filter(move |m_key| m_key.weight_offset == 0 || is_mono)
.filter(move |m_key| m_key.weight_offset == Some(0) || is_mono)
};
while self.default_i < self.default_families.len() {
@ -157,7 +157,7 @@ impl<'a> Iterator for FontFallbackIter<'a> {
if let Some(font) = self.font_system.get_font(m_key.id) {
if !is_mono {
return Some(font);
} else if m_key.weight_offset == 0 {
} else if m_key.weight_offset == Some(0) {
// Default font
let fallback_info = MonospaceFallbackInfo {
weight_offset: None,
@ -194,7 +194,7 @@ impl<'a> Iterator for FontFallbackIter<'a> {
.count();
let fallback_info = MonospaceFallbackInfo {
weight_offset: Some(m_key.weight_offset),
weight_offset: m_key.weight_offset,
script_non_matches: Some(script_non_matches),
id: m_key.id,
};

View file

@ -11,7 +11,7 @@ pub use rustybuzz;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct FontMatchKey {
pub(crate) weight_offset: u16,
pub(crate) weight_offset: Option<u16>,
pub(crate) id: fontdb::ID,
}
@ -144,7 +144,7 @@ impl FontSystem {
.faces()
.filter(|face| attrs.matches(face))
.map(|face| FontMatchKey {
weight_offset: attrs.weight.0 - face.weight.0,
weight_offset: attrs.weight.0.checked_sub(face.weight.0),
id: face.id,
})
.collect::<Vec<_>>();