@react-native-oh-tpl/react-native-gesture-handler 2.14.14 → 2.14.15
Sign up to get free protection for your applications and to get access to all the features.
- package/harmony/gesture_handler/BuildProfile.ets +1 -1
- package/harmony/gesture_handler/build-profile.json5 +0 -7
- package/harmony/gesture_handler/oh-package.json5 +2 -2
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentDescriptor.h +36 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonJSIBinder.h +32 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.cpp +22 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.h +15 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentDescriptor.h +36 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewJSIBinder.h +25 -0
- package/harmony/gesture_handler/src/main/cpp/RnohReactNativeHarmonyGestureHandlerPackage.cpp +34 -0
- package/harmony/gesture_handler/src/main/cpp/RnohReactNativeHarmonyGestureHandlerPackage.h +6 -0
- package/harmony/gesture_handler/src/main/cpp/componentInstances/RNGestureHandlerButtonComponentInstance.h +1 -1
- package/harmony/gesture_handler/src/main/cpp/componentInstances/RNGestureHandlerRootViewComponentInstance.h +1 -1
- package/harmony/gesture_handler/src/main/ets/gesture-handlers/PanGestureHandler.ts +14 -0
- package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerModule.ts +24 -0
- package/harmony/gesture_handler/src/main/ets/namespace/components/RNGestureHandlerButton.ts +139 -0
- package/harmony/gesture_handler/src/main/ets/namespace/components/RNGestureHandlerRootView.ts +101 -0
- package/harmony/gesture_handler/src/main/ets/namespace/components/ts.ts +2 -0
- package/harmony/gesture_handler/src/main/ets/namespace/ts.ts +2 -0
- package/harmony/gesture_handler/src/main/ets/rnoh/GestureHandlerPackage.ts +1 -1
- package/harmony/gesture_handler/src/main/ets/rnoh/RNGHRootViewController.ts +17 -3
- package/harmony/gesture_handler/src/main/ets/rnoh/RNGHView.ts +26 -3
- package/harmony/gesture_handler/src/main/ets/rnoh/RNGHViewController.ts +1 -8
- package/harmony/gesture_handler/src/main/ets/rnoh/RNGestureHandlerModule.ts +4 -4
- package/harmony/gesture_handler.har +0 -0
- package/package.json +1 -1
@@ -1,7 +1,7 @@
|
|
1
1
|
/**
|
2
2
|
* Use these variables when you tailor your ArkTS code. They must be of the const type.
|
3
3
|
*/
|
4
|
-
export const HAR_VERSION = '2.14.14';
|
4
|
+
export const HAR_VERSION = '2.14.1-2.14.15';
|
5
5
|
export const BUILD_MODE_NAME = 'release';
|
6
6
|
export const DEBUG = false;
|
7
7
|
export const TARGET_NAME = 'default';
|
@@ -5,8 +5,8 @@
|
|
5
5
|
name: '@react-native-oh-tpl/react-native-gesture-handler',
|
6
6
|
description: '',
|
7
7
|
type: 'module',
|
8
|
-
version: '2.14.14',
|
8
|
+
version: '2.14.1-2.14.15',
|
9
9
|
dependencies: {
|
10
|
-
"@rnoh/react-native-openharmony": "file
|
10
|
+
"@rnoh/react-native-openharmony": "file:../react_native_openharmony"
|
11
11
|
},
|
12
12
|
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
#pragma once
|
3
|
+
|
4
|
+
// This file was generated.
|
5
|
+
|
6
|
+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
7
|
+
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
8
|
+
#include <react/renderer/components/view/ViewShadowNode.h>
|
9
|
+
|
10
|
+
namespace facebook {
|
11
|
+
namespace react {
|
12
|
+
|
13
|
+
extern const char RNGestureHandlerButtonComponentName[] = "RNGestureHandlerButton";
|
14
|
+
|
15
|
+
class RNGestureHandlerButtonProps : public ViewProps {
|
16
|
+
public:
|
17
|
+
RNGestureHandlerButtonProps() = default;
|
18
|
+
|
19
|
+
RNGestureHandlerButtonProps(const PropsParserContext &context, const RNGestureHandlerButtonProps &sourceProps, const RawProps &rawProps)
|
20
|
+
: ViewProps(context, sourceProps, rawProps) {}
|
21
|
+
};
|
22
|
+
|
23
|
+
using RNGestureHandlerButtonShadowNode = ConcreteViewShadowNode<
|
24
|
+
RNGestureHandlerButtonComponentName,
|
25
|
+
RNGestureHandlerButtonProps,
|
26
|
+
ViewEventEmitter>;
|
27
|
+
|
28
|
+
class RNGestureHandlerButtonComponentDescriptor final
|
29
|
+
: public ConcreteComponentDescriptor<RNGestureHandlerButtonShadowNode> {
|
30
|
+
public:
|
31
|
+
RNGestureHandlerButtonComponentDescriptor(ComponentDescriptorParameters const ¶meters)
|
32
|
+
: ConcreteComponentDescriptor(parameters) {}
|
33
|
+
};
|
34
|
+
|
35
|
+
} // namespace react
|
36
|
+
} // namespace facebook
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
// This file was generated.
|
4
|
+
|
5
|
+
#include "RNOHCorePackage/ComponentBinders/ViewComponentJSIBinder.h"
|
6
|
+
|
7
|
+
namespace rnoh {
|
8
|
+
class RNGestureHandlerButtonJSIBinder : public ViewComponentJSIBinder {
|
9
|
+
protected:
|
10
|
+
facebook::jsi::Object createNativeProps(facebook::jsi::Runtime &rt) override {
|
11
|
+
auto object = ViewComponentJSIBinder::createNativeProps(rt);
|
12
|
+
object.setProperty(rt, "exclusive", true);
|
13
|
+
object.setProperty(rt, "foreground", true);
|
14
|
+
object.setProperty(rt, "borderless", true);
|
15
|
+
object.setProperty(rt, "enabled", true);
|
16
|
+
object.setProperty(rt, "rippleColor", true);
|
17
|
+
object.setProperty(rt, "rippleRadius", true);
|
18
|
+
object.setProperty(rt, "touchSoundDisabled", true);
|
19
|
+
return object;
|
20
|
+
}
|
21
|
+
|
22
|
+
facebook::jsi::Object createBubblingEventTypes(facebook::jsi::Runtime &rt) override {
|
23
|
+
facebook::jsi::Object events(rt);
|
24
|
+
return events;
|
25
|
+
}
|
26
|
+
|
27
|
+
facebook::jsi::Object createDirectEventTypes(facebook::jsi::Runtime &rt) override {
|
28
|
+
facebook::jsi::Object events(rt);
|
29
|
+
return events;
|
30
|
+
}
|
31
|
+
};
|
32
|
+
} // namespace rnoh
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
#include "RNGestureHandlerModule.h"
|
3
|
+
|
4
|
+
// This file was generated.
|
5
|
+
|
6
|
+
namespace rnoh {
|
7
|
+
using namespace facebook;
|
8
|
+
|
9
|
+
RNGestureHandlerModule::RNGestureHandlerModule(const ArkTSTurboModule::Context ctx, const std::string name) : ArkTSTurboModule(ctx, name) {
|
10
|
+
methodMap_ = {
|
11
|
+
ARK_METHOD_METADATA(handleSetJSResponder, 2),
|
12
|
+
ARK_METHOD_METADATA(handleClearJSResponder, 0),
|
13
|
+
ARK_METHOD_METADATA(createGestureHandler, 3),
|
14
|
+
ARK_METHOD_METADATA(attachGestureHandler, 3),
|
15
|
+
ARK_METHOD_METADATA(updateGestureHandler, 2),
|
16
|
+
ARK_METHOD_METADATA(dropGestureHandler, 1),
|
17
|
+
ARK_METHOD_METADATA(install, 0),
|
18
|
+
ARK_METHOD_METADATA(flushOperations, 0),
|
19
|
+
};
|
20
|
+
}
|
21
|
+
|
22
|
+
} // namespace rnoh
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
#pragma once
|
3
|
+
|
4
|
+
// This file was generated.
|
5
|
+
|
6
|
+
#include "RNOH/ArkTSTurboModule.h"
|
7
|
+
|
8
|
+
namespace rnoh {
|
9
|
+
|
10
|
+
class JSI_EXPORT RNGestureHandlerModule : public ArkTSTurboModule {
|
11
|
+
public:
|
12
|
+
RNGestureHandlerModule(const ArkTSTurboModule::Context ctx, const std::string name);
|
13
|
+
};
|
14
|
+
|
15
|
+
} // namespace rnoh
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
#pragma once
|
3
|
+
|
4
|
+
// This file was generated.
|
5
|
+
|
6
|
+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
7
|
+
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
8
|
+
#include <react/renderer/components/view/ViewShadowNode.h>
|
9
|
+
|
10
|
+
namespace facebook {
|
11
|
+
namespace react {
|
12
|
+
|
13
|
+
extern const char RNGestureHandlerRootViewComponentName[] = "RNGestureHandlerRootView";
|
14
|
+
|
15
|
+
class RNGestureHandlerRootViewProps : public ViewProps {
|
16
|
+
public:
|
17
|
+
RNGestureHandlerRootViewProps() = default;
|
18
|
+
|
19
|
+
RNGestureHandlerRootViewProps(const PropsParserContext &context, const RNGestureHandlerRootViewProps &sourceProps, const RawProps &rawProps)
|
20
|
+
: ViewProps(context, sourceProps, rawProps) {}
|
21
|
+
};
|
22
|
+
|
23
|
+
using RNGestureHandlerRootViewShadowNode = ConcreteViewShadowNode<
|
24
|
+
RNGestureHandlerRootViewComponentName,
|
25
|
+
RNGestureHandlerRootViewProps,
|
26
|
+
ViewEventEmitter>;
|
27
|
+
|
28
|
+
class RNGestureHandlerRootViewComponentDescriptor final
|
29
|
+
: public ConcreteComponentDescriptor<RNGestureHandlerRootViewShadowNode> {
|
30
|
+
public:
|
31
|
+
RNGestureHandlerRootViewComponentDescriptor(ComponentDescriptorParameters const ¶meters)
|
32
|
+
: ConcreteComponentDescriptor(parameters) {}
|
33
|
+
};
|
34
|
+
|
35
|
+
} // namespace react
|
36
|
+
} // namespace facebook
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
// This file was generated.
|
4
|
+
|
5
|
+
#include "RNOHCorePackage/ComponentBinders/ViewComponentJSIBinder.h"
|
6
|
+
|
7
|
+
namespace rnoh {
|
8
|
+
class RNGestureHandlerRootViewJSIBinder : public ViewComponentJSIBinder {
|
9
|
+
protected:
|
10
|
+
facebook::jsi::Object createNativeProps(facebook::jsi::Runtime &rt) override {
|
11
|
+
auto object = ViewComponentJSIBinder::createNativeProps(rt);
|
12
|
+
return object;
|
13
|
+
}
|
14
|
+
|
15
|
+
facebook::jsi::Object createDirectEventTypes(facebook::jsi::Runtime &rt) override {
|
16
|
+
facebook::jsi::Object events(rt);
|
17
|
+
return events;
|
18
|
+
}
|
19
|
+
|
20
|
+
facebook::jsi::Object createBubblingEventTypes(facebook::jsi::Runtime &rt) override {
|
21
|
+
facebook::jsi::Object events(rt);
|
22
|
+
return events;
|
23
|
+
}
|
24
|
+
};
|
25
|
+
} // namespace rnoh
|
package/harmony/gesture_handler/src/main/cpp/RnohReactNativeHarmonyGestureHandlerPackage.cpp
CHANGED
@@ -3,12 +3,29 @@
|
|
3
3
|
#include "RNOH/RNInstanceCAPI.h"
|
4
4
|
#include "componentInstances/RNGestureHandlerButtonComponentInstance.h"
|
5
5
|
#include "componentInstances/RNGestureHandlerRootViewComponentInstance.h"
|
6
|
+
#include "RNOH/ArkTSTurboModule.h"
|
7
|
+
#include "RNGestureHandlerModule.h"
|
8
|
+
#include "RNGestureHandlerButtonComponentDescriptor.h"
|
9
|
+
#include "RNGestureHandlerRootViewComponentDescriptor.h"
|
10
|
+
#include "RNGestureHandlerButtonJSIBinder.h"
|
11
|
+
#include "RNGestureHandlerRootViewJSIBinder.h"
|
6
12
|
#include <glog/logging.h>
|
7
13
|
#include <react/renderer/debug/SystraceSection.h>
|
8
14
|
|
9
15
|
using namespace rnoh;
|
10
16
|
using namespace facebook;
|
11
17
|
|
18
|
+
class GestureHandlerTurboModuleFactoryDelegate : public TurboModuleFactoryDelegate {
|
19
|
+
public:
|
20
|
+
SharedTurboModule createTurboModule(Context ctx, const std::string &name) const override {
|
21
|
+
if (name == "RNGestureHandlerModule") {
|
22
|
+
return std::make_shared<RNGestureHandlerModule>(ctx, name);
|
23
|
+
}
|
24
|
+
return nullptr;
|
25
|
+
};
|
26
|
+
};
|
27
|
+
|
28
|
+
|
12
29
|
class RNGHEventEmitRequestHandler : public EventEmitRequestHandler {
|
13
30
|
void handleEvent(EventEmitRequestHandler::Context const &ctx) override {
|
14
31
|
facebook::react::SystraceSection s("RNGH::RNGHEventEmitRequestHandler::handleEvent");
|
@@ -38,6 +55,23 @@ public:
|
|
38
55
|
}
|
39
56
|
};
|
40
57
|
|
58
|
+
std::unique_ptr<TurboModuleFactoryDelegate> RnohReactNativeHarmonyGestureHandlerPackage::createTurboModuleFactoryDelegate() {
|
59
|
+
return std::make_unique<GestureHandlerTurboModuleFactoryDelegate>();
|
60
|
+
}
|
61
|
+
|
62
|
+
std::vector<react::ComponentDescriptorProvider> RnohReactNativeHarmonyGestureHandlerPackage::createComponentDescriptorProviders() {
|
63
|
+
return {
|
64
|
+
react::concreteComponentDescriptorProvider<react::RNGestureHandlerRootViewComponentDescriptor>(),
|
65
|
+
react::concreteComponentDescriptorProvider<react::RNGestureHandlerButtonComponentDescriptor>(),
|
66
|
+
};
|
67
|
+
}
|
68
|
+
|
69
|
+
ComponentJSIBinderByString RnohReactNativeHarmonyGestureHandlerPackage::createComponentJSIBinderByName() {
|
70
|
+
return {
|
71
|
+
{"RNGestureHandlerButton", std::make_shared<RNGestureHandlerButtonJSIBinder>()},
|
72
|
+
{"RNGestureHandlerRootView", std::make_shared<RNGestureHandlerRootViewJSIBinder>()},
|
73
|
+
};
|
74
|
+
};
|
41
75
|
|
42
76
|
EventEmitRequestHandlers RnohReactNativeHarmonyGestureHandlerPackage::createEventEmitRequestHandlers() {
|
43
77
|
return {
|
@@ -5,7 +5,13 @@ namespace rnoh {
|
|
5
5
|
class RnohReactNativeHarmonyGestureHandlerPackage : public Package {
|
6
6
|
public:
|
7
7
|
RnohReactNativeHarmonyGestureHandlerPackage(Package::Context ctx) : Package(ctx) {}
|
8
|
+
|
9
|
+
std::unique_ptr<TurboModuleFactoryDelegate> createTurboModuleFactoryDelegate() override;
|
10
|
+
|
11
|
+
std::vector<facebook::react::ComponentDescriptorProvider> createComponentDescriptorProviders() override;
|
8
12
|
|
13
|
+
ComponentJSIBinderByString createComponentJSIBinderByName() override;
|
14
|
+
|
9
15
|
EventEmitRequestHandlers createEventEmitRequestHandlers();
|
10
16
|
|
11
17
|
ComponentInstanceFactoryDelegate::Shared createComponentInstanceFactoryDelegate();
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#pragma once
|
2
2
|
#import "RNOH/CppComponentInstance.h"
|
3
3
|
#import "RNOH/arkui/StackNode.h"
|
4
|
-
#import "
|
4
|
+
#import "../RNGestureHandlerButtonComponentDescriptor.h"
|
5
5
|
|
6
6
|
namespace rnoh {
|
7
7
|
class RNGestureHandlerButtonComponentInstance
|
@@ -4,7 +4,7 @@
|
|
4
4
|
#import "RNOH/arkui/ArkUINodeRegistry.h"
|
5
5
|
#import "RNOH/arkui/NativeNodeApi.h"
|
6
6
|
#import "RNOH/RNInstanceCAPI.h"
|
7
|
-
#import "
|
7
|
+
#import "../RNGestureHandlerRootViewComponentDescriptor.h"
|
8
8
|
#import "RNGestureHandlerButtonComponentInstance.h"
|
9
9
|
|
10
10
|
namespace rnoh {
|
@@ -284,7 +284,13 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
|
|
284
284
|
if (this.currentState === State.ACTIVE) {
|
285
285
|
this.lastPos = this.tracker.getLastAvgPos();
|
286
286
|
}
|
287
|
+
|
287
288
|
this.tracker.removeFromTracker(event.pointerId);
|
289
|
+
|
290
|
+
if (this.tracker.getTrackedPointersCount() === 0) {
|
291
|
+
this.clearActivationTimeout();
|
292
|
+
}
|
293
|
+
|
288
294
|
if (this.currentState === State.ACTIVE) {
|
289
295
|
this.end();
|
290
296
|
} else {
|
@@ -358,4 +364,12 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
|
|
358
364
|
this.unlockRNGestureResponder?.()
|
359
365
|
}
|
360
366
|
}
|
367
|
+
|
368
|
+
protected onCancel(): void {
|
369
|
+
this.clearActivationTimeout();
|
370
|
+
}
|
371
|
+
|
372
|
+
protected onReset(): void {
|
373
|
+
this.clearActivationTimeout();
|
374
|
+
}
|
361
375
|
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
// This file was generated.
|
2
|
+
|
3
|
+
export namespace RNGestureHandlerModule {
|
4
|
+
export const NAME = 'RNGestureHandlerModule' as const
|
5
|
+
|
6
|
+
export interface Spec {
|
7
|
+
handleSetJSResponder(tag: number, blockNativeResponder: boolean): void;
|
8
|
+
|
9
|
+
handleClearJSResponder(): void;
|
10
|
+
|
11
|
+
createGestureHandler(handlerName: string, handlerTag: number, config: Object): void;
|
12
|
+
|
13
|
+
attachGestureHandler(handlerTag: number, newView: number, actionType: number): void;
|
14
|
+
|
15
|
+
updateGestureHandler(handlerTag: number, newConfig: Object): void;
|
16
|
+
|
17
|
+
dropGestureHandler(handlerTag: number): void;
|
18
|
+
|
19
|
+
install(): boolean;
|
20
|
+
|
21
|
+
flushOperations(): void;
|
22
|
+
|
23
|
+
}
|
24
|
+
}
|
@@ -0,0 +1,139 @@
|
|
1
|
+
// This file was generated.
|
2
|
+
import {
|
3
|
+
Descriptor as ComponentDescriptor,
|
4
|
+
ViewBaseProps,
|
5
|
+
ViewRawProps,
|
6
|
+
ViewDescriptorWrapperBase,
|
7
|
+
ColorValue,
|
8
|
+
Color,
|
9
|
+
RNInstance,
|
10
|
+
Tag,
|
11
|
+
RNComponentCommandReceiver,
|
12
|
+
ViewPropsSelector,
|
13
|
+
} from '@rnoh/react-native-openharmony/ts';
|
14
|
+
|
15
|
+
|
16
|
+
export namespace RNGestureHandlerButton {
|
17
|
+
export const NAME = "RNGestureHandlerButton" as const
|
18
|
+
|
19
|
+
export interface DirectRawProps {
|
20
|
+
exclusive?: boolean;
|
21
|
+
foreground?: boolean;
|
22
|
+
borderless?: boolean;
|
23
|
+
enabled?: boolean;
|
24
|
+
rippleColor?: ColorValue;
|
25
|
+
rippleRadius?: number;
|
26
|
+
touchSoundDisabled?: boolean;
|
27
|
+
}
|
28
|
+
|
29
|
+
export interface Props extends ViewBaseProps {}
|
30
|
+
|
31
|
+
export interface State {}
|
32
|
+
|
33
|
+
export interface RawProps extends ViewRawProps, DirectRawProps {}
|
34
|
+
|
35
|
+
export class PropsSelector extends ViewPropsSelector<Props, RawProps> {
|
36
|
+
get exclusive() {
|
37
|
+
return this.rawProps.exclusive ?? true;
|
38
|
+
}
|
39
|
+
|
40
|
+
get foreground() {
|
41
|
+
return this.rawProps.foreground ?? false;
|
42
|
+
}
|
43
|
+
|
44
|
+
get borderless() {
|
45
|
+
return this.rawProps.borderless ?? false;
|
46
|
+
}
|
47
|
+
|
48
|
+
get enabled() {
|
49
|
+
return this.rawProps.enabled ?? true;
|
50
|
+
}
|
51
|
+
|
52
|
+
get rippleRadius() {
|
53
|
+
return this.rawProps.rippleRadius ?? 0;
|
54
|
+
}
|
55
|
+
|
56
|
+
get touchSoundDisabled() {
|
57
|
+
return this.rawProps.touchSoundDisabled ?? false;
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
get rippleColor() {
|
62
|
+
if (this.rawProps.rippleColor) {
|
63
|
+
return Color.fromColorValue(this.rawProps.rippleColor)
|
64
|
+
} else {
|
65
|
+
return new Color({ r: 0, g: 0, b: 0, a: 255})
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
}
|
70
|
+
|
71
|
+
export type Descriptor = ComponentDescriptor<
|
72
|
+
typeof NAME,
|
73
|
+
Props,
|
74
|
+
State,
|
75
|
+
RawProps
|
76
|
+
>;
|
77
|
+
|
78
|
+
export class DescriptorWrapper extends ViewDescriptorWrapperBase<
|
79
|
+
typeof NAME,
|
80
|
+
Props,
|
81
|
+
State,
|
82
|
+
RawProps,
|
83
|
+
PropsSelector
|
84
|
+
> {
|
85
|
+
protected createPropsSelector() {
|
86
|
+
return new PropsSelector(this.descriptor.props, this.descriptor.rawProps)
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
export interface EventPayloadByName {
|
91
|
+
}
|
92
|
+
|
93
|
+
export class EventEmitter {
|
94
|
+
constructor(private rnInstance: RNInstance, private tag: Tag) {}
|
95
|
+
|
96
|
+
emit<TEventName extends keyof EventPayloadByName>(eventName: TEventName, payload: EventPayloadByName[TEventName]) {
|
97
|
+
this.rnInstance.emitComponentEvent(this.tag, eventName, payload)
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
export interface CommandArgvByName {
|
102
|
+
}
|
103
|
+
|
104
|
+
export class CommandReceiver {
|
105
|
+
private listenersByCommandName = new Map<string, Set<(...args: any[]) => void>>()
|
106
|
+
private cleanUp: (() => void) | undefined = undefined
|
107
|
+
|
108
|
+
constructor(private componentCommandReceiver: RNComponentCommandReceiver, private tag: Tag) {
|
109
|
+
}
|
110
|
+
|
111
|
+
subscribe<TCommandName extends keyof CommandArgvByName>(commandName: TCommandName, listener: (argv: CommandArgvByName[TCommandName]) => void) {
|
112
|
+
if (!this.listenersByCommandName.has(commandName)) {
|
113
|
+
this.listenersByCommandName.set(commandName, new Set())
|
114
|
+
}
|
115
|
+
this.listenersByCommandName.get(commandName)!.add(listener)
|
116
|
+
const hasRegisteredCommandReceiver = !!this.cleanUp
|
117
|
+
if (!hasRegisteredCommandReceiver) {
|
118
|
+
this.cleanUp = this.componentCommandReceiver.registerCommandCallback(this.tag, (commandName: string, argv: any[]) => {
|
119
|
+
if (this.listenersByCommandName.has(commandName)) {
|
120
|
+
const listeners = this.listenersByCommandName.get(commandName)!
|
121
|
+
listeners.forEach(listener => {
|
122
|
+
listener(argv)
|
123
|
+
})
|
124
|
+
}
|
125
|
+
})
|
126
|
+
}
|
127
|
+
|
128
|
+
return () => {
|
129
|
+
this.listenersByCommandName.get(commandName)?.delete(listener)
|
130
|
+
if (this.listenersByCommandName.get(commandName)?.size ?? 0 === 0) {
|
131
|
+
this.listenersByCommandName.delete(commandName)
|
132
|
+
}
|
133
|
+
if (this.listenersByCommandName.size === 0) {
|
134
|
+
this.cleanUp?.()
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
@@ -0,0 +1,101 @@
|
|
1
|
+
// This file was generated.
|
2
|
+
import {
|
3
|
+
Descriptor as ComponentDescriptor,
|
4
|
+
ViewBaseProps,
|
5
|
+
ViewRawProps,
|
6
|
+
ViewDescriptorWrapperBase,
|
7
|
+
ColorValue,
|
8
|
+
Color,
|
9
|
+
RNInstance,
|
10
|
+
Tag,
|
11
|
+
RNComponentCommandReceiver,
|
12
|
+
ViewPropsSelector,
|
13
|
+
} from '@rnoh/react-native-openharmony/ts';
|
14
|
+
|
15
|
+
|
16
|
+
export namespace RNGestureHandlerRootView {
|
17
|
+
export const NAME = "RNGestureHandlerRootView" as const
|
18
|
+
|
19
|
+
export interface DirectRawProps {
|
20
|
+
}
|
21
|
+
|
22
|
+
export interface Props extends ViewBaseProps {}
|
23
|
+
|
24
|
+
export interface State {}
|
25
|
+
|
26
|
+
export interface RawProps extends ViewRawProps, DirectRawProps {}
|
27
|
+
|
28
|
+
export class PropsSelector extends ViewPropsSelector<Props, RawProps> {
|
29
|
+
|
30
|
+
}
|
31
|
+
|
32
|
+
export type Descriptor = ComponentDescriptor<
|
33
|
+
typeof NAME,
|
34
|
+
Props,
|
35
|
+
State,
|
36
|
+
RawProps
|
37
|
+
>;
|
38
|
+
|
39
|
+
export class DescriptorWrapper extends ViewDescriptorWrapperBase<
|
40
|
+
typeof NAME,
|
41
|
+
Props,
|
42
|
+
State,
|
43
|
+
RawProps,
|
44
|
+
PropsSelector
|
45
|
+
> {
|
46
|
+
protected createPropsSelector() {
|
47
|
+
return new PropsSelector(this.descriptor.props, this.descriptor.rawProps)
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
export interface EventPayloadByName {
|
52
|
+
}
|
53
|
+
|
54
|
+
export class EventEmitter {
|
55
|
+
constructor(private rnInstance: RNInstance, private tag: Tag) {}
|
56
|
+
|
57
|
+
emit<TEventName extends keyof EventPayloadByName>(eventName: TEventName, payload: EventPayloadByName[TEventName]) {
|
58
|
+
this.rnInstance.emitComponentEvent(this.tag, eventName, payload)
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
export interface CommandArgvByName {
|
63
|
+
}
|
64
|
+
|
65
|
+
export class CommandReceiver {
|
66
|
+
private listenersByCommandName = new Map<string, Set<(...args: any[]) => void>>()
|
67
|
+
private cleanUp: (() => void) | undefined = undefined
|
68
|
+
|
69
|
+
constructor(private componentCommandReceiver: RNComponentCommandReceiver, private tag: Tag) {
|
70
|
+
}
|
71
|
+
|
72
|
+
subscribe<TCommandName extends keyof CommandArgvByName>(commandName: TCommandName, listener: (argv: CommandArgvByName[TCommandName]) => void) {
|
73
|
+
if (!this.listenersByCommandName.has(commandName)) {
|
74
|
+
this.listenersByCommandName.set(commandName, new Set())
|
75
|
+
}
|
76
|
+
this.listenersByCommandName.get(commandName)!.add(listener)
|
77
|
+
const hasRegisteredCommandReceiver = !!this.cleanUp
|
78
|
+
if (!hasRegisteredCommandReceiver) {
|
79
|
+
this.cleanUp = this.componentCommandReceiver.registerCommandCallback(this.tag, (commandName: string, argv: any[]) => {
|
80
|
+
if (this.listenersByCommandName.has(commandName)) {
|
81
|
+
const listeners = this.listenersByCommandName.get(commandName)!
|
82
|
+
listeners.forEach(listener => {
|
83
|
+
listener(argv)
|
84
|
+
})
|
85
|
+
}
|
86
|
+
})
|
87
|
+
}
|
88
|
+
|
89
|
+
return () => {
|
90
|
+
this.listenersByCommandName.get(commandName)?.delete(listener)
|
91
|
+
if (this.listenersByCommandName.get(commandName)?.size ?? 0 === 0) {
|
92
|
+
this.listenersByCommandName.delete(commandName)
|
93
|
+
}
|
94
|
+
if (this.listenersByCommandName.size === 0) {
|
95
|
+
this.cleanUp?.()
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
}
|
@@ -19,7 +19,7 @@ class GestureHandlerTurboModuleFactory extends TurboModulesFactory {
|
|
19
19
|
* @deprecated: Use the package class exported from ../RNOHPackage.ets (2024-10-10)
|
20
20
|
*/
|
21
21
|
export class GestureHandlerPackage extends RNPackage {
|
22
|
-
|
22
|
+
createTurboModulesFactory(ctx: TurboModuleContext): TurboModulesFactory {
|
23
23
|
return new GestureHandlerTurboModuleFactory(ctx);
|
24
24
|
}
|
25
25
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { TouchEvent as TouchEventArkTS, TouchType, TouchObject } from './types';
|
2
2
|
import { RNGHLogger, View, Multiset, GestureHandlerRegistry } from '../core';
|
3
|
-
import { RawTouchableView } from "./RNGHView"
|
3
|
+
import { RawTouchableView, RNGHView } from "./RNGHView"
|
4
4
|
import { RNGHViewController } from './RNGHViewController';
|
5
5
|
|
6
6
|
type RawTouchPoint = {
|
@@ -59,8 +59,9 @@ export class RNGHRootViewController {
|
|
59
59
|
if (e.type === TouchType.Down) {
|
60
60
|
this.activeViewTags.clear();
|
61
61
|
}
|
62
|
-
const views = touchableViews
|
63
|
-
for (
|
62
|
+
const views = touchableViews as RNGHView[]
|
63
|
+
for (let i = 0; i < views.length; i++) {
|
64
|
+
const view = views[i];
|
64
65
|
for (const handler of this.gestureHandlerRegistry.getGestureHandlersByViewTag(
|
65
66
|
view.getTag(),
|
66
67
|
)) {
|
@@ -87,6 +88,19 @@ export class RNGHRootViewController {
|
|
87
88
|
this.activeViewTags.add(view.getTag());
|
88
89
|
}
|
89
90
|
}
|
91
|
+
|
92
|
+
// If the pointer is inside the view but it overflows its parent, handlers attached to the parent
|
93
|
+
// might not have been called correctly (wrong bounding box). Extending the parent bounding box
|
94
|
+
// with the child bounding box ensures that the parent handlers are called correctly.
|
95
|
+
// This approach is slightly different from Android RNGH implementation (extracting parent gesture handlers),
|
96
|
+
// however, the outcome is the same.
|
97
|
+
for (let j = i; j > 1; j--) {
|
98
|
+
const currentView = views[j];
|
99
|
+
const parentView = views[j-1];
|
100
|
+
if (parentView.intersectsWith(currentView)) {
|
101
|
+
parentView.attachChildrenBoundingRects(currentView);
|
102
|
+
}
|
103
|
+
}
|
90
104
|
}
|
91
105
|
|
92
106
|
// send touch to gesture handlers, prioritize handling touch events for child components
|
@@ -20,6 +20,7 @@ export class RNGHView implements View {
|
|
20
20
|
private tag: number
|
21
21
|
private buttonRole: boolean
|
22
22
|
private boundingBox: BoundingBox
|
23
|
+
private childrenBoundingBoxes: Set<BoundingBox> = new Set()
|
23
24
|
|
24
25
|
constructor({ tag, buttonRole, ...boundingBox }: RawTouchableView) {
|
25
26
|
this.tag = tag
|
@@ -35,23 +36,45 @@ export class RNGHView implements View {
|
|
35
36
|
return { ...this.boundingBox }
|
36
37
|
}
|
37
38
|
|
39
|
+
getChildrenBoundingRects(): BoundingBox[] {
|
40
|
+
return Array.from(this.childrenBoundingBoxes)
|
41
|
+
}
|
42
|
+
|
38
43
|
isPositionInBounds({ x, y }: {
|
39
44
|
x: number;
|
40
45
|
y: number
|
41
46
|
}): boolean {
|
42
|
-
const
|
43
|
-
return (
|
47
|
+
const rects = [this.boundingBox, ...this.childrenBoundingBoxes]
|
48
|
+
return rects.some(rect => (
|
44
49
|
x >= rect.x &&
|
45
50
|
x <= rect.x + rect.width &&
|
46
51
|
y >= rect.y &&
|
47
52
|
y <= rect.y + rect.height
|
48
|
-
)
|
53
|
+
))
|
49
54
|
}
|
50
55
|
|
51
56
|
updateBoundingBox(boundingBox: BoundingBox) {
|
52
57
|
this.boundingBox = boundingBox
|
53
58
|
}
|
54
59
|
|
60
|
+
attachChildrenBoundingRects(view: RNGHView) {
|
61
|
+
this.childrenBoundingBoxes.add(view.getBoundingRect())
|
62
|
+
for (const childBoundingBox of view.getChildrenBoundingRects()) {
|
63
|
+
this.childrenBoundingBoxes.add(childBoundingBox)
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
intersectsWith(view: RNGHView): boolean {
|
68
|
+
const rect1 = this.getBoundingRect()
|
69
|
+
const rect2 = view.getBoundingRect()
|
70
|
+
return (
|
71
|
+
rect1.x < rect2.x + rect2.width &&
|
72
|
+
rect1.x + rect1.width > rect2.x &&
|
73
|
+
rect1.y < rect2.y + rect2.height &&
|
74
|
+
rect1.y + rect1.height > rect2.y
|
75
|
+
)
|
76
|
+
}
|
77
|
+
|
55
78
|
setButtonRole(buttonRole: boolean) {
|
56
79
|
this.buttonRole = buttonRole
|
57
80
|
}
|
@@ -165,16 +165,9 @@ export class RNGHViewController {
|
|
165
165
|
}
|
166
166
|
|
167
167
|
private isInBounds(point: Point): boolean {
|
168
|
-
const x = point.x;
|
169
|
-
const y = point.y;
|
170
168
|
const rect = this.view.getBoundingRect();
|
171
169
|
this.logger.cloneAndJoinPrefix("isInBounds").debug({ rect })
|
172
|
-
|
173
|
-
x >= rect.x &&
|
174
|
-
x <= rect.x + rect.width &&
|
175
|
-
y >= rect.y &&
|
176
|
-
y <= rect.y + rect.height;
|
177
|
-
return result;
|
170
|
+
return this.view.isPositionInBounds(point);
|
178
171
|
}
|
179
172
|
|
180
173
|
private updateActivePointers(touchType: TouchType, pointerId: number): void {
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import {
|
2
|
-
import { TM } from "
|
1
|
+
import { TurboModule, TurboModuleContext, Tag } from "@rnoh/react-native-openharmony/ts";
|
2
|
+
import { TM } from "../namespace/ts"
|
3
3
|
import {
|
4
4
|
GestureHandlerRegistry,
|
5
5
|
State,
|
@@ -25,7 +25,7 @@ export enum ActionType {
|
|
25
25
|
}
|
26
26
|
|
27
27
|
|
28
|
-
export class RNGestureHandlerModule extends
|
28
|
+
export class RNGestureHandlerModule extends TurboModule implements TM.RNGestureHandlerModule.Spec {
|
29
29
|
static readonly NAME = "RNGestureHandlerModule"
|
30
30
|
|
31
31
|
private gestureHandlerRegistry: GestureHandlerRegistry
|
@@ -36,7 +36,7 @@ export class RNGestureHandlerModule extends UITurboModule implements TM.RNGestur
|
|
36
36
|
private rootViewControllerByRootTag = new Map<Tag, RNGHRootViewController>()
|
37
37
|
private interactionManager: InteractionManager
|
38
38
|
|
39
|
-
constructor(ctx:
|
39
|
+
constructor(ctx: TurboModuleContext, isDevModeEnabled: boolean = false) {
|
40
40
|
super(ctx)
|
41
41
|
this.cleanLogger =
|
42
42
|
isDevModeEnabled && ctx.isDebugModeEnabled ? new DevelopmentRNGHLogger(ctx.logger, "RNGH") :
|
Binary file
|
package/package.json
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
"type": "git",
|
18
18
|
"url": "https://github.com/react-native-oh-library/react-native-harmony-gesture-handler.git"
|
19
19
|
},
|
20
|
-
"version": "2.14.
|
20
|
+
"version": "2.14.15",
|
21
21
|
"description": "",
|
22
22
|
"react-native": "src/index.ts",
|
23
23
|
"main": "lib/commonjs/index.js",
|