diff --git a/crates/egui-winit/src/lib.rs b/crates/egui-winit/src/lib.rs index 6eb46af5084..102bc261a3c 100644 --- a/crates/egui-winit/src/lib.rs +++ b/crates/egui-winit/src/lib.rs @@ -1338,10 +1338,8 @@ fn process_viewport_command( egui::viewport::WindowLevel::Normal => WindowLevel::Normal, }), ViewportCommand::Icon(icon) => { - window.set_window_icon(icon.map(|icon| { - winit::window::Icon::from_rgba(icon.rgba.clone(), icon.width, icon.height) - .expect("Invalid ICON data!") - })); + let winit_icon = icon.and_then(|icon| to_winit_icon(&icon)); + window.set_window_icon(winit_icon); } ViewportCommand::IMERect(rect) => { window.set_ime_cursor_area( @@ -1546,10 +1544,8 @@ pub fn create_winit_window_builder( } if let Some(icon) = icon { - window_builder = window_builder.with_window_icon(Some( - winit::window::Icon::from_rgba(icon.rgba.clone(), icon.width, icon.height) - .expect("Invalid Icon Data!"), - )); + let winit_icon = to_winit_icon(&icon); + window_builder = window_builder.with_window_icon(winit_icon); } #[cfg(all(feature = "wayland", target_os = "linux"))] @@ -1577,6 +1573,21 @@ pub fn create_winit_window_builder( window_builder } +fn to_winit_icon(icon: &egui::IconData) -> Option { + 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 pub fn apply_viewport_builder_to_window( egui_ctx: &egui::Context, diff --git a/crates/egui/src/viewport.rs b/crates/egui/src/viewport.rs index 1a6370bbf29..6757df8b89f 100644 --- a/crates/egui/src/viewport.rs +++ b/crates/egui/src/viewport.rs @@ -170,6 +170,13 @@ pub struct IconData { pub height: u32, } +impl IconData { + #[inline] + pub fn is_empty(&self) -> bool { + self.rgba.is_empty() + } +} + impl std::fmt::Debug for IconData { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("IconData")