1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-29 04:40:03 -04:00

Choose your own font and size (#1154)

* Refactor text layout: don't need &Fonts in all functions
* Replace indexing in Fonts with member function
* Wrap Fonts in a Mutex
* Remove mutex for Font::glyph_info_cache
* Remove RwLock around Font::characters
* Put FontsImpl and GalleyCache behind the same Mutex
* Round font sizes to whole pixels before deduplicating them
* Make TextStyle !Copy
* Implement user-named TextStyle:s
* round font size earlier
* Cache fonts based on family and size
* Move TextStyle into egui and Style
* Remove body_text_style
* Query graphics about max texture size and use that as font atlas size
* Recreate texture atlas when it is getting full
This commit is contained in:
Emil Ernerfeldt
2022-01-24 14:32:36 +01:00
committed by GitHub
parent bb407e9b00
commit fa43d16c41
67 changed files with 1231 additions and 640 deletions

View File

@@ -47,6 +47,7 @@ pub fn run(app: Box<dyn epi::App>, native_options: &epi::NativeOptions) -> ! {
let mut painter = crate::Painter::new(&display);
let mut integration = egui_winit::epi::EpiIntegration::new(
"egui_glium",
painter.max_texture_side(),
display.gl_window().window(),
repaint_signal,
persistence,

View File

@@ -111,10 +111,14 @@ pub struct EguiGlium {
impl EguiGlium {
pub fn new(display: &glium::Display) -> Self {
let painter = crate::Painter::new(display);
Self {
egui_ctx: Default::default(),
egui_winit: egui_winit::State::new(display.gl_window().window()),
painter: crate::Painter::new(display),
egui_winit: egui_winit::State::new(
painter.max_texture_side(),
display.gl_window().window(),
),
painter,
shapes: Default::default(),
textures_delta: Default::default(),
}

View File

@@ -16,6 +16,7 @@ use {
};
pub struct Painter {
max_texture_side: usize,
program: glium::Program,
textures: AHashMap<egui::TextureId, Rc<SrgbTexture2d>>,
@@ -27,6 +28,9 @@ pub struct Painter {
impl Painter {
pub fn new(facade: &dyn glium::backend::Facade) -> Painter {
use glium::CapabilitiesSource as _;
let max_texture_side = facade.get_capabilities().max_texture_size as _;
let program = program! {
facade,
120 => {
@@ -49,6 +53,7 @@ impl Painter {
.expect("Failed to compile shader");
Painter {
max_texture_side,
program,
textures: Default::default(),
#[cfg(feature = "epi")]
@@ -56,6 +61,10 @@ impl Painter {
}
}
pub fn max_texture_side(&self) -> usize {
self.max_texture_side
}
/// Main entry-point for painting a frame.
/// You should call `target.clear_color(..)` before
/// and `target.finish()` after this.