Flutter Windows Embedder
flutter::HostWindowPopup Class Reference

#include <host_window_popup.h>

Inheritance diagram for flutter::HostWindowPopup:
flutter::HostWindowSized flutter::HostWindow flutter::FlutterWindowsViewSizingDelegate

Public Member Functions

 HostWindowPopup (WindowManager *window_manager, FlutterWindowsEngine *engine, const BoxConstraints &constraints, GetWindowPositionCallback get_position_callback, HWND parent)
 
void UpdatePosition ()
 
 ~HostWindowPopup () override
 
- Public Member Functions inherited from flutter::HostWindow
virtual ~HostWindow ()
 
HWND GetWindowHandle () const
 
HWND GetFlutterViewWindowHandle () const
 
void SetContentSize (const WindowSizeRequest &size)
 
void SetConstraints (const WindowConstraints &constraints)
 
virtual void SetFullscreen (bool fullscreen, std::optional< FlutterEngineDisplayId > display_id)
 
virtual bool GetFullscreen () const
 
HostWindowGetOwnerWindow () const
 
void UpdateModalStateLayer ()
 

Protected Member Functions

void ApplyContentSize (int32_t physical_width, int32_t physical_height) override
 
- Protected Member Functions inherited from flutter::HostWindowSized
 HostWindowSized (WindowManager *window_manager, FlutterWindowsEngine *engine, bool resizable)
 
 ~HostWindowSized () override=0
 
FlutterWindowsViewSizingDelegateAsSizingDelegate ()
 
- Protected Member Functions inherited from flutter::HostWindow
void InitializeFlutterView (HostWindowInitializationParams const &params)
 
 HostWindow (WindowManager *window_manager, FlutterWindowsEngine *engine)
 
virtual LRESULT HandleMessage (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 
void HandleWindowActivation (HWND hwnd, WPARAM wparam)
 
void EnableRecursively (bool enable)
 
HostWindowFindFirstEnabledDescendant () const
 
WindowArchetype GetArchetype () const
 
std::vector< HostWindow * > GetOwnedWindows () const
 
void DisableRecursively ()
 
 FML_DISALLOW_COPY_AND_ASSIGN (HostWindow)
 

Additional Inherited Members

- Static Public Member Functions inherited from flutter::HostWindow
static std::unique_ptr< HostWindowCreateRegularWindow (WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowSizeRequest &preferred_size, const WindowConstraints &preferred_constraints, LPCWSTR title, bool sized_to_content, bool resizable)
 
static std::unique_ptr< HostWindowCreateDialogWindow (WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowSizeRequest &preferred_size, const WindowConstraints &preferred_constraints, LPCWSTR title, HWND parent, bool sized_to_content, bool resizable)
 
static std::unique_ptr< HostWindowCreateTooltipWindow (WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowConstraints &preferred_constraints, GetWindowPositionCallback get_position_callback, HWND parent)
 
static std::unique_ptr< HostWindowCreatePopupWindow (WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowConstraints &preferred_constraints, GetWindowPositionCallback get_position_callback, HWND parent)
 
static HostWindowGetThisFromHandle (HWND hwnd)
 
static ActualWindowSize GetWindowContentSize (HWND hwnd)
 
- Static Protected Member Functions inherited from flutter::HostWindow
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)
 
static void FocusRootViewOf (HostWindow *window)
 
static LRESULT WndProc (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 
- Protected Attributes inherited from flutter::HostWindowSized
const bool resizable_
 
std::shared_ptr< int > view_alive_
 
int physical_width_ = 0
 
int physical_height_ = 0
 
- Protected Attributes inherited from flutter::HostWindow
friend WindowManager
 
WindowManager *const window_manager_ = nullptr
 
FlutterWindowsEngineengine_
 
std::unique_ptr< FlutterWindowsViewControllerview_controller_
 
WindowArchetype archetype_ = WindowArchetype::kRegular
 
HWND window_handle_
 
BoxConstraints box_constraints_
 
bool is_being_destroyed_ = false
 
bool is_fullscreen_ = false
 
SavedWindowInfo saved_window_info_
 
Microsoft::WRL::ComPtr< ITaskbarList2 > task_bar_list_
 

Detailed Description

Definition at line 14 of file host_window_popup.h.

Constructor & Destructor Documentation

◆ HostWindowPopup()

flutter::HostWindowPopup::HostWindowPopup ( WindowManager window_manager,
FlutterWindowsEngine engine,
const BoxConstraints &  constraints,
GetWindowPositionCallback  get_position_callback,
HWND  parent 
)

Definition at line 12 of file host_window_popup.cc.

18  : HostWindowSized(window_manager, engine, /*resizable=*/false),
19  get_position_callback_(get_position_callback),
20  parent_(parent),
21  isolate_(Isolate::Current()) {
22  // Use minimum constraints as initial size to ensure the view can be created
23  // with valid metrics. The size will be updated when content is rendered.
24  auto const initial_width =
25  static_cast<double>(constraints.smallest().width());
26  auto const initial_height =
27  static_cast<double>(constraints.smallest().height());
28 
29  InitializeFlutterView(HostWindowInitializationParams{
30  .archetype = WindowArchetype::kPopup,
31  .window_style = WS_POPUP,
32  .extended_window_style = WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW,
33  .box_constraints = constraints,
34  .initial_window_rect = {{0, 0}, {initial_width, initial_height}},
35  .title = L"",
36  .owner_window = parent,
37  .nCmdShow = SW_SHOWNOACTIVATE,
38  .sizing_delegate = AsSizingDelegate(),
39  .is_sized_to_content = true});
40 }
void InitializeFlutterView(HostWindowInitializationParams const &params)
Definition: host_window.cc:232
FlutterWindowsViewSizingDelegate * AsSizingDelegate()
HostWindowSized(WindowManager *window_manager, FlutterWindowsEngine *engine, bool resizable)
static Isolate Current()
Definition: isolate_scope.cc:9

◆ ~HostWindowPopup()

flutter::HostWindowPopup::~HostWindowPopup ( )
override

Definition at line 42 of file host_window_popup.cc.

42  {
43  // Reset the view while this most-derived object is still fully alive, to stop
44  // the raster thread from sizing it (via the overridden ApplyContentSize /
45  // GetWorkArea) before any subobject is torn down. See the destructor comment
46  // in host_window_sized.h for the rationale.
47  view_controller_.reset();
48 }
std::unique_ptr< FlutterWindowsViewController > view_controller_
Definition: host_window.h:259

References flutter::HostWindow::view_controller_.

Member Function Documentation

◆ ApplyContentSize()

void flutter::HostWindowPopup::ApplyContentSize ( int32_t  physical_width,
int32_t  physical_height 
)
overrideprotectedvirtual

Reimplemented from flutter::HostWindowSized.

Definition at line 50 of file host_window_popup.cc.

51  {
53 }

References UpdatePosition().

◆ UpdatePosition()

void flutter::HostWindowPopup::UpdatePosition ( )

Definition at line 72 of file host_window_popup.cc.

72  {
73  RECT parent_client_rect;
74  GetClientRect(parent_, &parent_client_rect);
75 
76  // Convert top-left and bottom-right points to screen coordinates.
77  POINT parent_top_left = {parent_client_rect.left, parent_client_rect.top};
78  POINT parent_bottom_right = {parent_client_rect.right,
79  parent_client_rect.bottom};
80 
81  ClientToScreen(parent_, &parent_top_left);
82  ClientToScreen(parent_, &parent_bottom_right);
83 
84  // Get monitor from HWND and usable work area.
85  HMONITOR monitor = MonitorFromWindow(parent_, MONITOR_DEFAULTTONEAREST);
86  WindowRect work_area = GetWorkArea();
87 
88  IsolateScope scope(isolate_);
89 
90  // Frees the memory allocated by the positioner callback.
91  // Even if the callback throws an exception, the memory will be freed when
92  // rect goes out of scope.
93  std::unique_ptr<WindowRect, decltype(&free)> rect(
94  get_position_callback_(
95  WindowSize{physical_width_, physical_height_},
96  WindowRect{parent_top_left.x, parent_top_left.y,
97  parent_bottom_right.x - parent_top_left.x,
98  parent_bottom_right.y - parent_top_left.y},
99  work_area),
100  free);
101  SetWindowPos(window_handle_, HWND_TOP, rect->left, rect->top, rect->width,
102  rect->height, SWP_NOACTIVATE | SWP_NOOWNERZORDER);
103 
104  // The positioner constrained the dimensions more than current size, apply
105  // positioner constraints.
106  if (rect->width < physical_width_ || rect->height < physical_height_) {
107  auto metrics_event = view_controller_->view()->CreateWindowMetricsEvent();
108  view_controller_->engine()->SendWindowMetricsEvent(metrics_event);
109  }
110 }

References flutter::HostWindowSized::physical_height_, flutter::HostWindowSized::physical_width_, flutter::HostWindow::view_controller_, and flutter::HostWindow::window_handle_.

Referenced by ApplyContentSize(), and InternalFlutterWindows_WindowManager_UpdatePopupPosition().


The documentation for this class was generated from the following files: