Flutter Windows Embedder
flutter::HostWindowTooltip Class Reference

#include <host_window_tooltip.h>

Inheritance diagram for flutter::HostWindowTooltip:
flutter::HostWindow flutter::FlutterWindowsViewSizingDelegate

Public Member Functions

 HostWindowTooltip (WindowManager *window_manager, FlutterWindowsEngine *engine, const BoxConstraints &constraints, bool is_sized_to_content, GetWindowPositionCallback get_position_callback, HWND parent)
 
void UpdatePosition ()
 
- 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

LRESULT HandleMessage (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) override
 
- Protected Member Functions inherited from flutter::HostWindow
void InitializeFlutterView (HostWindowInitializationParams const &params)
 
 HostWindow (WindowManager *window_manager, FlutterWindowsEngine *engine)
 
void EnableRecursively (bool enable)
 
HostWindowFindFirstEnabledDescendant () 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)
 
static std::unique_ptr< HostWindowCreateDialogWindow (WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowSizeRequest &preferred_size, const WindowConstraints &preferred_constraints, LPCWSTR title, HWND parent)
 
static std::unique_ptr< HostWindowCreateTooltipWindow (WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowConstraints &preferred_constraints, bool is_sized_to_content, 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::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_tooltip.h.

Constructor & Destructor Documentation

◆ HostWindowTooltip()

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

Definition at line 11 of file host_window_tooltip.cc.

18  : HostWindow(window_manager, engine),
19  get_position_callback_(get_position_callback),
20  parent_(parent),
21  isolate_(Isolate::Current()),
22  view_alive_(std::make_shared<int>(0)) {
23  // Use minimum constraints as initial size to ensure the view can be created
24  // with valid metrics. If is_sized_to_content is true, the size will be
25  // updated when content is rendered.
26  auto const initial_width =
27  static_cast<double>(constraints.smallest().width());
28  auto const initial_height =
29  static_cast<double>(constraints.smallest().height());
30 
31  InitializeFlutterView(HostWindowInitializationParams{
32  .archetype = WindowArchetype::kTooltip,
33  .window_style = WS_POPUP,
34  .extended_window_style = WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW,
35  .box_constraints = constraints,
36  .initial_window_rect = {{0, 0}, {initial_width, initial_height}},
37  .title = L"",
38  .owner_window = parent,
39  .nCmdShow = SW_SHOWNOACTIVATE,
40  .sizing_delegate = this,
41  .is_sized_to_content = is_sized_to_content});
42  SetWindowLongPtr(window_handle_, GWLP_HWNDPARENT,
43  reinterpret_cast<LONG_PTR>(parent_));
44 }
void InitializeFlutterView(HostWindowInitializationParams const &params)
Definition: host_window.cc:245
HostWindow(WindowManager *window_manager, FlutterWindowsEngine *engine)
Definition: host_window.cc:241
static Isolate Current()
Definition: isolate_scope.cc:9

Member Function Documentation

◆ HandleMessage()

LRESULT flutter::HostWindowTooltip::HandleMessage ( HWND  hwnd,
UINT  message,
WPARAM  wparam,
LPARAM  lparam 
)
overrideprotectedvirtual

Reimplemented from flutter::HostWindow.

Definition at line 120 of file host_window_tooltip.cc.

123  {
124  switch (message) {
125  case WM_MOUSEACTIVATE:
126  // Prevent activation when clicked
127  return MA_NOACTIVATE;
128 
129  case WM_NCACTIVATE:
130  // Return TRUE to prevent visual activation changes
131  return TRUE;
132 
133  case WM_ACTIVATE:
134  // Immediately deactivate if somehow activated
135  if (LOWORD(wparam) != WA_INACTIVE) {
136  HWND hFocus = GetFocus();
137  SetFocus(nullptr);
138  }
139  break;
140  }
141 
142  return HostWindow::HandleMessage(hwnd, message, wparam, lparam);
143 }
virtual LRESULT HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
Definition: host_window.cc:382
Win32Message message

References flutter::HostWindow::HandleMessage(), and message.

◆ UpdatePosition()

void flutter::HostWindowTooltip::UpdatePosition ( )

Definition at line 85 of file host_window_tooltip.cc.

85  {
86  RECT parent_client_rect;
87  GetClientRect(parent_, &parent_client_rect);
88 
89  // Convert top-left and bottom-right points to screen coordinates.
90  POINT parent_top_left = {parent_client_rect.left, parent_client_rect.top};
91  POINT parent_bottom_right = {parent_client_rect.right,
92  parent_client_rect.bottom};
93 
94  ClientToScreen(parent_, &parent_top_left);
95  ClientToScreen(parent_, &parent_bottom_right);
96 
97  // Get monitor from HWND and usable work area.
98  HMONITOR monitor = MonitorFromWindow(parent_, MONITOR_DEFAULTTONEAREST);
99  WindowRect work_area = GetWorkArea();
100 
101  IsolateScope scope(isolate_);
102  auto rect = get_position_callback_(
103  WindowSize{width_, height_},
104  WindowRect{parent_top_left.x, parent_top_left.y,
105  parent_bottom_right.x - parent_top_left.x,
106  parent_bottom_right.y - parent_top_left.y},
107  work_area);
108  SetWindowPos(window_handle_, nullptr, rect->left, rect->top, rect->width,
109  rect->height, SWP_NOACTIVATE | SWP_NOOWNERZORDER);
110  free(rect);
111 
112  // The positioner constrained the dimensions more than current size, apply
113  // positioner constraints.
114  if (rect->width < width_ || rect->height < height_) {
115  auto metrics_event = view_controller_->view()->CreateWindowMetricsEvent();
116  view_controller_->engine()->SendWindowMetricsEvent(metrics_event);
117  }
118 }
std::unique_ptr< FlutterWindowsViewController > view_controller_
Definition: host_window.h:217

References flutter::HostWindow::view_controller_, and flutter::HostWindow::window_handle_.

Referenced by InternalFlutterWindows_WindowManager_UpdateTooltipPosition().


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