summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2021-04-08 12:58:08 -0700
committerLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2021-04-08 12:58:08 -0700
commitcdab8f90fb525c509e0a15bb1d0b3d7213e176f3 (patch)
tree8db44d27d2ecbc6f8d4b2614060cbb23d419a3b4
parent3ea2c4595acbbbe22ad04a642f98aeb08b638c58 (diff)
downloadiced-cdab8f90fb525c509e0a15bb1d0b3d7213e176f3.tar.gz
iced-cdab8f90fb525c509e0a15bb1d0b3d7213e176f3.tar.bz2
iced-cdab8f90fb525c509e0a15bb1d0b3d7213e176f3.zip
add window visibility
-rw-r--r--src/application.rs11
-rw-r--r--winit/src/application.rs8
-rw-r--r--winit/src/application/state.rs12
-rw-r--r--winit/src/settings.rs4
4 files changed, 34 insertions, 1 deletions
diff --git a/src/application.rs b/src/application.rs
index 7b7de6d4..317f9801 100644
--- a/src/application.rs
+++ b/src/application.rs
@@ -191,6 +191,13 @@ pub trait Application: Sized {
false
}
+ /// Returns whether the [`Application`] should be visible or not
+ ///
+ /// By default, it returns `true`.
+ fn visible(&self) -> bool {
+ true
+ }
+
/// Runs the [`Application`].
///
/// On native platforms, this method will take control of the current thread
@@ -295,6 +302,10 @@ where
fn should_exit(&self) -> bool {
self.0.should_exit()
}
+
+ fn visible(&self) -> bool {
+ self.0.visible()
+ }
}
#[cfg(target_arch = "wasm32")]
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 106d5218..e73f3df1 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -98,6 +98,13 @@ pub trait Application: Program<Clipboard = Clipboard> {
fn should_exit(&self) -> bool {
false
}
+
+ /// Returns whether the [`Application`] should be visible or not
+ ///
+ /// By default, it returns `true`.
+ fn visible(&self) -> bool {
+ true
+ }
}
/// Runs an [`Application`] with an executor, compositor, and the provided
@@ -145,6 +152,7 @@ where
.into_builder(
&application.title(),
application.mode(),
+ application.visible(),
event_loop.primary_monitor(),
)
.build(&event_loop)
diff --git a/winit/src/application/state.rs b/winit/src/application/state.rs
index 46297370..d157211a 100644
--- a/winit/src/application/state.rs
+++ b/winit/src/application/state.rs
@@ -12,6 +12,7 @@ pub struct State<A: Application> {
mode: Mode,
background_color: Color,
scale_factor: f64,
+ visible: bool,
viewport: Viewport,
viewport_version: usize,
cursor_position: winit::dpi::PhysicalPosition<f64>,
@@ -26,6 +27,7 @@ impl<A: Application> State<A> {
let mode = application.mode();
let background_color = application.background_color();
let scale_factor = application.scale_factor();
+ let visible = application.visible();
let viewport = {
let physical_size = window.inner_size();
@@ -41,6 +43,7 @@ impl<A: Application> State<A> {
mode,
background_color,
scale_factor,
+ visible,
viewport,
viewport_version: 0,
// TODO: Encode cursor availability in the type-system
@@ -201,5 +204,14 @@ impl<A: Application> State<A> {
self.scale_factor = new_scale_factor;
}
+
+ // Update window visibility
+ let new_visible = application.visible();
+
+ if self.visible != new_visible {
+ window.set_visible(new_visible);
+
+ self.visible = new_visible;
+ }
}
}
diff --git a/winit/src/settings.rs b/winit/src/settings.rs
index 9ce5cfc5..56be1e07 100644
--- a/winit/src/settings.rs
+++ b/winit/src/settings.rs
@@ -66,6 +66,7 @@ impl Window {
self,
title: &str,
mode: Mode,
+ visible: bool,
primary_monitor: Option<MonitorHandle>,
) -> WindowBuilder {
let mut window_builder = WindowBuilder::new();
@@ -80,7 +81,8 @@ impl Window {
.with_transparent(self.transparent)
.with_window_icon(self.icon)
.with_always_on_top(self.always_on_top)
- .with_fullscreen(conversion::fullscreen(primary_monitor, mode));
+ .with_fullscreen(conversion::fullscreen(primary_monitor, mode))
+ .with_visible(visible);
if let Some((width, height)) = self.min_size {
window_builder = window_builder