13DWORD HostWindowDialog::GetWindowStyleForDialog(
14 std::optional<HWND>
const& owner_window,
16 DWORD window_style = WS_OVERLAPPED | WS_CAPTION;
18 window_style |= WS_THICKFRAME;
22 window_style |= WS_MINIMIZEBOX | WS_SYSMENU;
27DWORD HostWindowDialog::GetExtendedWindowStyleForDialog(
28 std::optional<HWND>
const& owner_window) {
29 DWORD extended_window_style = WS_EX_DLGMODALFRAME;
33 if (GetWindowLongPtr(*owner_window, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) {
34 extended_window_style |= WS_EX_TOOLWINDOW;
37 return extended_window_style;
45 std::optional<HWND>
const& owner_window,
52 .window_style = GetWindowStyleForDialog(owner_window, resizable),
53 .extended_window_style = GetExtendedWindowStyleForDialog(owner_window),
54 .box_constraints = constraints,
55 .initial_window_rect =
56 GetInitialRect(
engine, preferred_size, constraints, owner_window,
59 .owner_window = owner_window,
66 if (HMENU hMenu = GetSystemMenu(hwnd, FALSE)) {
67 EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
86 std::optional<HWND>
const& owner_window,
89 auto const window_style = GetWindowStyleForDialog(owner_window, resizable);
90 auto const extended_window_style =
91 GetExtendedWindowStyleForDialog(owner_window);
105 std::optional<Size>
const window_size =
107 *
engine->windows_proc_table(),
Size(client_width, client_height),
109 extended_window_style, owner_window);
111 Point window_origin = {CW_USEDEFAULT, CW_USEDEFAULT};
115 DwmGetWindowAttribute(*owner_window, DWMWA_EXTENDED_FRAME_BOUNDS, &frame,
117 window_origin = {(frame.left + frame.right - window_size->width()) * 0.5,
118 (frame.top + frame.bottom - window_size->height()) * 0.5};
121 return {window_origin,
122 window_size ? *window_size :
Size{CW_USEDEFAULT, CW_USEDEFAULT}};
142 if (
auto const result =
155void HostWindowDialog::UpdateModalState() {
167 std::optional<FlutterEngineDisplayId> display_id) {}
WindowProcDelegateManager * window_proc_delegate_manager()
bool GetFullscreen() const override
void SetFullscreen(bool fullscreen, std::optional< FlutterEngineDisplayId > display_id) override
LRESULT HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) override
HostWindowDialog(WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowSizeRequest &preferred_size, const BoxConstraints &constraints, LPCWSTR title, std::optional< HWND > const &owner_window, bool sized_to_content, bool resizable)
~HostWindowDialog() override
void InitializeFlutterView(HostWindowInitializationParams const ¶ms)
void HandleWindowActivation(HWND hwnd, WPARAM wparam)
std::unique_ptr< FlutterWindowsViewController > view_controller_
HostWindow * GetOwnerWindow() const
void UpdateModalStateLayer()
static void FocusRootViewOf(HostWindow *window)
FlutterWindowsEngine * engine_
virtual LRESULT HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
static std::optional< Size > GetWindowSizeForClientSize(WindowsProcTable const &win32, Size const &client_size, std::optional< Size > smallest, std::optional< Size > biggest, DWORD window_style, DWORD extended_window_style, std::optional< HWND > const &owner_hwnd)
FlutterWindowsViewSizingDelegate * AsSizingDelegate()
std::optional< LRESULT > OnTopLevelWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) const
G_BEGIN_DECLS gboolean sized_to_content
#define FML_CHECK(condition)
WindowArchetype archetype
double preferred_view_height
double preferred_view_width
bool has_preferred_view_size