5#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_VIEW_H_
6#define FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_VIEW_H_
12#include <unordered_map>
55 std::unique_ptr<WindowBindingHandler> window_binding,
56 bool is_sized_to_content,
59 std::shared_ptr<WindowsProcTable> windows_proc_table =
nullptr);
179 int modifiers_state)
override;
188 uint32_t pressure)
override;
195 uint64_t buttons)
override;
201 int32_t device_id = 0)
override;
211 double rotation)
override;
217 void OnText(
const std::u16string&)
override;
249 int scroll_offset_multiplier,
251 int32_t device_id)
override;
273 ui::AXPlatformNodeWin*
AlertNode()
const;
282 return accessibility_bridge_;
290 virtual bool Focus();
297 virtual std::shared_ptr<AccessibilityBridgeWindows>
307 struct PointerState {
312 int32_t pointer_id = 0;
315 bool flutter_state_is_down =
false;
320 bool flutter_state_is_added =
false;
323 uint64_t buttons = 0;
326 double pan_zoom_start_x = 0;
329 double pan_zoom_start_y = 0;
332 uint32_t rotation = 0;
335 uint32_t pressure = 0;
339 enum class ResizeState {
360 bool ResizeRenderSurface(
size_t width,
size_t height);
364 void SendWindowMetrics(
size_t width,
size_t height,
double pixel_ratio)
const;
367 void SendPointerMove(
double x,
double y, PointerState* state);
370 void SendPointerDown(
double x,
double y, PointerState* state);
373 void SendPointerUp(
double x,
double y, PointerState* state);
380 void SendPointerLeave(
double x,
double y, PointerState* state);
382 void SendPointerPanZoomStart(int32_t device_id,
double x,
double y);
384 void SendPointerPanZoomUpdate(int32_t device_id,
390 void SendPointerPanZoomEnd(int32_t device_id);
393 void SendText(
const std::u16string&);
396 void SendKey(
int key,
412 void SendComposeBegin();
419 void SendComposeCommit();
425 void SendComposeEnd();
431 void SendComposeChange(
const std::u16string&
text,
int cursor_pos);
434 void SendScroll(
double x,
438 int scroll_offset_multiplier,
443 void SendScrollInertiaCancel(int32_t device_id,
double x,
double y);
452 const PointerState* state)
const;
458 PointerState* state);
462 void FireFirstFrameCallbackIfSet();
466 bool NeedsVsync()
const;
469 BoxConstraints GetConstraints()
const;
475 FlutterWindowsEngine* engine_ =
nullptr;
478 std::shared_ptr<WindowsProcTable> windows_proc_table_;
484 std::unique_ptr<egl::WindowSurface> surface_ =
nullptr;
487 std::unordered_map<int32_t, std::unique_ptr<PointerState>> pointer_states_;
490 std::unique_ptr<WindowBindingHandler> binding_handler_;
493 std::mutex resize_mutex_;
497 ResizeState resize_status_ = ResizeState::kDone;
501 size_t resize_target_width_ = 0;
505 size_t resize_target_height_ = 0;
508 bool semantics_enabled_ =
false;
511 std::shared_ptr<AccessibilityBridgeWindows> accessibility_bridge_;
515 std::atomic<bool> is_sized_to_content_{
false};
518 BoxConstraints box_constraints_;
521 FlutterWindowsViewSizingDelegate* sizing_delegate_ =
nullptr;
524 std::mutex first_frame_callback_mutex_;
virtual void OnFramePresented()
virtual void OnPointerPanZoomStart(int32_t device_id) override
void CreateRenderSurface()
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
void SetSizedToContent(bool sized_to_content)
ui::AXPlatformNodeWin * AlertNode() const
virtual void OnResetImeComposing()
void OnPointerDown(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, uint64_t buttons, uint32_t rotation, uint32_t pressure) override
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
void OnPointerMove(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, uint64_t buttons, uint32_t rotation, uint32_t pressure, int modifiers_state) override
FlutterWindowMetricsEvent CreateWindowMetricsEvent() const
FlutterViewId view_id() const
virtual void AnnounceAlert(const std::wstring &text)
void OnPointerUp(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, uint64_t buttons) override
std::weak_ptr< AccessibilityBridgeWindows > accessibility_bridge()
virtual bool PresentSoftwareBitmap(const void *allocation, size_t row_bytes, size_t height)
void OnFocus(FlutterViewFocusState focus_state, FlutterViewFocusDirection direction) override
bool IsSizedToContent() const
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
FlutterViewFocusState
Represents the focus state of a given [FlutterView].
FlutterViewFocusDirection
FlutterPointerDeviceKind
The device type that created a pointer event.
@ kFlutterPointerDeviceKindMouse
FlutterDesktopBinaryReply callback
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
WindowStateEvent
An event representing a change in window state that may update the.
std::function< void()> closure
UnimplementedNativeViewAccessible * NativeViewAccessible