Fix: handle `IconData::default()` without crashing (#3842)
* Closes https://github.com/emilk/egui/issues/3839
This commit is contained in:
parent
76ec982958
commit
3936418f0b
|
|
@ -1338,10 +1338,8 @@ fn process_viewport_command(
|
||||||
egui::viewport::WindowLevel::Normal => WindowLevel::Normal,
|
egui::viewport::WindowLevel::Normal => WindowLevel::Normal,
|
||||||
}),
|
}),
|
||||||
ViewportCommand::Icon(icon) => {
|
ViewportCommand::Icon(icon) => {
|
||||||
window.set_window_icon(icon.map(|icon| {
|
let winit_icon = icon.and_then(|icon| to_winit_icon(&icon));
|
||||||
winit::window::Icon::from_rgba(icon.rgba.clone(), icon.width, icon.height)
|
window.set_window_icon(winit_icon);
|
||||||
.expect("Invalid ICON data!")
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
ViewportCommand::IMERect(rect) => {
|
ViewportCommand::IMERect(rect) => {
|
||||||
window.set_ime_cursor_area(
|
window.set_ime_cursor_area(
|
||||||
|
|
@ -1546,10 +1544,8 @@ pub fn create_winit_window_builder<T>(
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(icon) = icon {
|
if let Some(icon) = icon {
|
||||||
window_builder = window_builder.with_window_icon(Some(
|
let winit_icon = to_winit_icon(&icon);
|
||||||
winit::window::Icon::from_rgba(icon.rgba.clone(), icon.width, icon.height)
|
window_builder = window_builder.with_window_icon(winit_icon);
|
||||||
.expect("Invalid Icon Data!"),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "wayland", target_os = "linux"))]
|
#[cfg(all(feature = "wayland", target_os = "linux"))]
|
||||||
|
|
@ -1577,6 +1573,21 @@ pub fn create_winit_window_builder<T>(
|
||||||
window_builder
|
window_builder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn to_winit_icon(icon: &egui::IconData) -> Option<winit::window::Icon> {
|
||||||
|
if icon.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
crate::profile_function!();
|
||||||
|
match winit::window::Icon::from_rgba(icon.rgba.clone(), icon.width, icon.height) {
|
||||||
|
Ok(winit_icon) => Some(winit_icon),
|
||||||
|
Err(err) => {
|
||||||
|
log::warn!("Invalid IconData: {err}");
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Applies what `create_winit_window_builder` couldn't
|
/// Applies what `create_winit_window_builder` couldn't
|
||||||
pub fn apply_viewport_builder_to_window(
|
pub fn apply_viewport_builder_to_window(
|
||||||
egui_ctx: &egui::Context,
|
egui_ctx: &egui::Context,
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,13 @@ pub struct IconData {
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl IconData {
|
||||||
|
#[inline]
|
||||||
|
pub fn is_empty(&self) -> bool {
|
||||||
|
self.rgba.is_empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl std::fmt::Debug for IconData {
|
impl std::fmt::Debug for IconData {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
f.debug_struct("IconData")
|
f.debug_struct("IconData")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue