Use min_bounds for cached text

This commit is contained in:
Héctor Ramón Jiménez 2023-08-30 05:06:08 +02:00
parent ed3454301e
commit 89acf0217e
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
3 changed files with 27 additions and 15 deletions

View file

@ -8,7 +8,7 @@ use std::hash::{BuildHasher, Hash, Hasher};
#[allow(missing_debug_implementations)]
#[derive(Default)]
pub struct Cache {
entries: FxHashMap<KeyHash, cosmic_text::Buffer>,
entries: FxHashMap<KeyHash, Entry>,
aliases: FxHashMap<KeyHash, KeyHash>,
recently_used: FxHashSet<KeyHash>,
hasher: HashBuilder,
@ -25,7 +25,7 @@ impl Cache {
Self::default()
}
pub fn get(&self, key: &KeyHash) -> Option<&cosmic_text::Buffer> {
pub fn get(&self, key: &KeyHash) -> Option<&Entry> {
self.entries.get(key)
}
@ -33,7 +33,7 @@ impl Cache {
&mut self,
font_system: &mut cosmic_text::FontSystem,
key: Key<'_>,
) -> (KeyHash, &mut cosmic_text::Buffer) {
) -> (KeyHash, &mut Entry) {
let hash = key.hash(self.hasher.build_hasher());
if let Some(hash) = self.aliases.get(&hash) {
@ -59,7 +59,10 @@ impl Cache {
);
let bounds = text::measure(&buffer);
let _ = entry.insert(buffer);
let _ = entry.insert(Entry {
buffer,
min_bounds: bounds,
});
for bounds in [
bounds,
@ -118,3 +121,9 @@ impl Key<'_> {
}
pub type KeyHash = u64;
#[allow(missing_debug_implementations)]
pub struct Entry {
pub buffer: cosmic_text::Buffer,
pub min_bounds: Size,
}