-
Notifications
You must be signed in to change notification settings - Fork 438
/
RNSkiaModule.mm
55 lines (44 loc) · 1.2 KB
/
RNSkiaModule.mm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#import "RNSkiaModule.h"
#import <React/RCTBridge+Private.h>
#import <ReactCommon/RCTTurboModule.h>
@implementation RNSkiaModule {
SkiaManager *skiaManager;
std::shared_ptr<facebook::react::CallInvoker> jsInvoker;
}
RCT_EXPORT_MODULE()
@synthesize bridge = _bridge;
#pragma Accessors
- (SkiaManager *)manager {
return skiaManager;
}
#pragma Setup and invalidation
+ (BOOL)requiresMainQueueSetup {
return YES;
}
- (void)invalidate {
if (skiaManager != nil) {
[skiaManager invalidate];
}
skiaManager = nil;
}
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
if (skiaManager != nil) {
// Already initialized, ignore call.
return @true;
}
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
if (!jsInvoker) {
jsInvoker = cxxBridge.jsCallInvoker;
}
skiaManager = [[SkiaManager alloc] initWithBridge:cxxBridge
jsInvoker:jsInvoker];
return @true;
}
#ifdef RCT_NEW_ARCH_ENABLED
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
(const facebook::react::ObjCTurboModule::InitParams &)params {
jsInvoker = params.jsInvoker;
return std::make_shared<facebook::react::NativeSkiaModuleSpecJSI>(params);
}
#endif
@end