Fix: panic when dragging window between monitors of different pixels_per_point (#4868)
Fix: panic when dragging window between monitors of different pixels_per_point This will continue to help us as we develop `egui`. I hope you agree with my defense of `panic`. * Relate #3959 * Relate #4088 * Closes #4178 * Closes #4179 There is also a way to add log if necessary. ``` log::debug!("Anti-panic behavior occurs"); ``` --------- Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
parent
f38515afe9
commit
1474c17b0d
|
|
@ -2418,12 +2418,18 @@ impl Context {
|
|||
|
||||
self.write(|ctx| {
|
||||
let tessellation_options = ctx.memory.options.tessellation_options;
|
||||
let texture_atlas = ctx
|
||||
.fonts
|
||||
.get(&pixels_per_point.into())
|
||||
.expect("tessellate called with a different pixels_per_point than the font atlas was created with. \
|
||||
You should use egui::FullOutput::pixels_per_point when tessellating.")
|
||||
.texture_atlas();
|
||||
let texture_atlas = if let Some(fonts) = ctx.fonts.get(&pixels_per_point.into()) {
|
||||
fonts.texture_atlas()
|
||||
} else {
|
||||
#[cfg(feature = "log")]
|
||||
log::warn!("No font size matching {pixels_per_point} pixels per point found.");
|
||||
ctx.fonts
|
||||
.iter()
|
||||
.next()
|
||||
.expect("No fonts loaded")
|
||||
.1
|
||||
.texture_atlas()
|
||||
};
|
||||
let (font_tex_size, prepared_discs) = {
|
||||
let atlas = texture_atlas.lock();
|
||||
(atlas.size(), atlas.prepared_discs())
|
||||
|
|
|
|||
|
|
@ -153,6 +153,12 @@ impl PaintList {
|
|||
/// and then later setting it using `paint_list.set(idx, cr, frame);`.
|
||||
#[inline(always)]
|
||||
pub fn set(&mut self, idx: ShapeIdx, clip_rect: Rect, shape: Shape) {
|
||||
if self.0.len() <= idx.0 {
|
||||
#[cfg(feature = "log")]
|
||||
log::warn!("Index {} is out of bounds for PaintList", idx.0);
|
||||
return;
|
||||
}
|
||||
|
||||
self.0[idx.0] = ClippedShape { clip_rect, shape };
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue