utils: add cast_* methods to allow more type-safe casting
Relying on just `as_any` was error prone and will become redundant in the future, once upcasting will be stable, we also won't to impose a restriction on to which concrete type we're casting, since casting to a type that doesn't implement a base trait doesn't make much sense. Co-authored-by: Kirill Chibisov <contact@kchibisov.com>
This commit is contained in:
parent
5cada36ae8
commit
16d5f46db1
19 changed files with 158 additions and 136 deletions
|
|
@ -556,7 +556,7 @@ fn new_window(
|
|||
let screen = match attrs.fullscreen.clone() {
|
||||
Some(Fullscreen::Borderless(Some(monitor)))
|
||||
| Some(Fullscreen::Exclusive(monitor, _)) => {
|
||||
let monitor = monitor.as_any().downcast_ref::<MonitorHandle>().unwrap();
|
||||
let monitor = monitor.cast_ref::<MonitorHandle>().unwrap();
|
||||
monitor.ns_screen(mtm).or_else(|| NSScreen::mainScreen(mtm))
|
||||
},
|
||||
Some(Fullscreen::Borderless(None)) => NSScreen::mainScreen(mtm),
|
||||
|
|
@ -1460,7 +1460,7 @@ impl WindowDelegate {
|
|||
if let Some(ref fullscreen) = fullscreen {
|
||||
let new_screen = match fullscreen {
|
||||
Fullscreen::Borderless(Some(monitor)) | Fullscreen::Exclusive(monitor, _) => {
|
||||
let monitor = monitor.as_any().downcast_ref::<MonitorHandle>().unwrap();
|
||||
let monitor = monitor.cast_ref::<MonitorHandle>().unwrap();
|
||||
monitor.ns_screen(mtm)
|
||||
},
|
||||
Fullscreen::Borderless(None) => {
|
||||
|
|
@ -1519,7 +1519,7 @@ impl WindowDelegate {
|
|||
cgerr(CGDisplayCapture(display_id)).unwrap();
|
||||
}
|
||||
|
||||
let monitor = monitor.as_any().downcast_ref::<MonitorHandle>().unwrap();
|
||||
let monitor = monitor.cast_ref::<MonitorHandle>().unwrap();
|
||||
let video_mode =
|
||||
match monitor.video_mode_handles().find(|mode| &mode.mode == video_mode) {
|
||||
Some(video_mode) => video_mode,
|
||||
|
|
@ -1587,7 +1587,7 @@ impl WindowDelegate {
|
|||
toggle_fullscreen(self.window());
|
||||
},
|
||||
(Some(Fullscreen::Exclusive(monitor, _)), None) => {
|
||||
let monitor = monitor.as_any().downcast_ref::<MonitorHandle>().unwrap();
|
||||
let monitor = monitor.cast_ref::<MonitorHandle>().unwrap();
|
||||
restore_and_release_display(monitor);
|
||||
toggle_fullscreen(self.window());
|
||||
},
|
||||
|
|
@ -1618,7 +1618,7 @@ impl WindowDelegate {
|
|||
);
|
||||
app.setPresentationOptions(presentation_options);
|
||||
|
||||
let monitor = monitor.as_any().downcast_ref::<MonitorHandle>().unwrap();
|
||||
let monitor = monitor.cast_ref::<MonitorHandle>().unwrap();
|
||||
restore_and_release_display(monitor);
|
||||
|
||||
// Restore the normal window level following the Borderless fullscreen
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue