mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
f5f6fd70f2
Summary: changelog: [internal] Introduce a way to execute `onKeyPress` synchronously. This feature is experimental and will be changed in the future. It is not decided if marking native events as "sync" is going to be path forward with synchronous access. NOTE: This is experimental API. Reviewed By: ShikaSD Differential Revision: D32882092 fbshipit-source-id: 68c66a9bb7c97758219e085c88a77f3c475c1eb3
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <react/renderer/attributedstring/AttributedString.h>
|
|
#include <react/renderer/components/view/ViewEventEmitter.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
class TextInputMetrics {
|
|
public:
|
|
std::string text;
|
|
AttributedString::Range selectionRange;
|
|
// ScrollView-like metrics
|
|
Size contentSize;
|
|
Point contentOffset;
|
|
EdgeInsets contentInset;
|
|
Size containerSize;
|
|
int eventCount;
|
|
Size layoutMeasurement;
|
|
float zoomScale;
|
|
};
|
|
|
|
class KeyPressMetrics {
|
|
public:
|
|
std::string text;
|
|
int eventCount;
|
|
};
|
|
|
|
class TextInputEventEmitter : public ViewEventEmitter {
|
|
public:
|
|
using ViewEventEmitter::ViewEventEmitter;
|
|
|
|
void onFocus(TextInputMetrics const &textInputMetrics) const;
|
|
void onBlur(TextInputMetrics const &textInputMetrics) const;
|
|
void onChange(TextInputMetrics const &textInputMetrics) const;
|
|
void onContentSizeChange(TextInputMetrics const &textInputMetrics) const;
|
|
void onSelectionChange(TextInputMetrics const &textInputMetrics) const;
|
|
void onEndEditing(TextInputMetrics const &textInputMetrics) const;
|
|
void onSubmitEditing(TextInputMetrics const &textInputMetrics) const;
|
|
void onKeyPress(KeyPressMetrics const &textInputMetrics) const;
|
|
void onKeyPressSync(KeyPressMetrics const &textInputMetrics) const;
|
|
void onScroll(TextInputMetrics const &textInputMetrics) const;
|
|
|
|
private:
|
|
void dispatchTextInputEvent(
|
|
std::string const &name,
|
|
TextInputMetrics const &textInputMetrics,
|
|
EventPriority priority = EventPriority::AsynchronousBatched) const;
|
|
};
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|