mirror of
https://github.com/emilk/egui.git
synced 2026-09-01 06:10:06 -04:00
Put font data into Arc to reduce memory consumption (#5276)
egui never accesses the `FontDefinitions`' member fields mutably, except in `fonts_tweak_ui` where it cloned the `FontDefinitions` object anyway. This patch reduces system memory consumption for shared font definitions. And also removes some overhead from copying (e.g. for the per `pixel_per_points` font atlas) Also it allows to keep a copy of the font definitions outside of egui. In my App that uses international fonts: Before:  New:  Note: If `Arc` is not wanted, then it could ofc be abstracted away. I know this is quite a breaking change API wise, but would like to hear your opinion.
This commit is contained in:
@@ -597,7 +597,9 @@ impl ContextImpl {
|
||||
FontPriority::Lowest => fam.push(font.name.clone()),
|
||||
}
|
||||
}
|
||||
self.font_definitions.font_data.insert(font.name, font.data);
|
||||
self.font_definitions
|
||||
.font_data
|
||||
.insert(font.name, Arc::new(font.data));
|
||||
}
|
||||
|
||||
#[cfg(feature = "log")]
|
||||
@@ -2944,7 +2946,9 @@ impl Context {
|
||||
|
||||
for (name, data) in &mut font_definitions.font_data {
|
||||
ui.collapsing(name, |ui| {
|
||||
if data.tweak.ui(ui).changed() {
|
||||
let mut tweak = data.tweak;
|
||||
if tweak.ui(ui).changed() {
|
||||
Arc::make_mut(data).tweak = tweak;
|
||||
changed = true;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user