Skip to content

Commit 2b0ad07

Browse files
authored
Merge pull request #113 from damywise/patch-10
[Windows] Fix #112: Add visibleSize and visiblePosition
2 parents 875a617 + 21b8f62 commit 2b0ad07

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

lib/src/window_manager.dart

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,15 @@ class WindowManager {
256256

257257
num visibleWidth = primaryDisplay['size']['width'];
258258
num visibleHeight = primaryDisplay['size']['height'];
259+
num visibleStartX = 0;
259260
num visibleStartY = 0;
260261

261262
if (primaryDisplay['visibleSize'] != null) {
262263
visibleWidth = primaryDisplay['visibleSize']['width'];
263264
visibleHeight = primaryDisplay['visibleSize']['height'];
264265
}
265266
if (primaryDisplay['visiblePosition'] != null) {
267+
visibleStartX = primaryDisplay['visiblePosition']['x'];
266268
visibleStartY = primaryDisplay['visiblePosition']['y'];
267269
}
268270
Offset position = Offset(0, 0);
@@ -271,42 +273,42 @@ class WindowManager {
271273
position = Offset(0, 0);
272274
} else if (alignment == Alignment.topCenter) {
273275
position = Offset(
274-
(visibleWidth / 2) - (windowSize.width / 2),
276+
visibleStartX + (visibleWidth / 2) - (windowSize.width / 2),
275277
visibleStartY + 0,
276278
);
277279
} else if (alignment == Alignment.topRight) {
278280
position = Offset(
279-
visibleWidth - windowSize.width,
281+
visibleStartX + visibleWidth - windowSize.width,
280282
visibleStartY + 0,
281283
);
282284
} else if (alignment == Alignment.centerLeft) {
283285
position = Offset(
284-
0,
286+
visibleStartX + 0,
285287
visibleStartY + ((visibleHeight / 2) - (windowSize.height / 2)),
286288
);
287289
} else if (alignment == Alignment.center) {
288290
position = Offset(
289-
(visibleWidth / 2) - (windowSize.width / 2),
291+
visibleStartX + (visibleWidth / 2) - (windowSize.width / 2),
290292
visibleStartY + ((visibleHeight / 2) - (windowSize.height / 2)),
291293
);
292294
} else if (alignment == Alignment.centerRight) {
293295
position = Offset(
294-
visibleWidth - windowSize.width,
296+
visibleStartX + visibleWidth - windowSize.width,
295297
visibleStartY + ((visibleHeight / 2) - (windowSize.height / 2)),
296298
);
297299
} else if (alignment == Alignment.bottomLeft) {
298300
position = Offset(
299-
0,
301+
visibleStartX + 0,
300302
visibleStartY + (visibleHeight - windowSize.height),
301303
);
302304
} else if (alignment == Alignment.bottomCenter) {
303305
position = Offset(
304-
(visibleWidth / 2) - (windowSize.width / 2),
306+
visibleStartX + (visibleWidth / 2) - (windowSize.width / 2),
305307
visibleStartY + (visibleHeight - windowSize.height),
306308
);
307309
} else if (alignment == Alignment.bottomRight) {
308310
position = Offset(
309-
visibleWidth - windowSize.width,
311+
visibleStartX + visibleWidth - windowSize.width,
310312
visibleStartY + (visibleHeight - windowSize.height),
311313
);
312314
}
@@ -321,18 +323,20 @@ class WindowManager {
321323

322324
num visibleWidth = primaryDisplay['size']['width'];
323325
num visibleHeight = primaryDisplay['size']['height'];
326+
num visibleStartX = 0;
324327
num visibleStartY = 0;
325328

326329
if (primaryDisplay['visibleSize'] != null) {
327330
visibleWidth = primaryDisplay['visibleSize']['width'];
328331
visibleHeight = primaryDisplay['visibleSize']['height'];
329332
}
330333
if (primaryDisplay['visiblePosition'] != null) {
334+
visibleStartX = primaryDisplay['visiblePosition']['x'];
331335
visibleStartY = primaryDisplay['visiblePosition']['y'];
332336
}
333337

334338
Offset position = Offset(
335-
(visibleWidth / 2) - (windowSize.width / 2),
339+
visibleStartX + (visibleWidth / 2) - (windowSize.width / 2),
336340
visibleStartY + ((visibleHeight / 2) - (windowSize.height / 2)),
337341
);
338342

windows/window_manager.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,12 +725,35 @@ flutter::EncodableMap WindowManager::GetPrimaryDisplay(
725725
double height =
726726
(info.rcMonitor.bottom - info.rcMonitor.top) / devicePixelRatio;
727727

728+
double visibleWidth =
729+
(info.rcWork.right - info.rcWork.left) / devicePixelRatio;
730+
double visibleHeight =
731+
(info.rcWork.bottom - info.rcWork.top) / devicePixelRatio;
732+
733+
double x = (info.rcWork.left) / devicePixelRatio;
734+
double y = (info.rcWork.top) / devicePixelRatio;
735+
728736
flutter::EncodableMap size = flutter::EncodableMap();
737+
flutter::EncodableMap visibleSize = flutter::EncodableMap();
738+
flutter::EncodableMap visiblePosition = flutter::EncodableMap();
739+
729740
size[flutter::EncodableValue("width")] = flutter::EncodableValue(width);
730741
size[flutter::EncodableValue("height")] = flutter::EncodableValue(height);
731742

743+
visibleSize[flutter::EncodableValue("width")] =
744+
flutter::EncodableValue(visibleWidth);
745+
visibleSize[flutter::EncodableValue("height")] =
746+
flutter::EncodableValue(visibleHeight);
747+
748+
visiblePosition[flutter::EncodableValue("x")] = flutter::EncodableValue(x);
749+
visiblePosition[flutter::EncodableValue("y")] = flutter::EncodableValue(y);
750+
732751
flutter::EncodableMap display = flutter::EncodableMap();
733752
display[flutter::EncodableValue("size")] = flutter::EncodableValue(size);
753+
display[flutter::EncodableValue("visibleSize")] =
754+
flutter::EncodableValue(visibleSize);
755+
display[flutter::EncodableValue("visiblePosition")] =
756+
flutter::EncodableValue(visiblePosition);
734757

735758
return display;
736759
}

0 commit comments

Comments
 (0)