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:
@@ -4,8 +4,8 @@ All notable changes to the `egui_glow` integration will be noted in this file.
|
||||
|
||||
## Unreleased
|
||||
* `EguiGlow::run` no longer returns the shapes to paint, but stores them internally until you call `EguiGlow::paint` ([#1110](https://github.com/emilk/egui/pull/1110)).
|
||||
* Added `set_texture_filter` method to `Painter` ((#1041)[https://github.com/emilk/egui/pull/1041]).
|
||||
* Fix failure to run in Chrome ((#1092)[https://github.com/emilk/egui/pull/1092]).
|
||||
* Added `set_texture_filter` method to `Painter` ([#1041](https://github.com/emilk/egui/pull/1041)).
|
||||
* Fix failure to run in Chrome ([#1092](https://github.com/emilk/egui/pull/1092)).
|
||||
|
||||
|
||||
## 0.16.0 - 2021-12-29
|
||||
|
||||
@@ -63,6 +63,7 @@ pub fn run(app: Box<dyn epi::App>, native_options: &epi::NativeOptions) -> ! {
|
||||
.unwrap();
|
||||
let mut integration = egui_winit::epi::EpiIntegration::new(
|
||||
"egui_glow",
|
||||
painter.max_texture_side(),
|
||||
gl_window.window(),
|
||||
repaint_signal,
|
||||
persistence,
|
||||
|
||||
@@ -123,14 +123,19 @@ impl EguiGlow {
|
||||
gl_window: &glutin::WindowedContext<glutin::PossiblyCurrent>,
|
||||
gl: &glow::Context,
|
||||
) -> Self {
|
||||
let painter = crate::Painter::new(gl, None, "")
|
||||
.map_err(|error| {
|
||||
crate::misc_util::glow_print_error(format!(
|
||||
"error occurred in initializing painter:\n{}",
|
||||
error
|
||||
));
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
Self {
|
||||
egui_ctx: Default::default(),
|
||||
egui_winit: egui_winit::State::new(gl_window.window()),
|
||||
painter: crate::Painter::new(gl, None, "")
|
||||
.map_err(|error| {
|
||||
eprintln!("some error occurred in initializing painter\n{}", error);
|
||||
})
|
||||
.unwrap(),
|
||||
egui_winit: egui_winit::State::new(painter.max_texture_side(), gl_window.window()),
|
||||
painter,
|
||||
shapes: Default::default(),
|
||||
textures_delta: Default::default(),
|
||||
}
|
||||
|
||||
@@ -24,6 +24,8 @@ const FRAG_SRC: &str = include_str!("shader/fragment.glsl");
|
||||
/// This struct must be destroyed with [`Painter::destroy`] before dropping, to ensure OpenGL
|
||||
/// objects have been properly deleted and are not leaked.
|
||||
pub struct Painter {
|
||||
max_texture_side: usize,
|
||||
|
||||
program: glow::Program,
|
||||
u_screen_size: glow::UniformLocation,
|
||||
u_sampler: glow::UniformLocation,
|
||||
@@ -90,6 +92,8 @@ impl Painter {
|
||||
) -> Result<Painter, String> {
|
||||
check_for_gl_error(gl, "before Painter::new");
|
||||
|
||||
let max_texture_side = unsafe { gl.get_parameter_i32(glow::MAX_TEXTURE_SIZE) } as usize;
|
||||
|
||||
let support_vao = crate::misc_util::supports_vao(gl);
|
||||
let shader_version = ShaderVersion::get(gl);
|
||||
let is_webgl_1 = shader_version == ShaderVersion::Es100;
|
||||
@@ -203,6 +207,7 @@ impl Painter {
|
||||
check_for_gl_error(gl, "after Painter::new");
|
||||
|
||||
Ok(Painter {
|
||||
max_texture_side,
|
||||
program,
|
||||
u_screen_size,
|
||||
u_sampler,
|
||||
@@ -223,6 +228,10 @@ impl Painter {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn max_texture_side(&self) -> usize {
|
||||
self.max_texture_side
|
||||
}
|
||||
|
||||
unsafe fn prepare_painting(
|
||||
&mut self,
|
||||
[width_in_pixels, height_in_pixels]: [u32; 2],
|
||||
|
||||
Reference in New Issue
Block a user