react-native-smooth-clip-view 0.1.0 → 0.2.1
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 +171 -43
- package/SmoothClipView.podspec +8 -2
- package/android/CMakeLists.txt +39 -0
- package/android/build.gradle +69 -2
- package/android/proguard-rules.pro +6 -0
- package/android/src/main/cpp/SmoothClipAndroid.h +59 -0
- package/android/src/main/cpp/SmoothClipBindings.cpp +428 -0
- package/android/src/main/cpp/SmoothClipRegistry.cpp +945 -0
- package/android/src/main/java/com/smoothclipview/ClipGeometryNormalizer.kt +25 -0
- package/android/src/main/java/com/smoothclipview/SmoothClipBindings.kt +55 -0
- package/android/src/main/java/com/smoothclipview/SmoothClipModule.kt +128 -0
- package/android/src/main/java/com/smoothclipview/SmoothClipView.kt +164 -30
- package/android/src/main/java/com/smoothclipview/SmoothClipViewManager.kt +107 -10
- package/android/src/main/java/com/smoothclipview/SmoothClipViewPackage.kt +18 -2
- package/cpp/SmoothClipRegistry.h +93 -0
- package/cpp/SmoothClipSharedGeometry.h +50 -0
- package/ios/SmoothClipModuleProvider.h +9 -0
- package/ios/SmoothClipModuleProvider.mm +16 -0
- package/ios/SmoothClipRegistry.mm +754 -0
- package/ios/SmoothClipTurboModule.cpp +290 -0
- package/ios/SmoothClipTurboModule.h +132 -0
- package/ios/SmoothClipView.mm +976 -85
- package/ios/SmoothClipViewRegistry.h +27 -0
- package/lib/module/NativeSmoothClipModule.js +5 -0
- package/lib/module/NativeSmoothClipModule.js.map +1 -0
- package/lib/module/SmoothClipView.android.js +4 -0
- package/lib/module/SmoothClipView.android.js.map +1 -0
- package/lib/module/SmoothClipView.ios.js +34 -0
- package/lib/module/SmoothClipView.ios.js.map +1 -0
- package/lib/module/SmoothClipView.js +26 -12
- package/lib/module/SmoothClipView.js.map +1 -1
- package/lib/module/SmoothClipView.web.js +28 -12
- package/lib/module/SmoothClipView.web.js.map +1 -1
- package/lib/module/SmoothClipViewNativeComponent.ts +14 -1
- package/lib/module/driverState.js +102 -0
- package/lib/module/driverState.js.map +1 -0
- package/lib/module/driverTypes.js +4 -0
- package/lib/module/driverTypes.js.map +1 -0
- package/lib/module/drivers.android.js +4 -0
- package/lib/module/drivers.android.js.map +1 -0
- package/lib/module/drivers.ios.js +380 -0
- package/lib/module/drivers.ios.js.map +1 -0
- package/lib/module/drivers.js +276 -0
- package/lib/module/drivers.js.map +1 -0
- package/lib/module/geometry.js +19 -0
- package/lib/module/geometry.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +2 -0
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/nativeCompletion.js +21 -0
- package/lib/module/nativeCompletion.js.map +1 -0
- package/lib/module/reactRequests.js +50 -0
- package/lib/module/reactRequests.js.map +1 -0
- package/lib/module/smoothClipNative.android.js +15 -0
- package/lib/module/smoothClipNative.android.js.map +1 -0
- package/lib/module/smoothClipNative.js +8 -0
- package/lib/module/smoothClipNative.js.map +1 -0
- package/lib/typescript/src/NativeSmoothClipModule.d.ts +19 -0
- package/lib/typescript/src/NativeSmoothClipModule.d.ts.map +1 -0
- package/lib/typescript/src/SmoothClipView.android.d.ts +3 -0
- package/lib/typescript/src/SmoothClipView.android.d.ts.map +1 -0
- package/lib/typescript/src/SmoothClipView.d.ts +5 -6
- package/lib/typescript/src/SmoothClipView.d.ts.map +1 -1
- package/lib/typescript/src/SmoothClipView.ios.d.ts +9 -0
- package/lib/typescript/src/SmoothClipView.ios.d.ts.map +1 -0
- package/lib/typescript/src/SmoothClipView.web.d.ts +5 -7
- package/lib/typescript/src/SmoothClipView.web.d.ts.map +1 -1
- package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts +4 -0
- package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/driverState.d.ts +31 -0
- package/lib/typescript/src/driverState.d.ts.map +1 -0
- package/lib/typescript/src/driverTypes.d.ts +61 -0
- package/lib/typescript/src/driverTypes.d.ts.map +1 -0
- package/lib/typescript/src/drivers.android.d.ts +3 -0
- package/lib/typescript/src/drivers.android.d.ts.map +1 -0
- package/lib/typescript/src/drivers.d.ts +5 -0
- package/lib/typescript/src/drivers.d.ts.map +1 -0
- package/lib/typescript/src/drivers.ios.d.ts +5 -0
- package/lib/typescript/src/drivers.ios.d.ts.map +1 -0
- package/lib/typescript/src/geometry.d.ts +8 -0
- package/lib/typescript/src/geometry.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +4 -1
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/lib/typescript/src/nativeCompletion.d.ts +7 -0
- package/lib/typescript/src/nativeCompletion.d.ts.map +1 -0
- package/lib/typescript/src/reactRequests.d.ts +7 -0
- package/lib/typescript/src/reactRequests.d.ts.map +1 -0
- package/lib/typescript/src/smoothClipNative.android.d.ts +4 -0
- package/lib/typescript/src/smoothClipNative.android.d.ts.map +1 -0
- package/lib/typescript/src/smoothClipNative.d.ts +3 -0
- package/lib/typescript/src/smoothClipNative.d.ts.map +1 -0
- package/package.json +12 -7
- package/src/NativeSmoothClipModule.ts +104 -0
- package/src/SmoothClipView.android.tsx +2 -0
- package/src/SmoothClipView.ios.tsx +36 -0
- package/src/SmoothClipView.tsx +31 -27
- package/src/SmoothClipView.web.tsx +26 -22
- package/src/SmoothClipViewNativeComponent.ts +14 -1
- package/src/driverState.ts +150 -0
- package/src/driverTypes.ts +91 -0
- package/src/drivers.android.ts +6 -0
- package/src/drivers.ios.ts +665 -0
- package/src/drivers.ts +416 -0
- package/src/geometry.ts +39 -0
- package/src/index.ts +19 -1
- package/src/index.web.ts +19 -1
- package/src/nativeCompletion.ts +37 -0
- package/src/reactRequests.ts +64 -0
- package/src/smoothClipNative.android.ts +20 -0
- package/src/smoothClipNative.ts +5 -0
|
@@ -4,6 +4,7 @@ import com.facebook.react.BaseReactPackage
|
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
6
|
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
8
|
import com.facebook.react.uimanager.ViewManager
|
|
8
9
|
|
|
9
10
|
class SmoothClipViewPackage : BaseReactPackage() {
|
|
@@ -14,8 +15,23 @@ class SmoothClipViewPackage : BaseReactPackage() {
|
|
|
14
15
|
override fun getModule(
|
|
15
16
|
name: String,
|
|
16
17
|
reactContext: ReactApplicationContext,
|
|
17
|
-
): NativeModule? =
|
|
18
|
+
): NativeModule? = if (name == NativeSmoothClipModuleSpec.NAME) {
|
|
19
|
+
SmoothClipModule(reactContext)
|
|
20
|
+
} else {
|
|
21
|
+
null
|
|
22
|
+
}
|
|
18
23
|
|
|
19
24
|
override fun getReactModuleInfoProvider() =
|
|
20
|
-
ReactModuleInfoProvider {
|
|
25
|
+
ReactModuleInfoProvider {
|
|
26
|
+
mapOf(
|
|
27
|
+
NativeSmoothClipModuleSpec.NAME to ReactModuleInfo(
|
|
28
|
+
NativeSmoothClipModuleSpec.NAME,
|
|
29
|
+
SmoothClipModule::class.java.name,
|
|
30
|
+
false,
|
|
31
|
+
false,
|
|
32
|
+
false,
|
|
33
|
+
true,
|
|
34
|
+
),
|
|
35
|
+
)
|
|
36
|
+
}
|
|
21
37
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <functional>
|
|
5
|
+
#include <vector>
|
|
6
|
+
|
|
7
|
+
namespace smoothclip {
|
|
8
|
+
|
|
9
|
+
struct Geometry {
|
|
10
|
+
double x;
|
|
11
|
+
double y;
|
|
12
|
+
double width;
|
|
13
|
+
double height;
|
|
14
|
+
double radius;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
struct Presentation {
|
|
18
|
+
Geometry clip;
|
|
19
|
+
double contentTranslateX;
|
|
20
|
+
double contentTranslateY;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
struct Keyframe {
|
|
24
|
+
double offset;
|
|
25
|
+
Presentation presentation;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
struct TimingAnimation {
|
|
29
|
+
double durationMs;
|
|
30
|
+
double controlPoint1X;
|
|
31
|
+
double controlPoint1Y;
|
|
32
|
+
double controlPoint2X;
|
|
33
|
+
double controlPoint2Y;
|
|
34
|
+
int32_t reduceMotion;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
struct SpringAnimation {
|
|
38
|
+
double mass;
|
|
39
|
+
double stiffness;
|
|
40
|
+
double damping;
|
|
41
|
+
double initialVelocity;
|
|
42
|
+
bool inheritVelocity;
|
|
43
|
+
int32_t reduceMotion;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
struct AnimationStart {
|
|
47
|
+
bool hasInteractiveStart;
|
|
48
|
+
Presentation interactiveStart;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
struct CancelResult {
|
|
52
|
+
bool handled;
|
|
53
|
+
Presentation presentation;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
using CompletionCallback =
|
|
57
|
+
std::function<void(uint64_t, int32_t, bool)>;
|
|
58
|
+
|
|
59
|
+
void setCompletionCallback(
|
|
60
|
+
const void *owner,
|
|
61
|
+
CompletionCallback callback);
|
|
62
|
+
void clearCompletionCallback(const void *owner);
|
|
63
|
+
|
|
64
|
+
void setPresentation(
|
|
65
|
+
uint64_t driverId,
|
|
66
|
+
Presentation presentation,
|
|
67
|
+
bool takeOwnership);
|
|
68
|
+
Presentation beginInteraction(uint64_t driverId);
|
|
69
|
+
int32_t animateTiming(
|
|
70
|
+
uint64_t driverId,
|
|
71
|
+
AnimationStart start,
|
|
72
|
+
Presentation presentation,
|
|
73
|
+
TimingAnimation animation);
|
|
74
|
+
int32_t animateSpring(
|
|
75
|
+
uint64_t driverId,
|
|
76
|
+
AnimationStart start,
|
|
77
|
+
Presentation presentation,
|
|
78
|
+
SpringAnimation animation);
|
|
79
|
+
int32_t animateKeyframes(
|
|
80
|
+
uint64_t driverId,
|
|
81
|
+
AnimationStart start,
|
|
82
|
+
Presentation presentation,
|
|
83
|
+
double durationMs,
|
|
84
|
+
std::vector<Keyframe> keyframes,
|
|
85
|
+
int32_t reduceMotion);
|
|
86
|
+
int32_t rejectAnimation(uint64_t driverId);
|
|
87
|
+
CancelResult cancelAnimation(
|
|
88
|
+
uint64_t driverId,
|
|
89
|
+
int32_t animationId,
|
|
90
|
+
bool useTarget);
|
|
91
|
+
void destroyDriver(uint64_t driverId);
|
|
92
|
+
|
|
93
|
+
} // namespace smoothclip
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <cmath>
|
|
5
|
+
|
|
6
|
+
namespace smoothclip {
|
|
7
|
+
|
|
8
|
+
struct NormalizedClip {
|
|
9
|
+
double left = 0;
|
|
10
|
+
double top = 0;
|
|
11
|
+
double right = 0;
|
|
12
|
+
double bottom = 0;
|
|
13
|
+
double radius = 0;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// Shared clip normalization emitting edges (Android's Outline consumes
|
|
17
|
+
// edges). Mirrors ios/SmoothClipGeometry.h (SmoothClipNormalizeGeometry) and
|
|
18
|
+
// ClipGeometryNormalizer.kt (normalizeClipGeometryPx); a change here must
|
|
19
|
+
// land in all three.
|
|
20
|
+
inline bool SmoothClipNormalize(
|
|
21
|
+
double x,
|
|
22
|
+
double y,
|
|
23
|
+
double width,
|
|
24
|
+
double height,
|
|
25
|
+
double radius,
|
|
26
|
+
double hostWidth,
|
|
27
|
+
double hostHeight,
|
|
28
|
+
NormalizedClip &out) {
|
|
29
|
+
if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(width) ||
|
|
30
|
+
!std::isfinite(height) || !std::isfinite(radius) ||
|
|
31
|
+
!std::isfinite(hostWidth) || !std::isfinite(hostHeight)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const double boundedHostWidth = std::max(0.0, hostWidth);
|
|
36
|
+
const double boundedHostHeight = std::max(0.0, hostHeight);
|
|
37
|
+
const double requestedRight = x + std::max(0.0, width);
|
|
38
|
+
const double requestedBottom = y + std::max(0.0, height);
|
|
39
|
+
out.left = std::min(boundedHostWidth, std::max(0.0, x));
|
|
40
|
+
out.top = std::min(boundedHostHeight, std::max(0.0, y));
|
|
41
|
+
out.right = std::min(boundedHostWidth, std::max(0.0, requestedRight));
|
|
42
|
+
out.bottom = std::min(boundedHostHeight, std::max(0.0, requestedBottom));
|
|
43
|
+
const double visibleWidth = std::max(0.0, out.right - out.left);
|
|
44
|
+
const double visibleHeight = std::max(0.0, out.bottom - out.top);
|
|
45
|
+
out.radius = std::min(
|
|
46
|
+
std::max(0.0, radius), std::min(visibleWidth, visibleHeight) / 2.0);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
} // namespace smoothclip
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#import "SmoothClipModuleProvider.h"
|
|
2
|
+
|
|
3
|
+
#import "SmoothClipTurboModule.h"
|
|
4
|
+
|
|
5
|
+
#import <ReactCommon/CallInvoker.h>
|
|
6
|
+
#import <ReactCommon/TurboModule.h>
|
|
7
|
+
|
|
8
|
+
@implementation SmoothClipModuleProvider
|
|
9
|
+
|
|
10
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
11
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params {
|
|
12
|
+
return std::make_shared<facebook::react::SmoothClipTurboModule>(
|
|
13
|
+
params.jsInvoker);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@end
|