basalt-core 0.0.0-rc5
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 +21 -0
- package/dist/cli/basalt.d.ts +3 -0
- package/dist/cli/basalt.d.ts.map +1 -0
- package/dist/cli/basalt.js +47 -0
- package/dist/cli/basalt.js.map +1 -0
- package/dist/cli/bundle-cli.d.ts +12 -0
- package/dist/cli/bundle-cli.d.ts.map +1 -0
- package/dist/cli/bundle-cli.js +124 -0
- package/dist/cli/bundle-cli.js.map +1 -0
- package/dist/cli/bundleWithAssets.d.ts +79 -0
- package/dist/cli/bundleWithAssets.d.ts.map +1 -0
- package/dist/cli/bundleWithAssets.js +198 -0
- package/dist/cli/bundleWithAssets.js.map +1 -0
- package/dist/cli/desktop.d.ts +339 -0
- package/dist/cli/desktop.d.ts.map +1 -0
- package/dist/cli/desktop.js +1029 -0
- package/dist/cli/desktop.js.map +1 -0
- package/dist/cli/doctor.d.ts +31 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +283 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/init.d.ts +77 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +442 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/metro.d.ts +49 -0
- package/dist/cli/metro.d.ts.map +1 -0
- package/dist/cli/metro.js +148 -0
- package/dist/cli/metro.js.map +1 -0
- package/dist/cli/packageApp.d.ts +102 -0
- package/dist/cli/packageApp.d.ts.map +1 -0
- package/dist/cli/packageApp.js +319 -0
- package/dist/cli/packageApp.js.map +1 -0
- package/dist/cli/steps.d.ts +34 -0
- package/dist/cli/steps.d.ts.map +1 -0
- package/dist/cli/steps.js +53 -0
- package/dist/cli/steps.js.map +1 -0
- package/dist/metro-config.d.ts +168 -0
- package/dist/metro-config.d.ts.map +1 -0
- package/dist/metro-config.js +671 -0
- package/dist/metro-config.js.map +1 -0
- package/dist/react-native.config.d.ts +7 -0
- package/dist/react-native.config.d.ts.map +1 -0
- package/dist/react-native.config.js +80 -0
- package/dist/react-native.config.js.map +1 -0
- package/dist/src/DragSource.d.ts +52 -0
- package/dist/src/DragSource.d.ts.map +1 -0
- package/dist/src/DragSource.js +97 -0
- package/dist/src/DragSource.js.map +1 -0
- package/dist/src/DropTarget.d.ts +58 -0
- package/dist/src/DropTarget.d.ts.map +1 -0
- package/dist/src/DropTarget.js +131 -0
- package/dist/src/DropTarget.js.map +1 -0
- package/dist/src/KeyHandler.d.ts +57 -0
- package/dist/src/KeyHandler.d.ts.map +1 -0
- package/dist/src/KeyHandler.js +48 -0
- package/dist/src/KeyHandler.js.map +1 -0
- package/dist/src/Menu.d.ts +72 -0
- package/dist/src/Menu.d.ts.map +1 -0
- package/dist/src/Menu.js +179 -0
- package/dist/src/Menu.js.map +1 -0
- package/dist/src/TitleBar.d.ts +75 -0
- package/dist/src/TitleBar.d.ts.map +1 -0
- package/dist/src/TitleBar.js +236 -0
- package/dist/src/TitleBar.js.map +1 -0
- package/dist/src/Window.d.ts +87 -0
- package/dist/src/Window.d.ts.map +1 -0
- package/dist/src/Window.js +248 -0
- package/dist/src/Window.js.map +1 -0
- package/dist/src/closeRequest.d.ts +55 -0
- package/dist/src/closeRequest.d.ts.map +1 -0
- package/dist/src/closeRequest.js +134 -0
- package/dist/src/closeRequest.js.map +1 -0
- package/dist/src/index.d.ts +45 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +92 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/overrides/Alert.d.ts +69 -0
- package/dist/src/overrides/Alert.d.ts.map +1 -0
- package/dist/src/overrides/Alert.js +112 -0
- package/dist/src/overrides/Alert.js.map +1 -0
- package/dist/src/overrides/BaseViewConfig.d.ts +28 -0
- package/dist/src/overrides/BaseViewConfig.d.ts.map +1 -0
- package/dist/src/overrides/BaseViewConfig.js +72 -0
- package/dist/src/overrides/BaseViewConfig.js.map +1 -0
- package/dist/src/overrides/Platform.linux.d.ts +10 -0
- package/dist/src/overrides/Platform.linux.d.ts.map +1 -0
- package/dist/src/overrides/Platform.linux.js +15 -0
- package/dist/src/overrides/Platform.linux.js.map +1 -0
- package/dist/src/overrides/Platform.macos.d.ts +10 -0
- package/dist/src/overrides/Platform.macos.d.ts.map +1 -0
- package/dist/src/overrides/Platform.macos.js +15 -0
- package/dist/src/overrides/Platform.macos.js.map +1 -0
- package/dist/src/overrides/Platform.windows.d.ts +10 -0
- package/dist/src/overrides/Platform.windows.d.ts.map +1 -0
- package/dist/src/overrides/Platform.windows.js +15 -0
- package/dist/src/overrides/Platform.windows.js.map +1 -0
- package/dist/src/overrides/ReactDevToolsSettingsManager.d.ts +24 -0
- package/dist/src/overrides/ReactDevToolsSettingsManager.d.ts.map +1 -0
- package/dist/src/overrides/ReactDevToolsSettingsManager.js +30 -0
- package/dist/src/overrides/ReactDevToolsSettingsManager.js.map +1 -0
- package/dist/src/overrides/RefreshControl.d.ts +52 -0
- package/dist/src/overrides/RefreshControl.d.ts.map +1 -0
- package/dist/src/overrides/RefreshControl.js +92 -0
- package/dist/src/overrides/RefreshControl.js.map +1 -0
- package/dist/src/overrides/ScrollView.d.ts +39 -0
- package/dist/src/overrides/ScrollView.d.ts.map +1 -0
- package/dist/src/overrides/ScrollView.js +59 -0
- package/dist/src/overrides/ScrollView.js.map +1 -0
- package/dist/src/overrides/Share.d.ts +96 -0
- package/dist/src/overrides/Share.d.ts.map +1 -0
- package/dist/src/overrides/Share.js +97 -0
- package/dist/src/overrides/Share.js.map +1 -0
- package/dist/src/overrides/TextInput.d.ts +81 -0
- package/dist/src/overrides/TextInput.d.ts.map +1 -0
- package/dist/src/overrides/TextInput.js +213 -0
- package/dist/src/overrides/TextInput.js.map +1 -0
- package/dist/src/overrides/View.d.ts +36 -0
- package/dist/src/overrides/View.d.ts.map +1 -0
- package/dist/src/overrides/View.js +99 -0
- package/dist/src/overrides/View.js.map +1 -0
- package/dist/src/overrides/createPlatform.d.ts +32 -0
- package/dist/src/overrides/createPlatform.d.ts.map +1 -0
- package/dist/src/overrides/createPlatform.js +84 -0
- package/dist/src/overrides/createPlatform.js.map +1 -0
- package/dist/src/overrides/setUpDeveloperTools.d.ts +28 -0
- package/dist/src/overrides/setUpDeveloperTools.d.ts.map +1 -0
- package/dist/src/overrides/setUpDeveloperTools.js +84 -0
- package/dist/src/overrides/setUpDeveloperTools.js.map +1 -0
- package/dist/src/overrides/setUpXHR.d.ts +46 -0
- package/dist/src/overrides/setUpXHR.d.ts.map +1 -0
- package/dist/src/overrides/setUpXHR.js +236 -0
- package/dist/src/overrides/setUpXHR.js.map +1 -0
- package/dist/src/quitRequest.d.ts +55 -0
- package/dist/src/quitRequest.d.ts.map +1 -0
- package/dist/src/quitRequest.js +121 -0
- package/dist/src/quitRequest.js.map +1 -0
- package/dist/src/resourcePath.d.ts +18 -0
- package/dist/src/resourcePath.d.ts.map +1 -0
- package/dist/src/resourcePath.js +31 -0
- package/dist/src/resourcePath.js.map +1 -0
- package/dist/src/responseBody.d.ts +76 -0
- package/dist/src/responseBody.d.ts.map +1 -0
- package/dist/src/responseBody.js +94 -0
- package/dist/src/responseBody.js.map +1 -0
- package/dist/src/responseHeaders.d.ts +40 -0
- package/dist/src/responseHeaders.d.ts.map +1 -0
- package/dist/src/responseHeaders.js +75 -0
- package/dist/src/responseHeaders.js.map +1 -0
- package/dist/src/titleBarState.d.ts +43 -0
- package/dist/src/titleBarState.d.ts.map +1 -0
- package/dist/src/titleBarState.js +77 -0
- package/dist/src/titleBarState.js.map +1 -0
- package/dist/src/useContextMenu.d.ts +113 -0
- package/dist/src/useContextMenu.d.ts.map +1 -0
- package/dist/src/useContextMenu.js +109 -0
- package/dist/src/useContextMenu.js.map +1 -0
- package/dist/src/useDialog.d.ts +98 -0
- package/dist/src/useDialog.d.ts.map +1 -0
- package/dist/src/useDialog.js +112 -0
- package/dist/src/useDialog.js.map +1 -0
- package/dist/src/useDisplays.d.ts +70 -0
- package/dist/src/useDisplays.d.ts.map +1 -0
- package/dist/src/useDisplays.js +118 -0
- package/dist/src/useDisplays.js.map +1 -0
- package/dist/src/useHandledKeys.d.ts +38 -0
- package/dist/src/useHandledKeys.d.ts.map +1 -0
- package/dist/src/useHandledKeys.js +70 -0
- package/dist/src/useHandledKeys.js.map +1 -0
- package/dist/src/useWindow.d.ts +140 -0
- package/dist/src/useWindow.d.ts.map +1 -0
- package/dist/src/useWindow.js +233 -0
- package/dist/src/useWindow.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/native/CMakeLists.txt +355 -0
- package/native/bootstrap.sh +613 -0
- package/native/cmake/CompilerFlags.cmake +49 -0
- package/native/cmake/Expo.cmake +125 -0
- package/native/cmake/ReactNativeCore.cmake +612 -0
- package/native/cmake/Reanimated.cmake +108 -0
- package/native/cmake/Skia.cmake +379 -0
- package/native/cmake/ThirdParty.cmake +290 -0
- package/native/cmake/Worklets.cmake +67 -0
- package/native/cmake/codegen/CMakeLists.txt +32 -0
- package/native/core/AppIdentity.cpp +85 -0
- package/native/core/AppIdentity.h +59 -0
- package/native/core/AppPaths.cpp +96 -0
- package/native/core/AppPaths.h +53 -0
- package/native/core/AppearanceModule.cpp +60 -0
- package/native/core/AppearanceModule.h +40 -0
- package/native/core/Backface.h +59 -0
- package/native/core/BlobModule.cpp +283 -0
- package/native/core/BlobModule.h +76 -0
- package/native/core/BlobRegistry.cpp +75 -0
- package/native/core/BlobRegistry.h +44 -0
- package/native/core/ColorScheme.cpp +105 -0
- package/native/core/ColorScheme.h +59 -0
- package/native/core/ComponentRegistry.h +30 -0
- package/native/core/ControlMetrics.h +37 -0
- package/native/core/CoreModules.cpp +592 -0
- package/native/core/CoreModules.h +308 -0
- package/native/core/DebuggingOverlay.cpp +106 -0
- package/native/core/DebuggingOverlay.h +65 -0
- package/native/core/DesktopControls.cpp +232 -0
- package/native/core/DesktopControls.h +170 -0
- package/native/core/DevBundle.cpp +108 -0
- package/native/core/DevBundle.h +69 -0
- package/native/core/DevMenu.cpp +99 -0
- package/native/core/DevMenu.h +75 -0
- package/native/core/DialogModule.cpp +150 -0
- package/native/core/DialogModule.h +51 -0
- package/native/core/DragAndDrop.cpp +45 -0
- package/native/core/DragAndDrop.h +225 -0
- package/native/core/ExpoImageComponent.cpp +79 -0
- package/native/core/ExpoImageComponent.h +80 -0
- package/native/core/ExpoModules.cpp +415 -0
- package/native/core/ExpoModules.h +115 -0
- package/native/core/ExpoRuntime.cpp +366 -0
- package/native/core/ExpoRuntime.h +42 -0
- package/native/core/FocusRing.h +36 -0
- package/native/core/FontRegistry.h +51 -0
- package/native/core/GestureHandlerModule.cpp +136 -0
- package/native/core/GestureHandlerModule.h +71 -0
- package/native/core/Gestures.cpp +533 -0
- package/native/core/Gestures.h +145 -0
- package/native/core/HoverTracker.cpp +69 -0
- package/native/core/HoverTracker.h +109 -0
- package/native/core/HttpClient.cpp +282 -0
- package/native/core/ImageBytes.cpp +205 -0
- package/native/core/ImageBytes.h +29 -0
- package/native/core/ImageCache.cpp +51 -0
- package/native/core/ImageCache.h +89 -0
- package/native/core/JsRuntimeAccess.cpp +70 -0
- package/native/core/JsRuntimeAccess.h +60 -0
- package/native/core/JsiPromise.h +51 -0
- package/native/core/KeyEvents.cpp +116 -0
- package/native/core/KeyEvents.h +144 -0
- package/native/core/LogBoxSurface.cpp +46 -0
- package/native/core/LogBoxSurface.h +68 -0
- package/native/core/MenuModel.h +117 -0
- package/native/core/MenuModule.cpp +209 -0
- package/native/core/MenuModule.h +66 -0
- package/native/core/MountingWalk.h +524 -0
- package/native/core/PackageModules.cpp.in +25 -0
- package/native/core/PackageModules.h +50 -0
- package/native/core/PlatformConstantsModule.cpp +63 -0
- package/native/core/PlatformConstantsModule.h +64 -0
- package/native/core/PlatformServices.h +213 -0
- package/native/core/PointerButtons.h +63 -0
- package/native/core/PullToRefresh.cpp +57 -0
- package/native/core/PullToRefresh.h +73 -0
- package/native/core/ReanimatedCompat.h +47 -0
- package/native/core/ReanimatedModule.cpp +203 -0
- package/native/core/ReanimatedModule.h +55 -0
- package/native/core/ScrollAnimation.cpp +59 -0
- package/native/core/ScrollAnimation.h +70 -0
- package/native/core/ScrollBounds.cpp +26 -0
- package/native/core/ScrollBounds.h +68 -0
- package/native/core/ScrollIndicator.cpp +50 -0
- package/native/core/ScrollIndicator.h +69 -0
- package/native/core/ScrollMomentum.cpp +71 -0
- package/native/core/ScrollMomentum.h +73 -0
- package/native/core/ScrollSnap.cpp +123 -0
- package/native/core/ScrollSnap.h +80 -0
- package/native/core/ShareFallback.cpp +101 -0
- package/native/core/ShareFallback.h +45 -0
- package/native/core/SkiaPictureViewComponent.cpp +11 -0
- package/native/core/SkiaPictureViewComponent.h +47 -0
- package/native/core/SourceCodeModule.cpp +55 -0
- package/native/core/SourceCodeModule.h +53 -0
- package/native/core/StatusBarModule.cpp +23 -0
- package/native/core/StatusBarModule.h +42 -0
- package/native/core/TestDialog.cpp +148 -0
- package/native/core/TestDialog.h +96 -0
- package/native/core/TestKeys.cpp +78 -0
- package/native/core/TestKeys.h +50 -0
- package/native/core/TestQuitFile.cpp +33 -0
- package/native/core/TestQuitFile.h +60 -0
- package/native/core/TestSettle.h +192 -0
- package/native/core/TitleBarRegions.h +31 -0
- package/native/core/TurboModuleProxy.cpp +51 -0
- package/native/core/TurboModuleProxy.h +46 -0
- package/native/core/UIManagerAccess.cpp +43 -0
- package/native/core/UIManagerAccess.h +43 -0
- package/native/core/WindowBoundsCache.cpp +319 -0
- package/native/core/WindowControl.h +235 -0
- package/native/core/WindowHost.h +158 -0
- package/native/core/WindowMethods.cpp +167 -0
- package/native/core/WindowMethods.h +84 -0
- package/native/core/WindowsModule.cpp +448 -0
- package/native/core/WindowsModule.h +133 -0
- package/native/core/WorkletsModule.cpp +199 -0
- package/native/core/WorkletsModule.h +57 -0
- package/native/core/portability_probe.cpp +210 -0
- package/native/tests/EventRecorder.h +124 -0
- package/native/tests/TestHarness.cpp +109 -0
- package/native/tests/TestHarness.h +89 -0
- package/native/tests/TreeDump.h +49 -0
- package/native/tests/test_app_identity.cpp +114 -0
- package/native/tests/test_app_paths.cpp +48 -0
- package/native/tests/test_appearance.cpp +107 -0
- package/native/tests/test_backface.cpp +79 -0
- package/native/tests/test_blobs.cpp +157 -0
- package/native/tests/test_controls.cpp +185 -0
- package/native/tests/test_devbundle.cpp +103 -0
- package/native/tests/test_drag_and_drop.cpp +143 -0
- package/native/tests/test_gestures.cpp +331 -0
- package/native/tests/test_hover.cpp +92 -0
- package/native/tests/test_image_cache.cpp +109 -0
- package/native/tests/test_js_runtime_access.cpp +137 -0
- package/native/tests/test_key_events.cpp +235 -0
- package/native/tests/test_momentum.cpp +138 -0
- package/native/tests/test_quit_file.cpp +104 -0
- package/native/tests/test_scroll_animation.cpp +120 -0
- package/native/tests/test_scroll_bounds.cpp +66 -0
- package/native/tests/test_scroll_indicator.cpp +149 -0
- package/native/tests/test_scroll_snap.cpp +112 -0
- package/native/tests/test_settle.cpp +115 -0
- package/native/tests/test_share.cpp +75 -0
- package/native/tests/test_sourcecode.cpp +62 -0
- package/native/tests/test_window_close.cpp +119 -0
- package/native/tests/test_window_limits.cpp +123 -0
- package/package.json +43 -0
- package/react-native.config.js +86 -0
- package/supported-versions.json +66 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#include "ColorScheme.h"
|
|
2
|
+
|
|
3
|
+
#include <mutex>
|
|
4
|
+
#include <unordered_map>
|
|
5
|
+
|
|
6
|
+
namespace basalt {
|
|
7
|
+
|
|
8
|
+
namespace {
|
|
9
|
+
|
|
10
|
+
struct Registry {
|
|
11
|
+
std::mutex mutex;
|
|
12
|
+
bool hasOverride{false};
|
|
13
|
+
ColorScheme override{ColorScheme::Light};
|
|
14
|
+
int nextToken{1};
|
|
15
|
+
std::unordered_map<int, ColorSchemeObserver> observers;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
Registry ®istry() {
|
|
19
|
+
static Registry instance;
|
|
20
|
+
return instance;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
} // namespace
|
|
24
|
+
|
|
25
|
+
const char *colorSchemeName(ColorScheme scheme) {
|
|
26
|
+
return scheme == ColorScheme::Dark ? "dark" : "light";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
ColorScheme effectiveColorScheme() {
|
|
30
|
+
{
|
|
31
|
+
Registry &state = registry();
|
|
32
|
+
const std::lock_guard<std::mutex> lock(state.mutex);
|
|
33
|
+
if (state.hasOverride) {
|
|
34
|
+
return state.override;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Outside the lock: a platform's answer may take a trip to the window server,
|
|
38
|
+
// and holding the lock across that would serialise every reader behind it.
|
|
39
|
+
return systemColorScheme();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void setColorSchemeOverride(const std::string &scheme) {
|
|
43
|
+
if (scheme.empty()) {
|
|
44
|
+
clearColorSchemeOverride();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
{
|
|
49
|
+
Registry &state = registry();
|
|
50
|
+
const std::lock_guard<std::mutex> lock(state.mutex);
|
|
51
|
+
state.hasOverride = true;
|
|
52
|
+
state.override = scheme == "dark" ? ColorScheme::Dark : ColorScheme::Light;
|
|
53
|
+
}
|
|
54
|
+
notifyColorSchemeChanged();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void clearColorSchemeOverride() {
|
|
58
|
+
{
|
|
59
|
+
Registry &state = registry();
|
|
60
|
+
const std::lock_guard<std::mutex> lock(state.mutex);
|
|
61
|
+
if (!state.hasOverride) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
state.hasOverride = false;
|
|
65
|
+
}
|
|
66
|
+
notifyColorSchemeChanged();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
int addColorSchemeObserver(ColorSchemeObserver observer) {
|
|
70
|
+
Registry &state = registry();
|
|
71
|
+
const std::lock_guard<std::mutex> lock(state.mutex);
|
|
72
|
+
const int token = state.nextToken++;
|
|
73
|
+
state.observers.emplace(token, std::move(observer));
|
|
74
|
+
return token;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
void removeColorSchemeObserver(int token) {
|
|
78
|
+
Registry &state = registry();
|
|
79
|
+
const std::lock_guard<std::mutex> lock(state.mutex);
|
|
80
|
+
state.observers.erase(token);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
void notifyColorSchemeChanged() {
|
|
84
|
+
const ColorScheme scheme = effectiveColorScheme();
|
|
85
|
+
|
|
86
|
+
// Copied under the lock and called outside it: an observer emits into
|
|
87
|
+
// JavaScript, which can re-enter here -- `Appearance.setColorScheme` called
|
|
88
|
+
// from a change handler is a perfectly ordinary thing for an app to do.
|
|
89
|
+
std::vector<ColorSchemeObserver> observers;
|
|
90
|
+
{
|
|
91
|
+
Registry &state = registry();
|
|
92
|
+
const std::lock_guard<std::mutex> lock(state.mutex);
|
|
93
|
+
observers.reserve(state.observers.size());
|
|
94
|
+
for (const auto &[token, observer] : state.observers) {
|
|
95
|
+
(void)token;
|
|
96
|
+
observers.push_back(observer);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
for (const auto &observer : observers) {
|
|
101
|
+
observer(scheme);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
} // namespace basalt
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Whether the system is in light or dark mode.
|
|
2
|
+
//
|
|
3
|
+
// The fourth seam a desktop platform owes, after fonts, the text layout manager
|
|
4
|
+
// and the component registry. Everything about `Appearance` *except* the answer
|
|
5
|
+
// is portable -- the module, the JavaScript-side override, the listener list,
|
|
6
|
+
// the event -- and the answer is two functions.
|
|
7
|
+
//
|
|
8
|
+
// Split this way because the interesting part is not reading the setting, it is
|
|
9
|
+
// that React Native's `Appearance.setColorScheme` lets JavaScript override it
|
|
10
|
+
// process-wide, and that the override has to win over the system for every
|
|
11
|
+
// later read. Putting that in core means neither platform can get it subtly
|
|
12
|
+
// different.
|
|
13
|
+
|
|
14
|
+
#pragma once
|
|
15
|
+
|
|
16
|
+
#include <functional>
|
|
17
|
+
#include <string>
|
|
18
|
+
|
|
19
|
+
namespace basalt {
|
|
20
|
+
|
|
21
|
+
enum class ColorScheme { Light, Dark };
|
|
22
|
+
|
|
23
|
+
// --- What a platform provides ----------------------------------------------
|
|
24
|
+
|
|
25
|
+
// What the operating system currently says. Called on any thread.
|
|
26
|
+
ColorScheme systemColorScheme();
|
|
27
|
+
|
|
28
|
+
// Starts watching for changes, calling `notifyColorSchemeChanged` when the
|
|
29
|
+
// system setting moves. Called once, on the main thread, from the host.
|
|
30
|
+
//
|
|
31
|
+
// A platform that cannot watch may do nothing: `getColorScheme` still answers
|
|
32
|
+
// correctly, and only live switching is lost.
|
|
33
|
+
void startObservingColorScheme();
|
|
34
|
+
|
|
35
|
+
// --- What core provides ------------------------------------------------------
|
|
36
|
+
|
|
37
|
+
// The scheme an app should use: the override if one was set, the system
|
|
38
|
+
// otherwise.
|
|
39
|
+
ColorScheme effectiveColorScheme();
|
|
40
|
+
|
|
41
|
+
// `Appearance.setColorScheme`. Passing nullopt-equivalent -- an empty string
|
|
42
|
+
// from JavaScript -- clears the override and hands control back to the system.
|
|
43
|
+
void setColorSchemeOverride(const std::string &scheme);
|
|
44
|
+
void clearColorSchemeOverride();
|
|
45
|
+
|
|
46
|
+
// Called by a platform's observer when the system setting changes. Notifies
|
|
47
|
+
// every listener, unless an override is in force -- in which case nothing an
|
|
48
|
+
// app can see has changed.
|
|
49
|
+
void notifyColorSchemeChanged();
|
|
50
|
+
|
|
51
|
+
// Listeners. The token is what removes one; the module holds one for its life.
|
|
52
|
+
using ColorSchemeObserver = std::function<void(ColorScheme)>;
|
|
53
|
+
int addColorSchemeObserver(ColorSchemeObserver observer);
|
|
54
|
+
void removeColorSchemeObserver(int token);
|
|
55
|
+
|
|
56
|
+
// "light" or "dark", as React Native's JavaScript spells them.
|
|
57
|
+
const char *colorSchemeName(ColorScheme scheme);
|
|
58
|
+
|
|
59
|
+
} // namespace basalt
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Which components a platform supports — a seam, not a list.
|
|
2
|
+
//
|
|
3
|
+
// `getDefaultComponentRegistryFactory()` is declared by ReactCommon and
|
|
4
|
+
// deliberately *not* defined there: no .cpp in the whole tree implements it.
|
|
5
|
+
// Each host supplies its own, and in doing so declares what its platform can
|
|
6
|
+
// actually put on screen. Fantom has a version registering the full set.
|
|
7
|
+
//
|
|
8
|
+
// This used to be one shared definition, on the reasonable-looking grounds that
|
|
9
|
+
// a descriptor is portable C++ and registering one costs nothing. Linking the
|
|
10
|
+
// macOS mounting manager disproved that. Registering ParagraphComponentDescriptor
|
|
11
|
+
// constructs a `TextLayoutManager`, whose implementation this build deliberately
|
|
12
|
+
// replaces per platform -- Pango on Linux -- so a platform that has no text
|
|
13
|
+
// engine yet does not fail to render text, it fails to link. Which is the right
|
|
14
|
+
// failure, and is why the registry belongs beside the platform rather than in
|
|
15
|
+
// core.
|
|
16
|
+
//
|
|
17
|
+
// So each platform defines this function in its own translation unit:
|
|
18
|
+
//
|
|
19
|
+
// gtk/ComponentRegistryGtk.cpp View, Paragraph, Text, RawText, Image,
|
|
20
|
+
// ScrollView, TextInput
|
|
21
|
+
// mac/ComponentRegistryAppKit.mm View
|
|
22
|
+
//
|
|
23
|
+
// and the set it registers must match what that platform's mounting manager
|
|
24
|
+
// answers `hasComponent` for. They are two statements of the same fact, and
|
|
25
|
+
// when they disagree the registry wins and builds shadow nodes nothing can
|
|
26
|
+
// mount -- which renders as blank rectangles rather than as an error.
|
|
27
|
+
|
|
28
|
+
#pragma once
|
|
29
|
+
|
|
30
|
+
#include <react/renderer/componentregistry/ComponentDescriptorFactory.h>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// How big a control is, on every desktop.
|
|
2
|
+
//
|
|
3
|
+
// Separate from DesktopControls.h, which is where everything else about a
|
|
4
|
+
// control lives, for one reason: the Windows view layer draws its own switch
|
|
5
|
+
// and its own spinner and deliberately does not link React Native -- the demo
|
|
6
|
+
// and half its tests build a view tree with no Fabric anywhere -- so it cannot
|
|
7
|
+
// include a header that pulls in ShadowView. It can include this, which is four
|
|
8
|
+
// numbers and nothing else. FocusRing.h is here for the same reason.
|
|
9
|
+
//
|
|
10
|
+
// Constants rather than each toolkit's intrinsic size, so that a layout built
|
|
11
|
+
// against one desktop is the same on the other two. A GtkSwitch and an NSSwitch
|
|
12
|
+
// are both smaller than this, and a screen that fits on a Mac and reflows on
|
|
13
|
+
// Linux is the failure this project exists to avoid.
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
namespace basalt {
|
|
18
|
+
|
|
19
|
+
// React Native's <Switch> size on iOS, which is what app layouts are written
|
|
20
|
+
// against -- and what SwitchShadowNode::measureContent answers, since React
|
|
21
|
+
// Native's only <Switch> shadow node measures by instantiating a UISwitch.
|
|
22
|
+
inline constexpr float kSwitchWidth = 51.0F;
|
|
23
|
+
inline constexpr float kSwitchHeight = 31.0F;
|
|
24
|
+
|
|
25
|
+
// <ActivityIndicator>'s two sizes. React Native's JavaScript also writes these
|
|
26
|
+
// into the view's style, so these are for the drawing rather than the layout --
|
|
27
|
+
// which is exactly why they have to agree with it.
|
|
28
|
+
inline constexpr float kSpinnerSmall = 20.0F;
|
|
29
|
+
inline constexpr float kSpinnerLarge = 36.0F;
|
|
30
|
+
|
|
31
|
+
// React DevTools' overlay outline, in points. The same on every platform so
|
|
32
|
+
// that a screenshot of an inspected element is the same picture from any of
|
|
33
|
+
// them. Here rather than in DebuggingOverlay.h for the reason this file exists:
|
|
34
|
+
// a view layer draws it and does not link React Native.
|
|
35
|
+
inline constexpr float kHighlightBorderWidth = 2.0F;
|
|
36
|
+
|
|
37
|
+
} // namespace basalt
|