mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This changes the Windows text handling so that keyboard events are sent to the framework first for handling, and then passed to the text input plugin, so that the framework has a chance to handle keys before they get given to the text field. This is complicated by the async nature of the interaction with the framework, since Windows wants a synchronous response. So, in this change, I always tell Windows that the event was handled, and if the framework (eventually) responds that it wasn't, then I synthesize a new event and send it with SendEvent. I also added support for detecting "extended" keys, since that was missing, and converted the OnKey handlers in the API to return a bool to indicate whether or not they have handled the event.
65 lines
2.7 KiB
C++
65 lines
2.7 KiB
C++
// 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 "flutter/shell/platform/common/cpp/geometry.h"
|
|
#include "flutter/shell/platform/embedder/embedder.h"
|
|
|
|
namespace flutter {
|
|
|
|
class WindowBindingHandlerDelegate {
|
|
public:
|
|
// Notifies delegate that backing window size has changed.
|
|
// Typically called by currently configured WindowBindingHandler, this is
|
|
// called on the platform thread.
|
|
virtual void OnWindowSizeChanged(size_t width, size_t height) = 0;
|
|
|
|
// Notifies delegate that backing window mouse has moved.
|
|
// Typically called by currently configured WindowBindingHandler
|
|
virtual void OnPointerMove(double x, double y) = 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,
|
|
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,
|
|
FlutterPointerMouseButtons button) = 0;
|
|
|
|
// Notifies delegate that backing window mouse pointer has left the window.
|
|
// Typically called by currently configured WindowBindingHandler
|
|
virtual void OnPointerLeave() = 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 bool OnKey(int key,
|
|
int scancode,
|
|
int action,
|
|
char32_t character,
|
|
bool extended) = 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) = 0;
|
|
};
|
|
|
|
} // namespace flutter
|
|
|
|
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOW_BINDING_HANDLER_DELEGATE_H_
|