dynamsoft-capture-vision-react-native 3.4.1300 → 3.4.3000
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/LICENSE +4 -4
- package/README.md +62 -62
- package/android/README.md +14 -14
- package/android/build.gradle +167 -163
- package/android/gradle.properties +20 -20
- package/android/settings.gradle +5 -5
- package/android/src/main/AndroidManifest.xml +6 -6
- package/android/src/main/AndroidManifest_noPackage.xml +5 -5
- package/android/src/main/cpp/CMakeLists.txt +21 -21
- package/android/src/main/cpp/ImgHO.cpp +94 -94
- package/android/src/main/cpp/ImgHO.h +34 -34
- package/android/src/main/cpp/JsiCore.cpp +296 -296
- package/android/src/main/cpp/JsiCore.h +51 -51
- package/android/src/main/cpp/JsiCvr.cpp +332 -332
- package/android/src/main/cpp/JsiCvr.h +54 -54
- package/android/src/main/cpp/JsiDbr.cpp +283 -283
- package/android/src/main/cpp/JsiDbr.h +26 -26
- package/android/src/main/cpp/JsiDce.cpp +59 -59
- package/android/src/main/cpp/JsiDce.h +17 -17
- package/android/src/main/cpp/JsiDcp.cpp +51 -51
- package/android/src/main/cpp/JsiDcp.h +31 -31
- package/android/src/main/cpp/JsiDdn.cpp +50 -50
- package/android/src/main/cpp/JsiDdn.h +28 -28
- package/android/src/main/cpp/JsiDlr.cpp +60 -60
- package/android/src/main/cpp/JsiDlr.h +26 -26
- package/android/src/main/cpp/JsiUtility.cpp +604 -604
- package/android/src/main/cpp/JsiUtility.h +26 -26
- package/android/src/main/cpp/RawBuffer.cpp +23 -23
- package/android/src/main/cpp/RawBuffer.h +24 -24
- package/android/src/main/cpp/android_log.h +14 -14
- package/android/src/main/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor86/debug/arm64-v8a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/debug/armeabi-v7a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/debug/x86/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/debug/x86_64/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/arm64-v8a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/armeabi-v7a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/x86/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/x86_64/librn_dys.so +3 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +137 -137
- package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +62 -62
- package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +125 -125
- package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +8 -8
- package/android/src/main/java/com/dynamsoft/reactnativelib/ISAModule.kt +73 -73
- package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -14
- package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +35 -35
- package/android/src/main/java/com/dynamsoft/reactnativelib/ImageManagerModule.kt +15 -15
- package/android/src/main/java/com/dynamsoft/reactnativelib/LicenseModule.kt +29 -29
- package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +83 -83
- package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +32 -32
- package/android/src/main/java/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -41
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/Basic.kt +44 -44
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCore.kt +50 -50
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCvr.kt +129 -129
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +157 -157
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCE.kt +110 -110
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCP.kt +49 -49
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDDN.kt +85 -85
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDLR.kt +72 -72
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ImageUtil.kt +58 -58
- package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -120
- package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +306 -306
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +247 -247
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.java +14 -14
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +77 -77
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +15 -15
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +110 -110
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +20 -20
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNImageEditorView.kt +19 -19
- package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +39 -39
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +120 -120
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +111 -111
- package/app.plugin.js +21 -21
- package/dynamsoft-capture-vision-react-native.podspec +24 -24
- package/ios/CPP/DSImageData+HostObject.h +18 -18
- package/ios/CPP/DSImageData+HostObject.mm +38 -38
- package/ios/CPP/ImageDataHostObject.cpp +87 -87
- package/ios/CPP/ImageDataHostObject.hpp +35 -35
- package/ios/CPP/MutableRawBuffer.cpp +23 -23
- package/ios/CPP/MutableRawBuffer.hpp +23 -23
- package/ios/CPP/RNDynamsoft+JSI.h +22 -22
- package/ios/CPP/RNDynamsoft+JSI.mm +303 -303
- package/ios/CPP/RNDynamsoft+Json.h +93 -93
- package/ios/CPP/RNDynamsoft+Json.m +733 -733
- package/ios/CPP/YeetJSIUtils.h +56 -56
- package/ios/CPP/YeetJSIUtils.mm +208 -208
- package/ios/RNDynamsoftCameraView.h +31 -31
- package/ios/RNDynamsoftCameraView.m +108 -108
- package/ios/RNDynamsoftCameraViewManager.h +14 -14
- package/ios/RNDynamsoftCameraViewManager.m +195 -195
- package/ios/RNDynamsoftCaptureVisionRouter.h +18 -18
- package/ios/RNDynamsoftCaptureVisionRouter.mm +532 -532
- package/ios/RNDynamsoftImageEditorView.h +17 -17
- package/ios/RNDynamsoftImageEditorView.m +25 -25
- package/ios/RNDynamsoftImageEditorViewManager.h +14 -14
- package/ios/RNDynamsoftImageEditorViewManager.mm +183 -183
- package/ios/RNDynamsoftImageManager.h +14 -14
- package/ios/RNDynamsoftImageManager.mm +369 -369
- package/ios/RNDynamsoftImageSourceAdapter.h +19 -19
- package/ios/RNDynamsoftImageSourceAdapter.mm +255 -255
- package/ios/RNDynamsoftLicense.h +14 -14
- package/ios/RNDynamsoftLicense.m +62 -62
- package/ios/RNDynamsoftMultiCrossFilter.h +14 -14
- package/ios/RNDynamsoftMultiCrossFilter.m +145 -145
- package/ios/RNDynamsoftVersions.h +13 -13
- package/ios/RNDynamsoftVersions.m +27 -27
- package/package.json +48 -48
- package/src/NativeDynamsoftVersionsModule.tsx +20 -20
- package/src/VersionsModule.tsx +7 -7
- package/src/core/CapturedResultBase.tsx +18 -18
- package/src/core/CapturedResultItem.tsx +23 -23
- package/src/core/CoreModule.tsx +9 -9
- package/src/core/DSRect.tsx +29 -29
- package/src/core/EnumCaptureResultItemType.tsx +52 -52
- package/src/core/EnumColourChannelUsageType.tsx +26 -26
- package/src/core/EnumCrossVerificationStatus.tsx +46 -46
- package/src/core/EnumGrayscaleEnhancementMode.tsx +46 -46
- package/src/core/EnumGrayscaleTransformationMode.tsx +35 -35
- package/src/core/EnumImageFileFormat.tsx +6 -6
- package/src/core/EnumPixelFormat.tsx +53 -53
- package/src/core/ImageData.tsx +87 -87
- package/src/core/ImageSourceAdapter.tsx +160 -160
- package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +29 -29
- package/src/core/Point.tsx +13 -13
- package/src/core/Quadrilateral.tsx +12 -12
- package/src/core/index.tsx +18 -18
- package/src/cvr/CaptureVisionRouter.tsx +683 -683
- package/src/cvr/CaptureVisionRouterModule.tsx +9 -9
- package/src/cvr/CapturedResult.tsx +123 -123
- package/src/cvr/CapturedResultFilter.tsx +13 -13
- package/src/cvr/CapturedResultReceiver.tsx +71 -71
- package/src/cvr/EnumPresetTemplate.tsx +81 -81
- package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -25
- package/src/cvr/SimplifiedCaptureVisionSettings.tsx +61 -61
- package/src/cvr/index.tsx +11 -11
- package/src/dbr/BarcodeDetails.tsx +51 -51
- package/src/dbr/BarcodeReaderModule.tsx +9 -9
- package/src/dbr/BarcodeResultItem.tsx +65 -65
- package/src/dbr/DecodedBarcodesResult.tsx +14 -14
- package/src/dbr/ECISegment.tsx +23 -23
- package/src/dbr/EnumBarcodeFormat.tsx +112 -112
- package/src/dbr/EnumDeblurMode.tsx +29 -29
- package/src/dbr/EnumLocalizationMode.tsx +27 -27
- package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -6
- package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +80 -80
- package/src/dbr/index.tsx +9 -9
- package/src/dce/CameraEnhancer.tsx +254 -254
- package/src/dce/CameraEnhancerModule.tsx +9 -9
- package/src/dce/CameraView.tsx +100 -100
- package/src/dce/DynamsoftCameraViewNativeComponent.ts +96 -96
- package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -9
- package/src/dce/EnumCameraPosition.tsx +25 -25
- package/src/dce/EnumDrawingLayerId.tsx +17 -17
- package/src/dce/EnumEnhancedFeatures.tsx +24 -24
- package/src/dce/EnumFocusMode.tsx +6 -6
- package/src/dce/EnumResolution.tsx +8 -8
- package/src/dce/EnumTorchState.tsx +10 -10
- package/src/dce/FeedBack.tsx +28 -28
- package/src/dce/ImageEditorView.tsx +131 -131
- package/src/dce/NativeDynamsoftCameraViewModule.tsx +47 -47
- package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -9
- package/src/dce/index.tsx +13 -13
- package/src/dcp/CodeParserDedicatorModule.tsx +9 -9
- package/src/dcp/CodeParserModule.tsx +9 -9
- package/src/dcp/EnumMappingStatus.tsx +14 -14
- package/src/dcp/EnumValidationStatus.tsx +14 -14
- package/src/dcp/ParsedResult.tsx +14 -14
- package/src/dcp/ParsedResultItem.tsx +50 -50
- package/src/dcp/index.tsx +8 -8
- package/src/ddn/DeskewedImageResultItem.tsx +40 -40
- package/src/ddn/DetectedQuadResultItem.tsx +31 -31
- package/src/ddn/DocumentNormalizerModule.tsx +9 -9
- package/src/ddn/EnhancedImageResultItem.tsx +20 -20
- package/src/ddn/EnumImageColourMode.tsx +14 -14
- package/src/ddn/ProcessedDocumentResult.tsx +27 -27
- package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +65 -65
- package/src/ddn/index.tsx +11 -11
- package/src/dip/ImageProcessingModule.tsx +9 -9
- package/src/dip/index.tsx +1 -1
- package/src/dlr/CharacterResult.tsx +28 -28
- package/src/dlr/LabelRecognizerModule.tsx +9 -9
- package/src/dlr/RecognizedTextLinesResult.tsx +19 -19
- package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +33 -33
- package/src/dlr/TextLineResultItem.tsx +41 -41
- package/src/dlr/index.tsx +8 -8
- package/src/index.tsx +13 -13
- package/src/license/LicenseManager.tsx +49 -49
- package/src/license/LicenseModule.tsx +9 -9
- package/src/license/NativeDynamsoftLicenseModule.tsx +7 -7
- package/src/license/index.tsx +7 -7
- package/src/utility/CrossVerificationCriteria.tsx +11 -11
- package/src/utility/EnumFilterType.tsx +5 -5
- package/src/utility/ImageManager.tsx +348 -348
- package/src/utility/MultiFrameResultCrossFilter.tsx +183 -183
- package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -7
- package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -18
- package/src/utility/UtilityModule.tsx +9 -9
- package/src/utility/index.tsx +4 -4
- package/android/.gitignore +0 -4
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
#import <UIKit/UIKit.h>
|
|
6
|
-
|
|
7
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
-
|
|
9
|
-
@class DSImageEditorView;
|
|
10
|
-
|
|
11
|
-
@interface RNDynamsoftImageEditorView : UIView
|
|
12
|
-
|
|
13
|
-
@property (nonatomic, strong) DSImageEditorView *editorView;
|
|
14
|
-
|
|
15
|
-
@end
|
|
16
|
-
|
|
17
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import <UIKit/UIKit.h>
|
|
6
|
+
|
|
7
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
+
|
|
9
|
+
@class DSImageEditorView;
|
|
10
|
+
|
|
11
|
+
@interface RNDynamsoftImageEditorView : UIView
|
|
12
|
+
|
|
13
|
+
@property (nonatomic, strong) DSImageEditorView *editorView;
|
|
14
|
+
|
|
15
|
+
@end
|
|
16
|
+
|
|
17
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
#import "RNDynamsoftImageEditorView.h"
|
|
6
|
-
#import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
|
|
7
|
-
|
|
8
|
-
@implementation RNDynamsoftImageEditorView
|
|
9
|
-
|
|
10
|
-
- (instancetype)init
|
|
11
|
-
{
|
|
12
|
-
self = [super init];
|
|
13
|
-
if (self) {
|
|
14
|
-
_editorView = [[DSImageEditorView alloc] init];
|
|
15
|
-
[self addSubview:_editorView];
|
|
16
|
-
}
|
|
17
|
-
return self;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
- (void)layoutSubviews {
|
|
21
|
-
[super layoutSubviews];
|
|
22
|
-
self.editorView.frame = self.bounds;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@end
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import "RNDynamsoftImageEditorView.h"
|
|
6
|
+
#import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
|
|
7
|
+
|
|
8
|
+
@implementation RNDynamsoftImageEditorView
|
|
9
|
+
|
|
10
|
+
- (instancetype)init
|
|
11
|
+
{
|
|
12
|
+
self = [super init];
|
|
13
|
+
if (self) {
|
|
14
|
+
_editorView = [[DSImageEditorView alloc] init];
|
|
15
|
+
[self addSubview:_editorView];
|
|
16
|
+
}
|
|
17
|
+
return self;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
- (void)layoutSubviews {
|
|
21
|
+
[super layoutSubviews];
|
|
22
|
+
self.editorView.frame = self.bounds;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@end
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
#import <React/RCTViewManager.h>
|
|
6
|
-
#import <React/RCTBridgeModule.h>
|
|
7
|
-
|
|
8
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
9
|
-
|
|
10
|
-
@interface RNDynamsoftImageEditorViewManager : RCTViewManager
|
|
11
|
-
|
|
12
|
-
@end
|
|
13
|
-
|
|
14
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import <React/RCTViewManager.h>
|
|
6
|
+
#import <React/RCTBridgeModule.h>
|
|
7
|
+
|
|
8
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
9
|
+
|
|
10
|
+
@interface RNDynamsoftImageEditorViewManager : RCTViewManager
|
|
11
|
+
|
|
12
|
+
@end
|
|
13
|
+
|
|
14
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
#import "RNDynamsoftImageEditorViewManager.h"
|
|
6
|
-
#import "RNDynamsoftImageEditorView.h"
|
|
7
|
-
#import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
|
|
8
|
-
#import <React/RCTBridge+Private.h>
|
|
9
|
-
#import "DSImageData+HostObject.h"
|
|
10
|
-
#import <React/RCTUIManager.h>
|
|
11
|
-
#import "RNDynamsoft+Json.h"
|
|
12
|
-
|
|
13
|
-
using namespace facebook::jsi;
|
|
14
|
-
using namespace facebook;
|
|
15
|
-
using namespace std;
|
|
16
|
-
|
|
17
|
-
@implementation RNDynamsoftImageEditorViewManager
|
|
18
|
-
|
|
19
|
-
RCT_EXPORT_MODULE(DynamsoftImageEditorView)
|
|
20
|
-
|
|
21
|
-
- (UIView *)view {
|
|
22
|
-
return [[RNDynamsoftImageEditorView alloc] init];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
RCT_EXPORT_METHOD(setQuads:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId) {
|
|
26
|
-
[self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:1];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
- (void)trySetQuadsWithTag:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId attempt:(NSInteger)attempt {
|
|
30
|
-
const NSInteger maxAttempts = 10;
|
|
31
|
-
const NSTimeInterval retryDelay = 0.1; // 100ms
|
|
32
|
-
|
|
33
|
-
[self.bridge.uiManager addUIBlock:
|
|
34
|
-
^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
|
35
|
-
id view = viewRegistry[tag];
|
|
36
|
-
if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
|
|
37
|
-
if (attempt < maxAttempts) {
|
|
38
|
-
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
39
|
-
[self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:attempt + 1];
|
|
40
|
-
});
|
|
41
|
-
} else {
|
|
42
|
-
RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
|
|
43
|
-
}
|
|
44
|
-
} else {
|
|
45
|
-
if (array && array.count > 0) {
|
|
46
|
-
NSMutableArray<DSQuadDrawingItem *> *items = [NSMutableArray array];
|
|
47
|
-
for (id dic in array) {
|
|
48
|
-
if ([dic isKindOfClass:[NSDictionary class]]) {
|
|
49
|
-
DSQuadrilateral *quad = [DSQuadrilateral quadrilateralWithDictionary:dic];
|
|
50
|
-
[items addObject:[[DSQuadDrawingItem alloc] initWithQuadrilateral:quad]];
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
DSDrawingLayer *layer = [((RNDynamsoftImageEditorView *)view).editorView getDrawingLayer:layerId];
|
|
54
|
-
layer.drawingItems = items;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}];
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
RCT_EXPORT_METHOD(getSelectedQuad:(nonnull NSNumber *)tag
|
|
61
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
62
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
63
|
-
{
|
|
64
|
-
[self.bridge.uiManager addUIBlock:
|
|
65
|
-
^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
|
66
|
-
id view = viewRegistry[tag];
|
|
67
|
-
if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
|
|
68
|
-
RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@", tag);
|
|
69
|
-
resolve(nil);
|
|
70
|
-
} else {
|
|
71
|
-
DSDrawingItem *item = [((RNDynamsoftImageEditorView *)view).editorView getSelectedDrawingItem];
|
|
72
|
-
if (item && item.mediaType == DSDrawingItemMediaTypeQuadrilateral) {
|
|
73
|
-
DSQuadDrawingItem *quadItem = (DSQuadDrawingItem *)item;
|
|
74
|
-
if (quadItem) {
|
|
75
|
-
resolve([quadItem.quad toJson]);
|
|
76
|
-
} else {
|
|
77
|
-
resolve(nil);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
- (void)trySetImageDataWithTag:(nonnull NSNumber *)tag data:(DSImageData *)data attempt:(NSInteger)attempt {
|
|
85
|
-
const NSInteger maxAttempts = 10;
|
|
86
|
-
const NSTimeInterval retryDelay = 0.1; // 100ms
|
|
87
|
-
|
|
88
|
-
[self.bridge.uiManager addUIBlock:
|
|
89
|
-
^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
|
90
|
-
id view = viewRegistry[tag];
|
|
91
|
-
if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
|
|
92
|
-
if (attempt < maxAttempts) {
|
|
93
|
-
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
94
|
-
[self trySetImageDataWithTag:tag data:data attempt:1];
|
|
95
|
-
});
|
|
96
|
-
} else {
|
|
97
|
-
RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
|
|
98
|
-
}
|
|
99
|
-
} else {
|
|
100
|
-
((RNDynamsoftImageEditorView *)view).editorView.imageData = data;
|
|
101
|
-
}
|
|
102
|
-
}];
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
#pragma mark - Global JSI
|
|
106
|
-
// --- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) ---
|
|
107
|
-
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
|
|
108
|
-
{
|
|
109
|
-
RCTBridge *bridge = self.bridge;
|
|
110
|
-
|
|
111
|
-
if ([bridge respondsToSelector:NSSelectorFromString(@"parentBridge")]) {
|
|
112
|
-
bridge = [bridge valueForKey:@"parentBridge"];
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)bridge;
|
|
116
|
-
if (cxxBridge == nil || cxxBridge.runtime == nil) {
|
|
117
|
-
return @false;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
auto jsiRuntime = (jsi::Runtime*) cxxBridge.runtime;
|
|
121
|
-
if (jsiRuntime == nil) {
|
|
122
|
-
return @false;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
install(*(facebook::jsi::Runtime *)cxxBridge.runtime, self);
|
|
126
|
-
return @true;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// --- Helper Function (Assumed to be accessible, copied here for completeness) ---
|
|
130
|
-
static void installHostFunction(
|
|
131
|
-
jsi::Runtime &jsiRuntime,
|
|
132
|
-
const char* name,
|
|
133
|
-
unsigned int argCount,
|
|
134
|
-
HostFunctionType hostFunction) {
|
|
135
|
-
|
|
136
|
-
auto func = Function::createFromHostFunction(
|
|
137
|
-
jsiRuntime,
|
|
138
|
-
PropNameID::forAscii(jsiRuntime, name),
|
|
139
|
-
argCount,
|
|
140
|
-
std::move(hostFunction)
|
|
141
|
-
);
|
|
142
|
-
jsiRuntime.global().setProperty(jsiRuntime, name, std::move(func));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// --- JSI Installation Logic ---
|
|
146
|
-
static void install(jsi::Runtime &jsiRuntime, RNDynamsoftImageEditorViewManager *rnEditorViewManager) {
|
|
147
|
-
|
|
148
|
-
// 1. editorView_setOriginalImage(viewTag, imageDataHostObject)
|
|
149
|
-
installHostFunction(jsiRuntime, "editorView_setOriginalImage", 2,
|
|
150
|
-
[rnEditorViewManager](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value {
|
|
151
|
-
|
|
152
|
-
// 🔍 Argument Validation & Type Check (Optimized)
|
|
153
|
-
if (count != 2 || !arguments[0].isNumber() || !arguments[1].isObject()) {
|
|
154
|
-
// Should potentially throw an exception for incorrect usage,
|
|
155
|
-
// but returning Value(false) keeps it consistent with original code style.
|
|
156
|
-
return Value(false);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Extract View Tag (JS number)
|
|
160
|
-
double tag = arguments[0].getNumber();
|
|
161
|
-
NSNumber *viewTag = @(tag); // Convert to NSNumber for Objective-C method
|
|
162
|
-
|
|
163
|
-
// Extract Image Data Host Object (Requires runtime for getObject)
|
|
164
|
-
Object obj = arguments[1].getObject(runtime);
|
|
165
|
-
|
|
166
|
-
// Check if it's the specific Host Object type (Requires runtime for isHostObject)
|
|
167
|
-
if (obj.isHostObject<ImageDataHostObject>(runtime)) {
|
|
168
|
-
// Safely convert Host Object to DSImageData
|
|
169
|
-
ImageDataHostObject hostObject = ImageDataHostObject::getHOFromObject(runtime, obj);
|
|
170
|
-
DSImageData *data = [DSImageData imageDataFromHostObject:hostObject];
|
|
171
|
-
|
|
172
|
-
// Call the Objective-C View Manager method
|
|
173
|
-
[rnEditorViewManager trySetImageDataWithTag:viewTag data:data attempt:1];
|
|
174
|
-
|
|
175
|
-
return Value(true);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return Value(false);
|
|
179
|
-
}
|
|
180
|
-
);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
@end
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import "RNDynamsoftImageEditorViewManager.h"
|
|
6
|
+
#import "RNDynamsoftImageEditorView.h"
|
|
7
|
+
#import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
|
|
8
|
+
#import <React/RCTBridge+Private.h>
|
|
9
|
+
#import "DSImageData+HostObject.h"
|
|
10
|
+
#import <React/RCTUIManager.h>
|
|
11
|
+
#import "RNDynamsoft+Json.h"
|
|
12
|
+
|
|
13
|
+
using namespace facebook::jsi;
|
|
14
|
+
using namespace facebook;
|
|
15
|
+
using namespace std;
|
|
16
|
+
|
|
17
|
+
@implementation RNDynamsoftImageEditorViewManager
|
|
18
|
+
|
|
19
|
+
RCT_EXPORT_MODULE(DynamsoftImageEditorView)
|
|
20
|
+
|
|
21
|
+
- (UIView *)view {
|
|
22
|
+
return [[RNDynamsoftImageEditorView alloc] init];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
RCT_EXPORT_METHOD(setQuads:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId) {
|
|
26
|
+
[self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:1];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
- (void)trySetQuadsWithTag:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId attempt:(NSInteger)attempt {
|
|
30
|
+
const NSInteger maxAttempts = 10;
|
|
31
|
+
const NSTimeInterval retryDelay = 0.1; // 100ms
|
|
32
|
+
|
|
33
|
+
[self.bridge.uiManager addUIBlock:
|
|
34
|
+
^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
|
35
|
+
id view = viewRegistry[tag];
|
|
36
|
+
if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
|
|
37
|
+
if (attempt < maxAttempts) {
|
|
38
|
+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
39
|
+
[self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:attempt + 1];
|
|
40
|
+
});
|
|
41
|
+
} else {
|
|
42
|
+
RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
|
|
43
|
+
}
|
|
44
|
+
} else {
|
|
45
|
+
if (array && array.count > 0) {
|
|
46
|
+
NSMutableArray<DSQuadDrawingItem *> *items = [NSMutableArray array];
|
|
47
|
+
for (id dic in array) {
|
|
48
|
+
if ([dic isKindOfClass:[NSDictionary class]]) {
|
|
49
|
+
DSQuadrilateral *quad = [DSQuadrilateral quadrilateralWithDictionary:dic];
|
|
50
|
+
[items addObject:[[DSQuadDrawingItem alloc] initWithQuadrilateral:quad]];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
DSDrawingLayer *layer = [((RNDynamsoftImageEditorView *)view).editorView getDrawingLayer:layerId];
|
|
54
|
+
layer.drawingItems = items;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
RCT_EXPORT_METHOD(getSelectedQuad:(nonnull NSNumber *)tag
|
|
61
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
62
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
63
|
+
{
|
|
64
|
+
[self.bridge.uiManager addUIBlock:
|
|
65
|
+
^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
|
66
|
+
id view = viewRegistry[tag];
|
|
67
|
+
if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
|
|
68
|
+
RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@", tag);
|
|
69
|
+
resolve(nil);
|
|
70
|
+
} else {
|
|
71
|
+
DSDrawingItem *item = [((RNDynamsoftImageEditorView *)view).editorView getSelectedDrawingItem];
|
|
72
|
+
if (item && item.mediaType == DSDrawingItemMediaTypeQuadrilateral) {
|
|
73
|
+
DSQuadDrawingItem *quadItem = (DSQuadDrawingItem *)item;
|
|
74
|
+
if (quadItem) {
|
|
75
|
+
resolve([quadItem.quad toJson]);
|
|
76
|
+
} else {
|
|
77
|
+
resolve(nil);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
- (void)trySetImageDataWithTag:(nonnull NSNumber *)tag data:(DSImageData *)data attempt:(NSInteger)attempt {
|
|
85
|
+
const NSInteger maxAttempts = 10;
|
|
86
|
+
const NSTimeInterval retryDelay = 0.1; // 100ms
|
|
87
|
+
|
|
88
|
+
[self.bridge.uiManager addUIBlock:
|
|
89
|
+
^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
|
90
|
+
id view = viewRegistry[tag];
|
|
91
|
+
if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
|
|
92
|
+
if (attempt < maxAttempts) {
|
|
93
|
+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
94
|
+
[self trySetImageDataWithTag:tag data:data attempt:1];
|
|
95
|
+
});
|
|
96
|
+
} else {
|
|
97
|
+
RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
|
|
98
|
+
}
|
|
99
|
+
} else {
|
|
100
|
+
((RNDynamsoftImageEditorView *)view).editorView.imageData = data;
|
|
101
|
+
}
|
|
102
|
+
}];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
#pragma mark - Global JSI
|
|
106
|
+
// --- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) ---
|
|
107
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
|
|
108
|
+
{
|
|
109
|
+
RCTBridge *bridge = self.bridge;
|
|
110
|
+
|
|
111
|
+
if ([bridge respondsToSelector:NSSelectorFromString(@"parentBridge")]) {
|
|
112
|
+
bridge = [bridge valueForKey:@"parentBridge"];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)bridge;
|
|
116
|
+
if (cxxBridge == nil || cxxBridge.runtime == nil) {
|
|
117
|
+
return @false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
auto jsiRuntime = (jsi::Runtime*) cxxBridge.runtime;
|
|
121
|
+
if (jsiRuntime == nil) {
|
|
122
|
+
return @false;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
install(*(facebook::jsi::Runtime *)cxxBridge.runtime, self);
|
|
126
|
+
return @true;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// --- Helper Function (Assumed to be accessible, copied here for completeness) ---
|
|
130
|
+
static void installHostFunction(
|
|
131
|
+
jsi::Runtime &jsiRuntime,
|
|
132
|
+
const char* name,
|
|
133
|
+
unsigned int argCount,
|
|
134
|
+
HostFunctionType hostFunction) {
|
|
135
|
+
|
|
136
|
+
auto func = Function::createFromHostFunction(
|
|
137
|
+
jsiRuntime,
|
|
138
|
+
PropNameID::forAscii(jsiRuntime, name),
|
|
139
|
+
argCount,
|
|
140
|
+
std::move(hostFunction)
|
|
141
|
+
);
|
|
142
|
+
jsiRuntime.global().setProperty(jsiRuntime, name, std::move(func));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// --- JSI Installation Logic ---
|
|
146
|
+
static void install(jsi::Runtime &jsiRuntime, RNDynamsoftImageEditorViewManager *rnEditorViewManager) {
|
|
147
|
+
|
|
148
|
+
// 1. editorView_setOriginalImage(viewTag, imageDataHostObject)
|
|
149
|
+
installHostFunction(jsiRuntime, "editorView_setOriginalImage", 2,
|
|
150
|
+
[rnEditorViewManager](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value {
|
|
151
|
+
|
|
152
|
+
// 🔍 Argument Validation & Type Check (Optimized)
|
|
153
|
+
if (count != 2 || !arguments[0].isNumber() || !arguments[1].isObject()) {
|
|
154
|
+
// Should potentially throw an exception for incorrect usage,
|
|
155
|
+
// but returning Value(false) keeps it consistent with original code style.
|
|
156
|
+
return Value(false);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Extract View Tag (JS number)
|
|
160
|
+
double tag = arguments[0].getNumber();
|
|
161
|
+
NSNumber *viewTag = @(tag); // Convert to NSNumber for Objective-C method
|
|
162
|
+
|
|
163
|
+
// Extract Image Data Host Object (Requires runtime for getObject)
|
|
164
|
+
Object obj = arguments[1].getObject(runtime);
|
|
165
|
+
|
|
166
|
+
// Check if it's the specific Host Object type (Requires runtime for isHostObject)
|
|
167
|
+
if (obj.isHostObject<ImageDataHostObject>(runtime)) {
|
|
168
|
+
// Safely convert Host Object to DSImageData
|
|
169
|
+
ImageDataHostObject hostObject = ImageDataHostObject::getHOFromObject(runtime, obj);
|
|
170
|
+
DSImageData *data = [DSImageData imageDataFromHostObject:hostObject];
|
|
171
|
+
|
|
172
|
+
// Call the Objective-C View Manager method
|
|
173
|
+
[rnEditorViewManager trySetImageDataWithTag:viewTag data:data attempt:1];
|
|
174
|
+
|
|
175
|
+
return Value(true);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return Value(false);
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@end
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
#import <React/RCTBridgeModule.h>
|
|
6
|
-
#import <React/RCTEventEmitter.h>
|
|
7
|
-
|
|
8
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
9
|
-
|
|
10
|
-
@interface RNDynamsoftImageManager : RCTEventEmitter <RCTBridgeModule>
|
|
11
|
-
|
|
12
|
-
@end
|
|
13
|
-
|
|
14
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © Dynamsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import <React/RCTBridgeModule.h>
|
|
6
|
+
#import <React/RCTEventEmitter.h>
|
|
7
|
+
|
|
8
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
9
|
+
|
|
10
|
+
@interface RNDynamsoftImageManager : RCTEventEmitter <RCTBridgeModule>
|
|
11
|
+
|
|
12
|
+
@end
|
|
13
|
+
|
|
14
|
+
NS_ASSUME_NONNULL_END
|