Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
window_manager.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOW_MANAGER_H_
6#define FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOW_MANAGER_H_
7
8#include <windows.h>
9#include <functional>
10#include <optional>
11#include <unordered_map>
12#include <vector>
13
15
16#include "flutter/fml/macros.h"
19
20namespace flutter {
21
22class FlutterWindowsEngine;
23class HostWindow;
24
25// Specifies a preferred content size for the window.
31
32// Specifies a preferred constraint on the window.
40
41// Coordinates are in physical pixels.
42struct WindowRect {
43 int32_t left;
44 int32_t top;
45 int32_t width;
46 int32_t height;
47};
48
49// Sizes are in physical pixels.
50struct WindowSize {
51 int32_t width;
52 int32_t height;
53};
54
55// Sent by the framework to request a new window be created.
61
68
69typedef WindowRect* (*GetWindowPositionCallback)(const WindowSize& child_size,
70 const WindowRect& parent_rect,
71 const WindowRect& output_rect);
72
78
84
94
98
99// Returned from |InternalFlutterWindows_WindowManager_GetWindowContentSize|.
100// This represents the current content size of the window.
102 double width;
103 double height;
104};
105
111
112// A manager class for managing |HostWindow| instances.
113// A unique instance of this class is owned by |FlutterWindowsEngine|.
115 public:
117 virtual ~WindowManager() = default;
118
119 void Initialize(const WindowingInitRequest* request);
120
122 const RegularWindowCreationRequest* request);
123
125
127 const TooltipWindowCreationRequest* request);
128
130
131 // Message handler called by |HostWindow::WndProc| to process window
132 // messages before delegating them to the host window. This allows the
133 // manager to process messages that affect the state of other host windows.
134 std::optional<LRESULT> HandleMessage(HWND hwnd,
136 WPARAM wparam,
137 LPARAM lparam);
138
139 void OnEngineShutdown();
140
141 private:
142 // The Flutter engine that owns this manager.
143 FlutterWindowsEngine* const engine_;
144
145 // Callback that relays windows messages to the isolate. Set
146 // during Initialize().
147 std::function<void(WindowsMessage*)> on_message_;
148
149 // Isolate that runs the Dart code. Set during Initialize().
150 std::optional<Isolate> isolate_;
151
152 // A map of active windows. Used to destroy remaining windows on engine
153 // shutdown.
154 std::unordered_map<HWND, std::unique_ptr<HostWindow>> active_windows_;
155
157};
158
159} // namespace flutter
160
161extern "C" {
162
165 int64_t engine_id,
166 const flutter::WindowingInitRequest* request);
167
170 int64_t engine_id,
172
175 int64_t engine_id,
177
180 int64_t engine_id,
182
185 int64_t engine_id,
187
188// Retrives the HWND associated with this |engine_id| and |view_id|. Returns
189// NULL if the HWND cannot be found
192 int64_t engine_id,
194
198
201 HWND hwnd,
202 const flutter::WindowSizeRequest* size);
203
206 HWND hwnd,
207 const flutter::WindowConstraints* constraints);
208
211 HWND hwnd,
212 const flutter::FullscreenRequest* request);
213
214// Invoked by the framework when the host window receives WM_DESTROY.
217
220
223
226}
227
228#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOW_MANAGER_H_
FlutterViewId CreateDialogWindow(const DialogWindowCreationRequest *request)
std::optional< LRESULT > HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
FlutterViewId CreateRegularWindow(const RegularWindowCreationRequest *request)
void Initialize(const WindowingInitRequest *request)
FlutterViewId CreatePopupWindow(const PopupWindowCreationRequest *request)
FlutterViewId CreateTooltipWindow(const TooltipWindowCreationRequest *request)
virtual ~WindowManager()=default
uint64_t FlutterEngineDisplayId
Definition embedder.h:1050
int64_t FlutterViewId
Definition embedder.h:393
FlutterEngine engine
Definition main.cc:84
const char * message
G_BEGIN_DECLS FlutterViewId view_id
#define FLUTTER_EXPORT
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition macros.h:27
WindowRect *(* GetWindowPositionCallback)(const WindowSize &child_size, const WindowRect &parent_rect, const WindowRect &output_rect)
int64_t FlutterViewId
FlutterEngineDisplayId display_id
GetWindowPositionCallback get_position_callback
GetWindowPositionCallback get_position_callback
void(* on_message)(WindowsMessage *)
FLUTTER_EXPORT bool InternalFlutterWindows_WindowManager_GetFullscreen(HWND hwnd)
FLUTTER_EXPORT void InternalFlutterWindows_WindowManager_UpdateTooltipPosition(HWND hwnd)
FLUTTER_EXPORT void InternalFlutterWindows_WindowManager_SetWindowSize(HWND hwnd, const flutter::WindowSizeRequest *size)
FLUTTER_EXPORT flutter::ActualWindowSize InternalFlutterWindows_WindowManager_GetWindowContentSize(HWND hwnd)
FLUTTER_EXPORT void InternalFlutterWindows_WindowManager_SetWindowConstraints(HWND hwnd, const flutter::WindowConstraints *constraints)
FLUTTER_EXPORT FlutterViewId InternalFlutterWindows_WindowManager_CreateDialogWindow(int64_t engine_id, const flutter::DialogWindowCreationRequest *request)
FLUTTER_EXPORT void InternalFlutterWindows_WindowManager_UpdatePopupPosition(HWND hwnd)
FLUTTER_EXPORT void InternalFlutterWindows_WindowManager_SetFullscreen(HWND hwnd, const flutter::FullscreenRequest *request)
FLUTTER_EXPORT FlutterViewId InternalFlutterWindows_WindowManager_CreateRegularWindow(int64_t engine_id, const flutter::RegularWindowCreationRequest *request)
FLUTTER_EXPORT void InternalFlutterWindows_WindowManager_Initialize(int64_t engine_id, const flutter::WindowingInitRequest *request)
FLUTTER_EXPORT FlutterViewId InternalFlutterWindows_WindowManager_CreateTooltipWindow(int64_t engine_id, const flutter::TooltipWindowCreationRequest *request)
FLUTTER_EXPORT HWND InternalFlutterWindows_WindowManager_GetTopLevelWindowHandle(int64_t engine_id, FlutterViewId view_id)
FLUTTER_EXPORT FlutterViewId InternalFlutterWindows_WindowManager_CreatePopupWindow(int64_t engine_id, const flutter::PopupWindowCreationRequest *request)
FLUTTER_EXPORT void InternalFlutterWindows_WindowManager_OnDestroyWindow(HWND hwnd)
LONG_PTR LRESULT
unsigned int UINT
LONG_PTR LPARAM
UINT_PTR WPARAM