Skip to content

Commit 0f56cee

Browse files
committed
[windows] Implement center method #59
1 parent bf008b6 commit 0f56cee

File tree

5 files changed

+56
-5
lines changed

5 files changed

+56
-5
lines changed

.vscode/settings.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"files.associations": {
3+
"xstring": "cpp",
4+
"map": "cpp",
5+
"chrono": "cpp",
6+
"functional": "cpp",
7+
"optional": "cpp",
8+
"system_error": "cpp",
9+
"type_traits": "cpp",
10+
"xlocmon": "cpp",
11+
"xlocnum": "cpp",
12+
"xtr1common": "cpp"
13+
}
14+
}

example/lib/main.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ void main() async {
1717
await windowManager.setTitleBarStyle('hidden');
1818
}
1919
await windowManager.setSize(Size(800, 600));
20+
await windowManager.center();
2021
await windowManager.show();
2122
await windowManager.focus();
2223
await windowManager.setSkipTaskbar(false);

lib/src/window_manager.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,13 @@ class WindowManager {
210210
Map<String, dynamic> primaryDisplay = await _getPrimaryDisplay();
211211
print(primaryDisplay);
212212

213-
num visibleWidth = primaryDisplay['visibleSize']['width'];
214-
num visibleHeight = primaryDisplay['visibleSize']['height'];
213+
num visibleWidth = primaryDisplay['size']['width'];
214+
num visibleHeight = primaryDisplay['size']['height'];
215+
216+
if (primaryDisplay['visibleSize'] != null) {
217+
visibleWidth = primaryDisplay['visibleSize']['width'];
218+
visibleHeight = primaryDisplay['visibleSize']['height'];
219+
}
215220

216221
Offset position = Offset(
217222
(visibleWidth / 2) - (windowSize.width / 2),
@@ -445,6 +450,7 @@ class WindowManager {
445450
final Map<String, dynamic> arguments = {
446451
'devicePixelRatio': window.devicePixelRatio,
447452
};
453+
print(arguments);
448454
final Map<dynamic, dynamic> resultData =
449455
await _channel.invokeMethod('getPrimaryDisplay', arguments);
450456
return Map<String, dynamic>.from(resultData);

windows/window_manager.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ class WindowManager {
8787
double WindowManager::GetOpacity();
8888
void WindowManager::SetOpacity(const flutter::EncodableMap& args);
8989
void WindowManager::StartDragging();
90+
flutter::EncodableMap WindowManager::GetPrimaryDisplay(
91+
const flutter::EncodableMap& args);
9092

9193
private:
9294
bool g_is_window_fullscreen = false;
@@ -579,4 +581,29 @@ void WindowManager::StartDragging() {
579581
SendMessage(GetMainWindow(), WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
580582
}
581583

584+
flutter::EncodableMap WindowManager::GetPrimaryDisplay(
585+
const flutter::EncodableMap& args) {
586+
double devicePixelRatio =
587+
std::get<double>(args.at(flutter::EncodableValue("devicePixelRatio")));
588+
POINT ptZero = {0, 0};
589+
HMONITOR monitor = MonitorFromPoint(ptZero, MONITOR_DEFAULTTOPRIMARY);
590+
MONITORINFO info;
591+
info.cbSize = sizeof(MONITORINFO);
592+
::GetMonitorInfo(monitor, &info);
593+
594+
double width =
595+
(info.rcMonitor.right - info.rcMonitor.left) / devicePixelRatio;
596+
double height =
597+
(info.rcMonitor.bottom - info.rcMonitor.top) / devicePixelRatio;
598+
599+
flutter::EncodableMap size = flutter::EncodableMap();
600+
size[flutter::EncodableValue("width")] = flutter::EncodableValue(width);
601+
size[flutter::EncodableValue("height")] = flutter::EncodableValue(height);
602+
603+
flutter::EncodableMap display = flutter::EncodableMap();
604+
display[flutter::EncodableValue("size")] = flutter::EncodableValue(size);
605+
606+
return display;
607+
}
608+
582609
} // namespace

windows/window_manager_plugin.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,9 +348,7 @@ void WindowManagerPlugin::HandleMethodCall(
348348
} else if (method_name.compare("getTitleBarHeight") == 0) {
349349
int value = window_manager->GetTitleBarHeight();
350350
result->Success(flutter::EncodableValue(value));
351-
}
352-
353-
else if (method_name.compare("setSkipTaskbar") == 0) {
351+
} else if (method_name.compare("setSkipTaskbar") == 0) {
354352
const flutter::EncodableMap& args =
355353
std::get<flutter::EncodableMap>(*method_call.arguments());
356354
window_manager->SetSkipTaskbar(args);
@@ -366,6 +364,11 @@ void WindowManagerPlugin::HandleMethodCall(
366364
} else if (method_name.compare("startDragging") == 0) {
367365
window_manager->StartDragging();
368366
result->Success(flutter::EncodableValue(true));
367+
} else if (method_name.compare("getPrimaryDisplay") == 0) {
368+
const flutter::EncodableMap& args =
369+
std::get<flutter::EncodableMap>(*method_call.arguments());
370+
flutter::EncodableMap value = window_manager->GetPrimaryDisplay(args);
371+
result->Success(flutter::EncodableValue(value));
369372
} else {
370373
result->NotImplemented();
371374
}

0 commit comments

Comments
 (0)