react-native-screens 3.31.1 → 3.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -11
- package/RNScreens.podspec +11 -52
- package/android/CMakeLists.txt +48 -4
- package/android/build.gradle +16 -9
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +25 -16
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
- package/android/src/main/cpp/NativeProxy.cpp +51 -0
- package/android/src/main/cpp/NativeProxy.h +35 -0
- package/android/src/main/cpp/OnLoad.cpp +8 -0
- package/android/src/main/cpp/jni-adapter.cpp +86 -93
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +6 -1
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +36 -17
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +150 -40
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +52 -30
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +27 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +56 -27
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +8 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +50 -19
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +63 -39
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +88 -57
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +131 -36
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +19 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +16 -10
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +28 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +177 -77
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +77 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +31 -9
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +160 -54
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +29 -22
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +7 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +4 -3
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +9 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
- package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +214 -0
- package/android/src/main/jni/CMakeLists.txt +5 -4
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +6 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +2 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +3 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +1 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java +99 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java +37 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -5
- package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
- package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +4 -0
- package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h +8 -9
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +2 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +9 -8
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +147 -10
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +51 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +29 -7
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +22 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +30 -10
- package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
- package/cpp/RNSScreenRemovalListener.cpp +25 -0
- package/cpp/RNSScreenRemovalListener.h +20 -0
- package/cpp/RNScreensTurboModule.cpp +31 -23
- package/cpp/RNScreensTurboModule.h +17 -20
- package/ios/RNSConvert.h +7 -0
- package/ios/RNSConvert.mm +24 -0
- package/ios/RNSModalScreen.mm +22 -0
- package/ios/RNSModule.mm +2 -3
- package/ios/RNSScreen.h +2 -1
- package/ios/RNSScreen.mm +35 -19
- package/ios/RNSScreenContainer.mm +1 -1
- package/ios/RNSScreenStack.mm +59 -54
- package/ios/RNSScreenStackAnimator.mm +43 -6
- package/ios/RNSScreenStackHeaderConfig.h +2 -0
- package/ios/RNSScreenStackHeaderConfig.mm +93 -28
- package/ios/RNSScreenStackHeaderSubview.mm +8 -0
- package/ios/RNSSearchBar.h +5 -5
- package/ios/RNSSearchBar.mm +11 -11
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.mm +14 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.mm +15 -0
- package/ios/utils/UIView+RNSUtility.h +23 -0
- package/ios/utils/UIView+RNSUtility.mm +55 -0
- package/lib/commonjs/components/Screen.js +119 -127
- package/lib/commonjs/components/Screen.js.map +1 -1
- package/lib/commonjs/components/ScreenStack.js +8 -1
- package/lib/commonjs/components/ScreenStack.js.map +1 -1
- package/lib/commonjs/components/SearchBar.js +39 -36
- package/lib/commonjs/components/SearchBar.js.map +1 -1
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/native-stack/views/HeaderConfig.js +2 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +4 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/components/Screen.js +118 -126
- package/lib/module/components/Screen.js.map +1 -1
- package/lib/module/components/ScreenStack.js +8 -1
- package/lib/module/components/ScreenStack.js.map +1 -1
- package/lib/module/components/SearchBar.js +39 -36
- package/lib/module/components/SearchBar.js.map +1 -1
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/native-stack/views/HeaderConfig.js +2 -0
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +4 -0
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/components/Screen.d.ts +3 -14
- package/lib/typescript/components/Screen.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
- package/lib/typescript/components/SearchBar.d.ts +14 -21
- package/lib/typescript/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +12 -10
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +12 -10
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +5 -3
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +9 -9
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts +1 -1
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +39 -14
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +1 -1
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +1 -1
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -1
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts +2 -2
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +1 -1
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +39 -13
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/useTransitionProgress.d.ts +3 -3
- package/native-stack/README.md +116 -98
- package/package.json +16 -7
- package/react-native.config.js +17 -15
- package/src/TransitionProgressContext.tsx +1 -1
- package/src/components/Screen.tsx +31 -37
- package/src/components/ScreenStack.tsx +11 -1
- package/src/components/ScreenStackHeaderConfig.tsx +5 -5
- package/src/components/ScreenStackHeaderConfig.web.tsx +6 -6
- package/src/components/SearchBar.tsx +77 -65
- package/src/core.ts +1 -1
- package/src/fabric/ModalScreenNativeComponent.ts +2 -0
- package/src/fabric/ScreenNativeComponent.ts +2 -0
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +1 -1
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +4 -1
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +1 -1
- package/src/fabric/SearchBarNativeComponent.ts +7 -7
- package/src/gesture-handler/ScreenGestureDetector.tsx +5 -5
- package/src/gesture-handler/constraints.ts +5 -5
- package/src/gesture-handler/fabricUtils.ts +1 -1
- package/src/native-stack/contexts/GHContext.tsx +1 -1
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +3 -3
- package/src/native-stack/types.tsx +29 -4
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/getStatusBarHeight.tsx +1 -1
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
- package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
- package/src/native-stack/views/FontProcessor.tsx +1 -1
- package/src/native-stack/views/HeaderConfig.tsx +3 -1
- package/src/native-stack/views/NativeStackView.tsx +13 -9
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -5
- package/src/reanimated/ReanimatedScreen.tsx +2 -2
- package/src/reanimated/ReanimatedScreenProvider.tsx +1 -1
- package/src/reanimated/useReanimatedHeaderHeight.tsx +1 -1
- package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
- package/src/types.tsx +31 -5
- package/src/useTransitionProgress.tsx +1 -1
- package/windows/README.md +4 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
3
|
#include <react/debug/react_native_assert.h>
|
|
4
|
-
#include "RNSModalScreenShadowNode.h"
|
|
5
4
|
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
5
|
+
#include "RNSModalScreenShadowNode.h"
|
|
6
6
|
|
|
7
7
|
namespace facebook {
|
|
8
8
|
namespace react {
|
|
@@ -12,16 +12,15 @@ class RNSModalScreenComponentDescriptor final
|
|
|
12
12
|
public:
|
|
13
13
|
using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
|
|
14
14
|
|
|
15
|
-
void adopt(ShadowNode&
|
|
16
|
-
react_native_assert(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
static_cast<RNSModalScreenShadowNode&>(shadowNode);
|
|
15
|
+
void adopt(ShadowNode &shadowNode) const override {
|
|
16
|
+
react_native_assert(dynamic_cast<RNSModalScreenShadowNode *>(&shadowNode));
|
|
17
|
+
auto &screenShadowNode =
|
|
18
|
+
static_cast<RNSModalScreenShadowNode &>(shadowNode);
|
|
20
19
|
|
|
21
20
|
react_native_assert(
|
|
22
|
-
dynamic_cast<YogaLayoutableShadowNode*>(&screenShadowNode));
|
|
23
|
-
auto&
|
|
24
|
-
dynamic_cast<YogaLayoutableShadowNode&>(screenShadowNode);
|
|
21
|
+
dynamic_cast<YogaLayoutableShadowNode *>(&screenShadowNode));
|
|
22
|
+
auto &layoutableShadowNode =
|
|
23
|
+
dynamic_cast<YogaLayoutableShadowNode &>(screenShadowNode);
|
|
25
24
|
|
|
26
25
|
auto state =
|
|
27
26
|
std::static_pointer_cast<const RNSModalScreenShadowNode::ConcreteState>(
|
|
@@ -5,7 +5,8 @@ namespace react {
|
|
|
5
5
|
|
|
6
6
|
extern const char RNSModalScreenComponentName[] = "RNSModalScreen";
|
|
7
7
|
|
|
8
|
-
Point RNSModalScreenShadowNode::getContentOriginOffset(
|
|
8
|
+
Point RNSModalScreenShadowNode::getContentOriginOffset(
|
|
9
|
+
bool /*includeTransform*/) const {
|
|
9
10
|
auto stateData = getStateData();
|
|
10
11
|
auto contentOffset = stateData.contentOffset;
|
|
11
12
|
return {contentOffset.x, contentOffset.y};
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include
|
|
3
|
+
#include <jsi/jsi.h>
|
|
4
4
|
#include <react/renderer/components/rnscreens/EventEmitters.h>
|
|
5
5
|
#include <react/renderer/components/rnscreens/Props.h>
|
|
6
6
|
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
|
7
|
-
#include
|
|
7
|
+
#include "RNSScreenState.h"
|
|
8
8
|
|
|
9
9
|
namespace facebook {
|
|
10
10
|
namespace react {
|
|
11
11
|
|
|
12
12
|
JSI_EXPORT extern const char RNSModalScreenComponentName[];
|
|
13
13
|
|
|
14
|
-
class JSI_EXPORT RNSModalScreenShadowNode final
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
class JSI_EXPORT RNSModalScreenShadowNode final
|
|
15
|
+
: public ConcreteViewShadowNode<
|
|
16
|
+
RNSModalScreenComponentName,
|
|
17
|
+
RNSScreenProps,
|
|
18
|
+
RNSScreenEventEmitter,
|
|
19
|
+
RNSScreenState> {
|
|
19
20
|
public:
|
|
20
21
|
using ConcreteViewShadowNode::ConcreteViewShadowNode;
|
|
21
22
|
|
|
22
|
-
Point getContentOriginOffset() const override;
|
|
23
|
+
Point getContentOriginOffset(bool includeTransform) const override;
|
|
23
24
|
static ShadowNodeTraits BaseTraits() {
|
|
24
25
|
auto traits = ConcreteViewShadowNode::BaseTraits();
|
|
25
26
|
traits.set(ShadowNodeTraits::Trait::RootNodeKind);
|
|
@@ -1,40 +1,177 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#ifdef ANDROID
|
|
4
|
+
#include <fbjni/fbjni.h>
|
|
5
|
+
#endif
|
|
3
6
|
#include <react/debug/react_native_assert.h>
|
|
4
|
-
#include
|
|
7
|
+
#include <react/renderer/components/rnscreens/Props.h>
|
|
5
8
|
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
9
|
+
#include "RNSScreenShadowNode.h"
|
|
10
|
+
#include "utils/RectUtil.h"
|
|
6
11
|
|
|
7
12
|
namespace facebook {
|
|
8
13
|
namespace react {
|
|
9
14
|
|
|
15
|
+
using namespace rnscreens;
|
|
16
|
+
|
|
10
17
|
class RNSScreenComponentDescriptor final
|
|
11
18
|
: public ConcreteComponentDescriptor<RNSScreenShadowNode> {
|
|
12
19
|
public:
|
|
13
20
|
using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
|
|
14
21
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
static constexpr const char *kScreenDummyLayoutHelperClass =
|
|
23
|
+
"com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper";
|
|
24
|
+
|
|
25
|
+
void adopt(ShadowNode &shadowNode) const override {
|
|
26
|
+
react_native_assert(dynamic_cast<RNSScreenShadowNode *>(&shadowNode));
|
|
27
|
+
auto &screenShadowNode = static_cast<RNSScreenShadowNode &>(shadowNode);
|
|
20
28
|
|
|
21
29
|
react_native_assert(
|
|
22
|
-
dynamic_cast<YogaLayoutableShadowNode*>(&screenShadowNode));
|
|
23
|
-
auto&
|
|
24
|
-
dynamic_cast<YogaLayoutableShadowNode&>(screenShadowNode);
|
|
30
|
+
dynamic_cast<YogaLayoutableShadowNode *>(&screenShadowNode));
|
|
31
|
+
auto &layoutableShadowNode =
|
|
32
|
+
dynamic_cast<YogaLayoutableShadowNode &>(screenShadowNode);
|
|
25
33
|
|
|
26
34
|
auto state =
|
|
27
35
|
std::static_pointer_cast<const RNSScreenShadowNode::ConcreteState>(
|
|
28
36
|
shadowNode.getState());
|
|
29
37
|
auto stateData = state->getData();
|
|
30
38
|
|
|
39
|
+
#ifdef ANDROID
|
|
31
40
|
if (stateData.frameSize.width != 0 && stateData.frameSize.height != 0) {
|
|
41
|
+
// When we receive dimensions from JVM side we can remove padding used for
|
|
42
|
+
// correction, and we can stop applying height correction for the frame.
|
|
43
|
+
// We want to leave top offset correction though intact.
|
|
44
|
+
// TODO: In future, when we have dynamic header height we might want to
|
|
45
|
+
// update Y offset correction here.
|
|
46
|
+
|
|
47
|
+
#ifdef REACT_NATIVE_DEBUG
|
|
48
|
+
// We use the fact that height correction is disabled once we receive
|
|
49
|
+
// state from the native, so when we have incoming state & height
|
|
50
|
+
// correction is still enabled, we know this is the very first native
|
|
51
|
+
// state update.
|
|
52
|
+
if (screenShadowNode.getFrameCorrectionModes().check(
|
|
53
|
+
FrameCorrectionModes::Mode::FrameHeightCorrection) &&
|
|
54
|
+
!checkFrameSizesEqualWithEps(
|
|
55
|
+
screenShadowNode.layoutMetrics_.frame.size,
|
|
56
|
+
stateData.frameSize)) {
|
|
57
|
+
LOG(ERROR)
|
|
58
|
+
<< "[RNScreens] The first frame received from state update: "
|
|
59
|
+
<< stateData.frameSize.width << "x" << stateData.frameSize.height
|
|
60
|
+
<< " differs from the one expected: "
|
|
61
|
+
<< screenShadowNode.layoutMetrics_.frame.size.width << "x"
|
|
62
|
+
<< screenShadowNode.layoutMetrics_.frame.size.height
|
|
63
|
+
<< ". This is most likely a react-native-screens library bug. Please report this at https://github.com/software-mansion/react-native-screens/issues";
|
|
64
|
+
}
|
|
65
|
+
#endif
|
|
66
|
+
|
|
67
|
+
screenShadowNode.setPadding({0, 0, 0, 0});
|
|
68
|
+
screenShadowNode.getFrameCorrectionModes().unset(
|
|
69
|
+
FrameCorrectionModes::Mode::FrameHeightCorrection);
|
|
70
|
+
|
|
32
71
|
layoutableShadowNode.setSize(
|
|
33
72
|
Size{stateData.frameSize.width, stateData.frameSize.height});
|
|
34
|
-
}
|
|
73
|
+
} else {
|
|
74
|
+
// This code path should be executed only on the very first (few)
|
|
75
|
+
// layout(s), when we haven't received state update from JVM side yet.
|
|
76
|
+
|
|
77
|
+
auto headerConfigChildOpt = findHeaderConfigChild(layoutableShadowNode);
|
|
35
78
|
|
|
79
|
+
// During creation of the shadow node children are not attached yet.
|
|
80
|
+
// We also do not want to set any padding in case.
|
|
81
|
+
if (headerConfigChildOpt) {
|
|
82
|
+
const auto &headerConfigChild = headerConfigChildOpt->get();
|
|
83
|
+
const auto &headerProps =
|
|
84
|
+
*std::static_pointer_cast<const RNSScreenStackHeaderConfigProps>(
|
|
85
|
+
headerConfigChild->getProps());
|
|
86
|
+
|
|
87
|
+
const auto headerHeight = headerProps.hidden
|
|
88
|
+
? 0.f
|
|
89
|
+
: findHeaderHeight(
|
|
90
|
+
headerProps.titleFontSize, headerProps.title.empty())
|
|
91
|
+
.value_or(0.f);
|
|
92
|
+
|
|
93
|
+
screenShadowNode.setPadding({0, 0, 0, headerHeight});
|
|
94
|
+
screenShadowNode.setHeaderHeight(headerHeight);
|
|
95
|
+
screenShadowNode.getFrameCorrectionModes().set(
|
|
96
|
+
FrameCorrectionModes::Mode(
|
|
97
|
+
FrameCorrectionModes::Mode::FrameHeightCorrection |
|
|
98
|
+
FrameCorrectionModes::Mode::FrameOriginCorrection));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
#else
|
|
102
|
+
if (stateData.frameSize.width != 0 && stateData.frameSize.height != 0) {
|
|
103
|
+
layoutableShadowNode.setSize(
|
|
104
|
+
Size{stateData.frameSize.width, stateData.frameSize.height});
|
|
105
|
+
}
|
|
106
|
+
#endif // ANDROID
|
|
36
107
|
ConcreteComponentDescriptor::adopt(shadowNode);
|
|
37
108
|
}
|
|
109
|
+
|
|
110
|
+
std::optional<std::reference_wrapper<const ShadowNode::Shared>>
|
|
111
|
+
findHeaderConfigChild(
|
|
112
|
+
const YogaLayoutableShadowNode &screenShadowNode) const {
|
|
113
|
+
for (const ShadowNode::Shared &child : screenShadowNode.getChildren()) {
|
|
114
|
+
if (std::strcmp(
|
|
115
|
+
child->getComponentName(), "RNSScreenStackHeaderConfig") == 0) {
|
|
116
|
+
return {std::cref(child)};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return {};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#ifdef ANDROID
|
|
123
|
+
std::optional<float> findHeaderHeight(
|
|
124
|
+
const int fontSize,
|
|
125
|
+
const bool isTitleEmpty) const {
|
|
126
|
+
JNIEnv *env = facebook::jni::Environment::current();
|
|
127
|
+
|
|
128
|
+
if (env == nullptr) {
|
|
129
|
+
LOG(ERROR) << "[RNScreens] Failed to retrieve env\n";
|
|
130
|
+
return {};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
jclass layoutHelperClass = env->FindClass(kScreenDummyLayoutHelperClass);
|
|
134
|
+
|
|
135
|
+
if (layoutHelperClass == nullptr) {
|
|
136
|
+
LOG(ERROR) << "[RNScreens] Failed to find class with id "
|
|
137
|
+
<< kScreenDummyLayoutHelperClass;
|
|
138
|
+
return {};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
jmethodID computeDummyLayoutID =
|
|
142
|
+
env->GetMethodID(layoutHelperClass, "computeDummyLayout", "(IZ)F");
|
|
143
|
+
|
|
144
|
+
if (computeDummyLayoutID == nullptr) {
|
|
145
|
+
LOG(ERROR)
|
|
146
|
+
<< "[RNScreens] Failed to retrieve computeDummyLayout method ID";
|
|
147
|
+
return {};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
jmethodID getInstanceMethodID = env->GetStaticMethodID(
|
|
151
|
+
layoutHelperClass,
|
|
152
|
+
"getInstance",
|
|
153
|
+
"()Lcom/swmansion/rnscreens/utils/ScreenDummyLayoutHelper;");
|
|
154
|
+
|
|
155
|
+
if (getInstanceMethodID == nullptr) {
|
|
156
|
+
LOG(ERROR) << "[RNScreens] Failed to retrieve getInstanceMethodID";
|
|
157
|
+
return {};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
jobject packageInstance =
|
|
161
|
+
env->CallStaticObjectMethod(layoutHelperClass, getInstanceMethodID);
|
|
162
|
+
|
|
163
|
+
if (packageInstance == nullptr) {
|
|
164
|
+
LOG(ERROR)
|
|
165
|
+
<< "[RNScreens] Failed to retrieve packageInstance or the package instance was null on JVM side";
|
|
166
|
+
return {};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
jfloat headerHeight = env->CallFloatMethod(
|
|
170
|
+
packageInstance, computeDummyLayoutID, fontSize, isTitleEmpty);
|
|
171
|
+
|
|
172
|
+
return {headerHeight};
|
|
173
|
+
}
|
|
174
|
+
#endif // ANDROID
|
|
38
175
|
};
|
|
39
176
|
|
|
40
177
|
} // namespace react
|
|
@@ -3,13 +3,63 @@
|
|
|
3
3
|
namespace facebook {
|
|
4
4
|
namespace react {
|
|
5
5
|
|
|
6
|
+
namespace yoga = facebook::yoga;
|
|
7
|
+
using namespace rnscreens;
|
|
8
|
+
|
|
6
9
|
extern const char RNSScreenComponentName[] = "RNSScreen";
|
|
7
10
|
|
|
8
|
-
Point RNSScreenShadowNode::getContentOriginOffset(
|
|
11
|
+
Point RNSScreenShadowNode::getContentOriginOffset(
|
|
12
|
+
bool /*includeTransform*/) const {
|
|
9
13
|
auto stateData = getStateData();
|
|
10
14
|
auto contentOffset = stateData.contentOffset;
|
|
11
15
|
return {contentOffset.x, contentOffset.y};
|
|
12
16
|
}
|
|
13
17
|
|
|
18
|
+
void RNSScreenShadowNode::layout(facebook::react::LayoutContext layoutContext) {
|
|
19
|
+
YogaLayoutableShadowNode::layout(layoutContext);
|
|
20
|
+
|
|
21
|
+
#ifdef ANDROID
|
|
22
|
+
applyFrameCorrections();
|
|
23
|
+
#endif // ANDROID
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
#ifdef ANDROID
|
|
27
|
+
void RNSScreenShadowNode::applyFrameCorrections() {
|
|
28
|
+
ensureUnsealed();
|
|
29
|
+
|
|
30
|
+
// On the very first layout we want to correct both Y offset and frame size.
|
|
31
|
+
// On consecutive layouts we want to correct only Y offset, as the frame size
|
|
32
|
+
// is received from JVM side. This is done so if the Screen dimensions are
|
|
33
|
+
// read from ShadowTree (e.g by reanimated) they have chance of being
|
|
34
|
+
// accurate. On JVM side we do ignore this frame anyway, because
|
|
35
|
+
// ScreenStackViewManager.needsCustomLayoutForChildren() == true.
|
|
36
|
+
const auto &stateData = getStateData();
|
|
37
|
+
const float lastKnownHeaderHeight = stateData.getLastKnownHeaderHeight();
|
|
38
|
+
const auto &headerCorrectionModes = stateData.getHeaderCorrectionModes();
|
|
39
|
+
layoutMetrics_.frame.origin.y += lastKnownHeaderHeight *
|
|
40
|
+
headerCorrectionModes.check(
|
|
41
|
+
FrameCorrectionModes::Mode::FrameOriginCorrection);
|
|
42
|
+
layoutMetrics_.frame.size.height -= lastKnownHeaderHeight *
|
|
43
|
+
headerCorrectionModes.check(
|
|
44
|
+
FrameCorrectionModes::Mode::FrameHeightCorrection);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void RNSScreenShadowNode::setHeaderHeight(float headerHeight) {
|
|
48
|
+
getStateDataMutable().setHeaderHeight(headerHeight);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
FrameCorrectionModes &RNSScreenShadowNode::getFrameCorrectionModes() {
|
|
52
|
+
return getStateDataMutable().getFrameCorrectionModes();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
RNSScreenShadowNode::StateData &RNSScreenShadowNode::getStateDataMutable() {
|
|
56
|
+
// We assume that this method is called to mutate the data, so we ensure
|
|
57
|
+
// we're unsealed.
|
|
58
|
+
ensureUnsealed();
|
|
59
|
+
return const_cast<RNSScreenShadowNode::StateData &>(getStateData());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#endif // ANDROID
|
|
63
|
+
|
|
14
64
|
} // namespace react
|
|
15
65
|
} // namespace facebook
|
|
@@ -1,25 +1,47 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include
|
|
3
|
+
#include <jsi/jsi.h>
|
|
4
4
|
#include <react/renderer/components/rnscreens/EventEmitters.h>
|
|
5
5
|
#include <react/renderer/components/rnscreens/Props.h>
|
|
6
6
|
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
|
7
|
-
#include <
|
|
7
|
+
#include <react/renderer/core/LayoutContext.h>
|
|
8
|
+
#include "FrameCorrectionModes.h"
|
|
9
|
+
#include "RNSScreenState.h"
|
|
8
10
|
|
|
9
11
|
namespace facebook {
|
|
10
12
|
namespace react {
|
|
11
13
|
|
|
14
|
+
using namespace rnscreens;
|
|
15
|
+
|
|
12
16
|
JSI_EXPORT extern const char RNSScreenComponentName[];
|
|
13
17
|
|
|
14
18
|
class JSI_EXPORT RNSScreenShadowNode final : public ConcreteViewShadowNode<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
RNSScreenComponentName,
|
|
20
|
+
RNSScreenProps,
|
|
21
|
+
RNSScreenEventEmitter,
|
|
22
|
+
RNSScreenState> {
|
|
19
23
|
public:
|
|
20
24
|
using ConcreteViewShadowNode::ConcreteViewShadowNode;
|
|
25
|
+
using StateData = ConcreteViewShadowNode::ConcreteStateData;
|
|
26
|
+
|
|
27
|
+
#pragma mark - ShadowNode overrides
|
|
28
|
+
|
|
29
|
+
Point getContentOriginOffset(bool includeTransform) const override;
|
|
30
|
+
|
|
31
|
+
void layout(LayoutContext layoutContext) override;
|
|
32
|
+
|
|
33
|
+
#pragma mark - Custom interface
|
|
34
|
+
|
|
35
|
+
void setHeaderHeight(float headerHeight);
|
|
36
|
+
|
|
37
|
+
FrameCorrectionModes &getFrameCorrectionModes();
|
|
38
|
+
|
|
39
|
+
private:
|
|
40
|
+
#ifdef ANDROID
|
|
41
|
+
void applyFrameCorrections();
|
|
21
42
|
|
|
22
|
-
|
|
43
|
+
StateData &getStateDataMutable();
|
|
44
|
+
#endif // ANDROID
|
|
23
45
|
};
|
|
24
46
|
|
|
25
47
|
} // namespace react
|
|
@@ -3,11 +3,32 @@
|
|
|
3
3
|
namespace facebook {
|
|
4
4
|
namespace react {
|
|
5
5
|
|
|
6
|
+
using namespace rnscreens;
|
|
7
|
+
|
|
6
8
|
#ifdef ANDROID
|
|
7
9
|
folly::dynamic RNSScreenState::getDynamic() const {
|
|
8
10
|
return folly::dynamic::object("frameWidth", frameSize.width)(
|
|
9
|
-
"frameHeight", frameSize.height)("contentOffsetX", contentOffset.x)(
|
|
11
|
+
"frameHeight", frameSize.height)("contentOffsetX", contentOffset.x)(
|
|
12
|
+
"contentOffsetY", contentOffset.y);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
void RNSScreenState::setHeaderHeight(float headerHeight) {
|
|
16
|
+
lastKnownHeaderHeight_ = headerHeight;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
float RNSScreenState::getLastKnownHeaderHeight() const noexcept {
|
|
20
|
+
return lastKnownHeaderHeight_;
|
|
10
21
|
}
|
|
22
|
+
|
|
23
|
+
FrameCorrectionModes &RNSScreenState::getFrameCorrectionModes() noexcept {
|
|
24
|
+
return headerCorrectionModes_;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const FrameCorrectionModes &RNSScreenState::getHeaderCorrectionModes()
|
|
28
|
+
const noexcept {
|
|
29
|
+
return headerCorrectionModes_;
|
|
30
|
+
}
|
|
31
|
+
|
|
11
32
|
#endif
|
|
12
33
|
|
|
13
34
|
} // namespace react
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include <react/renderer/graphics/Float.h>
|
|
4
3
|
#include <react/renderer/core/graphicsConversions.h>
|
|
4
|
+
#include <react/renderer/graphics/Float.h>
|
|
5
5
|
|
|
6
6
|
#ifdef ANDROID
|
|
7
7
|
#include <folly/dynamic.h>
|
|
@@ -9,31 +9,35 @@
|
|
|
9
9
|
#include <react/renderer/mapbuffer/MapBufferBuilder.h>
|
|
10
10
|
#endif
|
|
11
11
|
|
|
12
|
+
#include "FrameCorrectionModes.h"
|
|
13
|
+
|
|
12
14
|
namespace facebook {
|
|
13
15
|
namespace react {
|
|
14
16
|
|
|
17
|
+
using namespace rnscreens;
|
|
18
|
+
|
|
15
19
|
class JSI_EXPORT RNSScreenState final {
|
|
16
20
|
public:
|
|
17
21
|
using Shared = std::shared_ptr<const RNSScreenState>;
|
|
18
22
|
|
|
19
23
|
RNSScreenState(){};
|
|
20
|
-
RNSScreenState(Size frameSize_, Point contentOffset_)
|
|
24
|
+
RNSScreenState(Size frameSize_, Point contentOffset_)
|
|
25
|
+
: frameSize(frameSize_), contentOffset(contentOffset_){};
|
|
21
26
|
|
|
22
27
|
#ifdef ANDROID
|
|
23
|
-
RNSScreenState(
|
|
24
|
-
RNSScreenState const &previousState,
|
|
25
|
-
folly::dynamic data)
|
|
28
|
+
RNSScreenState(RNSScreenState const &previousState, folly::dynamic data)
|
|
26
29
|
: frameSize(Size{
|
|
27
30
|
(Float)data["frameWidth"].getDouble(),
|
|
28
|
-
|
|
31
|
+
(Float)data["frameHeight"].getDouble()}),
|
|
29
32
|
contentOffset(Point{
|
|
30
33
|
(Float)data["contentOffsetX"].getDouble(),
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
(Float)data["contentOffsetY"].getDouble()}),
|
|
35
|
+
lastKnownHeaderHeight_{previousState.lastKnownHeaderHeight_},
|
|
36
|
+
headerCorrectionModes_{previousState.headerCorrectionModes_} {};
|
|
33
37
|
#endif
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
39
|
+
const Size frameSize{};
|
|
40
|
+
Point contentOffset;
|
|
37
41
|
|
|
38
42
|
#ifdef ANDROID
|
|
39
43
|
folly::dynamic getDynamic() const;
|
|
@@ -41,8 +45,24 @@ class JSI_EXPORT RNSScreenState final {
|
|
|
41
45
|
return MapBufferBuilder::EMPTY();
|
|
42
46
|
};
|
|
43
47
|
|
|
48
|
+
void setHeaderHeight(float headerHeight);
|
|
49
|
+
|
|
50
|
+
float getLastKnownHeaderHeight() const noexcept;
|
|
51
|
+
|
|
52
|
+
FrameCorrectionModes &getFrameCorrectionModes() noexcept;
|
|
53
|
+
|
|
54
|
+
const FrameCorrectionModes &getHeaderCorrectionModes() const noexcept;
|
|
55
|
+
|
|
44
56
|
#endif
|
|
45
57
|
|
|
58
|
+
private:
|
|
59
|
+
#ifdef ANDROID
|
|
60
|
+
// Header height as measured on dummy layout
|
|
61
|
+
float lastKnownHeaderHeight_{0.f};
|
|
62
|
+
|
|
63
|
+
FrameCorrectionModes headerCorrectionModes_{};
|
|
64
|
+
#endif // ANDROID
|
|
65
|
+
|
|
46
66
|
#pragma mark - Getters
|
|
47
67
|
};
|
|
48
68
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <react/renderer/graphics/Float.h>
|
|
4
|
+
#include <react/renderer/graphics/Size.h>
|
|
5
|
+
#include <cmath>
|
|
6
|
+
#include <concepts>
|
|
7
|
+
|
|
8
|
+
namespace rnscreens {
|
|
9
|
+
|
|
10
|
+
namespace react = facebook::react;
|
|
11
|
+
|
|
12
|
+
template <typename T>
|
|
13
|
+
requires std::is_floating_point_v<T>
|
|
14
|
+
inline constexpr bool equalWithRespectToEps(const T a, const T b, const T eps) {
|
|
15
|
+
return std::abs(a - b) <= eps;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Compares given two frame sizes with respect to the epsilon.
|
|
20
|
+
*
|
|
21
|
+
* @param first first frame size
|
|
22
|
+
* @param second second frame size
|
|
23
|
+
* @param eps comparison precision, defaults to 0.01, which should ensure that
|
|
24
|
+
* precision of comparison is under 1px
|
|
25
|
+
* @return whether the frame dimensions are the same with respect to given
|
|
26
|
+
* epsilon
|
|
27
|
+
*/
|
|
28
|
+
inline constexpr bool checkFrameSizesEqualWithEps(
|
|
29
|
+
const react::Size &first,
|
|
30
|
+
const react::Size &second,
|
|
31
|
+
const react::Float eps = 0.01) {
|
|
32
|
+
return equalWithRespectToEps(first.width, second.width, eps) &&
|
|
33
|
+
equalWithRespectToEps(first.height, second.height, eps);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
} // namespace rnscreens
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#include "RNSScreenRemovalListener.h"
|
|
2
|
+
#include <react/renderer/mounting/ShadowViewMutation.h>
|
|
3
|
+
using namespace facebook::react;
|
|
4
|
+
|
|
5
|
+
std::optional<MountingTransaction> RNSScreenRemovalListener::pullTransaction(
|
|
6
|
+
SurfaceId surfaceId,
|
|
7
|
+
MountingTransaction::Number transactionNumber,
|
|
8
|
+
const TransactionTelemetry &telemetry,
|
|
9
|
+
ShadowViewMutationList mutations) const {
|
|
10
|
+
for (const ShadowViewMutation &mutation : mutations) {
|
|
11
|
+
if (mutation.type == ShadowViewMutation::Type::Remove &&
|
|
12
|
+
mutation.oldChildShadowView.componentName != nullptr &&
|
|
13
|
+
strcmp(mutation.parentShadowView.componentName, "RNSScreenStack") ==
|
|
14
|
+
0) {
|
|
15
|
+
listenerFunction_(mutation.oldChildShadowView.tag);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return MountingTransaction{
|
|
20
|
+
surfaceId, transactionNumber, std::move(mutations), telemetry};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
bool RNSScreenRemovalListener::shouldOverridePullTransaction() const {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <react/renderer/componentregistry/ComponentDescriptorFactory.h>
|
|
4
|
+
#include <react/renderer/mounting/MountingOverrideDelegate.h>
|
|
5
|
+
#include <react/renderer/mounting/ShadowView.h>
|
|
6
|
+
|
|
7
|
+
using namespace facebook::react;
|
|
8
|
+
|
|
9
|
+
struct RNSScreenRemovalListener : public MountingOverrideDelegate {
|
|
10
|
+
std::function<void(int)> listenerFunction_;
|
|
11
|
+
RNSScreenRemovalListener(std::function<void(int)> &&listenerFunction_)
|
|
12
|
+
: listenerFunction_(std::move(listenerFunction_)) {}
|
|
13
|
+
|
|
14
|
+
bool shouldOverridePullTransaction() const override;
|
|
15
|
+
std::optional<MountingTransaction> pullTransaction(
|
|
16
|
+
SurfaceId surfaceId,
|
|
17
|
+
MountingTransaction::Number number,
|
|
18
|
+
const TransactionTelemetry &telemetry,
|
|
19
|
+
ShadowViewMutationList mutations) const override;
|
|
20
|
+
};
|