17 struct MonitorEnumState {
25 : engine_(engine), win32_(engine->windows_proc_table()) {}
29 BOOL CALLBACK DisplayMonitor::EnumMonitorCallback(HMONITOR monitor,
33 MonitorEnumState* state =
reinterpret_cast<MonitorEnumState*
>(data);
35 std::vector<FlutterEngineDisplay>*
displays = state->displays;
37 MONITORINFOEXW monitor_info = {};
38 monitor_info.cbSize =
sizeof(monitor_info);
39 if (self->win32_->GetMonitorInfoW(monitor, &monitor_info) == 0) {
46 DEVMODEW dev_mode = {};
47 dev_mode.dmSize =
sizeof(dev_mode);
48 if (!self->win32_->EnumDisplaySettingsW(monitor_info.szDevice,
49 ENUM_CURRENT_SETTINGS, &dev_mode)) {
58 FlutterEngineDisplay display = {};
59 display.struct_size =
sizeof(FlutterEngineDisplay);
60 display.display_id =
reinterpret_cast<FlutterEngineDisplayId
>(monitor);
61 display.single_display =
false;
62 display.refresh_rate = dev_mode.dmDisplayFrequency;
63 display.width = monitor_info.rcMonitor.right - monitor_info.rcMonitor.left;
64 display.height = monitor_info.rcMonitor.bottom - monitor_info.rcMonitor.top;
65 display.device_pixel_ratio =
66 static_cast<double>(dpi) /
static_cast<double>(
kDefaultDpi);
83 case WM_DISPLAYCHANGE:
92 std::vector<FlutterEngineDisplay>
displays;
93 MonitorEnumState state = {
this, &
displays};
94 win32_->EnumDisplayMonitors(
nullptr,
nullptr, EnumMonitorCallback,
95 reinterpret_cast<LPARAM
>(&state));
std::vector< FlutterEngineDisplay > GetDisplays() const
DisplayMonitor(FlutterWindowsEngine *engine)
bool HandleWindowMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
void UpdateDisplay(const std::vector< FlutterEngineDisplay > &displays)
const DisplayMonitor * display_monitor
std::vector< FlutterEngineDisplay > * displays
UINT GetDpiForMonitor(HMONITOR monitor)
constexpr UINT kDefaultDpi