From 270c08a030bf359c608114e9b008bf8f551f7a8b Mon Sep 17 00:00:00 2001 From: Unknown <55922348+55nknown@users.noreply.github.com> Date: Wed, 2 Feb 2022 16:47:27 +0100 Subject: [PATCH] min and max window size (#1171) --- egui-winit/src/epi.rs | 22 ++++++++++++++++++---- epi/src/lib.rs | 8 ++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/egui-winit/src/epi.rs b/egui-winit/src/epi.rs index f9eeaece..995d8f8b 100644 --- a/egui-winit/src/epi.rs +++ b/egui-winit/src/epi.rs @@ -1,3 +1,13 @@ +use egui::Vec2; +use winit::dpi::LogicalSize; + +pub fn points_to_size(points: Vec2) -> LogicalSize { + winit::dpi::LogicalSize { + width: points.x as f64, + height: points.y as f64, + } +} + pub fn window_builder( native_options: &epi::NativeOptions, window_settings: &Option, @@ -12,6 +22,13 @@ pub fn window_builder( .with_transparent(native_options.transparent) .with_window_icon(window_icon); + if let Some(min_size) = native_options.min_window_size { + window_builder = window_builder.with_min_inner_size(points_to_size(min_size)); + } + if let Some(max_size) = native_options.max_window_size { + window_builder = window_builder.with_max_inner_size(points_to_size(max_size)); + } + window_builder = window_builder_drag_and_drop(window_builder, native_options.drag_and_drop_support); @@ -20,10 +37,7 @@ pub fn window_builder( if let Some(window_settings) = window_settings { window_builder = window_settings.initialize_window(window_builder); } else if let Some(initial_size_points) = initial_size_points { - window_builder = window_builder.with_inner_size(winit::dpi::LogicalSize { - width: initial_size_points.x as f64, - height: initial_size_points.y as f64, - }); + window_builder = window_builder.with_inner_size(points_to_size(initial_size_points)); } window_builder diff --git a/epi/src/lib.rs b/epi/src/lib.rs index bc1b5ea1..1183cc06 100644 --- a/epi/src/lib.rs +++ b/epi/src/lib.rs @@ -233,6 +233,12 @@ pub struct NativeOptions { /// The initial size of the native window in points (logical pixels). pub initial_window_size: Option, + /// The minimum window size + pub min_window_size: Option, + + /// The maximum window size + pub max_window_size: Option, + /// Should the app window be resizable? pub resizable: bool, @@ -251,6 +257,8 @@ impl Default for NativeOptions { drag_and_drop_support: false, icon_data: None, initial_window_size: None, + min_window_size: None, + max_window_size: None, resizable: true, transparent: false, }