Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
flutter_windows.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_PUBLIC_FLUTTER_WINDOWS_H_
6#define FLUTTER_SHELL_PLATFORM_WINDOWS_PUBLIC_FLUTTER_WINDOWS_H_
7
8#include <dxgi.h>
9#include <stddef.h>
10#include <stdint.h>
11#include <windows.h>
12
13#include "flutter_export.h"
14#include "flutter_messenger.h"
16
17#if defined(__cplusplus)
18extern "C" {
19#endif
20
21typedef void (*VoidCallback)(void* /* user data */);
22
23// Opaque reference to a Flutter view controller.
24struct FlutterDesktopViewController;
25typedef struct FlutterDesktopViewController* FlutterDesktopViewControllerRef;
26
27// Opaque reference to a Flutter window.
28struct FlutterDesktopView;
29typedef struct FlutterDesktopView* FlutterDesktopViewRef;
30
31// Opaque reference to a Flutter engine instance.
32struct FlutterDesktopEngine;
33typedef struct FlutterDesktopEngine* FlutterDesktopEngineRef;
34
35// The unique identifier for a view.
36typedef int64_t FlutterDesktopViewId;
37
38// Configures how the Flutter engine selects a GPU.
39typedef enum {
40 // No preference.
42 // Prefer energy efficiency over performance, such as an integrated GPU.
43 // This falls back to a high performance GPU if no low power GPU is
44 // available.
46 // Prefer performance over energy efficiency, such as a discrete GPU or
47 // dedicated GPU.
48 // This falls back to a low power GPU if no high performance GPU is available.
51
52// Configures the thread policy for running the UI isolate.
53typedef enum {
54 // Default value. Currently will run the UI isolate on separate thread,
55 // later will be changed to running the UI isolate on platform thread.
57 // Run the UI isolate on platform thread.
59 // Run the UI isolate on a separate thread.
62
63// Configures the accessibility implementation used by Flutter.
64typedef enum {
65 // Default value. Flutter will automatically select the best available
66 // implementation.
68 // Use the IAccessible implementation.
70 // Use the experimental IAccessibleEx implementation.
73
74// Properties for configuring a Flutter engine instance.
75typedef struct {
76 // The path to the flutter_assets folder for the application to be run.
77 // This can either be an absolute path or a path relative to the directory
78 // containing the executable.
79 const wchar_t* assets_path;
80
81 // The path to the icudtl.dat file for the version of Flutter you are using.
82 // This can either be an absolute path or a path relative to the directory
83 // containing the executable.
84 const wchar_t* icu_data_path;
85
86 // The path to the AOT library file for your application, if any.
87 // This can either be an absolute path or a path relative to the directory
88 // containing the executable. This can be nullptr for a non-AOT build, as
89 // it will be ignored in that case.
90 const wchar_t* aot_library_path;
91
92 // The name of the top-level Dart entrypoint function. If null or the empty
93 // string, 'main' is assumed. If a custom entrypoint is used, this parameter
94 // must specifiy the name of a top-level function in the same Dart library as
95 // the app's main() function. Custom entrypoint functions must be decorated
96 // with `@pragma('vm:entry-point')` to ensure the method is not tree-shaken
97 // by the Dart compiler.
98 const char* dart_entrypoint;
99
100 // Number of elements in the array passed in as dart_entrypoint_argv.
102
103 // Array of Dart entrypoint arguments. This is deep copied during the call
104 // to FlutterDesktopEngineCreate.
106
107 // GPU choice preference
109
110 // Policy for the thread that runs UI isolate.
112
113 // The accessibility mode.
114 // This can be used to enable the experimental IAccessibleEx implementation.
117
118// ========== View Controller ==========
119
120// Creates a view that hosts and displays the given engine instance.
121//
122// This takes ownership of |engine|, so FlutterDesktopEngineDestroy should no
123// longer be called on it, as it will be called internally when the view
124// controller is destroyed. If creating the view controller fails, the engine
125// will be destroyed immediately.
126//
127// If |engine| is not already running, the view controller will start running
128// it automatically before displaying the window.
129//
130// The caller owns the returned reference, and is responsible for calling
131// FlutterDesktopViewControllerDestroy. Returns a null pointer in the event of
132// an error.
133//
134// The Win32 implementation accepts width, height with view hookup explicitly
135// performed using the caller using HWND parenting.
138 int height,
140
141// Shuts down the engine instance associated with |controller|, and cleans up
142// associated state.
143//
144// |controller| is no longer valid after this call.
147
148// Returns the view controller's view ID.
150 FlutterDesktopViewControllerRef view_controller);
151
152// Returns the handle for the engine running in FlutterDesktopViewControllerRef.
153//
154// Its lifetime is the same as the |controller|'s.
157
158// Returns the view managed by the given controller.
161
162// Requests new frame from the engine and repaints the view.
165
166// Allows the Flutter engine and any interested plugins an opportunity to
167// handle the given message.
168//
169// If the WindowProc was handled and further handling should stop, this returns
170// true and |result| will be populated. |result| is not set if returning false.
173 HWND hwnd,
175 WPARAM wparam,
176 LPARAM lparam,
177 LRESULT* result);
178
179// ========== Engine ==========
180
181// Creates a Flutter engine with the given properties.
182//
183// The caller owns the returned reference, and is responsible for calling
184// FlutterDesktopEngineDestroy. The lifetime of |engine_properties| is required
185// to extend only until the end of this call.
187 const FlutterDesktopEngineProperties* engine_properties);
188
189// Shuts down and destroys the given engine instance. Returns true if the
190// shutdown was successful, or if the engine was not running.
191//
192// |engine| is no longer valid after this call.
194
195// Starts running the given engine instance.
196//
197// The entry_point parameter is deprecated but preserved for
198// backward-compatibility. If desired, a custom Dart entrypoint function can be
199// set in the dart_entrypoint field of the FlutterDesktopEngineProperties
200// struct passed to FlutterDesktopEngineCreate.
201//
202// If specified, entry_point must be the name of a top-level function from the
203// same Dart library that contains the app's main() function, and must be
204// decorated with `@pragma(vm:entry-point)` to ensure the method is not
205// tree-shaken by the Dart compiler. If conflicting non-null values are passed
206// to this function and via the FlutterDesktopEngineProperties struct, the run
207// will fail.
208//
209// Returns false if running the engine failed.
211 const char* entry_point);
212
213// DEPRECATED: This is no longer necessary to call, Flutter will take care of
214// processing engine messages transparently through DispatchMessage.
215//
216// Processes any pending events in the Flutter engine, and returns the
217// number of nanoseconds until the next scheduled event (or max, if none).
218//
219// This should be called on every run of the application-level runloop, and
220// a wait for native events in the runloop should never be longer than the
221// last return value from this function.
222FLUTTER_EXPORT uint64_t
224
227
228// Returns the plugin registrar handle for the plugin with the given name.
229//
230// The name must be unique across the application.
233 const char* plugin_name);
234
235// Returns the messenger associated with the engine.
236//
237// This does not provide an owning reference, so should *not* be balanced with a
238// call to |FlutterDesktopMessengerRelease|.
239//
240// Callers should use |FlutterDesktopMessengerAddRef| if the returned pointer
241// will potentially outlive 'engine', such as when passing it to another thread.
244
245// Returns the texture registrar associated with the engine.
248
249// Schedule a callback to be called after the next frame is drawn.
250//
251// This must be called from the platform thread. The callback is executed only
252// once on the platform thread.
256 void* user_data);
257
258// ========== View ==========
259
260// Returns the backing HWND for manipulation in host application.
262
263// Returns the DXGI adapter used for rendering or nullptr in case of error.
264// The caller must release the adapter.
265// DEPRECATED: Use |FlutterDesktopEngineGetGraphicsAdapter| instead.
268
269// Retrieves the DXGI adapter used for rendering. Returns true if the adapter
270// was successfully retrieved, or false if an error occured.
271// The caller must provide a valid pointer to an IDXGIAdapter* and is
272// responsible for releasing the adapter.
275 IDXGIAdapter** adapter_out);
276
277// Called to pass an external window message to the engine for lifecycle
278// state updates. Non-Flutter windows must call this method in their WndProc
279// in order to be included in the logic for application lifecycle state
280// updates. Returns a result if the message should be consumed.
283 HWND hwnd,
285 WPARAM wparam,
286 LPARAM lparam,
287 LRESULT* result);
288
289// ========== Plugin Registrar (extensions) ==========
290// These are Windows-specific extensions to flutter_plugin_registrar.h
291
292// Function pointer type for top level WindowProc delegate registration.
293//
294// The user data will be whatever was passed to
295// FlutterDesktopRegisterTopLevelWindowProcHandler.
296//
297// Implementations should populate |result| and return true if the WindowProc
298// was handled and further handling should stop. |result| is ignored if the
299// function returns false.
300typedef bool (*FlutterDesktopWindowProcCallback)(HWND /* hwnd */,
301 UINT /* uMsg */,
302 WPARAM /*wParam*/,
303 LPARAM /* lParam*/,
304 void* /* user data */,
305 LRESULT* result);
306
307// Returns the implicit view associated with this registrar's engine instance,
308// or null if there is no implicit view.
309//
310// See:
311// https://api.flutter.dev/flutter/dart-ui/PlatformDispatcher/implicitView.html
312//
313// DEPRECATED: Use |FlutterDesktopPluginRegistrarGetViewById| instead.
316
317// Returns the view associated with the registrar's engine instance, or null if
318// the view does not exist.
322
327 void* user_data);
328
333
334// Retrieves the DXGI adapter used for rendering. Returns true if the adapter
335// was successfully retrieved, or false if an error occured.
336// The caller must provide a valid pointer to an IDXGIAdapter* and is
337// responsible for releasing the adapter.
340 IDXGIAdapter** adapter_out);
341
342// ========== Freestanding Utilities ==========
343
344// Gets the DPI for a given |hwnd|, depending on the supported APIs per
345// windows version and DPI awareness mode. If nullptr is passed, returns the DPI
346// of the primary monitor.
347//
348// This uses the same logic and fallback for older Windows versions that is used
349// internally by Flutter to determine the DPI to use for displaying Flutter
350// content, so should be used by any code (e.g., in plugins) that translates
351// between Windows and Dart sizes/offsets.
353
354// Gets the DPI for a given |monitor|. If the API is not available, a default
355// DPI of 96 is returned.
356//
357// See FlutterDesktopGetDpiForHWND for more information.
359
360// Reopens stdout and stderr and resysncs the standard library output streams.
361// Should be called if output is being directed somewhere in the runner process
362// (e.g., after an AllocConsole call).
364
365#if defined(__cplusplus)
366} // extern "C"
367#endif
368
369#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_PUBLIC_FLUTTER_WINDOWS_H_
FlutterEngine engine
Definition main.cc:84
const char * message
G_BEGIN_DECLS FlutterViewId view_id
#define FLUTTER_EXPORT
struct FlutterDesktopTextureRegistrar * FlutterDesktopTextureRegistrarRef
FLUTTER_EXPORT bool FlutterDesktopPluginRegistrarGetGraphicsAdapter(FlutterDesktopPluginRegistrarRef registrar, IDXGIAdapter **adapter_out)
FLUTTER_EXPORT void FlutterDesktopResyncOutputStreams()
FLUTTER_EXPORT FlutterDesktopViewRef FlutterDesktopViewControllerGetView(FlutterDesktopViewControllerRef controller)
FLUTTER_EXPORT FlutterDesktopTextureRegistrarRef FlutterDesktopEngineGetTextureRegistrar(FlutterDesktopEngineRef engine)
struct FlutterDesktopViewController * FlutterDesktopViewControllerRef
FLUTTER_EXPORT void FlutterDesktopViewControllerDestroy(FlutterDesktopViewControllerRef controller)
bool(* FlutterDesktopWindowProcCallback)(HWND, UINT, WPARAM, LPARAM, void *, LRESULT *result)
struct FlutterDesktopEngine * FlutterDesktopEngineRef
FLUTTER_EXPORT bool FlutterDesktopEngineRun(FlutterDesktopEngineRef engine, const char *entry_point)
FlutterDesktopUIThreadPolicy
@ RunOnPlatformThread
@ RunOnSeparateThread
@ Default
FLUTTER_EXPORT bool FlutterDesktopEngineProcessExternalWindowMessage(FlutterDesktopEngineRef engine, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
int64_t FlutterDesktopViewId
FLUTTER_EXPORT HWND FlutterDesktopViewGetHWND(FlutterDesktopViewRef view)
FLUTTER_EXPORT void FlutterDesktopViewControllerForceRedraw(FlutterDesktopViewControllerRef controller)
FLUTTER_EXPORT FlutterDesktopMessengerRef FlutterDesktopEngineGetMessenger(FlutterDesktopEngineRef engine)
struct FlutterDesktopView * FlutterDesktopViewRef
FlutterDesktopGpuPreference
@ LowPowerPreference
@ HighPerformancePreference
@ NoPreference
FLUTTER_EXPORT void FlutterDesktopPluginRegistrarRegisterTopLevelWindowProcDelegate(FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopWindowProcCallback delegate, void *user_data)
void(* VoidCallback)(void *)
FLUTTER_EXPORT FlutterDesktopViewRef FlutterDesktopPluginRegistrarGetViewById(FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopViewId view_id)
FLUTTER_EXPORT bool FlutterDesktopEngineDestroy(FlutterDesktopEngineRef engine)
FLUTTER_EXPORT FlutterDesktopEngineRef FlutterDesktopViewControllerGetEngine(FlutterDesktopViewControllerRef controller)
FLUTTER_EXPORT UINT FlutterDesktopGetDpiForHWND(HWND hwnd)
FLUTTER_EXPORT FlutterDesktopPluginRegistrarRef FlutterDesktopEngineGetPluginRegistrar(FlutterDesktopEngineRef engine, const char *plugin_name)
FlutterDesktopAccessibilityMode
@ IAccessibleMode
@ IAccessibleExMode
@ DefaultAccessibilityMode
FLUTTER_EXPORT bool FlutterDesktopEngineGetGraphicsAdapter(FlutterDesktopEngineRef engine, IDXGIAdapter **adapter_out)
FLUTTER_EXPORT void FlutterDesktopPluginRegistrarUnregisterTopLevelWindowProcDelegate(FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopWindowProcCallback delegate)
FLUTTER_EXPORT UINT FlutterDesktopGetDpiForMonitor(HMONITOR monitor)
FLUTTER_EXPORT IDXGIAdapter * FlutterDesktopViewGetGraphicsAdapter(FlutterDesktopViewRef view)
FLUTTER_EXPORT void FlutterDesktopEngineReloadSystemFonts(FlutterDesktopEngineRef engine)
FLUTTER_EXPORT FlutterDesktopViewId FlutterDesktopViewControllerGetViewId(FlutterDesktopViewControllerRef view_controller)
FLUTTER_EXPORT FlutterDesktopEngineRef FlutterDesktopEngineCreate(const FlutterDesktopEngineProperties *engine_properties)
FLUTTER_EXPORT FlutterDesktopViewControllerRef FlutterDesktopViewControllerCreate(int width, int height, FlutterDesktopEngineRef engine)
FLUTTER_EXPORT bool FlutterDesktopViewControllerHandleTopLevelWindowProc(FlutterDesktopViewControllerRef controller, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
FLUTTER_EXPORT void FlutterDesktopEngineSetNextFrameCallback(FlutterDesktopEngineRef engine, VoidCallback callback, void *user_data)
FLUTTER_EXPORT uint64_t FlutterDesktopEngineProcessMessages(FlutterDesktopEngineRef engine)
FLUTTER_EXPORT FlutterDesktopViewRef FlutterDesktopPluginRegistrarGetView(FlutterDesktopPluginRegistrarRef registrar)
FlutterDesktopBinaryReply callback
int32_t height
int32_t width
FlutterDesktopAccessibilityMode accessibility_mode
FlutterDesktopUIThreadPolicy ui_thread_policy
FlutterDesktopGpuPreference gpu_preference
LONG_PTR LRESULT
unsigned int UINT
LONG_PTR LPARAM
UINT_PTR WPARAM