mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2025-01-23 02:16:33 +11:00
Disable overscan compensation for external displays on iOS (#1088)
This commit is contained in:
parent
73cf10e4f3
commit
c0c22c8ff1
3 changed files with 31 additions and 4 deletions
|
@ -16,6 +16,8 @@
|
||||||
- On iOS, fix a crash that occurred while acquiring a monitor's name.
|
- On iOS, fix a crash that occurred while acquiring a monitor's name.
|
||||||
- On iOS, fix armv7-apple-ios compile target.
|
- On iOS, fix armv7-apple-ios compile target.
|
||||||
- Removed the `T: Clone` requirement from the `Clone` impl of `EventLoopProxy<T>`.
|
- Removed the `T: Clone` requirement from the `Clone` impl of `EventLoopProxy<T>`.
|
||||||
|
- On iOS, disable overscan compensation for external displays (removes black
|
||||||
|
bars surrounding the image).
|
||||||
|
|
||||||
# 0.20.0 Alpha 2 (2019-07-09)
|
# 0.20.0 Alpha 2 (2019-07-09)
|
||||||
|
|
||||||
|
|
|
@ -201,6 +201,23 @@ impl Into<ScreenEdge> for UIRectEdge {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[repr(transparent)]
|
||||||
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
|
pub struct UIScreenOverscanCompensation(NSInteger);
|
||||||
|
|
||||||
|
unsafe impl Encode for UIScreenOverscanCompensation {
|
||||||
|
fn encode() -> Encoding {
|
||||||
|
NSInteger::encode()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
impl UIScreenOverscanCompensation {
|
||||||
|
pub const Scale: UIScreenOverscanCompensation = UIScreenOverscanCompensation(0);
|
||||||
|
pub const InsetBounds: UIScreenOverscanCompensation = UIScreenOverscanCompensation(1);
|
||||||
|
pub const None: UIScreenOverscanCompensation = UIScreenOverscanCompensation(2);
|
||||||
|
}
|
||||||
|
|
||||||
#[link(name = "UIKit", kind = "framework")]
|
#[link(name = "UIKit", kind = "framework")]
|
||||||
#[link(name = "CoreFoundation", kind = "framework")]
|
#[link(name = "CoreFoundation", kind = "framework")]
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
|
@ -16,7 +16,7 @@ use crate::{
|
||||||
event_loop,
|
event_loop,
|
||||||
ffi::{
|
ffi::{
|
||||||
id, CGFloat, CGPoint, CGRect, CGSize, UIEdgeInsets, UIInterfaceOrientationMask,
|
id, CGFloat, CGPoint, CGRect, CGSize, UIEdgeInsets, UIInterfaceOrientationMask,
|
||||||
UIRectEdge,
|
UIRectEdge, UIScreenOverscanCompensation,
|
||||||
},
|
},
|
||||||
monitor, view, EventLoopWindowTarget, MonitorHandle,
|
monitor, view, EventLoopWindowTarget, MonitorHandle,
|
||||||
},
|
},
|
||||||
|
@ -175,14 +175,22 @@ impl Inner {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let current: id = msg_send![self.window, screen];
|
|
||||||
let bounds: CGRect = msg_send![uiscreen, bounds];
|
|
||||||
|
|
||||||
// this is pretty slow on iOS, so avoid doing it if we can
|
// this is pretty slow on iOS, so avoid doing it if we can
|
||||||
|
let current: id = msg_send![self.window, screen];
|
||||||
if uiscreen != current {
|
if uiscreen != current {
|
||||||
let () = msg_send![self.window, setScreen: uiscreen];
|
let () = msg_send![self.window, setScreen: uiscreen];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let bounds: CGRect = msg_send![uiscreen, bounds];
|
||||||
let () = msg_send![self.window, setFrame: bounds];
|
let () = msg_send![self.window, setFrame: bounds];
|
||||||
|
|
||||||
|
// For external displays, we must disable overscan compensation or
|
||||||
|
// the displayed image will have giant black bars surrounding it on
|
||||||
|
// each side
|
||||||
|
let () = msg_send![
|
||||||
|
uiscreen,
|
||||||
|
setOverscanCompensation: UIScreenOverscanCompensation::None
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue