| Flutter Windows Embedder |

flutter_windows_view.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_FLUTTER_WINDOWS_VIEW_H_
6 #define FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_VIEW_H_
7
8 #include <memory>
9 #include <mutex>
10 #include <string>
11 #include <unordered_map>
12 #include <utility>
13 #include <vector>
14
15 #include "flutter/fml/macros.h"
16 #include "flutter/shell/platform/common/client_wrapper/include/flutter/plugin_registrar.h"
17 #include "flutter/shell/platform/common/geometry.h"
18 #include "flutter/shell/platform/embedder/embedder.h"
19 #include "flutter/shell/platform/windows/accessibility_bridge_windows.h"
20 #include "flutter/shell/platform/windows/angle_surface_manager.h"
21 #include "flutter/shell/platform/windows/flutter_windows_engine.h"
22 #include "flutter/shell/platform/windows/public/flutter_windows.h"
23 #include "flutter/shell/platform/windows/text_input_plugin_delegate.h"
24 #include "flutter/shell/platform/windows/window_binding_handler.h"
25 #include "flutter/shell/platform/windows/window_binding_handler_delegate.h"
26 #include "flutter/shell/platform/windows/window_state.h"
27
28 namespace flutter {
29
30 // ID for the window frame buffer.
31 inline constexpr uint32_t kWindowFrameBufferID = 0;
32
33 // An OS-windowing neutral abstration for flutter
34 // view that works with win32 hwnds and Windows::UI::Composition visuals.
35 class FlutterWindowsView : public WindowBindingHandlerDelegate,
36 public TextInputPluginDelegate {
37 public:
38 // Creates a FlutterWindowsView with the given implementor of
39 // WindowBindingHandler.
40 //
41 // In order for object to render Flutter content the SetEngine method must be
42 // called with a valid FlutterWindowsEngine instance.
43 FlutterWindowsView(std::unique_ptr<WindowBindingHandler> window_binding);
44
45 virtual ~FlutterWindowsView();
46
47 // Configures the window instance with an instance of a running Flutter
48 // engine.
49 void SetEngine(std::unique_ptr<FlutterWindowsEngine> engine);
50
51 // Creates rendering surface for Flutter engine to draw into.
52 // Should be called before calling FlutterEngineRun using this view.
53 void CreateRenderSurface();
54
55 // Destroys current rendering surface if one has been allocated.
56 void DestroyRenderSurface();
57
58 // Return the currently configured WindowsRenderTarget.
59 WindowsRenderTarget* GetRenderTarget() const;
60
61 // Return the currently configured PlatformWindow.
62 virtual PlatformWindow GetPlatformWindow() const;
63
64 // Returns the engine backing this view.
65 FlutterWindowsEngine* GetEngine();
66
67 // Tells the engine to generate a new frame
68 void ForceRedraw();
69
70 // Callbacks for clearing context, settings context and swapping buffers,
71 // these are typically called on an engine-controlled (non-platform) thread.
72 bool ClearContext();
73 bool MakeCurrent();
74 bool MakeResourceCurrent();
75 bool SwapBuffers();
76
77 // Callback for presenting a software bitmap.
78 bool PresentSoftwareBitmap(const void* allocation,
79 size_t row_bytes,
80 size_t height);
81
82 // Send initial bounds to embedder. Must occur after engine has initialized.
83 void SendInitialBounds();
84
85 // Send the initial accessibility features to the window
86 void SendInitialAccessibilityFeatures();
87
88 // Set the text of the alert, and create it if it does not yet exist.
89 void AnnounceAlert(const std::wstring& text);
90
91 // |WindowBindingHandlerDelegate|
92 void UpdateHighContrastEnabled(bool enabled) override;
93
94 // Returns the frame buffer id for the engine to render to.
95 uint32_t GetFrameBufferId(size_t width, size_t height);
96
97 // Sets the cursor that should be used when the mouse is over the Flutter
98 // content. See mouse_cursor.dart for the values and meanings of cursor_name.
99 void UpdateFlutterCursor(const std::string& cursor_name);
100
101 // Sets the cursor directly from a cursor handle.
102 void SetFlutterCursor(HCURSOR cursor);
103
104 // |WindowBindingHandlerDelegate|
105 void OnWindowSizeChanged(size_t width, size_t height) override;
106
107 // |WindowBindingHandlerDelegate|
108 void OnWindowRepaint() override;
109
110 // |WindowBindingHandlerDelegate|
111 void OnPointerMove(double x,
112 double y,
113 FlutterPointerDeviceKind device_kind,
114 int32_t device_id,
115 int modifiers_state) override;
116
117 // |WindowBindingHandlerDelegate|
118 void OnPointerDown(double x,
119 double y,
120 FlutterPointerDeviceKind device_kind,
121 int32_t device_id,
122 FlutterPointerMouseButtons button) override;
123
124 // |WindowBindingHandlerDelegate|
125 void OnPointerUp(double x,
126 double y,
127 FlutterPointerDeviceKind device_kind,
128 int32_t device_id,
129 FlutterPointerMouseButtons button) override;
130
131 // |WindowBindingHandlerDelegate|
132 void OnPointerLeave(double x,
133 double y,
134 FlutterPointerDeviceKind device_kind,
135 int32_t device_id = 0) override;
136
137 // |WindowBindingHandlerDelegate|
138 virtual void OnPointerPanZoomStart(int32_t device_id) override;
139
140 // |WindowBindingHandlerDelegate|
141 virtual void OnPointerPanZoomUpdate(int32_t device_id,
142 double pan_x,
143 double pan_y,
144 double scale,
145 double rotation) override;
146
147 // |WindowBindingHandlerDelegate|
148 virtual void OnPointerPanZoomEnd(int32_t device_id) override;
149
150 // |WindowBindingHandlerDelegate|
151 void OnText(const std::u16string&) override;
152
153 // |WindowBindingHandlerDelegate|
154 void OnKey(int key,
155 int scancode,
156 int action,
157 char32_t character,
158 bool extended,
159 bool was_down,
160 KeyEventCallback callback) override;
161
162 // |WindowBindingHandlerDelegate|
163 void OnComposeBegin() override;
164
165 // |WindowBindingHandlerDelegate|
166 void OnComposeCommit() override;
167
168 // |WindowBindingHandlerDelegate|
169 void OnComposeEnd() override;
170
171 // |WindowBindingHandlerDelegate|
172 void OnComposeChange(const std::u16string& text, int cursor_pos) override;
173
174 // |WindowBindingHandlerDelegate|
175 void OnScroll(double x,
176 double y,
177 double delta_x,
178 double delta_y,
179 int scroll_offset_multiplier,
180 FlutterPointerDeviceKind device_kind,
181 int32_t device_id) override;
182
183 // |WindowBindingHandlerDelegate|
184 void OnScrollInertiaCancel(int32_t device_id) override;
185
186 // |WindowBindingHandlerDelegate|
187 virtual void OnUpdateSemanticsEnabled(bool enabled) override;
188
189 // |WindowBindingHandlerDelegate|
190 virtual gfx::NativeViewAccessible GetNativeViewAccessible() override;
191
192 // |TextInputPluginDelegate|
193 void OnCursorRectUpdated(const Rect& rect) override;
194
195 // |TextInputPluginDelegate|
196 void OnResetImeComposing() override;
197
198 // Called when a WM_ONCOMPOSITIONCHANGED message is received.
199 void OnDwmCompositionChanged();
200
201 // Get a pointer to the alert node for this view.
202 ui::AXPlatformNodeWin* AlertNode() const;
203
204 // |WindowBindingHandlerDelegate|
205 virtual ui::AXFragmentRootDelegateWin* GetAxFragmentRootDelegate() override;
206
207 // Called to re/set the accessibility bridge pointer.
208 virtual void UpdateSemanticsEnabled(bool enabled);
209
210 std::weak_ptr<AccessibilityBridgeWindows> accessibility_bridge() {
211 return accessibility_bridge_;
212 }
213
214 // |WindowBindingHandlerDelegate|
215 void OnWindowStateEvent(HWND hwnd, WindowStateEvent event) override;
216
217 protected:
218 virtual void NotifyWinEventWrapper(ui::AXPlatformNodeWin* node,
219 ax::mojom::Event event);
220
221 // Create an AccessibilityBridgeWindows using this view.
222 virtual std::shared_ptr<AccessibilityBridgeWindows>
223 CreateAccessibilityBridge();
224
225 private:
226 // Struct holding the state of an individual pointer. The engine doesn't keep
227 // track of which buttons have been pressed, so it's the embedding's
228 // responsibility.
229 struct PointerState {
230 // The device kind.
231 FlutterPointerDeviceKind device_kind = kFlutterPointerDeviceKindMouse;
232
233 // A virtual pointer ID that is unique across all device kinds.
234 int32_t pointer_id = 0;
235
236 // True if the last event sent to Flutter had at least one button pressed.
237 bool flutter_state_is_down = false;
238
239 // True if kAdd has been sent to Flutter. Used to determine whether
240 // to send a kAdd event before sending an incoming pointer event, since
241 // Flutter expects pointers to be added before events are sent for them.
242 bool flutter_state_is_added = false;
243
244 // The currently pressed buttons, as represented in FlutterPointerEvent.
245 uint64_t buttons = 0;
246
247 // The x position where the last pan/zoom started.
248 double pan_zoom_start_x = 0;
249
250 // The y position where the last pan/zoom started.
251 double pan_zoom_start_y = 0;
252 };
253
254 // States a resize event can be in.
255 enum class ResizeState {
256 // When a resize event has started but is in progress.
257 kResizeStarted,
258 // After a resize event starts and the framework has been notified to
259 // generate a frame for the right size.
260 kFrameGenerated,
261 // Default state for when no resize is in progress. Also used to indicate
262 // that during a resize event, a frame with the right size has been rendered
263 // and the buffers have been swapped.
264 kDone,
265 };
266
267 // Sends a window metrics update to the Flutter engine using current window
268 // dimensions in physical
269 void SendWindowMetrics(size_t width, size_t height, double dpiscale) const;
270
271 // Reports a mouse movement to Flutter engine.
272 void SendPointerMove(double x, double y, PointerState* state);
273
274 // Reports mouse press to Flutter engine.
275 void SendPointerDown(double x, double y, PointerState* state);
276
277 // Reports mouse release to Flutter engine.
278 void SendPointerUp(double x, double y, PointerState* state);
279
280 // Reports mouse left the window client area.
281 //
282 // Win32 api doesn't have "mouse enter" event. Therefore, there is no
283 // SendPointerEnter method. A mouse enter event is tracked then the "move"
284 // event is called.
285 void SendPointerLeave(double x, double y, PointerState* state);
286
287 void SendPointerPanZoomStart(int32_t device_id, double x, double y);
288
289 void SendPointerPanZoomUpdate(int32_t device_id,
290 double pan_x,
291 double pan_y,
292 double scale,
293 double rotation);
294
295 void SendPointerPanZoomEnd(int32_t device_id);
296
297 // Reports a keyboard character to Flutter engine.
298 void SendText(const std::u16string&);
299
300 // Reports a raw keyboard message to Flutter engine.
301 void SendKey(int key,
302 int scancode,
303 int action,
304 char32_t character,
305 bool extended,
306 bool was_down,
307 KeyEventCallback callback);
308
309 // Reports an IME compose begin event.
310 //
311 // Triggered when the user begins editing composing text using a multi-step
312 // input method such as in CJK text input.
313 void SendComposeBegin();
314
315 // Reports an IME compose commit event.
316 //
317 // Triggered when the user commits the current composing text while using a
318 // multi-step input method such as in CJK text input. Composing continues with
319 // the next keypress.
320 void SendComposeCommit();
321
322 // Reports an IME compose end event.
323 //
324 // Triggered when the user commits the composing text while using a multi-step
325 // input method such as in CJK text input.
326 void SendComposeEnd();
327
328 // Reports an IME composing region change event.
329 //
330 // Triggered when the user edits the composing text while using a multi-step
331 // input method such as in CJK text input.
332 void SendComposeChange(const std::u16string& text, int cursor_pos);
333
334 // Reports scroll wheel events to Flutter engine.
335 void SendScroll(double x,
336 double y,
337 double delta_x,
338 double delta_y,
339 int scroll_offset_multiplier,
340 FlutterPointerDeviceKind device_kind,
341 int32_t device_id);
342
343 // Reports scroll inertia cancel events to Flutter engine.
344 void SendScrollInertiaCancel(int32_t device_id, double x, double y);
345
346 // Creates a PointerState object unless it already exists.
347 PointerState* GetOrCreatePointerState(FlutterPointerDeviceKind device_kind,
348 int32_t device_id);
349
350 // Sets |event_data|'s phase to either kMove or kHover depending on the
351 // current primary mouse button state.
352 void SetEventPhaseFromCursorButtonState(FlutterPointerEvent* event_data,
353 const PointerState* state) const;
354
355 // Sends a pointer event to the Flutter engine based on given data. Since
356 // all input messages are passed in physical pixel values, no translation is
357 // needed before passing on to engine.
358 void SendPointerEventWithData(const FlutterPointerEvent& event_data,
359 PointerState* state);
360
361 // Currently configured WindowsRenderTarget for this view used by
362 // surface_manager for creation of render surfaces and bound to the physical
363 // os window.
364 std::unique_ptr<WindowsRenderTarget> render_target_;
365
366 // The engine associated with this view.
367 std::unique_ptr<FlutterWindowsEngine> engine_;
368
369 // Keeps track of pointer states in relation to the window.
370 std::unordered_map<int32_t, std::unique_ptr<PointerState>> pointer_states_;
371
372 // Currently configured WindowBindingHandler for view.
373 std::unique_ptr<WindowBindingHandler> binding_handler_;
374
375 // Resize events are synchronized using this mutex and the corresponding
376 // condition variable.
377 std::mutex resize_mutex_;
378 std::condition_variable resize_cv_;
379
380 // Indicates the state of a window resize event. Platform thread will be
381 // blocked while this is not done. Guarded by resize_mutex_.
382 ResizeState resize_status_ = ResizeState::kDone;
383
384 // Target for the window width. Valid when resize_pending_ is set. Guarded by
385 // resize_mutex_.
386 size_t resize_target_width_ = 0;
387
388 // Target for the window width. Valid when resize_pending_ is set. Guarded by
389 // resize_mutex_.
390 size_t resize_target_height_ = 0;
391
392 // True when flutter's semantics tree is enabled.
393 bool semantics_enabled_ = false;
394
395 // The accessibility bridge associated with this view.
396 std::shared_ptr<AccessibilityBridgeWindows> accessibility_bridge_;
397
398 FML_DISALLOW_COPY_AND_ASSIGN(FlutterWindowsView);
399 };
400
401 } // namespace flutter
402
403 #endif // FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_VIEW_H_
flutter::FlutterWindowsView::OnPointerMove
void OnPointerMove(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, int modifiers_state) override
Definition: flutter_windows_view.cc:145
flutter::FlutterWindowsView::OnPointerUp
void OnPointerUp(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, FlutterPointerMouseButtons button) override
Definition: flutter_windows_view.cc:167
flutter::WindowStateEvent
WindowStateEvent
An event representing a change in window state that may update the.
Definition: windows_lifecycle_manager.h:24
flutter::FlutterWindowsView::OnWindowStateEvent
void OnWindowStateEvent(HWND hwnd, WindowStateEvent event) override
Definition: flutter_windows_view.cc:697
flutter::FlutterWindowsView::FlutterWindowsView
FlutterWindowsView(std::unique_ptr< WindowBindingHandler > window_binding)
Definition: flutter_windows_view.cc:41
flutter::FlutterWindowsView::CreateRenderSurface
void CreateRenderSurface()
Definition: flutter_windows_view.cc:590
flutter::FlutterWindowsView::OnWindowSizeChanged
void OnWindowSizeChanged(size_t width, size_t height) override
Definition: flutter_windows_view.cc:107
flutter::FlutterWindowsView::OnUpdateSemanticsEnabled
virtual void OnUpdateSemanticsEnabled(bool enabled) override
Definition: flutter_windows_view.cc:251
flutter::FlutterWindowsView::OnComposeCommit
void OnComposeCommit() override
Definition: flutter_windows_view.cc:222
flutter::FlutterWindowsView
Definition: flutter_windows_view.h:35
scancode
int scancode
Definition: keyboard_key_handler_unittests.cc:115
flutter::FlutterWindowsView::GetRenderTarget
WindowsRenderTarget * GetRenderTarget() const
Definition: flutter_windows_view.cc:622
flutter::FlutterWindowsView::~FlutterWindowsView
virtual ~FlutterWindowsView()
Definition: flutter_windows_view.cc:51
flutter::FlutterWindowsView::ClearContext
bool ClearContext()
Definition: flutter_windows_view.cc:544
geometry.h
was_down
bool was_down
Definition: keyboard_key_handler_unittests.cc:119
extended
bool extended
Definition: keyboard_key_handler_unittests.cc:118
plugin_registrar.h
flutter::FlutterWindowsView::OnPointerDown
void OnPointerDown(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, FlutterPointerMouseButtons button) override
Definition: flutter_windows_view.cc:154
flutter::FlutterWindowsEngine
Definition: flutter_windows_engine.h:78
character
char32_t character
Definition: keyboard_key_handler_unittests.cc:117
flutter::FlutterWindowsView::OnComposeChange
void OnComposeChange(const std::u16string &text, int cursor_pos) override
Definition: flutter_windows_view.cc:230
flutter::FlutterWindowsView::accessibility_bridge
std::weak_ptr< AccessibilityBridgeWindows > accessibility_bridge()
Definition: flutter_windows_view.h:210
flutter::FlutterWindowsView::OnScrollInertiaCancel
void OnScrollInertiaCancel(int32_t device_id) override
Definition: flutter_windows_view.cc:246
flutter::FlutterWindowsView::ForceRedraw
void ForceRedraw()
Definition: flutter_windows_view.cc:100
flutter::FlutterWindowsView::DestroyRenderSurface
void DestroyRenderSurface()
Definition: flutter_windows_view.cc:608
flutter::WindowsRenderTarget
std::variant< HWND > WindowsRenderTarget
Definition: window_binding_handler.h:44
flutter::FlutterWindowsView::OnPointerPanZoomStart
virtual void OnPointerPanZoomStart(int32_t device_id) override
Definition: flutter_windows_view.cc:187
flutter::WindowBindingHandlerDelegate
Definition: window_binding_handler_delegate.h:18
angle_surface_manager.h
flutter::Rect
Definition: geometry.h:56
flutter::FlutterWindowsView::MakeResourceCurrent
bool MakeResourceCurrent()
Definition: flutter_windows_view.cc:540
flutter::FlutterWindowsView::OnCursorRectUpdated
void OnCursorRectUpdated(const Rect &rect) override
Definition: flutter_windows_view.cc:263
flutter::FlutterWindowsView::AnnounceAlert
void AnnounceAlert(const std::wstring &text)
Definition: flutter_windows_view.cc:634
flutter::TextInputPluginDelegate
Definition: text_input_plugin_delegate.h:13
flutter::kWindowFrameBufferID
constexpr uint32_t kWindowFrameBufferID
Definition: flutter_windows_view.h:31
flutter::FlutterWindowsView::OnPointerPanZoomUpdate
virtual void OnPointerPanZoomUpdate(int32_t device_id, double pan_x, double pan_y, double scale, double rotation) override
Definition: flutter_windows_view.cc:192
flutter::FlutterWindowsView::OnWindowRepaint
void OnWindowRepaint() override
Definition: flutter_windows_view.cc:141
flutter::WindowBindingHandlerDelegate::KeyEventCallback
std::function< void(bool)> KeyEventCallback
Definition: window_binding_handler_delegate.h:20
flutter::FlutterWindowsView::OnComposeEnd
void OnComposeEnd() override
Definition: flutter_windows_view.cc:226
flutter::PlatformWindow
HWND PlatformWindow
Definition: window_binding_handler.h:40
text
std::u16string text
Definition: keyboard_unittests.cc:332
flutter::FlutterWindowsView::SetEngine
void SetEngine(std::unique_ptr< FlutterWindowsEngine > engine)
Definition: flutter_windows_view.cc:61
flutter::FlutterWindowsView::SwapBuffers
bool SwapBuffers()
Definition: flutter_windows_view.cc:548
accessibility_bridge_windows.h
window_binding_handler.h
window_state.h
flutter
Definition: accessibility_bridge_windows.cc:11
flutter::FlutterWindowsView::UpdateFlutterCursor
void UpdateFlutterCursor(const std::string &cursor_name)
Definition: flutter_windows_view.cc:92
flutter::FlutterWindowsView::SetFlutterCursor
void SetFlutterCursor(HCURSOR cursor)
Definition: flutter_windows_view.cc:96
flutter::FlutterWindowsView::OnPointerLeave
void OnPointerLeave(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id=0) override
Definition: flutter_windows_view.cc:180
flutter::FlutterWindowsView::OnText
void OnText(const std::u16string &) override
Definition: flutter_windows_view.cc:204
flutter::FlutterWindowsView::PresentSoftwareBitmap
bool PresentSoftwareBitmap(const void *allocation, size_t row_bytes, size_t height)
Definition: flutter_windows_view.cc:583
flutter::FlutterWindowsView::AlertNode
ui::AXPlatformNodeWin * AlertNode() const
Definition: flutter_windows_view.cc:655
flutter::FlutterWindowsView::MakeCurrent
bool MakeCurrent()
Definition: flutter_windows_view.cc:536
flutter::FlutterWindowsView::OnPointerPanZoomEnd
virtual void OnPointerPanZoomEnd(int32_t device_id) override
Definition: flutter_windows_view.cc:200
flutter::FlutterWindowsView::OnDwmCompositionChanged
void OnDwmCompositionChanged()
Definition: flutter_windows_view.cc:676
flutter::FlutterWindowsView::NotifyWinEventWrapper
virtual void NotifyWinEventWrapper(ui::AXPlatformNodeWin *node, ax::mojom::Event event)
Definition: flutter_windows_view.cc:644
flutter_windows_engine.h
flutter::FlutterWindowsView::UpdateSemanticsEnabled
virtual void UpdateSemanticsEnabled(bool enabled)
Definition: flutter_windows_view.cc:664
flutter::FlutterWindowsView::OnComposeBegin
void OnComposeBegin() override
Definition: flutter_windows_view.cc:218
flutter::FlutterWindowsView::UpdateHighContrastEnabled
void UpdateHighContrastEnabled(bool enabled) override
Definition: flutter_windows_view.cc:618
flutter_windows.h
flutter::FlutterWindowsView::SendInitialBounds
void SendInitialBounds()
Definition: flutter_windows_view.cc:283
flutter::FlutterWindowsView::CreateAccessibilityBridge
virtual std::shared_ptr< AccessibilityBridgeWindows > CreateAccessibilityBridge()
Definition: flutter_windows_view.cc:660
action
int action
Definition: keyboard_key_handler_unittests.cc:116
flutter::FlutterWindowsView::OnScroll
void OnScroll(double x, double y, double delta_x, double delta_y, int scroll_offset_multiplier, FlutterPointerDeviceKind device_kind, int32_t device_id) override
Definition: flutter_windows_view.cc:235
flutter::FlutterWindowsView::OnResetImeComposing
void OnResetImeComposing() override
Definition: flutter_windows_view.cc:267
text_input_plugin_delegate.h
flutter::FlutterWindowsView::GetAxFragmentRootDelegate
virtual ui::AXFragmentRootDelegateWin * GetAxFragmentRootDelegate() override
Definition: flutter_windows_view.cc:651
flutter::FlutterWindowsView::GetPlatformWindow
virtual PlatformWindow GetPlatformWindow() const
Definition: flutter_windows_view.cc:626
key
int key
Definition: keyboard_key_handler_unittests.cc:114
window_binding_handler_delegate.h
flutter::FlutterWindowsView::OnKey
void OnKey(int key, int scancode, int action, char32_t character, bool extended, bool was_down, KeyEventCallback callback) override
Definition: flutter_windows_view.cc:208
flutter::FlutterWindowsView::GetNativeViewAccessible
virtual gfx::NativeViewAccessible GetNativeViewAccessible() override
Definition: flutter_windows_view.cc:255
flutter::FlutterWindowsView::GetEngine
FlutterWindowsEngine * GetEngine()
Definition: flutter_windows_view.cc:630
flutter::FlutterWindowsView::GetFrameBufferId
uint32_t GetFrameBufferId(size_t width, size_t height)
Definition: flutter_windows_view.cc:73
flutter::FlutterWindowsView::SendInitialAccessibilityFeatures
void SendInitialAccessibilityFeatures()
Definition: flutter_windows_view.cc:614
callback
FlutterDesktopBinaryReply callback
Definition: flutter_windows_view_unittests.cc:46