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:
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user