Skip to content

Commit 5d765c3

Browse files
committed
[macos] Fix incorrect centering when multi-screen
1 parent 5807a96 commit 5d765c3

File tree

7 files changed

+35
-21
lines changed

7 files changed

+35
-21
lines changed

README-ZH.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@
145145

146146
```yaml
147147
dependencies:
148-
window_manager: ^0.3.5
148+
window_manager: ^0.3.6
149149
```
150150
151151

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ Add this to your package's `pubspec.yaml` file:
146146

147147
```yaml
148148
dependencies:
149-
window_manager: ^0.3.5
149+
window_manager: ^0.3.6
150150
```
151151
152152
Or

example/pubspec.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,10 @@ packages:
190190
dependency: transitive
191191
description:
192192
name: screen_retriever
193-
sha256: "4931f226ca158123ccd765325e9fbf360bfed0af9b460a10f960f9bb13d58323"
193+
sha256: "63694235c194d0d953f698fbb04471eb6c8d0e6bbb283a369b40414ed07ef83a"
194194
url: "https://pub.dev"
195195
source: hosted
196-
version: "0.1.6"
196+
version: "0.1.8"
197197
shortid:
198198
dependency: transitive
199199
description:
@@ -301,7 +301,7 @@ packages:
301301
path: ".."
302302
relative: true
303303
source: path
304-
version: "0.3.5"
304+
version: "0.3.6"
305305
sdks:
306306
dart: ">=3.0.0 <4.0.0"
307307
flutter: ">=3.3.0"

lib/src/utils/calc_window_position.dart

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,39 @@ Future<Offset> calcWindowPosition(
66
Alignment alignment,
77
) async {
88
Display primaryDisplay = await screenRetriever.getPrimaryDisplay();
9+
List<Display> allDisplays = await screenRetriever.getAllDisplays();
10+
Offset cursorScreenPoint = await screenRetriever.getCursorScreenPoint();
911

10-
num visibleWidth = primaryDisplay.size.width;
11-
num visibleHeight = primaryDisplay.size.height;
12+
Display currentDisplay = allDisplays.firstWhere(
13+
(display) => Rect.fromLTWH(
14+
display.visiblePosition!.dx,
15+
display.visiblePosition!.dy,
16+
display.size.width,
17+
display.size.height,
18+
).contains(cursorScreenPoint),
19+
orElse: () => primaryDisplay,
20+
);
21+
22+
num visibleWidth = currentDisplay.size.width;
23+
num visibleHeight = currentDisplay.size.height;
1224
num visibleStartX = 0;
1325
num visibleStartY = 0;
1426

15-
if (primaryDisplay.visibleSize != null) {
16-
visibleWidth = primaryDisplay.visibleSize!.width;
17-
visibleHeight = primaryDisplay.visibleSize!.height;
27+
if (currentDisplay.visibleSize != null) {
28+
visibleWidth = currentDisplay.visibleSize!.width;
29+
visibleHeight = currentDisplay.visibleSize!.height;
1830
}
19-
if (primaryDisplay.visiblePosition != null) {
20-
visibleStartX = primaryDisplay.visiblePosition!.dx;
21-
visibleStartY = primaryDisplay.visiblePosition!.dy;
31+
if (currentDisplay.visiblePosition != null) {
32+
visibleStartX = currentDisplay.visiblePosition!.dx;
33+
visibleStartY = currentDisplay.visiblePosition!.dy;
2234
}
2335
Offset position = const Offset(0, 0);
2436

2537
if (alignment == Alignment.topLeft) {
26-
position = const Offset(0, 0);
38+
position = Offset(
39+
visibleStartX + 0,
40+
visibleStartY + 0,
41+
);
2742
} else if (alignment == Alignment.topCenter) {
2843
position = Offset(
2944
visibleStartX + (visibleWidth / 2) - (windowSize.width / 2),
@@ -65,6 +80,5 @@ Future<Offset> calcWindowPosition(
6580
visibleStartY + (visibleHeight - windowSize.height),
6681
);
6782
}
68-
6983
return position;
7084
}

macos/Classes/WindowManager.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ extension NSWindow {
4040
extension NSRect {
4141
var topLeft: CGPoint {
4242
set {
43-
let screenFrameRect = NSScreen.main!.frame
43+
let screenFrameRect = NSScreen.screens[0].frame
4444
origin.x = newValue.x
4545
origin.y = screenFrameRect.height - newValue.y - size.height
4646
}
4747
get {
48-
let screenFrameRect = NSScreen.main!.frame
48+
let screenFrameRect = NSScreen.screens[0].frame
4949
return CGPoint(x: origin.x, y: screenFrameRect.height - origin.y - size.height)
5050
}
5151
}

pubspec.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,10 @@ packages:
215215
dependency: "direct main"
216216
description:
217217
name: screen_retriever
218-
sha256: "4931f226ca158123ccd765325e9fbf360bfed0af9b460a10f960f9bb13d58323"
218+
sha256: "63694235c194d0d953f698fbb04471eb6c8d0e6bbb283a369b40414ed07ef83a"
219219
url: "https://pub.dev"
220220
source: hosted
221-
version: "0.1.6"
221+
version: "0.1.8"
222222
sky_engine:
223223
dependency: transitive
224224
description: flutter

pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: window_manager
22
description: This plugin allows Flutter desktop apps to resizing and repositioning the window.
3-
version: 0.3.5
3+
version: 0.3.6
44
homepage: https://github.com/leanflutter/window_manager
55

66
platforms:
@@ -23,7 +23,7 @@ dependencies:
2323
flutter:
2424
sdk: flutter
2525
path: ^1.8.2
26-
screen_retriever: ^0.1.6
26+
screen_retriever: ^0.1.8
2727

2828
dev_dependencies:
2929
dependency_validator: ^3.0.0

0 commit comments

Comments
 (0)