5 #ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_VIEW_H_
6 #define FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_VIEW_H_
11 #include <unordered_map>
15 #include "flutter/fml/closure.h"
16 #include "flutter/fml/macros.h"
17 #include "flutter/shell/geometry/geometry.h"
19 #include "flutter/shell/platform/embedder/embedder.h"
54 std::unique_ptr<WindowBindingHandler> window_binding,
55 bool is_sized_to_content,
56 const BoxConstraints& box_constraints,
58 std::shared_ptr<WindowsProcTable> windows_proc_table =
nullptr);
159 FlutterPointerDeviceKind device_kind,
163 int modifiers_state)
override;
168 FlutterPointerDeviceKind device_kind,
170 FlutterPointerMouseButtons button,
172 uint32_t pressure)
override;
177 FlutterPointerDeviceKind device_kind,
179 FlutterPointerMouseButtons button)
override;
184 FlutterPointerDeviceKind device_kind,
185 int32_t device_id = 0)
override;
195 double rotation)
override;
201 void OnText(
const std::u16string&)
override;
213 void OnFocus(FlutterViewFocusState focus_state,
214 FlutterViewFocusDirection direction)
override;
233 int scroll_offset_multiplier,
234 FlutterPointerDeviceKind device_kind,
235 int32_t device_id)
override;
257 ui::AXPlatformNodeWin*
AlertNode()
const;
266 return accessibility_bridge_;
274 virtual bool Focus();
278 ax::mojom::Event event);
281 virtual std::shared_ptr<AccessibilityBridgeWindows>
291 struct PointerState {
293 FlutterPointerDeviceKind device_kind = kFlutterPointerDeviceKindMouse;
296 int32_t pointer_id = 0;
299 bool flutter_state_is_down =
false;
304 bool flutter_state_is_added =
false;
307 uint64_t buttons = 0;
310 double pan_zoom_start_x = 0;
313 double pan_zoom_start_y = 0;
316 uint32_t rotation = 0;
319 uint32_t pressure = 0;
323 enum class ResizeState {
344 bool ResizeRenderSurface(
size_t width,
size_t height);
348 void SendWindowMetrics(
size_t width,
size_t height,
double pixel_ratio)
const;
351 void SendPointerMove(
double x,
double y, PointerState* state);
354 void SendPointerDown(
double x,
double y, PointerState* state);
357 void SendPointerUp(
double x,
double y, PointerState* state);
364 void SendPointerLeave(
double x,
double y, PointerState* state);
366 void SendPointerPanZoomStart(int32_t device_id,
double x,
double y);
368 void SendPointerPanZoomUpdate(int32_t device_id,
374 void SendPointerPanZoomEnd(int32_t device_id);
377 void SendText(
const std::u16string&);
380 void SendKey(
int key,
389 void SendFocus(FlutterViewFocusState focus_state,
390 FlutterViewFocusDirection direction);
396 void SendComposeBegin();
403 void SendComposeCommit();
409 void SendComposeEnd();
415 void SendComposeChange(
const std::u16string&
text,
int cursor_pos);
418 void SendScroll(
double x,
422 int scroll_offset_multiplier,
423 FlutterPointerDeviceKind device_kind,
427 void SendScrollInertiaCancel(int32_t device_id,
double x,
double y);
430 PointerState* GetOrCreatePointerState(FlutterPointerDeviceKind device_kind,
435 void SetEventPhaseFromCursorButtonState(FlutterPointerEvent* event_data,
436 const PointerState* state)
const;
441 void SendPointerEventWithData(
const FlutterPointerEvent& event_data,
442 PointerState* state);
446 void FireFirstFrameCallbackIfSet();
450 bool NeedsVsync()
const;
456 bool IsSizedToContent()
const;
459 BoxConstraints GetConstraints()
const;
465 FlutterWindowsEngine* engine_ =
nullptr;
468 std::shared_ptr<WindowsProcTable> windows_proc_table_;
474 std::unique_ptr<egl::WindowSurface> surface_ =
nullptr;
477 std::unordered_map<int32_t, std::unique_ptr<PointerState>> pointer_states_;
480 std::unique_ptr<WindowBindingHandler> binding_handler_;
483 std::mutex resize_mutex_;
487 ResizeState resize_status_ = ResizeState::kDone;
491 size_t resize_target_width_ = 0;
495 size_t resize_target_height_ = 0;
498 bool semantics_enabled_ =
false;
501 std::shared_ptr<AccessibilityBridgeWindows> accessibility_bridge_;
505 bool is_sized_to_content_ =
false;
508 BoxConstraints box_constraints_;
511 FlutterWindowsViewSizingDelegate* sizing_delegate_ =
nullptr;
514 std::mutex first_frame_callback_mutex_;
518 fml::closure first_frame_callback_;
virtual void OnFramePresented()
void OnPointerMove(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, uint32_t rotation, uint32_t pressure, int modifiers_state) override
virtual void OnPointerPanZoomStart(int32_t device_id) override
void CreateRenderSurface()
void OnPointerUp(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, FlutterPointerMouseButtons button) override
virtual void UpdateSemanticsEnabled(bool enabled)
virtual ui::AXFragmentRootDelegateWin * GetAxFragmentRootDelegate() override
bool IsImplicitView() const
void OnScrollInertiaCancel(int32_t device_id) override
virtual std::shared_ptr< AccessibilityBridgeWindows > CreateAccessibilityBridge()
void OnComposeBegin() override
ui::AXPlatformNodeWin * AlertNode() const
virtual void OnResetImeComposing()
std::weak_ptr< AccessibilityBridgeWindows > accessibility_bridge()
virtual void OnUpdateSemanticsEnabled(bool enabled) override
void OnPointerLeave(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id=0) override
virtual void NotifyWinEventWrapper(ui::AXPlatformNodeWin *node, ax::mojom::Event event)
void SetFirstFrameCallback(fml::closure callback)
FlutterWindowsEngine * GetEngine() const
void OnScroll(double x, double y, double delta_x, double delta_y, int scroll_offset_multiplier, FlutterPointerDeviceKind device_kind, int32_t device_id) override
void OnWindowStateEvent(HWND hwnd, WindowStateEvent event) override
virtual void OnPointerPanZoomEnd(int32_t device_id) override
FlutterWindowMetricsEvent CreateWindowMetricsEvent() const
FlutterWindowsView(FlutterViewId view_id, FlutterWindowsEngine *engine, std::unique_ptr< WindowBindingHandler > window_binding, bool is_sized_to_content, const BoxConstraints &box_constraints, FlutterWindowsViewSizingDelegate *sizing_delegate=nullptr, std::shared_ptr< WindowsProcTable > windows_proc_table=nullptr)
FlutterViewId view_id() const
void OnPointerDown(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, FlutterPointerMouseButtons button, uint32_t rotation, uint32_t pressure) override
virtual void AnnounceAlert(const std::wstring &text)
friend class ViewModifier
virtual bool PresentSoftwareBitmap(const void *allocation, size_t row_bytes, size_t height)
void OnFocus(FlutterViewFocusState focus_state, FlutterViewFocusDirection direction) override
virtual HWND GetWindowHandle() const
egl::WindowSurface * surface() const
bool OnWindowSizeChanged(size_t width, size_t height) override
void OnText(const std::u16string &) override
void OnWindowRepaint() override
virtual void OnPointerPanZoomUpdate(int32_t device_id, double pan_x, double pan_y, double scale, double rotation) override
void OnComposeChange(const std::u16string &text, int cursor_pos) override
void OnDwmCompositionChanged()
void OnComposeCommit() override
virtual bool ClearSoftwareBitmap()
virtual gfx::NativeViewAccessible GetNativeViewAccessible() override
virtual ~FlutterWindowsView()
void OnHighContrastChanged() override
virtual void OnCursorRectUpdated(const Rect &rect)
void OnKey(int key, int scancode, int action, char32_t character, bool extended, bool was_down, KeyEventCallback callback) override
void OnComposeEnd() override
bool OnEmptyFrameGenerated()
bool OnFrameGenerated(size_t width, size_t height)
virtual WindowRect GetWorkArea() const =0
virtual void DidUpdateViewSize(int32_t width, int32_t height)=0
std::function< void(bool)> KeyEventCallback
FlutterDesktopBinaryReply callback
WindowStateEvent
An event representing a change in window state that may update the.