@react-native-oh-tpl/react-native-gesture-handler 2.14.14 → 2.14.15
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/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",
|