Flutter Windows Embedder
flutter_windows.h File Reference
#include <dxgi.h>
#include <stddef.h>
#include <stdint.h>
#include <windows.h>
#include "flutter_export.h"
#include "flutter_messenger.h"
#include "flutter_plugin_registrar.h"

Go to the source code of this file.

Classes

struct  FlutterDesktopEngineProperties
 

Typedefs

typedef void(* VoidCallback) (void *)
 
typedef struct FlutterDesktopViewController * FlutterDesktopViewControllerRef
 
typedef struct FlutterDesktopView * FlutterDesktopViewRef
 
typedef struct FlutterDesktopEngine * FlutterDesktopEngineRef
 
typedef bool(* FlutterDesktopWindowProcCallback) (HWND, UINT, WPARAM, LPARAM, void *, LRESULT *result)
 

Functions

FLUTTER_EXPORT FlutterDesktopViewControllerRef FlutterDesktopViewControllerCreate (int width, int height, FlutterDesktopEngineRef engine)
 
FLUTTER_EXPORT void FlutterDesktopViewControllerDestroy (FlutterDesktopViewControllerRef controller)
 
FLUTTER_EXPORT FlutterDesktopEngineRef FlutterDesktopViewControllerGetEngine (FlutterDesktopViewControllerRef controller)
 
FLUTTER_EXPORT FlutterDesktopViewRef FlutterDesktopViewControllerGetView (FlutterDesktopViewControllerRef controller)
 
FLUTTER_EXPORT void FlutterDesktopViewControllerForceRedraw (FlutterDesktopViewControllerRef controller)
 
FLUTTER_EXPORT bool FlutterDesktopViewControllerHandleTopLevelWindowProc (FlutterDesktopViewControllerRef controller, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
 
FLUTTER_EXPORT FlutterDesktopEngineRef FlutterDesktopEngineCreate (const FlutterDesktopEngineProperties *engine_properties)
 
FLUTTER_EXPORT bool FlutterDesktopEngineDestroy (FlutterDesktopEngineRef engine)
 
FLUTTER_EXPORT bool FlutterDesktopEngineRun (FlutterDesktopEngineRef engine, const char *entry_point)
 
FLUTTER_EXPORT uint64_t FlutterDesktopEngineProcessMessages (FlutterDesktopEngineRef engine)
 
FLUTTER_EXPORT void FlutterDesktopEngineReloadSystemFonts (FlutterDesktopEngineRef engine)
 
FLUTTER_EXPORT FlutterDesktopPluginRegistrarRef FlutterDesktopEngineGetPluginRegistrar (FlutterDesktopEngineRef engine, const char *plugin_name)
 
FLUTTER_EXPORT FlutterDesktopMessengerRef FlutterDesktopEngineGetMessenger (FlutterDesktopEngineRef engine)
 
FLUTTER_EXPORT FlutterDesktopTextureRegistrarRef FlutterDesktopEngineGetTextureRegistrar (FlutterDesktopEngineRef engine)
 
FLUTTER_EXPORT void FlutterDesktopEngineSetNextFrameCallback (FlutterDesktopEngineRef engine, VoidCallback callback, void *user_data)
 
FLUTTER_EXPORT HWND FlutterDesktopViewGetHWND (FlutterDesktopViewRef view)
 
FLUTTER_EXPORT IDXGIAdapter * FlutterDesktopViewGetGraphicsAdapter (FlutterDesktopViewRef view)
 
FLUTTER_EXPORT bool FlutterDesktopEngineProcessExternalWindowMessage (FlutterDesktopEngineRef engine, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
 
FLUTTER_EXPORT FlutterDesktopViewRef FlutterDesktopPluginRegistrarGetView (FlutterDesktopPluginRegistrarRef registrar)
 
FLUTTER_EXPORT void FlutterDesktopPluginRegistrarRegisterTopLevelWindowProcDelegate (FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopWindowProcCallback delegate, void *user_data)
 
FLUTTER_EXPORT void FlutterDesktopPluginRegistrarUnregisterTopLevelWindowProcDelegate (FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopWindowProcCallback delegate)
 
FLUTTER_EXPORT UINT FlutterDesktopGetDpiForHWND (HWND hwnd)
 
FLUTTER_EXPORT UINT FlutterDesktopGetDpiForMonitor (HMONITOR monitor)
 
FLUTTER_EXPORT void FlutterDesktopResyncOutputStreams ()
 

Typedef Documentation

◆ FlutterDesktopEngineRef

typedef struct FlutterDesktopEngine* FlutterDesktopEngineRef

Definition at line 33 of file flutter_windows.h.

◆ FlutterDesktopViewControllerRef

typedef struct FlutterDesktopViewController* FlutterDesktopViewControllerRef

Definition at line 25 of file flutter_windows.h.

◆ FlutterDesktopViewRef

typedef struct FlutterDesktopView* FlutterDesktopViewRef

Definition at line 29 of file flutter_windows.h.

◆ FlutterDesktopWindowProcCallback

typedef bool(* FlutterDesktopWindowProcCallback) (HWND, UINT, WPARAM, LPARAM, void *, LRESULT *result)

Definition at line 238 of file flutter_windows.h.

◆ VoidCallback

typedef void(* VoidCallback) (void *)

Definition at line 21 of file flutter_windows.h.

Function Documentation

◆ FlutterDesktopEngineCreate()

FLUTTER_EXPORT FlutterDesktopEngineRef FlutterDesktopEngineCreate ( const FlutterDesktopEngineProperties engine_properties)

Definition at line 150 of file flutter_windows.cc.

151  {
152  flutter::FlutterProjectBundle project(*engine_properties);
153  auto engine = std::make_unique<flutter::FlutterWindowsEngine>(project);
154  return HandleForEngine(engine.release());
155 }

References HandleForEngine().

Referenced by flutter::FlutterEngine::FlutterEngine(), and flutter::testing::TEST().

◆ FlutterDesktopEngineDestroy()

FLUTTER_EXPORT bool FlutterDesktopEngineDestroy ( FlutterDesktopEngineRef  engine)

Definition at line 157 of file flutter_windows.cc.

157  {
158  flutter::FlutterWindowsEngine* engine = EngineFromHandle(engine_ref);
159  bool result = true;
160  if (engine->running()) {
161  result = engine->Stop();
162  }
163  delete engine;
164  return result;
165 }

References EngineFromHandle(), flutter::FlutterWindowsEngine::running(), and flutter::FlutterWindowsEngine::Stop().

Referenced by flutter::FlutterEngine::ShutDown(), and flutter::testing::TEST().

◆ FlutterDesktopEngineGetMessenger()

FLUTTER_EXPORT FlutterDesktopMessengerRef FlutterDesktopEngineGetMessenger ( FlutterDesktopEngineRef  engine)

Definition at line 195 of file flutter_windows.cc.

196  {
197  return EngineFromHandle(engine)->messenger();
198 }

References EngineFromHandle(), and flutter::FlutterWindowsEngine::messenger().

Referenced by flutter::FlutterEngine::FlutterEngine().

◆ FlutterDesktopEngineGetPluginRegistrar()

FLUTTER_EXPORT FlutterDesktopPluginRegistrarRef FlutterDesktopEngineGetPluginRegistrar ( FlutterDesktopEngineRef  engine,
const char *  plugin_name 
)

Definition at line 185 of file flutter_windows.cc.

187  {
188  // Currently, one registrar acts as the registrar for all plugins, so the
189  // name is ignored. It is part of the API to reduce churn in the future when
190  // aligning more closely with the Flutter registrar system.
191 
192  return EngineFromHandle(engine)->GetRegistrar();
193 }

References EngineFromHandle(), and flutter::FlutterWindowsEngine::GetRegistrar().

Referenced by flutter::FlutterEngine::GetRegistrarForPlugin().

◆ FlutterDesktopEngineGetTextureRegistrar()

FLUTTER_EXPORT FlutterDesktopTextureRegistrarRef FlutterDesktopEngineGetTextureRegistrar ( FlutterDesktopEngineRef  engine)

Definition at line 200 of file flutter_windows.cc.

201  {
203  EngineFromHandle(engine)->texture_registrar());
204 }

References EngineFromHandle(), and HandleForTextureRegistrar().

Referenced by flutter::testing::TEST().

◆ FlutterDesktopEngineProcessExternalWindowMessage()

FLUTTER_EXPORT bool FlutterDesktopEngineProcessExternalWindowMessage ( FlutterDesktopEngineRef  engine,
HWND  hwnd,
UINT  message,
WPARAM  wparam,
LPARAM  lparam,
LRESULT *  result 
)

Definition at line 233 of file flutter_windows.cc.

239  {
240  std::optional<LRESULT> lresult =
242  wparam, lparam);
243  if (result && lresult.has_value()) {
244  *result = lresult.value();
245  }
246  return lresult.has_value();
247 }

References EngineFromHandle(), message, and flutter::FlutterWindowsEngine::ProcessExternalWindowMessage().

Referenced by flutter::FlutterEngine::ProcessExternalWindowMessage().

◆ FlutterDesktopEngineProcessMessages()

FLUTTER_EXPORT uint64_t FlutterDesktopEngineProcessMessages ( FlutterDesktopEngineRef  engine)

Definition at line 177 of file flutter_windows.cc.

177  {
178  return std::chrono::nanoseconds::max().count();
179 }

Referenced by flutter::FlutterEngine::ProcessMessages().

◆ FlutterDesktopEngineReloadSystemFonts()

FLUTTER_EXPORT void FlutterDesktopEngineReloadSystemFonts ( FlutterDesktopEngineRef  engine)

◆ FlutterDesktopEngineRun()

FLUTTER_EXPORT bool FlutterDesktopEngineRun ( FlutterDesktopEngineRef  engine,
const char *  entry_point 
)

Definition at line 167 of file flutter_windows.cc.

168  {
169  std::string_view entry_point_view{""};
170  if (entry_point != nullptr) {
171  entry_point_view = entry_point;
172  }
173 
174  return EngineFromHandle(engine)->Run(entry_point_view);
175 }

References EngineFromHandle(), and flutter::FlutterWindowsEngine::Run().

Referenced by flutter::FlutterEngine::Run(), and flutter::testing::TEST_F().

◆ FlutterDesktopEngineSetNextFrameCallback()

FLUTTER_EXPORT void FlutterDesktopEngineSetNextFrameCallback ( FlutterDesktopEngineRef  engine,
VoidCallback  callback,
void *  user_data 
)

◆ FlutterDesktopGetDpiForHWND()

FLUTTER_EXPORT UINT FlutterDesktopGetDpiForHWND ( HWND  hwnd)

Definition at line 269 of file flutter_windows.cc.

269  {
270  return flutter::GetDpiForHWND(hwnd);
271 }

References flutter::GetDpiForHWND().

◆ FlutterDesktopGetDpiForMonitor()

FLUTTER_EXPORT UINT FlutterDesktopGetDpiForMonitor ( HMONITOR  monitor)

Definition at line 273 of file flutter_windows.cc.

273  {
274  return flutter::GetDpiForMonitor(monitor);
275 }

References flutter::GetDpiForMonitor().

◆ FlutterDesktopPluginRegistrarGetView()

◆ FlutterDesktopPluginRegistrarRegisterTopLevelWindowProcDelegate()

◆ FlutterDesktopPluginRegistrarUnregisterTopLevelWindowProcDelegate()

◆ FlutterDesktopResyncOutputStreams()

FLUTTER_EXPORT void FlutterDesktopResyncOutputStreams ( )

Definition at line 277 of file flutter_windows.cc.

277  {
278  FILE* unused;
279  if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
280  _dup2(_fileno(stdout), 1);
281  }
282  if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
283  _dup2(_fileno(stdout), 2);
284  }
285  std::ios::sync_with_stdio();
286 }

◆ FlutterDesktopViewControllerCreate()

FLUTTER_EXPORT FlutterDesktopViewControllerRef FlutterDesktopViewControllerCreate ( int  width,
int  height,
FlutterDesktopEngineRef  engine 
)

Definition at line 75 of file flutter_windows.cc.

78  {
79  flutter::FlutterWindowsEngine* engine_ptr = EngineFromHandle(engine_ref);
80  std::unique_ptr<flutter::WindowBindingHandler> window_wrapper =
81  std::make_unique<flutter::FlutterWindow>(
82  width, height, engine_ptr->windows_proc_table());
83 
84  auto engine = std::unique_ptr<flutter::FlutterWindowsEngine>(engine_ptr);
85  auto view = std::make_unique<flutter::FlutterWindowsView>(
86  std::move(window_wrapper), engine_ptr->windows_proc_table());
87  auto controller = std::make_unique<flutter::FlutterWindowsViewController>(
88  std::move(engine), std::move(view));
89 
90  controller->view()->SetEngine(controller->engine());
91  controller->view()->CreateRenderSurface();
92  if (!controller->engine()->running()) {
93  if (!controller->engine()->Run()) {
94  return nullptr;
95  }
96  }
97 
98  // Must happen after engine is running.
99  controller->view()->SendInitialBounds();
100 
101  // The Windows embedder listens to accessibility updates using the
102  // view's HWND. The embedder's accessibility features may be stale if
103  // the app was in headless mode.
104  controller->engine()->UpdateAccessibilityFeatures();
105 
106  return HandleForViewController(controller.release());
107 }

References EngineFromHandle(), HandleForViewController(), and flutter::FlutterWindowsEngine::windows_proc_table().

Referenced by flutter::FlutterViewController::FlutterViewController(), and flutter::testing::TEST_F().

◆ FlutterDesktopViewControllerDestroy()

FLUTTER_EXPORT void FlutterDesktopViewControllerDestroy ( FlutterDesktopViewControllerRef  controller)

Definition at line 109 of file flutter_windows.cc.

109  {
110  auto controller = ViewControllerFromHandle(ref);
111  delete controller;
112 }

References ViewControllerFromHandle().

Referenced by flutter::FlutterViewController::~FlutterViewController().

◆ FlutterDesktopViewControllerForceRedraw()

FLUTTER_EXPORT void FlutterDesktopViewControllerForceRedraw ( FlutterDesktopViewControllerRef  controller)

Definition at line 126 of file flutter_windows.cc.

127  {
128  auto controller = ViewControllerFromHandle(ref);
129  controller->view()->ForceRedraw();
130 }

References ViewControllerFromHandle().

Referenced by flutter::FlutterViewController::ForceRedraw().

◆ FlutterDesktopViewControllerGetEngine()

FLUTTER_EXPORT FlutterDesktopEngineRef FlutterDesktopViewControllerGetEngine ( FlutterDesktopViewControllerRef  controller)

Definition at line 114 of file flutter_windows.cc.

115  {
116  auto controller = ViewControllerFromHandle(ref);
117  return HandleForEngine(controller->engine());
118 }

References HandleForEngine(), and ViewControllerFromHandle().

Referenced by flutter::testing::TEST_F().

◆ FlutterDesktopViewControllerGetView()

FLUTTER_EXPORT FlutterDesktopViewRef FlutterDesktopViewControllerGetView ( FlutterDesktopViewControllerRef  controller)

Definition at line 120 of file flutter_windows.cc.

121  {
122  auto controller = ViewControllerFromHandle(ref);
123  return HandleForView(controller->view());
124 }

References HandleForView(), and ViewControllerFromHandle().

Referenced by flutter::FlutterViewController::FlutterViewController(), and flutter::testing::TEST_F().

◆ FlutterDesktopViewControllerHandleTopLevelWindowProc()

FLUTTER_EXPORT bool FlutterDesktopViewControllerHandleTopLevelWindowProc ( FlutterDesktopViewControllerRef  controller,
HWND  hwnd,
UINT  message,
WPARAM  wparam,
LPARAM  lparam,
LRESULT *  result 
)

Definition at line 132 of file flutter_windows.cc.

138  {
139  auto controller = ViewControllerFromHandle(ref);
140  std::optional<LRESULT> delegate_result =
141  controller->engine()
142  ->window_proc_delegate_manager()
143  ->OnTopLevelWindowProc(hwnd, message, wparam, lparam);
144  if (delegate_result) {
145  *result = *delegate_result;
146  }
147  return delegate_result.has_value();
148 }

References message, and ViewControllerFromHandle().

Referenced by flutter::FlutterViewController::HandleTopLevelWindowProc().

◆ FlutterDesktopViewGetGraphicsAdapter()

FLUTTER_EXPORT IDXGIAdapter* FlutterDesktopViewGetGraphicsAdapter ( FlutterDesktopViewRef  view)

Definition at line 217 of file flutter_windows.cc.

217  {
218  auto surface_manager = ViewFromHandle(view)->GetEngine()->surface_manager();
219  if (surface_manager) {
220  Microsoft::WRL::ComPtr<ID3D11Device> d3d_device;
221  Microsoft::WRL::ComPtr<IDXGIDevice> dxgi_device;
222  if (surface_manager->GetDevice(d3d_device.GetAddressOf()) &&
223  SUCCEEDED(d3d_device.As(&dxgi_device))) {
224  IDXGIAdapter* adapter;
225  if (SUCCEEDED(dxgi_device->GetAdapter(&adapter))) {
226  return adapter;
227  }
228  }
229  }
230  return nullptr;
231 }

References flutter::FlutterWindowsView::GetEngine(), flutter::FlutterWindowsEngine::surface_manager(), and ViewFromHandle().

Referenced by flutter::FlutterView::GetGraphicsAdapter(), and flutter::testing::TEST_F().

◆ FlutterDesktopViewGetHWND()

FLUTTER_EXPORT HWND FlutterDesktopViewGetHWND ( FlutterDesktopViewRef  view)

Definition at line 213 of file flutter_windows.cc.

213  {
214  return ViewFromHandle(view)->GetWindowHandle();
215 }

References flutter::FlutterWindowsView::GetWindowHandle(), and ViewFromHandle().

Referenced by flutter::FlutterView::GetNativeWindow().

flutter::FlutterWindowsEngine::GetRegistrar
FlutterDesktopPluginRegistrarRef GetRegistrar()
Definition: flutter_windows_engine.cc:497
flutter::FlutterProjectBundle
Definition: flutter_project_bundle.h:21
HandleForView
static FlutterDesktopViewRef HandleForView(flutter::FlutterWindowsView *view)
Definition: flutter_windows.cc:59
HandleForTextureRegistrar
static FlutterDesktopTextureRegistrarRef HandleForTextureRegistrar(flutter::FlutterWindowsTextureRegistrar *registrar)
Definition: flutter_windows.cc:70
flutter::FlutterWindowsEngine::SetNextFrameCallback
void SetNextFrameCallback(fml::closure callback)
Definition: flutter_windows_engine.cc:591
flutter::GetDpiForMonitor
UINT GetDpiForMonitor(HMONITOR monitor)
Definition: dpi_utils.cc:134
user_data
void * user_data
Definition: flutter_windows_view_unittests.cc:49
flutter::FlutterWindowsEngine
Definition: flutter_windows_engine.h:78
flutter::FlutterWindowsEngine::window_proc_delegate_manager
WindowProcDelegateManager * window_proc_delegate_manager()
Definition: flutter_windows_engine.h:148
flutter::FlutterWindowsEngine::running
virtual bool running() const
Definition: flutter_windows_engine.h:105
flutter::WindowProcDelegateManager::RegisterTopLevelWindowProcDelegate
void RegisterTopLevelWindowProcDelegate(FlutterDesktopWindowProcCallback delegate, void *user_data)
Definition: window_proc_delegate_manager.cc:14
flutter::GetDpiForHWND
UINT GetDpiForHWND(HWND hwnd)
Definition: dpi_utils.cc:130
flutter::FlutterWindowsEngine::windows_proc_table
std::shared_ptr< WindowsProcTable > windows_proc_table()
Definition: flutter_windows_engine.h:278
EngineFromHandle
static flutter::FlutterWindowsEngine * EngineFromHandle(FlutterDesktopEngineRef ref)
Definition: flutter_windows.cc:32
flutter::FlutterWindowsView::GetWindowHandle
virtual HWND GetWindowHandle() const
Definition: flutter_windows_view.cc:645
flutter::FlutterWindowsEngine::Stop
virtual bool Stop()
Definition: flutter_windows_engine.cc:450
flutter::FlutterWindowsEngine::messenger
FlutterDesktopMessengerRef messenger()
Definition: flutter_windows_engine.h:130
HandleForViewController
static FlutterDesktopViewControllerRef HandleForViewController(flutter::FlutterWindowsViewController *view_controller)
Definition: flutter_windows.cc:48
flutter::FlutterWindowsEngine::ProcessExternalWindowMessage
std::optional< LRESULT > ProcessExternalWindowMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
Definition: flutter_windows_engine.cc:814
flutter::WindowProcDelegateManager::UnregisterTopLevelWindowProcDelegate
void UnregisterTopLevelWindowProcDelegate(FlutterDesktopWindowProcCallback delegate)
Definition: window_proc_delegate_manager.cc:20
FlutterDesktopPluginRegistrar::engine
flutter::FlutterWindowsEngine * engine
Definition: window_state.h:25
flutter::FlutterWindowsEngine::surface_manager
AngleSurfaceManager * surface_manager() const
Definition: flutter_windows_engine.h:144
HandleForEngine
static FlutterDesktopEngineRef HandleForEngine(flutter::FlutterWindowsEngine *engine)
Definition: flutter_windows.cc:38
ViewFromHandle
static flutter::FlutterWindowsView * ViewFromHandle(FlutterDesktopViewRef ref)
Definition: flutter_windows.cc:54
flutter::FlutterWindowsEngine::view
FlutterWindowsView * view()
Definition: flutter_windows_engine.h:117
ViewControllerFromHandle
static flutter::FlutterWindowsViewController * ViewControllerFromHandle(FlutterDesktopViewControllerRef ref)
Definition: flutter_windows.cc:43
message
Win32Message message
Definition: keyboard_unittests.cc:137
flutter::FlutterWindowsEngine::Run
bool Run()
Definition: flutter_windows_engine.cc:254
flutter::FlutterWindowsView::GetEngine
FlutterWindowsEngine * GetEngine()
Definition: flutter_windows_view.cc:649
flutter::FlutterWindowsEngine::ReloadSystemFonts
void ReloadSystemFonts()
Definition: flutter_windows_engine.cc:583
callback
FlutterDesktopBinaryReply callback
Definition: flutter_windows_view_unittests.cc:48