diff options
Diffstat (limited to 'winit')
| -rw-r--r-- | winit/Cargo.toml | 6 | ||||
| -rw-r--r-- | winit/src/application.rs | 21 | ||||
| -rw-r--r-- | winit/src/conversion.rs | 10 | ||||
| -rw-r--r-- | winit/src/settings.rs | 7 | ||||
| -rw-r--r-- | winit/src/window.rs | 9 | 
5 files changed, 42 insertions, 11 deletions
| diff --git a/winit/Cargo.toml b/winit/Cargo.toml index dd5c12c2..255b28bb 100644 --- a/winit/Cargo.toml +++ b/winit/Cargo.toml @@ -11,11 +11,16 @@ keywords = ["gui", "ui", "graphics", "interface", "widgets"]  categories = ["gui"]  [features] +default = ["x11", "wayland", "wayland-dlopen", "wayland-csd-adwaita"]  trace = ["tracing", "tracing-core", "tracing-subscriber"]  chrome-trace = ["trace", "tracing-chrome"]  debug = ["iced_native/debug"]  system = ["sysinfo"]  application = [] +x11 = ["winit/x11"] +wayland = ["winit/wayland"] +wayland-dlopen = ["winit/wayland-dlopen"] +wayland-csd-adwaita = ["winit/wayland-csd-adwaita"]  [dependencies]  window_clipboard = "0.2" @@ -26,6 +31,7 @@ thiserror = "1.0"  version = "0.27"  git = "https://github.com/iced-rs/winit.git"  rev = "940457522e9fb9f5dac228b0ecfafe0138b4048c" +default-features = false  [dependencies.iced_native]  version = "0.9" diff --git a/winit/src/application.rs b/winit/src/application.rs index b13b7214..dd345785 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -179,13 +179,17 @@ where                  .unwrap_or(None)          }); -        let _ = match target { -            Some(node) => node -                .replace_child(&canvas, &node) -                .expect(&format!("Could not replace #{}", node.id())), -            None => body -                .append_child(&canvas) -                .expect("Append canvas to HTML body"), +        match target { +            Some(node) => { +                let _ = node +                    .replace_with_with_node_1(&canvas) +                    .expect(&format!("Could not replace #{}", node.id())); +            } +            None => { +                let _ = body +                    .append_child(&canvas) +                    .expect("Append canvas to HTML body"); +            }          };      } @@ -766,6 +770,9 @@ pub fn run_command<A, E>(                          mode,                      ));                  } +                window::Action::ChangeIcon(icon) => { +                    window.set_window_icon(conversion::icon(icon)) +                }                  window::Action::FetchMode(tag) => {                      let mode = if window.is_visible().unwrap_or(true) {                          conversion::mode(window.fullscreen()) diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 1b2ead36..cf066ef6 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -236,6 +236,7 @@ pub fn mouse_interaction(              winit::window::CursorIcon::EwResize          }          Interaction::ResizingVertically => winit::window::CursorIcon::NsResize, +        Interaction::NotAllowed => winit::window::CursorIcon::NotAllowed,      }  } @@ -509,6 +510,15 @@ pub fn user_attention(      }  } +/// Converts some [`Icon`] into it's `winit` counterpart. +/// +/// Returns `None` if there is an error during the conversion. +pub fn icon(icon: window::Icon) -> Option<winit::window::Icon> { +    let (pixels, size) = icon.into_raw(); + +    winit::window::Icon::from_rgba(pixels, size.width, size.height).ok() +} +  // As defined in: http://www.unicode.org/faq/private_use.html  pub(crate) fn is_private_use_character(c: char) -> bool {      matches!( diff --git a/winit/src/settings.rs b/winit/src/settings.rs index 78d58000..6658773d 100644 --- a/winit/src/settings.rs +++ b/winit/src/settings.rs @@ -92,7 +92,7 @@ pub struct Window {      pub always_on_top: bool,      /// The window icon, which is also usually used in the taskbar -    pub icon: Option<winit::window::Icon>, +    pub icon: Option<crate::window::Icon>,      /// Platform specific settings.      pub platform_specific: platform::PlatformSpecific, @@ -134,8 +134,9 @@ impl Window {              .with_resizable(self.resizable)              .with_decorations(self.decorations)              .with_transparent(self.transparent) -            .with_window_icon(self.icon) -            .with_always_on_top(self.always_on_top); +            .with_window_icon(self.icon.and_then(conversion::icon)) +            .with_always_on_top(self.always_on_top) +            .with_visible(self.visible);          if let Some(position) = conversion::position(              primary_monitor.as_ref(), diff --git a/winit/src/window.rs b/winit/src/window.rs index 961562bd..ba0180c8 100644 --- a/winit/src/window.rs +++ b/winit/src/window.rs @@ -2,7 +2,9 @@  use crate::command::{self, Command};  use iced_native::window; -pub use window::{frames, Event, Mode, RedrawRequest, UserAttention}; +pub use window::{ +    frames, icon, Event, Icon, Mode, RedrawRequest, UserAttention, +};  /// Closes the current window and exits the application.  pub fn close<Message>() -> Command<Message> { @@ -104,3 +106,8 @@ pub fn fetch_id<Message>(          f,      ))))  } + +/// Changes the [`Icon`] of the window. +pub fn change_icon<Message>(icon: Icon) -> Command<Message> { +    Command::single(command::Action::Window(window::Action::ChangeIcon(icon))) +} | 
