react-native-unistyles 2.8.0-beta.1 → 2.8.0-beta.3
Sign up to get free protection for your applications and to get access to all the features.
- package/android/CMakeLists.txt +8 -1
- package/android/build.gradle +4 -1
- package/android/src/main/cxx/cpp-adapter.cpp +10 -100
- package/android/src/main/cxx/helpers.h +2 -0
- package/android/src/main/cxx/platform.cpp +126 -0
- package/android/src/main/cxx/platform.h +15 -0
- package/android/src/main/java/com/unistyles/Models.kt +14 -35
- package/android/src/main/java/com/unistyles/Platform.kt +91 -10
- package/android/src/main/java/com/unistyles/UnistylesModule.kt +84 -139
- package/cxx/Macros.h +11 -0
- package/cxx/UnistylesImpl.cpp +241 -0
- package/cxx/UnistylesModel.cpp +234 -0
- package/cxx/UnistylesModel.h +112 -0
- package/cxx/UnistylesRuntime.cpp +17 -388
- package/cxx/UnistylesRuntime.h +56 -95
- package/ios/UnistylesModule.h +8 -0
- package/ios/UnistylesModule.mm +12 -89
- package/ios/platform/Platform_Shared.h +5 -0
- package/ios/platform/Platform_Shared.mm +69 -0
- package/ios/platform/Platform_iOS.h +2 -9
- package/ios/platform/Platform_iOS.mm +47 -94
- package/ios/platform/Platform_macOS.h +1 -6
- package/ios/platform/Platform_macOS.mm +29 -29
- package/ios/platform/Platform_tvOS.h +2 -9
- package/ios/platform/Platform_tvOS.mm +30 -92
- package/ios/platform/Platform_visionOS.h +2 -8
- package/ios/platform/Platform_visionOS.mm +28 -83
- package/package.json +1 -1
- package/react-native-unistyles.podspec +3 -0
- package/android/src/main/java/com/unistyles/Config.kt +0 -116
- package/android/src/main/java/com/unistyles/Insets.kt +0 -141
- package/ios/UnistylesHelpers.h +0 -3
- package/ios/UnistylesHelpers.mm +0 -5
package/ios/UnistylesModule.mm
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#import "UnistylesModule.h"
|
2
|
-
#import "UnistylesHelpers.h"
|
3
2
|
#import "UnistylesRuntime.h"
|
4
3
|
|
5
4
|
#import <React/RCTBridge+Private.h>
|
@@ -47,106 +46,30 @@ RCT_EXPORT_MODULE(Unistyles)
|
|
47
46
|
#pragma mark - Core
|
48
47
|
|
49
48
|
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
if (
|
54
|
-
return @false;
|
55
|
-
}
|
56
|
-
|
57
|
-
auto jsiRuntime = (jsi::Runtime*)cxxBridge.runtime;
|
58
|
-
|
59
|
-
if (jsiRuntime == nil) {
|
49
|
+
UnistylesModule *__weak weakSelf = self;
|
50
|
+
RCTBridge *bridge = self.bridge;
|
51
|
+
|
52
|
+
if (bridge == nullptr) {
|
60
53
|
return @false;
|
61
54
|
}
|
62
55
|
|
63
|
-
|
64
|
-
UnistylesModule *__weak weakSelf = self;
|
65
|
-
|
66
|
-
registerUnistylesHostObject(runtime, weakSelf);
|
56
|
+
registerUnistylesHostObject(bridge, weakSelf);
|
67
57
|
|
68
58
|
NSLog(@"Installed Unistyles 🦄!");
|
69
59
|
|
70
60
|
return @true;
|
71
61
|
}
|
72
62
|
|
73
|
-
void registerUnistylesHostObject(
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
weakSelf.platform.initialContentSizeCategory,
|
78
|
-
weakSelf.platform.initialInsets,
|
79
|
-
weakSelf.platform.initialStatusBar,
|
80
|
-
weakSelf.platform.initialNavigationBar
|
81
|
-
);
|
82
|
-
|
83
|
-
unistylesRuntime.get()->onThemeChange([=](std::string theme) {
|
84
|
-
NSDictionary *body = @{
|
85
|
-
@"type": @"theme",
|
86
|
-
@"payload": @{
|
87
|
-
@"themeName": cxxStringToNSString(theme)
|
88
|
-
}
|
89
|
-
};
|
90
|
-
|
91
|
-
[weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
|
92
|
-
});
|
93
|
-
|
94
|
-
unistylesRuntime.get()->onLayoutChange([=](std::string breakpoint, std::string orientation, Dimensions& screen, Dimensions& statusBar, Insets& insets, Dimensions& navigationBar) {
|
95
|
-
NSDictionary *body = @{
|
96
|
-
@"type": @"layout",
|
97
|
-
@"payload": @{
|
98
|
-
@"breakpoint": cxxStringToNSString(breakpoint),
|
99
|
-
@"orientation": cxxStringToNSString(orientation),
|
100
|
-
@"screen": @{
|
101
|
-
@"width": @(screen.width),
|
102
|
-
@"height": @(screen.height)
|
103
|
-
},
|
104
|
-
@"statusBar": @{
|
105
|
-
@"width": @(statusBar.width),
|
106
|
-
@"height": @(statusBar.height)
|
107
|
-
},
|
108
|
-
@"navigationBar": @{
|
109
|
-
@"width": @(navigationBar.width),
|
110
|
-
@"height": @(navigationBar.height)
|
111
|
-
},
|
112
|
-
@"insets": @{
|
113
|
-
@"top": @(insets.top),
|
114
|
-
@"bottom": @(insets.bottom),
|
115
|
-
@"left": @(insets.left),
|
116
|
-
@"right": @(insets.right)
|
117
|
-
}
|
118
|
-
}
|
119
|
-
};
|
120
|
-
|
121
|
-
[weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
|
122
|
-
});
|
123
|
-
|
124
|
-
unistylesRuntime.get()->onPluginChange([=]() {
|
125
|
-
NSDictionary *body = @{
|
126
|
-
@"type": @"plugin"
|
127
|
-
};
|
128
|
-
|
129
|
-
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
130
|
-
[weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
|
131
|
-
});
|
132
|
-
});
|
133
|
-
|
134
|
-
unistylesRuntime.get()->onContentSizeCategoryChange([=](std::string contentSizeCategory) {
|
135
|
-
NSDictionary *body = @{
|
136
|
-
@"type": @"dynamicTypeSize",
|
137
|
-
@"payload": @{
|
138
|
-
@"contentSizeCategory": cxxStringToNSString(contentSizeCategory)
|
139
|
-
}
|
140
|
-
};
|
141
|
-
|
142
|
-
[weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
|
143
|
-
});
|
63
|
+
void registerUnistylesHostObject(RCTBridge* bridge, UnistylesModule* weakSelf) {
|
64
|
+
std::shared_ptr<react::CallInvoker> callInvoker = bridge.jsCallInvoker;
|
65
|
+
jsi::Runtime* runtime = reinterpret_cast<jsi::Runtime*>(bridge.runtime);
|
66
|
+
auto unistylesRuntime = std::make_shared<UnistylesRuntime>(*runtime, callInvoker);
|
144
67
|
|
145
|
-
weakSelf.platform
|
68
|
+
[weakSelf.platform makeShared:unistylesRuntime.get()];
|
146
69
|
|
147
|
-
auto hostObject = jsi::Object::createFromHostObject(runtime, unistylesRuntime);
|
70
|
+
auto hostObject = jsi::Object::createFromHostObject(*runtime, unistylesRuntime);
|
148
71
|
|
149
|
-
runtime
|
72
|
+
runtime->global().setProperty(*runtime, "__UNISTYLES__", std::move(hostObject));
|
150
73
|
}
|
151
74
|
|
152
75
|
@end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#include "Platform_Shared.h"
|
2
|
+
|
3
|
+
std::string getContentSizeCategory() {
|
4
|
+
UIContentSizeCategory contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory];
|
5
|
+
|
6
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge]) {
|
7
|
+
return std::string([@"xxxLarge" UTF8String]);
|
8
|
+
}
|
9
|
+
|
10
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraExtraLarge]) {
|
11
|
+
return std::string([@"xxLarge" UTF8String]);
|
12
|
+
}
|
13
|
+
|
14
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraLarge]) {
|
15
|
+
return std::string([@"xLarge" UTF8String]);
|
16
|
+
}
|
17
|
+
|
18
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryLarge]) {
|
19
|
+
return std::string([@"Large" UTF8String]);
|
20
|
+
}
|
21
|
+
|
22
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryMedium]) {
|
23
|
+
return std::string([@"Medium" UTF8String]);
|
24
|
+
}
|
25
|
+
|
26
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategorySmall]) {
|
27
|
+
return std::string([@"Small" UTF8String]);
|
28
|
+
}
|
29
|
+
|
30
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraSmall]) {
|
31
|
+
return std::string([@"xSmall" UTF8String]);
|
32
|
+
}
|
33
|
+
|
34
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityMedium]) {
|
35
|
+
return std::string([@"accessibilityMedium" UTF8String]);
|
36
|
+
}
|
37
|
+
|
38
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityLarge]) {
|
39
|
+
return std::string([@"accessibilityLarge" UTF8String]);
|
40
|
+
}
|
41
|
+
|
42
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraLarge]) {
|
43
|
+
return std::string([@"accessibilityExtraLarge" UTF8String]);
|
44
|
+
}
|
45
|
+
|
46
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraLarge]) {
|
47
|
+
return std::string([@"accessibilityExtraExtraLarge" UTF8String]);
|
48
|
+
}
|
49
|
+
|
50
|
+
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraExtraLarge]) {
|
51
|
+
return std::string([@"accessibilityExtraExtraExtraLarge" UTF8String]);
|
52
|
+
}
|
53
|
+
|
54
|
+
return std::string([@"unspecified" UTF8String]);
|
55
|
+
}
|
56
|
+
|
57
|
+
std::string getColorScheme() {
|
58
|
+
UIUserInterfaceStyle colorScheme = [UIScreen mainScreen].traitCollection.userInterfaceStyle;
|
59
|
+
|
60
|
+
switch (colorScheme) {
|
61
|
+
case UIUserInterfaceStyleLight:
|
62
|
+
return UnistylesLightScheme;
|
63
|
+
case UIUserInterfaceStyleDark:
|
64
|
+
return UnistylesDarkScheme;
|
65
|
+
case UIUserInterfaceStyleUnspecified:
|
66
|
+
default:
|
67
|
+
return UnistylesUnspecifiedScheme;
|
68
|
+
}
|
69
|
+
}
|
@@ -1,25 +1,18 @@
|
|
1
1
|
#include <string>
|
2
2
|
#include <map>
|
3
3
|
#include <UnistylesRuntime.h>
|
4
|
+
#include "Platform_Shared.h"
|
4
5
|
|
5
6
|
@interface Platform : NSObject
|
6
7
|
|
7
|
-
@property (nonatomic, assign) Dimensions initialScreen;
|
8
|
-
@property (nonatomic, assign) std::string initialColorScheme;
|
9
|
-
@property (nonatomic, assign) std::string initialContentSizeCategory;
|
10
|
-
@property (nonatomic, assign) Insets initialInsets;
|
11
|
-
@property (nonatomic, assign) Dimensions initialStatusBar;
|
12
|
-
@property (nonatomic, assign) Dimensions initialNavigationBar;
|
13
8
|
@property (nonatomic, assign) void* unistylesRuntime;
|
14
9
|
|
15
10
|
- (instancetype)init;
|
16
11
|
|
17
12
|
- (void)setupListeners;
|
13
|
+
- (void)makeShared:(void*)runtime;
|
18
14
|
- (void)onWindowChange:(NSNotification *)notification;
|
19
15
|
- (void)onAppearanceChange:(NSNotification *)notification;
|
20
16
|
- (void)onContentSizeCategoryChange:(NSNotification *)notification;
|
21
17
|
|
22
|
-
- (std::string)getColorScheme;
|
23
|
-
- (std::string)getContentSizeCategory:(UIContentSizeCategory)contentSizeCategory;
|
24
|
-
|
25
18
|
@end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
#if TARGET_OS_IOS
|
2
2
|
|
3
3
|
#import "Platform_iOS.h"
|
4
|
-
#import "UnistylesRuntime.h"
|
5
4
|
#import <React/RCTAppearance.h>
|
6
5
|
|
7
6
|
@implementation Platform
|
@@ -9,17 +8,6 @@
|
|
9
8
|
- (instancetype)init {
|
10
9
|
self = [super init];
|
11
10
|
if (self) {
|
12
|
-
UIViewController *presentedViewController = RCTPresentedViewController();
|
13
|
-
CGRect windowFrame = presentedViewController.view.window.frame;
|
14
|
-
|
15
|
-
UIContentSizeCategory contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory];
|
16
|
-
|
17
|
-
self.initialScreen = {(int)windowFrame.size.width, (int)windowFrame.size.height};
|
18
|
-
self.initialColorScheme = [self getColorScheme];
|
19
|
-
self.initialContentSizeCategory = [self getContentSizeCategory:contentSizeCategory];
|
20
|
-
self.initialStatusBar = [self getStatusBarDimensions];
|
21
|
-
self.initialInsets = [self getInsets];
|
22
|
-
|
23
11
|
[self setupListeners];
|
24
12
|
}
|
25
13
|
return self;
|
@@ -56,52 +44,64 @@
|
|
56
44
|
object:nil];
|
57
45
|
}
|
58
46
|
|
59
|
-
- (void)
|
60
|
-
|
47
|
+
- (void)makeShared:(void*)runtime {
|
48
|
+
self.unistylesRuntime = runtime;
|
49
|
+
|
50
|
+
auto unistylesRuntime = ((UnistylesRuntime*)self.unistylesRuntime);
|
51
|
+
|
52
|
+
unistylesRuntime->setScreenDimensionsCallback([self](){
|
53
|
+
return [self getScreenDimensions];
|
54
|
+
});
|
55
|
+
|
56
|
+
unistylesRuntime->setContentSizeCategoryCallback([](){
|
57
|
+
return getContentSizeCategory();
|
58
|
+
});
|
59
|
+
|
60
|
+
unistylesRuntime->setColorSchemeCallback([self](){
|
61
|
+
return getColorScheme();
|
62
|
+
});
|
63
|
+
|
64
|
+
unistylesRuntime->setStatusBarDimensionsCallback([self](){
|
65
|
+
return [self getStatusBarDimensions];
|
66
|
+
});
|
67
|
+
|
68
|
+
unistylesRuntime->setInsetsCallback([self](){
|
69
|
+
return [self getInsets];
|
70
|
+
});
|
71
|
+
|
72
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
73
|
+
unistylesRuntime->screen = [self getScreenDimensions];
|
74
|
+
unistylesRuntime->contentSizeCategory = getContentSizeCategory();
|
75
|
+
unistylesRuntime->colorScheme = getColorScheme();
|
76
|
+
unistylesRuntime->statusBar = [self getStatusBarDimensions];
|
77
|
+
unistylesRuntime->insets = [self getInsets];
|
78
|
+
});
|
79
|
+
}
|
61
80
|
|
81
|
+
- (void)onAppearanceChange:(NSNotification *)notification {
|
62
82
|
if (self.unistylesRuntime != nullptr) {
|
63
|
-
((UnistylesRuntime*)self.unistylesRuntime)->handleAppearanceChange(
|
83
|
+
((UnistylesRuntime*)self.unistylesRuntime)->handleAppearanceChange(getColorScheme());
|
64
84
|
}
|
65
85
|
}
|
66
86
|
|
67
87
|
- (void)onContentSizeCategoryChange:(NSNotification *)notification {
|
68
|
-
UIContentSizeCategory contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory];
|
69
|
-
|
70
88
|
if (self.unistylesRuntime != nullptr) {
|
71
|
-
((UnistylesRuntime*)self.unistylesRuntime)->handleContentSizeCategoryChange(
|
89
|
+
((UnistylesRuntime*)self.unistylesRuntime)->handleContentSizeCategoryChange(getContentSizeCategory());
|
72
90
|
}
|
73
91
|
}
|
74
92
|
|
75
93
|
- (void)onWindowChange:(NSNotification *)notification {
|
76
94
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
77
|
-
|
78
|
-
|
79
|
-
CGRect windowFrame = presentedViewController.view.frame;
|
80
|
-
Dimensions screen = {(int)windowFrame.size.width, (int)windowFrame.size.height};
|
95
|
+
Dimensions screen = [self getScreenDimensions];
|
81
96
|
Insets insets = [self getInsets];
|
82
97
|
Dimensions statusBar = [self getStatusBarDimensions];
|
83
|
-
Dimensions navigationBar = [self getNavigationBarDimensions];
|
84
98
|
|
85
99
|
if (self.unistylesRuntime != nullptr) {
|
86
|
-
((UnistylesRuntime*)self.unistylesRuntime)->handleScreenSizeChange(screen, insets, statusBar,
|
100
|
+
((UnistylesRuntime*)self.unistylesRuntime)->handleScreenSizeChange(screen, insets, statusBar, std::nullopt);
|
87
101
|
}
|
88
102
|
});
|
89
103
|
}
|
90
104
|
|
91
|
-
- (std::string)getColorScheme {
|
92
|
-
UIUserInterfaceStyle colorScheme = [UIScreen mainScreen].traitCollection.userInterfaceStyle;
|
93
|
-
|
94
|
-
switch (colorScheme) {
|
95
|
-
case UIUserInterfaceStyleLight:
|
96
|
-
return UnistylesLightScheme;
|
97
|
-
case UIUserInterfaceStyleDark:
|
98
|
-
return UnistylesDarkScheme;
|
99
|
-
case UIUserInterfaceStyleUnspecified:
|
100
|
-
default:
|
101
|
-
return UnistylesUnspecifiedScheme;
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
105
|
- (Insets)getInsets {
|
106
106
|
UIWindow *window = UIApplication.sharedApplication.windows.firstObject;
|
107
107
|
UIEdgeInsets safeArea = window.safeAreaInsets;
|
@@ -110,65 +110,18 @@
|
|
110
110
|
}
|
111
111
|
|
112
112
|
- (Dimensions)getStatusBarDimensions {
|
113
|
-
|
114
|
-
|
113
|
+
UIWindow *window = UIApplication.sharedApplication.windows.firstObject;
|
114
|
+
CGRect statusBarFrame = window.windowScene.statusBarManager.statusBarFrame;
|
115
|
+
|
115
116
|
return {(int)statusBarFrame.size.width, (int)statusBarFrame.size.height};
|
116
117
|
}
|
117
118
|
|
118
|
-
- (Dimensions)
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
return std::string([@"xxxLarge" UTF8String]);
|
125
|
-
}
|
126
|
-
|
127
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraExtraLarge]) {
|
128
|
-
return std::string([@"xxLarge" UTF8String]);
|
129
|
-
}
|
130
|
-
|
131
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraLarge]) {
|
132
|
-
return std::string([@"xLarge" UTF8String]);
|
133
|
-
}
|
134
|
-
|
135
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryLarge]) {
|
136
|
-
return std::string([@"Large" UTF8String]);
|
137
|
-
}
|
138
|
-
|
139
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryMedium]) {
|
140
|
-
return std::string([@"Medium" UTF8String]);
|
141
|
-
}
|
142
|
-
|
143
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategorySmall]) {
|
144
|
-
return std::string([@"Small" UTF8String]);
|
145
|
-
}
|
146
|
-
|
147
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraSmall]) {
|
148
|
-
return std::string([@"xSmall" UTF8String]);
|
149
|
-
}
|
150
|
-
|
151
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityMedium]) {
|
152
|
-
return std::string([@"accessibilityMedium" UTF8String]);
|
153
|
-
}
|
154
|
-
|
155
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityLarge]) {
|
156
|
-
return std::string([@"accessibilityLarge" UTF8String]);
|
157
|
-
}
|
158
|
-
|
159
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraLarge]) {
|
160
|
-
return std::string([@"accessibilityExtraLarge" UTF8String]);
|
161
|
-
}
|
162
|
-
|
163
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraLarge]) {
|
164
|
-
return std::string([@"accessibilityExtraExtraLarge" UTF8String]);
|
165
|
-
}
|
166
|
-
|
167
|
-
if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraExtraLarge]) {
|
168
|
-
return std::string([@"accessibilityExtraExtraExtraLarge" UTF8String]);
|
169
|
-
}
|
170
|
-
|
171
|
-
return std::string([@"unspecified" UTF8String]);
|
119
|
+
- (Dimensions)getScreenDimensions {
|
120
|
+
UIViewController *presentedViewController = RCTPresentedViewController();
|
121
|
+
CGRect windowFrame = presentedViewController.view.window.frame;
|
122
|
+
Dimensions screenDimension = {(int)windowFrame.size.width, (int)windowFrame.size.height};
|
123
|
+
|
124
|
+
return screenDimension;
|
172
125
|
}
|
173
126
|
|
174
127
|
@end
|
@@ -4,17 +4,12 @@
|
|
4
4
|
|
5
5
|
@interface Platform : NSObject
|
6
6
|
|
7
|
-
@property (nonatomic, assign) Dimensions initialScreen;
|
8
|
-
@property (nonatomic, assign) std::string initialColorScheme;
|
9
|
-
@property (nonatomic, assign) std::string initialContentSizeCategory;
|
10
|
-
@property (nonatomic, assign) Insets initialInsets;
|
11
|
-
@property (nonatomic, assign) Dimensions initialStatusBar;
|
12
|
-
@property (nonatomic, assign) Dimensions initialNavigationBar;
|
13
7
|
@property (nonatomic, assign) void* unistylesRuntime;
|
14
8
|
|
15
9
|
- (instancetype)init;
|
16
10
|
|
17
11
|
- (void)setupListeners;
|
12
|
+
- (void)makeShared:(void*)runtime;
|
18
13
|
- (void)onWindowChange;
|
19
14
|
- (void)onAppearanceChange;
|
20
15
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
#if TARGET_OS_OSX
|
2
2
|
|
3
3
|
#import "Platform_macOS.h"
|
4
|
-
#import "UnistylesRuntime.h"
|
5
4
|
#import <React/RCTUtils.h>
|
6
5
|
|
7
6
|
@implementation Platform
|
@@ -9,15 +8,6 @@
|
|
9
8
|
- (instancetype)init {
|
10
9
|
self = [super init];
|
11
10
|
if (self) {
|
12
|
-
NSWindow *window = RCTSharedApplication().mainWindow;
|
13
|
-
|
14
|
-
self.initialScreen = {(int)window.frame.size.width, (int)window.frame.size.height};
|
15
|
-
self.initialContentSizeCategory = std::string([@"unspecified" UTF8String]);
|
16
|
-
self.initialColorScheme = [self getColorScheme];
|
17
|
-
self.initialStatusBar = [self getStatusBarDimensions];
|
18
|
-
self.initialNavigationBar = [self getNavigationBarDimensions];
|
19
|
-
self.initialInsets = [self getInsets];
|
20
|
-
|
21
11
|
[self setupListeners];
|
22
12
|
}
|
23
13
|
return self;
|
@@ -41,6 +31,25 @@
|
|
41
31
|
[window addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
|
42
32
|
}
|
43
33
|
|
34
|
+
- (void)makeShared:(void*)runtime {
|
35
|
+
self.unistylesRuntime = runtime;
|
36
|
+
|
37
|
+
auto unistylesRuntime = ((UnistylesRuntime*)self.unistylesRuntime);
|
38
|
+
|
39
|
+
unistylesRuntime->setScreenDimensionsCallback([self](){
|
40
|
+
return [self getScreenDimensions];
|
41
|
+
});
|
42
|
+
|
43
|
+
unistylesRuntime->setColorSchemeCallback([self](){
|
44
|
+
return [self getColorScheme];
|
45
|
+
});
|
46
|
+
|
47
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
48
|
+
unistylesRuntime->screen = [self getScreenDimensions];
|
49
|
+
unistylesRuntime->colorScheme = [self getColorScheme];
|
50
|
+
});
|
51
|
+
}
|
52
|
+
|
44
53
|
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
|
45
54
|
if ([keyPath isEqualToString:@"effectiveAppearance"]) {
|
46
55
|
return [self onAppearanceChange];
|
@@ -60,18 +69,14 @@
|
|
60
69
|
}
|
61
70
|
|
62
71
|
- (void)onWindowChange {
|
63
|
-
|
64
|
-
|
65
|
-
Insets insets = [self getInsets];
|
66
|
-
Dimensions statusBar = [self getStatusBarDimensions];
|
67
|
-
Dimensions navigationBar = [self getNavigationBarDimensions];
|
68
|
-
|
72
|
+
Dimensions screen = [self getScreenDimensions];
|
73
|
+
|
69
74
|
if (self.unistylesRuntime != nullptr) {
|
70
75
|
((UnistylesRuntime*)self.unistylesRuntime)->handleScreenSizeChange(
|
71
76
|
screen,
|
72
|
-
|
73
|
-
|
74
|
-
|
77
|
+
std::nullopt,
|
78
|
+
std::nullopt,
|
79
|
+
std::nullopt
|
75
80
|
);
|
76
81
|
}
|
77
82
|
}
|
@@ -86,16 +91,11 @@
|
|
86
91
|
return UnistylesLightScheme;
|
87
92
|
}
|
88
93
|
|
89
|
-
- (
|
90
|
-
|
91
|
-
}
|
92
|
-
|
93
|
-
|
94
|
-
return {0, 0};
|
95
|
-
}
|
96
|
-
|
97
|
-
- (Dimensions)getNavigationBarDimensions {
|
98
|
-
return {0, 0};
|
94
|
+
- (Dimensions)getScreenDimensions {
|
95
|
+
NSWindow *window = RCTSharedApplication().mainWindow;
|
96
|
+
Dimensions screenDimension = {(int)window.frame.size.width, (int)window.frame.size.height};
|
97
|
+
|
98
|
+
return screenDimension;
|
99
99
|
}
|
100
100
|
|
101
101
|
@end
|
@@ -1,23 +1,16 @@
|
|
1
1
|
#include <string>
|
2
2
|
#include <map>
|
3
|
-
#include
|
3
|
+
#include "Platform_Shared.h"
|
4
4
|
|
5
5
|
@interface Platform : NSObject
|
6
6
|
|
7
|
-
@property (nonatomic, assign) Dimensions initialScreen;
|
8
|
-
@property (nonatomic, assign) std::string initialColorScheme;
|
9
|
-
@property (nonatomic, assign) std::string initialContentSizeCategory;
|
10
|
-
@property (nonatomic, assign) Insets initialInsets;
|
11
|
-
@property (nonatomic, assign) Dimensions initialStatusBar;
|
12
|
-
@property (nonatomic, assign) Dimensions initialNavigationBar;
|
13
7
|
@property (nonatomic, assign) void* unistylesRuntime;
|
14
8
|
|
15
9
|
- (instancetype)init;
|
16
10
|
|
11
|
+
- (void)makeShared:(void*)runtime;
|
17
12
|
- (void)onAppearanceChange:(NSNotification *)notification;
|
18
13
|
- (void)onContentSizeCategoryChange:(NSNotification *)notification;
|
19
14
|
|
20
|
-
- (std::string)getColorScheme;
|
21
|
-
|
22
15
|
@end
|
23
16
|
|