Skip to content

Commit ea14c6b

Browse files
authored
feat: split min/max size constraints (#759)
* feat: split min/max size constraints, closes #138 * windows impl * linux impl * fix linux impl * cleanup linux impl * macOS impl * imports * ios build * macos build * unsafe * merge `set_min/max_width/height` into a single function * fix macos build * macos again * use macros to generate DPI types ref: rust-windowing/winit#2148 * fix windows impl * fmt
1 parent bb3c53d commit ea14c6b

File tree

13 files changed

+624
-561
lines changed

13 files changed

+624
-561
lines changed

examples/min_max_size.rs

+51-6
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,76 @@
33
// SPDX-License-Identifier: Apache-2.0
44

55
use tao::{
6-
dpi::LogicalSize,
7-
event::{Event, WindowEvent},
6+
dpi::LogicalPixel,
7+
event::{ElementState, Event, KeyEvent, WindowEvent},
88
event_loop::{ControlFlow, EventLoop},
9-
window::WindowBuilder,
9+
keyboard::Key,
10+
window::{WindowBuilder, WindowSizeConstraints},
1011
};
1112

1213
#[allow(clippy::single_match)]
1314
fn main() {
1415
env_logger::init();
1516
let event_loop = EventLoop::new();
1617

18+
let min_width = 400.0;
19+
let max_width = 800.0;
20+
let min_height = 200.0;
21+
let max_height = 400.0;
22+
let mut size_constraints = WindowSizeConstraints::default();
23+
1724
let window = WindowBuilder::new().build(&event_loop).unwrap();
1825

19-
window.set_min_inner_size(Some(LogicalSize::new(400.0, 200.0)));
20-
window.set_max_inner_size(Some(LogicalSize::new(800.0, 400.0)));
26+
eprintln!("constraint keys:");
27+
eprintln!(" (E) Toggle the min width");
28+
eprintln!(" (F) Toggle the max width");
29+
eprintln!(" (P) Toggle the min height");
30+
eprintln!(" (V) Toggle the max height");
2131

2232
event_loop.run(move |event, _, control_flow| {
2333
*control_flow = ControlFlow::Wait;
24-
println!("{:?}", event);
2534

2635
match event {
2736
Event::WindowEvent {
2837
event: WindowEvent::CloseRequested,
2938
..
3039
} => *control_flow = ControlFlow::Exit,
40+
41+
Event::WindowEvent {
42+
event:
43+
WindowEvent::KeyboardInput {
44+
event:
45+
KeyEvent {
46+
logical_key: Key::Character(key_str),
47+
state: ElementState::Released,
48+
..
49+
},
50+
..
51+
},
52+
..
53+
} => match key_str {
54+
"e" => {
55+
size_constraints.min_width =
56+
(!size_constraints.min_width.is_some()).then_some(LogicalPixel::new(min_width).into());
57+
window.set_inner_size_constraints(size_constraints);
58+
}
59+
"f" => {
60+
size_constraints.max_width =
61+
(!size_constraints.max_width.is_some()).then_some(LogicalPixel::new(max_width).into());
62+
window.set_inner_size_constraints(size_constraints);
63+
}
64+
"p" => {
65+
size_constraints.min_height = (!size_constraints.min_height.is_some())
66+
.then_some(LogicalPixel::new(min_height).into());
67+
window.set_inner_size_constraints(size_constraints);
68+
}
69+
"v" => {
70+
size_constraints.max_height = (!size_constraints.max_height.is_some())
71+
.then_some(LogicalPixel::new(max_height).into());
72+
window.set_inner_size_constraints(size_constraints);
73+
}
74+
_ => {}
75+
},
3176
_ => (),
3277
}
3378
});

0 commit comments

Comments
 (0)