mirror of
https://github.com/tauri-apps/tao.git
synced 2026-01-31 00:35:16 +01:00
fix(macos): check monitor from window initial position to determine size (#1110)
This commit is contained in:
committed by
GitHub
parent
ba65486abe
commit
67f00588b4
5
.github/fix-window-size.md
vendored
Normal file
5
.github/fix-window-size.md
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"tao": patch
|
||||
---
|
||||
|
||||
Properly check target monitor from window initial position to determine its size with the proper scale factor on macOS.
|
||||
@@ -174,13 +174,21 @@ fn create_window(
|
||||
let monitor_screen = monitor.ns_screen();
|
||||
Some(monitor_screen.unwrap_or_else(|| appkit::NSScreen::mainScreen(mtm).unwrap()))
|
||||
}
|
||||
Some(Fullscreen::Borderless(None)) => Some(appkit::NSScreen::mainScreen(mtm).unwrap()),
|
||||
Some(Fullscreen::Borderless(None)) => Some(
|
||||
attrs
|
||||
.position
|
||||
.and_then(screen_from_position)
|
||||
.unwrap_or_else(|| appkit::NSScreen::mainScreen(mtm).unwrap()),
|
||||
),
|
||||
None => None,
|
||||
};
|
||||
let frame = match &screen {
|
||||
Some(screen) => NSScreen::frame(screen),
|
||||
None => {
|
||||
let screen = NSScreen::mainScreen(mtm).unwrap();
|
||||
let screen = attrs
|
||||
.position
|
||||
.and_then(screen_from_position)
|
||||
.unwrap_or_else(|| appkit::NSScreen::mainScreen(mtm).unwrap());
|
||||
let scale_factor = NSScreen::backingScaleFactor(&screen) as f64;
|
||||
let desired_size = attrs
|
||||
.inner_size
|
||||
@@ -323,6 +331,25 @@ fn create_window(
|
||||
}
|
||||
}
|
||||
|
||||
fn screen_from_position(position: Position) -> Option<Retained<NSScreen>> {
|
||||
for m in monitor::available_monitors() {
|
||||
let monitor_pos = m.position();
|
||||
let monitor_size = m.size();
|
||||
|
||||
// type annotations required for 32bit targets.
|
||||
let window_position = position.to_physical::<i32>(m.scale_factor());
|
||||
|
||||
let is_in_monitor = monitor_pos.x <= window_position.x
|
||||
&& window_position.x < monitor_pos.x + monitor_size.width as i32
|
||||
&& monitor_pos.y <= window_position.y
|
||||
&& window_position.y < monitor_pos.y + monitor_size.height as i32;
|
||||
if is_in_monitor {
|
||||
return m.ns_screen();
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
pub(super) fn get_ns_theme() -> Theme {
|
||||
unsafe {
|
||||
let appearances: Vec<Retained<NSString>> = vec![
|
||||
|
||||
Reference in New Issue
Block a user