summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Yiğit Özdemir <yigitozdemir1299@gmail.com>2023-06-21 19:43:20 +0300
committerLibravatar Yiğit Özdemir <yigitozdemir1299@gmail.com>2023-06-21 19:43:20 +0300
commit21a71b753d6da2233bce913f4e623ee14859ec23 (patch)
tree5293118e70f65b4f3805b508dad9a8185e260e32
parent59bb5a99aaefa13f01735e0b6b127fa498be902f (diff)
downloadiced-21a71b753d6da2233bce913f4e623ee14859ec23.tar.gz
iced-21a71b753d6da2233bce913f4e623ee14859ec23.tar.bz2
iced-21a71b753d6da2233bce913f4e623ee14859ec23.zip
Add command to retrieve window size
-rw-r--r--core/src/window.rs2
-rw-r--r--core/src/window/fetch_size.rs8
-rw-r--r--runtime/src/window/action.rs16
-rw-r--r--winit/src/application.rs16
4 files changed, 42 insertions, 0 deletions
diff --git a/core/src/window.rs b/core/src/window.rs
index a6dbdfb4..cd343893 100644
--- a/core/src/window.rs
+++ b/core/src/window.rs
@@ -6,6 +6,7 @@ mod level;
mod mode;
mod redraw_request;
mod user_attention;
+mod fetch_size;
pub use event::Event;
pub use icon::Icon;
@@ -13,3 +14,4 @@ pub use level::Level;
pub use mode::Mode;
pub use redraw_request::RedrawRequest;
pub use user_attention::UserAttention;
+pub use fetch_size::SizeType; \ No newline at end of file
diff --git a/core/src/window/fetch_size.rs b/core/src/window/fetch_size.rs
new file mode 100644
index 00000000..aa3431aa
--- /dev/null
+++ b/core/src/window/fetch_size.rs
@@ -0,0 +1,8 @@
+/// A `struct` defining which size to fetch.
+#[derive(Debug, Clone, Copy)]
+pub enum SizeType {
+ /// Inner size. (not including title bars and so other OS decorations)
+ Inner,
+ /// Outer size. (including everything)
+ Outer,
+} \ No newline at end of file
diff --git a/runtime/src/window/action.rs b/runtime/src/window/action.rs
index a9d2a3d0..4ea9d474 100644
--- a/runtime/src/window/action.rs
+++ b/runtime/src/window/action.rs
@@ -1,3 +1,7 @@
+
+
+use iced_core::window::SizeType;
+
use crate::core::window::{Icon, Level, Mode, UserAttention};
use crate::futures::MaybeSend;
@@ -20,6 +24,13 @@ pub enum Action<T> {
/// The new logical height of the window
height: u32,
},
+ /// Fetch the current size of the window.
+ FetchSize {
+ /// Which size to fetch
+ size_type: SizeType,
+ /// Callback function
+ callback: Box<dyn FnOnce((u32, u32)) -> T + 'static>,
+ },
/// Set the window to maximized or back
Maximize(bool),
/// Set the window to minimized or back
@@ -104,6 +115,10 @@ impl<T> Action<T> {
Self::Close => Action::Close,
Self::Drag => Action::Drag,
Self::Resize { width, height } => Action::Resize { width, height },
+ Self::FetchSize { size_type, callback } => Action::FetchSize {
+ size_type: size_type,
+ callback: Box::new(move |s| f(callback(s))),
+ },
Self::Maximize(maximized) => Action::Maximize(maximized),
Self::Minimize(minimized) => Action::Minimize(minimized),
Self::Move { x, y } => Action::Move { x, y },
@@ -131,6 +146,7 @@ impl<T> fmt::Debug for Action<T> {
f,
"Action::Resize {{ widget: {width}, height: {height} }}"
),
+ Self::FetchSize { size_type, .. } => write!(f, "Action::FetchSize {{ size_type: {size_type:?} }}"),
Self::Maximize(maximized) => {
write!(f, "Action::Maximize({maximized})")
}
diff --git a/winit/src/application.rs b/winit/src/application.rs
index be416ac8..ff5afa69 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -3,6 +3,7 @@
mod profiler;
mod state;
+use iced_graphics::core::window::SizeType;
pub use state::State;
use crate::conversion;
@@ -747,6 +748,21 @@ pub fn run_command<A, E>(
height,
});
}
+ window::Action::FetchSize {
+ size_type,
+ callback,
+ } => {
+ let width_height = match size_type {
+ SizeType::Inner => window.inner_size(),
+ SizeType::Outer => window.outer_size(),
+ };
+ let width_height =
+ (width_height.width, width_height.height);
+
+ proxy
+ .send_event(callback(width_height))
+ .expect("Send message to event loop")
+ }
window::Action::Maximize(maximized) => {
window.set_maximized(maximized);
}