| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOW_BINDING_HANDLER_DELEGATE_H_ | |
| #define FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOW_BINDING_HANDLER_DELEGATE_H_ | |
| #include <functional> | |
| #include "flutter/shell/platform/common/geometry.h" | |
| #include "flutter/shell/platform/embedder/embedder.h" | |
| #include "flutter/shell/platform/windows/windows_lifecycle_manager.h" | |
| #include "flutter/third_party/accessibility/ax/platform/ax_fragment_root_delegate_win.h" | |
| #include "flutter/third_party/accessibility/gfx/native_widget_types.h" | |
| namespace flutter { | |
| class WindowBindingHandlerDelegate { | |
| public: | |
| using KeyEventCallback = std::function<void(bool)>; | |
| // Notifies delegate that backing window size has changed. | |
| // | |
| // Called by |FlutterWindow| on the platform thread. | |
| // | |
| // Returns true if the delegate completed the window resize synchronously. | |
| // The return value is exposed for unit testing. | |
| virtual bool OnWindowSizeChanged(size_t width, size_t height) = 0; | |
| // Notifies delegate that backing window needs to be repainted. | |
| // Typically called by currently configured WindowBindingHandler. | |
| virtual void OnWindowRepaint() = 0; | |
| // Notifies delegate that backing window mouse has moved. | |
| // Typically called by currently configured WindowBindingHandler. | |
| virtual void OnPointerMove(double x, | |
| double y, | |
| FlutterPointerDeviceKind device_kind, | |
| int32_t device_id, | |
| int modifiers_state) = 0; | |
| // Notifies delegate that backing window mouse pointer button has been | |
| // pressed. Typically called by currently configured WindowBindingHandler. | |
| virtual void OnPointerDown(double x, | |
| double y, | |
| FlutterPointerDeviceKind device_kind, | |
| int32_t device_id, | |
| FlutterPointerMouseButtons button) = 0; | |
| // Notifies delegate that backing window mouse pointer button has been | |
| // released. Typically called by currently configured WindowBindingHandler. | |
| virtual void OnPointerUp(double x, | |
| double y, | |
| FlutterPointerDeviceKind device_kind, | |
| int32_t device_id, | |
| FlutterPointerMouseButtons button) = 0; | |
| // Notifies delegate that backing window mouse pointer has left the window. | |
| // Typically called by currently configured WindowBindingHandler. | |
| virtual void OnPointerLeave(double x, | |
| double y, | |
| FlutterPointerDeviceKind device_kind, | |
| int32_t device_id) = 0; | |
| // Notifies delegate that a pan/zoom gesture has started. | |
| // Typically called by DirectManipulationEventHandler. | |
| virtual void OnPointerPanZoomStart(int32_t device_id) = 0; | |
| // Notifies delegate that a pan/zoom gesture has updated. | |
| // Typically called by DirectManipulationEventHandler. | |
| virtual void OnPointerPanZoomUpdate(int32_t device_id, | |
| double pan_x, | |
| double pan_y, | |
| double scale, | |
| double rotation) = 0; | |
| // Notifies delegate that a pan/zoom gesture has ended. | |
| // Typically called by DirectManipulationEventHandler. | |
| virtual void OnPointerPanZoomEnd(int32_t device_id) = 0; | |
| // Notifies delegate that backing window has received text. | |
| // Typically called by currently configured WindowBindingHandler. | |
| virtual void OnText(const std::u16string&) = 0; | |
| // Notifies delegate that backing window size has received key press. Should | |
| // return true if the event was handled and should not be propagated. | |
| // Typically called by currently configured WindowBindingHandler. | |
| virtual void OnKey(int key, | |
| int scancode, | |
| int action, | |
| char32_t character, | |
| bool extended, | |
| bool was_down, | |
| KeyEventCallback callback) = 0; | |
| // Notifies the delegate that IME composing mode has begun. | |
| // | |
| // Triggered when the user begins editing composing text using a multi-step | |
| // input method such as in CJK text input. | |
| virtual void OnComposeBegin() = 0; | |
| // Notifies the delegate that IME composing region have been committed. | |
| // | |
| // Triggered when the user triggers a commit of the current composing text | |
| // while using a multi-step input method such as in CJK text input. Composing | |
| // continues with the next keypress. | |
| virtual void OnComposeCommit() = 0; | |
| // Notifies the delegate that IME composing mode has ended. | |
| // | |
| // Triggered when the composing ends, for example when the user presses | |
| // ESC or when the user triggers a commit of the composing text while using a | |
| // multi-step input method such as in CJK text input. | |
| virtual void OnComposeEnd() = 0; | |
| // Notifies the delegate that IME composing region contents have changed. | |
| // | |
| // Triggered when the user edits the composing text while using a multi-step | |
| // input method such as in CJK text input. | |
| virtual void OnComposeChange(const std::u16string& text, int cursor_pos) = 0; | |
| // Notifies delegate that backing window size has recevied scroll. | |
| // Typically called by currently configured WindowBindingHandler. | |
| virtual void OnScroll(double x, | |
| double y, | |
| double delta_x, | |
| double delta_y, | |
| int scroll_offset_multiplier, | |
| FlutterPointerDeviceKind device_kind, | |
| int32_t device_id) = 0; | |
| // Notifies delegate that scroll inertia should be cancelled. | |
| // Typically called by DirectManipulationEventHandler | |
| virtual void OnScrollInertiaCancel(int32_t device_id) = 0; | |
| // Notifies delegate that the Flutter semantics tree should be enabled or | |
| // disabled. | |
| virtual void OnUpdateSemanticsEnabled(bool enabled) = 0; | |
| // Returns the root view accessibility node, or nullptr if none. | |
| virtual gfx::NativeViewAccessible GetNativeViewAccessible() = 0; | |
| // Update the status of the high contrast feature. | |
| virtual void OnHighContrastChanged() = 0; | |
| // Obtain a pointer to the fragment root delegate. | |
| // This is required by UIA in order to obtain the fragment root that | |
| // contains a fragment obtained by, for example, a hit test. Unlike | |
| // MSAA, UIA elements do not explicitly store or enumerate their | |
| // children and parents, so a method such as this is required. | |
| virtual ui::AXFragmentRootDelegateWin* GetAxFragmentRootDelegate() = 0; | |
| // Called when a window receives an event that may alter application lifecycle | |
| // state. | |
| virtual void OnWindowStateEvent(HWND hwnd, WindowStateEvent event) = 0; | |
| }; | |
| } // namespace flutter | |
| #endif // FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOW_BINDING_HANDLER_DELEGATE_H_ |