pythonnative 0.40.0__cp313-cp313-win_amd64.whl
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.
- pythonnative/__init__.py +411 -0
- pythonnative/_ios_log.py +92 -0
- pythonnative/_yoga.cp313-win_amd64.pyd +0 -0
- pythonnative/alerts.py +236 -0
- pythonnative/animated.py +1687 -0
- pythonnative/animation_graph.py +78 -0
- pythonnative/appearance.py +124 -0
- pythonnative/bootstrap.py +100 -0
- pythonnative/bridge/__init__.py +302 -0
- pythonnative/bridge/android.py +78 -0
- pythonnative/bridge/codec.py +170 -0
- pythonnative/bridge/commits.py +114 -0
- pythonnative/bridge/fake.py +243 -0
- pythonnative/bridge/ios.py +138 -0
- pythonnative/bridge/web.py +489 -0
- pythonnative/cli/__init__.py +7 -0
- pythonnative/cli/pn.py +1214 -0
- pythonnative/component.py +271 -0
- pythonnative/components/__init__.py +111 -0
- pythonnative/components/_base.py +166 -0
- pythonnative/components/controls.py +521 -0
- pythonnative/components/layout.py +518 -0
- pythonnative/components/lists.py +785 -0
- pythonnative/components/media.py +204 -0
- pythonnative/components/overlays.py +107 -0
- pythonnative/components/pressable.py +252 -0
- pythonnative/components/structural.py +167 -0
- pythonnative/components/text.py +291 -0
- pythonnative/devclient.py +824 -0
- pythonnative/devserver/__init__.py +34 -0
- pythonnative/devserver/server.py +718 -0
- pythonnative/devserver/static/animation_graph.js +82 -0
- pythonnative/devserver/static/bridge.js +147 -0
- pythonnative/devserver/static/colors.js +70 -0
- pythonnative/devserver/static/host.js +552 -0
- pythonnative/devserver/static/index.html +60 -0
- pythonnative/devserver/static/layout.js +85 -0
- pythonnative/devserver/static/preview.css +415 -0
- pythonnative/devserver/static/renderer.js +1994 -0
- pythonnative/devserver/static/shell.js +345 -0
- pythonnative/devserver/static/yoga/LICENSE +21 -0
- pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +75 -0
- pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +189 -0
- pythonnative/devserver/static/yoga/src/generated/YGEnums.js +211 -0
- pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +1 -0
- pythonnative/devserver/static/yoga/src/index.d.ts +12 -0
- pythonnative/devserver/static/yoga/src/index.js +16 -0
- pythonnative/devserver/static/yoga/src/index.js.map +1 -0
- pythonnative/devserver/static/yoga/src/load.d.ts +11 -0
- pythonnative/devserver/static/yoga/src/load.js +17 -0
- pythonnative/devserver/static/yoga/src/load.js.map +1 -0
- pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +155 -0
- pythonnative/devserver/static/yoga/src/wrapAssembly.js +125 -0
- pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +1 -0
- pythonnative/devserver/watcher.py +267 -0
- pythonnative/devserver/ws.py +421 -0
- pythonnative/diagnostics.py +241 -0
- pythonnative/element.py +159 -0
- pythonnative/equality.py +19 -0
- pythonnative/events.py +231 -0
- pythonnative/gestures.py +1333 -0
- pythonnative/hooks.py +1621 -0
- pythonnative/hosts/__init__.py +63 -0
- pythonnative/hosts/base.py +596 -0
- pythonnative/hosts/native.py +302 -0
- pythonnative/hot_reload.py +585 -0
- pythonnative/layout.py +328 -0
- pythonnative/mutations.py +142 -0
- pythonnative/native/android/build.gradle +52 -0
- pythonnative/native/android/gradle.properties +3 -0
- pythonnative/native/android/settings.gradle +12 -0
- pythonnative/native/android/src/main/AndroidManifest.xml +11 -0
- pythonnative/native/android/src/main/cpp/CMakeLists.txt +9 -0
- pythonnative/native/android/src/main/cpp/yoga_jni.cpp +52 -0
- pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +5 -0
- pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +3705 -0
- pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +129 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +261 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +20 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +108 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +141 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +257 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +106 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +175 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +40 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +33 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +82 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +80 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +117 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +74 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +37 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +32 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +213 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +69 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +186 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +123 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +141 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +162 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +134 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +201 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +86 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +55 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +122 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +110 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +214 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +113 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +52 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +131 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +250 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +233 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +355 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +159 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +149 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +233 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +127 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +527 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +145 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +29 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +73 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +316 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +61 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +200 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +158 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +100 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +99 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +89 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +178 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +16 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +188 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +80 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +48 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +76 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +18 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +49 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +75 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +197 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +47 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +78 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +89 -0
- pythonnative/native/ios/Package.swift +23 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +199 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +312 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +255 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +104 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +142 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +166 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +53 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +207 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +173 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +183 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +56 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +281 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +222 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +243 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +114 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +107 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +197 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +106 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +297 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +230 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +82 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +86 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +87 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +340 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +155 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +124 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +1 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +3775 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +46 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +260 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +173 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +92 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +80 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +174 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +177 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +168 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +266 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +251 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +8 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +46 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +237 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +46 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +173 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +47 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +51 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +26 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +50 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +86 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +101 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +126 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +111 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +91 -0
- pythonnative/native/yoga/LICENSE +21 -0
- pythonnative/native/yoga/Package.swift +9 -0
- pythonnative/native/yoga/VENDORED.md +2 -0
- pythonnative/native/yoga/include/PNStyle.h +10 -0
- pythonnative/native/yoga/include/module.modulemap +5 -0
- pythonnative/native/yoga/include/yoga/YGConfig.h +158 -0
- pythonnative/native/yoga/include/yoga/YGEnums.h +142 -0
- pythonnative/native/yoga/include/yoga/YGMacros.h +99 -0
- pythonnative/native/yoga/include/yoga/YGNode.h +304 -0
- pythonnative/native/yoga/include/yoga/YGNodeLayout.h +35 -0
- pythonnative/native/yoga/include/yoga/YGNodeStyle.h +130 -0
- pythonnative/native/yoga/include/yoga/YGPixelGrid.h +29 -0
- pythonnative/native/yoga/include/yoga/YGValue.h +84 -0
- pythonnative/native/yoga/include/yoga/Yoga.h +21 -0
- pythonnative/native/yoga/python.cpp +16 -0
- pythonnative/native/yoga/style.cpp +272 -0
- pythonnative/native/yoga/yoga/CMakeLists.txt +41 -0
- pythonnative/native/yoga/yoga/YGConfig.cpp +92 -0
- pythonnative/native/yoga/yoga/YGConfig.h +158 -0
- pythonnative/native/yoga/yoga/YGEnums.cpp +262 -0
- pythonnative/native/yoga/yoga/YGEnums.h +142 -0
- pythonnative/native/yoga/yoga/YGMacros.h +99 -0
- pythonnative/native/yoga/yoga/YGNode.cpp +366 -0
- pythonnative/native/yoga/yoga/YGNode.h +304 -0
- pythonnative/native/yoga/yoga/YGNodeLayout.cpp +92 -0
- pythonnative/native/yoga/yoga/YGNodeLayout.h +35 -0
- pythonnative/native/yoga/yoga/YGNodeStyle.cpp +405 -0
- pythonnative/native/yoga/yoga/YGNodeStyle.h +130 -0
- pythonnative/native/yoga/yoga/YGPixelGrid.cpp +22 -0
- pythonnative/native/yoga/yoga/YGPixelGrid.h +29 -0
- pythonnative/native/yoga/yoga/YGValue.cpp +20 -0
- pythonnative/native/yoga/yoga/YGValue.h +84 -0
- pythonnative/native/yoga/yoga/Yoga.h +21 -0
- pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +563 -0
- pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
- pythonnative/native/yoga/yoga/algorithm/Align.h +72 -0
- pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +78 -0
- pythonnative/native/yoga/yoga/algorithm/Baseline.h +21 -0
- pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +79 -0
- pythonnative/native/yoga/yoga/algorithm/Cache.cpp +121 -0
- pythonnative/native/yoga/yoga/algorithm/Cache.h +30 -0
- pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +2428 -0
- pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +38 -0
- pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +120 -0
- pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +124 -0
- pythonnative/native/yoga/yoga/algorithm/FlexLine.h +75 -0
- pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +132 -0
- pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +29 -0
- pythonnative/native/yoga/yoga/algorithm/SizingMode.h +73 -0
- pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +44 -0
- pythonnative/native/yoga/yoga/config/Config.cpp +135 -0
- pythonnative/native/yoga/yoga/config/Config.h +92 -0
- pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +53 -0
- pythonnative/native/yoga/yoga/debug/AssertFatal.h +29 -0
- pythonnative/native/yoga/yoga/debug/Log.cpp +107 -0
- pythonnative/native/yoga/yoga/debug/Log.h +34 -0
- pythonnative/native/yoga/yoga/enums/Align.h +47 -0
- pythonnative/native/yoga/yoga/enums/BoxSizing.h +40 -0
- pythonnative/native/yoga/yoga/enums/Dimension.h +40 -0
- pythonnative/native/yoga/yoga/enums/Direction.h +41 -0
- pythonnative/native/yoga/yoga/enums/Display.h +41 -0
- pythonnative/native/yoga/yoga/enums/Edge.h +47 -0
- pythonnative/native/yoga/yoga/enums/Errata.h +41 -0
- pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +39 -0
- pythonnative/native/yoga/yoga/enums/FlexDirection.h +42 -0
- pythonnative/native/yoga/yoga/enums/Gutter.h +41 -0
- pythonnative/native/yoga/yoga/enums/Justify.h +44 -0
- pythonnative/native/yoga/yoga/enums/LogLevel.h +44 -0
- pythonnative/native/yoga/yoga/enums/MeasureMode.h +41 -0
- pythonnative/native/yoga/yoga/enums/NodeType.h +40 -0
- pythonnative/native/yoga/yoga/enums/Overflow.h +41 -0
- pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +21 -0
- pythonnative/native/yoga/yoga/enums/PositionType.h +41 -0
- pythonnative/native/yoga/yoga/enums/Unit.h +42 -0
- pythonnative/native/yoga/yoga/enums/Wrap.h +41 -0
- pythonnative/native/yoga/yoga/enums/YogaEnums.h +85 -0
- pythonnative/native/yoga/yoga/event/event.cpp +87 -0
- pythonnative/native/yoga/yoga/event/event.h +130 -0
- pythonnative/native/yoga/yoga/module.modulemap +21 -0
- pythonnative/native/yoga/yoga/node/CachedMeasurement.h +53 -0
- pythonnative/native/yoga/yoga/node/LayoutResults.cpp +48 -0
- pythonnative/native/yoga/yoga/node/LayoutResults.h +122 -0
- pythonnative/native/yoga/yoga/node/LayoutableChildren.h +148 -0
- pythonnative/native/yoga/yoga/node/Node.cpp +443 -0
- pythonnative/native/yoga/yoga/node/Node.h +337 -0
- pythonnative/native/yoga/yoga/numeric/Comparison.h +81 -0
- pythonnative/native/yoga/yoga/numeric/FloatOptional.h +93 -0
- pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +133 -0
- pythonnative/native/yoga/yoga/style/Style.h +757 -0
- pythonnative/native/yoga/yoga/style/StyleLength.h +107 -0
- pythonnative/native/yoga/yoga/style/StyleValueHandle.h +98 -0
- pythonnative/native/yoga/yoga/style/StyleValuePool.h +127 -0
- pythonnative/native_modules/__init__.py +124 -0
- pythonnative/native_modules/app_state.py +99 -0
- pythonnative/native_modules/battery.py +75 -0
- pythonnative/native_modules/biometrics.py +42 -0
- pythonnative/native_modules/camera.py +65 -0
- pythonnative/native_modules/clipboard.py +46 -0
- pythonnative/native_modules/fallback.py +324 -0
- pythonnative/native_modules/file_system.py +145 -0
- pythonnative/native_modules/haptics.py +75 -0
- pythonnative/native_modules/linking.py +123 -0
- pythonnative/native_modules/location.py +75 -0
- pythonnative/native_modules/net_info.py +112 -0
- pythonnative/native_modules/notifications.py +129 -0
- pythonnative/native_modules/permissions.py +108 -0
- pythonnative/native_modules/registry.py +526 -0
- pythonnative/native_modules/secure_store.py +52 -0
- pythonnative/native_modules/share.py +51 -0
- pythonnative/native_views/__init__.py +375 -0
- pythonnative/native_views/base.py +316 -0
- pythonnative/native_views/bridge_backend.py +277 -0
- pythonnative/navigation/__init__.py +103 -0
- pythonnative/navigation/container.py +154 -0
- pythonnative/navigation/handle.py +540 -0
- pythonnative/navigation/hooks.py +133 -0
- pythonnative/navigation/host.py +58 -0
- pythonnative/navigation/linking.py +200 -0
- pythonnative/navigation/navigators.py +659 -0
- pythonnative/navigation/screen.py +149 -0
- pythonnative/navigation/state.py +269 -0
- pythonnative/net.py +248 -0
- pythonnative/platform.py +166 -0
- pythonnative/platform_metrics.py +252 -0
- pythonnative/preview.py +287 -0
- pythonnative/profiling.py +101 -0
- pythonnative/project/__init__.py +68 -0
- pythonnative/project/android.py +557 -0
- pythonnative/project/builder.py +817 -0
- pythonnative/project/config.py +773 -0
- pythonnative/project/deps.py +719 -0
- pythonnative/project/devices.py +304 -0
- pythonnative/project/doctor.py +283 -0
- pythonnative/project/fingerprint.py +171 -0
- pythonnative/project/icons.py +247 -0
- pythonnative/project/ios.py +325 -0
- pythonnative/project/lockfile.py +100 -0
- pythonnative/project/permissions.py +361 -0
- pythonnative/project/plugins.py +519 -0
- pythonnative/project/runtime_assets.py +183 -0
- pythonnative/py.typed +0 -0
- pythonnative/query.py +153 -0
- pythonnative/reconciler/__init__.py +29 -0
- pythonnative/reconciler/boundaries.py +375 -0
- pythonnative/reconciler/children.py +88 -0
- pythonnative/reconciler/core.py +1165 -0
- pythonnative/reconciler/layout_pass.py +393 -0
- pythonnative/reconciler/vnode.py +266 -0
- pythonnative/refresh.py +55 -0
- pythonnative/runtime.py +306 -0
- pythonnative/scheduler.py +159 -0
- pythonnative/sdk/__init__.py +153 -0
- pythonnative/sdk/_components.py +427 -0
- pythonnative/sdk/builtins.py +91 -0
- pythonnative/sdk/codegen.py +149 -0
- pythonnative/sdk/module_codegen.py +184 -0
- pythonnative/sdk/schema.py +224 -0
- pythonnative/sdk/templates/contracts.kt +46 -0
- pythonnative/sdk/templates/contracts.swift +46 -0
- pythonnative/storage.py +184 -0
- pythonnative/style.py +841 -0
- pythonnative/suspense.py +183 -0
- pythonnative/templates/android_template/app/build.gradle +75 -0
- pythonnative/templates/android_template/app/proguard-rules.pro +21 -0
- pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +24 -0
- pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +7 -0
- pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +32 -0
- pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +130 -0
- pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +13 -0
- pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +30 -0
- pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +10 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +6 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +22 -0
- pythonnative/templates/android_template/app/src/main/res/values/colors.xml +5 -0
- pythonnative/templates/android_template/app/src/main/res/values/strings.xml +5 -0
- pythonnative/templates/android_template/app/src/main/res/values/themes.xml +9 -0
- pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +7 -0
- pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +13 -0
- pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +19 -0
- pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +17 -0
- pythonnative/templates/android_template/build.gradle +10 -0
- pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
- pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +6 -0
- pythonnative/templates/android_template/gradle.properties +23 -0
- pythonnative/templates/android_template/gradlew +185 -0
- pythonnative/templates/android_template/gradlew.bat +89 -0
- pythonnative/templates/android_template/settings.gradle +17 -0
- pythonnative/templates/ios_template/ios_template/AppDelegate.swift +51 -0
- pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +13 -0
- pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +6 -0
- pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +25 -0
- pythonnative/templates/ios_template/ios_template/BridgingHeader.h +14 -0
- pythonnative/templates/ios_template/ios_template/Info.plist +28 -0
- pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +390 -0
- pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +61 -0
- pythonnative/templates/ios_template/ios_template/ViewController.swift +23 -0
- pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +745 -0
- pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +36 -0
- pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +41 -0
- pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +32 -0
- pythonnative/testing/__init__.py +53 -0
- pythonnative/testing/backend.py +276 -0
- pythonnative/testing/harness.py +369 -0
- pythonnative/utils.py +145 -0
- pythonnative-0.40.0.dist-info/DELVEWHEEL +2 -0
- pythonnative-0.40.0.dist-info/METADATA +150 -0
- pythonnative-0.40.0.dist-info/RECORD +418 -0
- pythonnative-0.40.0.dist-info/WHEEL +5 -0
- pythonnative-0.40.0.dist-info/entry_points.txt +2 -0
- pythonnative-0.40.0.dist-info/licenses/LICENSE +21 -0
- pythonnative-0.40.0.dist-info/top_level.txt +1 -0
- pythonnative.libs/msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <yoga/Yoga.h>
|
|
11
|
+
#include <yoga/algorithm/FlexDirection.h>
|
|
12
|
+
#include <yoga/event/event.h>
|
|
13
|
+
#include <yoga/node/Node.h>
|
|
14
|
+
|
|
15
|
+
namespace facebook::yoga {
|
|
16
|
+
|
|
17
|
+
void calculateLayout(
|
|
18
|
+
yoga::Node* node,
|
|
19
|
+
float ownerWidth,
|
|
20
|
+
float ownerHeight,
|
|
21
|
+
Direction ownerDirection);
|
|
22
|
+
|
|
23
|
+
bool calculateLayoutInternal(
|
|
24
|
+
yoga::Node* node,
|
|
25
|
+
float availableWidth,
|
|
26
|
+
float availableHeight,
|
|
27
|
+
Direction ownerDirection,
|
|
28
|
+
SizingMode widthSizingMode,
|
|
29
|
+
SizingMode heightSizingMode,
|
|
30
|
+
float ownerWidth,
|
|
31
|
+
float ownerHeight,
|
|
32
|
+
bool performLayout,
|
|
33
|
+
LayoutPassReason reason,
|
|
34
|
+
LayoutData& layoutMarkerData,
|
|
35
|
+
uint32_t depth,
|
|
36
|
+
uint32_t generationCount);
|
|
37
|
+
|
|
38
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <yoga/Yoga.h>
|
|
11
|
+
|
|
12
|
+
#include <yoga/debug/AssertFatal.h>
|
|
13
|
+
#include <yoga/enums/Dimension.h>
|
|
14
|
+
#include <yoga/enums/Direction.h>
|
|
15
|
+
#include <yoga/enums/Edge.h>
|
|
16
|
+
#include <yoga/enums/FlexDirection.h>
|
|
17
|
+
#include <yoga/enums/PhysicalEdge.h>
|
|
18
|
+
|
|
19
|
+
namespace facebook::yoga {
|
|
20
|
+
|
|
21
|
+
inline bool isRow(const FlexDirection flexDirection) {
|
|
22
|
+
return flexDirection == FlexDirection::Row ||
|
|
23
|
+
flexDirection == FlexDirection::RowReverse;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
inline bool isColumn(const FlexDirection flexDirection) {
|
|
27
|
+
return flexDirection == FlexDirection::Column ||
|
|
28
|
+
flexDirection == FlexDirection::ColumnReverse;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
inline FlexDirection resolveDirection(
|
|
32
|
+
const FlexDirection flexDirection,
|
|
33
|
+
const Direction direction) {
|
|
34
|
+
if (direction == Direction::RTL) {
|
|
35
|
+
if (flexDirection == FlexDirection::Row) {
|
|
36
|
+
return FlexDirection::RowReverse;
|
|
37
|
+
} else if (flexDirection == FlexDirection::RowReverse) {
|
|
38
|
+
return FlexDirection::Row;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return flexDirection;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
inline FlexDirection resolveCrossDirection(
|
|
46
|
+
const FlexDirection flexDirection,
|
|
47
|
+
const Direction direction) {
|
|
48
|
+
return isColumn(flexDirection)
|
|
49
|
+
? resolveDirection(FlexDirection::Row, direction)
|
|
50
|
+
: FlexDirection::Column;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
inline PhysicalEdge flexStartEdge(FlexDirection flexDirection) {
|
|
54
|
+
switch (flexDirection) {
|
|
55
|
+
case FlexDirection::Column:
|
|
56
|
+
return PhysicalEdge::Top;
|
|
57
|
+
case FlexDirection::ColumnReverse:
|
|
58
|
+
return PhysicalEdge::Bottom;
|
|
59
|
+
case FlexDirection::Row:
|
|
60
|
+
return PhysicalEdge::Left;
|
|
61
|
+
case FlexDirection::RowReverse:
|
|
62
|
+
return PhysicalEdge::Right;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
fatalWithMessage("Invalid FlexDirection");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
inline PhysicalEdge flexEndEdge(FlexDirection flexDirection) {
|
|
69
|
+
switch (flexDirection) {
|
|
70
|
+
case FlexDirection::Column:
|
|
71
|
+
return PhysicalEdge::Bottom;
|
|
72
|
+
case FlexDirection::ColumnReverse:
|
|
73
|
+
return PhysicalEdge::Top;
|
|
74
|
+
case FlexDirection::Row:
|
|
75
|
+
return PhysicalEdge::Right;
|
|
76
|
+
case FlexDirection::RowReverse:
|
|
77
|
+
return PhysicalEdge::Left;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
fatalWithMessage("Invalid FlexDirection");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
inline PhysicalEdge inlineStartEdge(
|
|
84
|
+
FlexDirection flexDirection,
|
|
85
|
+
Direction direction) {
|
|
86
|
+
if (isRow(flexDirection)) {
|
|
87
|
+
return direction == Direction::RTL ? PhysicalEdge::Right
|
|
88
|
+
: PhysicalEdge::Left;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return PhysicalEdge::Top;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
inline PhysicalEdge inlineEndEdge(
|
|
95
|
+
FlexDirection flexDirection,
|
|
96
|
+
Direction direction) {
|
|
97
|
+
if (isRow(flexDirection)) {
|
|
98
|
+
return direction == Direction::RTL ? PhysicalEdge::Left
|
|
99
|
+
: PhysicalEdge::Right;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return PhysicalEdge::Bottom;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
inline Dimension dimension(FlexDirection flexDirection) {
|
|
106
|
+
switch (flexDirection) {
|
|
107
|
+
case FlexDirection::Column:
|
|
108
|
+
return Dimension::Height;
|
|
109
|
+
case FlexDirection::ColumnReverse:
|
|
110
|
+
return Dimension::Height;
|
|
111
|
+
case FlexDirection::Row:
|
|
112
|
+
return Dimension::Width;
|
|
113
|
+
case FlexDirection::RowReverse:
|
|
114
|
+
return Dimension::Width;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
fatalWithMessage("Invalid FlexDirection");
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include <yoga/Yoga.h>
|
|
9
|
+
|
|
10
|
+
#include <yoga/algorithm/BoundAxis.h>
|
|
11
|
+
#include <yoga/algorithm/FlexDirection.h>
|
|
12
|
+
#include <yoga/algorithm/FlexLine.h>
|
|
13
|
+
|
|
14
|
+
namespace facebook::yoga {
|
|
15
|
+
|
|
16
|
+
FlexLine calculateFlexLine(
|
|
17
|
+
yoga::Node* const node,
|
|
18
|
+
const Direction ownerDirection,
|
|
19
|
+
const float ownerWidth,
|
|
20
|
+
const float mainAxisownerSize,
|
|
21
|
+
const float availableInnerWidth,
|
|
22
|
+
const float availableInnerMainDim,
|
|
23
|
+
Node::LayoutableChildren::Iterator& iterator,
|
|
24
|
+
const size_t lineCount) {
|
|
25
|
+
std::vector<yoga::Node*> itemsInFlow;
|
|
26
|
+
itemsInFlow.reserve(node->getChildCount());
|
|
27
|
+
|
|
28
|
+
float sizeConsumed = 0.0f;
|
|
29
|
+
float totalFlexGrowFactors = 0.0f;
|
|
30
|
+
float totalFlexShrinkScaledFactors = 0.0f;
|
|
31
|
+
size_t numberOfAutoMargins = 0;
|
|
32
|
+
yoga::Node* firstElementInLine = nullptr;
|
|
33
|
+
|
|
34
|
+
float sizeConsumedIncludingMinConstraint = 0;
|
|
35
|
+
const Direction direction = node->resolveDirection(ownerDirection);
|
|
36
|
+
const FlexDirection mainAxis =
|
|
37
|
+
resolveDirection(node->style().flexDirection(), direction);
|
|
38
|
+
const bool isNodeFlexWrap = node->style().flexWrap() != Wrap::NoWrap;
|
|
39
|
+
const float gap =
|
|
40
|
+
node->style().computeGapForAxis(mainAxis, availableInnerMainDim);
|
|
41
|
+
|
|
42
|
+
const auto childrenEnd = node->getLayoutChildren().end();
|
|
43
|
+
// Add items to the current line until it's full or we run out of items.
|
|
44
|
+
for (; iterator != childrenEnd; iterator++) {
|
|
45
|
+
auto child = *iterator;
|
|
46
|
+
if (child->style().display() == Display::None ||
|
|
47
|
+
child->style().positionType() == PositionType::Absolute) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (firstElementInLine == nullptr) {
|
|
52
|
+
firstElementInLine = child;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (child->style().flexStartMarginIsAuto(mainAxis, ownerDirection)) {
|
|
56
|
+
numberOfAutoMargins++;
|
|
57
|
+
}
|
|
58
|
+
if (child->style().flexEndMarginIsAuto(mainAxis, ownerDirection)) {
|
|
59
|
+
numberOfAutoMargins++;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
child->setLineIndex(lineCount);
|
|
63
|
+
const float childMarginMainAxis =
|
|
64
|
+
child->style().computeMarginForAxis(mainAxis, availableInnerWidth);
|
|
65
|
+
const float childLeadingGapMainAxis =
|
|
66
|
+
child == firstElementInLine ? 0.0f : gap;
|
|
67
|
+
const float flexBasisWithMinAndMaxConstraints =
|
|
68
|
+
boundAxisWithinMinAndMax(
|
|
69
|
+
child,
|
|
70
|
+
direction,
|
|
71
|
+
mainAxis,
|
|
72
|
+
child->getLayout().computedFlexBasis,
|
|
73
|
+
mainAxisownerSize,
|
|
74
|
+
ownerWidth)
|
|
75
|
+
.unwrap();
|
|
76
|
+
|
|
77
|
+
// If this is a multi-line flow and this item pushes us over the available
|
|
78
|
+
// size, we've hit the end of the current line. Break out of the loop and
|
|
79
|
+
// lay out the current line.
|
|
80
|
+
if (sizeConsumedIncludingMinConstraint + flexBasisWithMinAndMaxConstraints +
|
|
81
|
+
childMarginMainAxis + childLeadingGapMainAxis >
|
|
82
|
+
availableInnerMainDim &&
|
|
83
|
+
isNodeFlexWrap && !itemsInFlow.empty()) {
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
sizeConsumedIncludingMinConstraint += flexBasisWithMinAndMaxConstraints +
|
|
88
|
+
childMarginMainAxis + childLeadingGapMainAxis;
|
|
89
|
+
sizeConsumed += flexBasisWithMinAndMaxConstraints + childMarginMainAxis +
|
|
90
|
+
childLeadingGapMainAxis;
|
|
91
|
+
|
|
92
|
+
if (child->isNodeFlexible()) {
|
|
93
|
+
totalFlexGrowFactors += child->resolveFlexGrow();
|
|
94
|
+
|
|
95
|
+
// Unlike the grow factor, the shrink factor is scaled relative to the
|
|
96
|
+
// child dimension.
|
|
97
|
+
totalFlexShrinkScaledFactors += -child->resolveFlexShrink() *
|
|
98
|
+
child->getLayout().computedFlexBasis.unwrap();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
itemsInFlow.push_back(child);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// The total flex factor needs to be floored to 1.
|
|
105
|
+
if (totalFlexGrowFactors > 0 && totalFlexGrowFactors < 1) {
|
|
106
|
+
totalFlexGrowFactors = 1;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// The total flex shrink factor needs to be floored to 1.
|
|
110
|
+
if (totalFlexShrinkScaledFactors > 0 && totalFlexShrinkScaledFactors < 1) {
|
|
111
|
+
totalFlexShrinkScaledFactors = 1;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return FlexLine{
|
|
115
|
+
.itemsInFlow = std::move(itemsInFlow),
|
|
116
|
+
.sizeConsumed = sizeConsumed,
|
|
117
|
+
.numberOfAutoMargins = numberOfAutoMargins,
|
|
118
|
+
.layout = FlexLineRunningLayout{
|
|
119
|
+
totalFlexGrowFactors,
|
|
120
|
+
totalFlexShrinkScaledFactors,
|
|
121
|
+
}};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
#include <yoga/Yoga.h>
|
|
13
|
+
#include <yoga/node/Node.h>
|
|
14
|
+
|
|
15
|
+
namespace facebook::yoga {
|
|
16
|
+
|
|
17
|
+
struct FlexLineRunningLayout {
|
|
18
|
+
// Total flex grow factors of flex items which are to be laid in the current
|
|
19
|
+
// line. This is decremented as free space is distributed.
|
|
20
|
+
float totalFlexGrowFactors{0.0f};
|
|
21
|
+
|
|
22
|
+
// Total flex shrink factors of flex items which are to be laid in the current
|
|
23
|
+
// line. This is decremented as free space is distributed.
|
|
24
|
+
float totalFlexShrinkScaledFactors{0.0f};
|
|
25
|
+
|
|
26
|
+
// The amount of available space within inner dimensions of the line which may
|
|
27
|
+
// still be distributed.
|
|
28
|
+
float remainingFreeSpace{0.0f};
|
|
29
|
+
|
|
30
|
+
// The size of the mainDim for the row after considering size, padding, margin
|
|
31
|
+
// and border of flex items. This is used to calculate maxLineDim after going
|
|
32
|
+
// through all the rows to decide on the main axis size of owner.
|
|
33
|
+
float mainDim{0.0f};
|
|
34
|
+
|
|
35
|
+
// The size of the crossDim for the row after considering size, padding,
|
|
36
|
+
// margin and border of flex items. Used for calculating containers crossSize.
|
|
37
|
+
float crossDim{0.0f};
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
struct FlexLine {
|
|
41
|
+
// List of children which are part of the line flow. This means they are not
|
|
42
|
+
// positioned absolutely, or with `display: "none"`, and do not overflow the
|
|
43
|
+
// available dimensions.
|
|
44
|
+
const std::vector<yoga::Node*> itemsInFlow{};
|
|
45
|
+
|
|
46
|
+
// Accumulation of the dimensions and margin of all the children on the
|
|
47
|
+
// current line. This will be used in order to either set the dimensions of
|
|
48
|
+
// the node if none already exist or to compute the remaining space left for
|
|
49
|
+
// the flexible children.
|
|
50
|
+
const float sizeConsumed{0.0f};
|
|
51
|
+
|
|
52
|
+
// Number of edges along the line flow with an auto margin.
|
|
53
|
+
const size_t numberOfAutoMargins{0};
|
|
54
|
+
|
|
55
|
+
// Layout information about the line computed in steps after line-breaking
|
|
56
|
+
FlexLineRunningLayout layout{};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// Calculates where a line starting at a given index should break, returning
|
|
60
|
+
// information about the collective children on the liune.
|
|
61
|
+
//
|
|
62
|
+
// This function assumes that all the children of node have their
|
|
63
|
+
// computedFlexBasis properly computed(To do this use
|
|
64
|
+
// computeFlexBasisForChildren function).
|
|
65
|
+
FlexLine calculateFlexLine(
|
|
66
|
+
yoga::Node* node,
|
|
67
|
+
Direction ownerDirection,
|
|
68
|
+
float ownerWidth,
|
|
69
|
+
float mainAxisownerSize,
|
|
70
|
+
float availableInnerWidth,
|
|
71
|
+
float availableInnerMainDim,
|
|
72
|
+
Node::LayoutableChildren::Iterator& iterator,
|
|
73
|
+
size_t lineCount);
|
|
74
|
+
|
|
75
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include <yoga/Yoga.h>
|
|
9
|
+
|
|
10
|
+
#include <yoga/algorithm/PixelGrid.h>
|
|
11
|
+
#include <yoga/numeric/Comparison.h>
|
|
12
|
+
|
|
13
|
+
namespace facebook::yoga {
|
|
14
|
+
|
|
15
|
+
float roundValueToPixelGrid(
|
|
16
|
+
const double value,
|
|
17
|
+
const double pointScaleFactor,
|
|
18
|
+
const bool forceCeil,
|
|
19
|
+
const bool forceFloor) {
|
|
20
|
+
double scaledValue = value * pointScaleFactor;
|
|
21
|
+
// We want to calculate `fractial` such that `floor(scaledValue) = scaledValue
|
|
22
|
+
// - fractial`.
|
|
23
|
+
double fractial = fmod(scaledValue, 1.0);
|
|
24
|
+
if (fractial < 0) {
|
|
25
|
+
// This branch is for handling negative numbers for `value`.
|
|
26
|
+
//
|
|
27
|
+
// Regarding `floor` and `ceil`. Note that for a number x, `floor(x) <= x <=
|
|
28
|
+
// ceil(x)` even for negative numbers. Here are a couple of examples:
|
|
29
|
+
// - x = 2.2: floor( 2.2) = 2, ceil( 2.2) = 3
|
|
30
|
+
// - x = -2.2: floor(-2.2) = -3, ceil(-2.2) = -2
|
|
31
|
+
//
|
|
32
|
+
// Regarding `fmodf`. For fractional negative numbers, `fmodf` returns a
|
|
33
|
+
// negative number. For example, `fmodf(-2.2) = -0.2`. However, we want
|
|
34
|
+
// `fractial` to be the number such that subtracting it from `value` will
|
|
35
|
+
// give us `floor(value)`. In the case of negative numbers, adding 1 to
|
|
36
|
+
// `fmodf(value)` gives us this. Let's continue the example from above:
|
|
37
|
+
// - fractial = fmodf(-2.2) = -0.2
|
|
38
|
+
// - Add 1 to the fraction: fractial2 = fractial + 1 = -0.2 + 1 = 0.8
|
|
39
|
+
// - Finding the `floor`: -2.2 - fractial2 = -2.2 - 0.8 = -3
|
|
40
|
+
++fractial;
|
|
41
|
+
}
|
|
42
|
+
if (yoga::inexactEquals(fractial, 0)) {
|
|
43
|
+
// First we check if the value is already rounded
|
|
44
|
+
scaledValue = scaledValue - fractial;
|
|
45
|
+
} else if (yoga::inexactEquals(fractial, 1.0)) {
|
|
46
|
+
scaledValue = scaledValue - fractial + 1.0;
|
|
47
|
+
} else if (forceCeil) {
|
|
48
|
+
// Next we check if we need to use forced rounding
|
|
49
|
+
scaledValue = scaledValue - fractial + 1.0;
|
|
50
|
+
} else if (forceFloor) {
|
|
51
|
+
scaledValue = scaledValue - fractial;
|
|
52
|
+
} else {
|
|
53
|
+
// Finally we just round the value
|
|
54
|
+
scaledValue = scaledValue - fractial +
|
|
55
|
+
(!std::isnan(fractial) &&
|
|
56
|
+
(fractial > 0.5 || yoga::inexactEquals(fractial, 0.5))
|
|
57
|
+
? 1.0
|
|
58
|
+
: 0.0);
|
|
59
|
+
}
|
|
60
|
+
return (std::isnan(scaledValue) || std::isnan(pointScaleFactor))
|
|
61
|
+
? YGUndefined
|
|
62
|
+
: (float)(scaledValue / pointScaleFactor);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void roundLayoutResultsToPixelGrid(
|
|
66
|
+
yoga::Node* const node,
|
|
67
|
+
const double absoluteLeft,
|
|
68
|
+
const double absoluteTop) {
|
|
69
|
+
const auto pointScaleFactor = node->getConfig()->getPointScaleFactor();
|
|
70
|
+
|
|
71
|
+
const double nodeLeft = node->getLayout().position(PhysicalEdge::Left);
|
|
72
|
+
const double nodeTop = node->getLayout().position(PhysicalEdge::Top);
|
|
73
|
+
|
|
74
|
+
const double nodeWidth = node->getLayout().dimension(Dimension::Width);
|
|
75
|
+
const double nodeHeight = node->getLayout().dimension(Dimension::Height);
|
|
76
|
+
|
|
77
|
+
const double absoluteNodeLeft = absoluteLeft + nodeLeft;
|
|
78
|
+
const double absoluteNodeTop = absoluteTop + nodeTop;
|
|
79
|
+
|
|
80
|
+
const double absoluteNodeRight = absoluteNodeLeft + nodeWidth;
|
|
81
|
+
const double absoluteNodeBottom = absoluteNodeTop + nodeHeight;
|
|
82
|
+
|
|
83
|
+
if (pointScaleFactor != 0.0f) {
|
|
84
|
+
// If a node has a custom measure function we never want to round down its
|
|
85
|
+
// size as this could lead to unwanted text truncation.
|
|
86
|
+
const bool textRounding = node->getNodeType() == NodeType::Text;
|
|
87
|
+
|
|
88
|
+
node->setLayoutPosition(
|
|
89
|
+
roundValueToPixelGrid(nodeLeft, pointScaleFactor, false, textRounding),
|
|
90
|
+
PhysicalEdge::Left);
|
|
91
|
+
|
|
92
|
+
node->setLayoutPosition(
|
|
93
|
+
roundValueToPixelGrid(nodeTop, pointScaleFactor, false, textRounding),
|
|
94
|
+
PhysicalEdge::Top);
|
|
95
|
+
|
|
96
|
+
// We multiply dimension by scale factor and if the result is close to the
|
|
97
|
+
// whole number, we don't have any fraction To verify if the result is close
|
|
98
|
+
// to whole number we want to check both floor and ceil numbers
|
|
99
|
+
const bool hasFractionalWidth =
|
|
100
|
+
!yoga::inexactEquals(fmod(nodeWidth * pointScaleFactor, 1.0), 0) &&
|
|
101
|
+
!yoga::inexactEquals(fmod(nodeWidth * pointScaleFactor, 1.0), 1.0);
|
|
102
|
+
const bool hasFractionalHeight =
|
|
103
|
+
!yoga::inexactEquals(fmod(nodeHeight * pointScaleFactor, 1.0), 0) &&
|
|
104
|
+
!yoga::inexactEquals(fmod(nodeHeight * pointScaleFactor, 1.0), 1.0);
|
|
105
|
+
|
|
106
|
+
node->setLayoutDimension(
|
|
107
|
+
roundValueToPixelGrid(
|
|
108
|
+
absoluteNodeRight,
|
|
109
|
+
pointScaleFactor,
|
|
110
|
+
(textRounding && hasFractionalWidth),
|
|
111
|
+
(textRounding && !hasFractionalWidth)) -
|
|
112
|
+
roundValueToPixelGrid(
|
|
113
|
+
absoluteNodeLeft, pointScaleFactor, false, textRounding),
|
|
114
|
+
Dimension::Width);
|
|
115
|
+
|
|
116
|
+
node->setLayoutDimension(
|
|
117
|
+
roundValueToPixelGrid(
|
|
118
|
+
absoluteNodeBottom,
|
|
119
|
+
pointScaleFactor,
|
|
120
|
+
(textRounding && hasFractionalHeight),
|
|
121
|
+
(textRounding && !hasFractionalHeight)) -
|
|
122
|
+
roundValueToPixelGrid(
|
|
123
|
+
absoluteNodeTop, pointScaleFactor, false, textRounding),
|
|
124
|
+
Dimension::Height);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
for (yoga::Node* child : node->getChildren()) {
|
|
128
|
+
roundLayoutResultsToPixelGrid(child, absoluteNodeLeft, absoluteNodeTop);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <yoga/Yoga.h>
|
|
11
|
+
#include <yoga/node/Node.h>
|
|
12
|
+
|
|
13
|
+
namespace facebook::yoga {
|
|
14
|
+
|
|
15
|
+
// Round a point value to the nearest physical pixel based on DPI
|
|
16
|
+
// (pointScaleFactor)
|
|
17
|
+
float roundValueToPixelGrid(
|
|
18
|
+
double value,
|
|
19
|
+
double pointScaleFactor,
|
|
20
|
+
bool forceCeil,
|
|
21
|
+
bool forceFloor);
|
|
22
|
+
|
|
23
|
+
// Round the layout results of a node and its subtree to the pixel grid.
|
|
24
|
+
void roundLayoutResultsToPixelGrid(
|
|
25
|
+
yoga::Node* node,
|
|
26
|
+
double absoluteLeft,
|
|
27
|
+
double absoluteTop);
|
|
28
|
+
|
|
29
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <yoga/debug/AssertFatal.h>
|
|
11
|
+
#include <yoga/enums/MeasureMode.h>
|
|
12
|
+
|
|
13
|
+
namespace facebook::yoga {
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Corresponds to a CSS auto box sizes. Missing "min-content", as Yoga does not
|
|
17
|
+
* current support automatic minimum sizes.
|
|
18
|
+
* https://www.w3.org/TR/css-sizing-3/#auto-box-sizes
|
|
19
|
+
* https://www.w3.org/TR/css-flexbox-1/#min-size-auto
|
|
20
|
+
*/
|
|
21
|
+
enum class SizingMode {
|
|
22
|
+
/**
|
|
23
|
+
* The size a box would take if its outer size filled the available space in
|
|
24
|
+
* the given axis; in other words, the stretch fit into the available space,
|
|
25
|
+
* if that is definite. Undefined if the available space is indefinite.
|
|
26
|
+
*/
|
|
27
|
+
StretchFit,
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* A box’s “ideal” size in a given axis when given infinite available space.
|
|
31
|
+
* Usually this is the smallest size the box could take in that axis while
|
|
32
|
+
* still fitting around its contents, i.e. minimizing unfilled space while
|
|
33
|
+
* avoiding overflow.
|
|
34
|
+
*/
|
|
35
|
+
MaxContent,
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* If the available space in a given axis is definite, equal to
|
|
39
|
+
* clamp(min-content size, stretch-fit size, max-content size) (i.e.
|
|
40
|
+
* max(min-content size, min(max-content size, stretch-fit size))). When
|
|
41
|
+
* sizing under a min-content constraint, equal to the min-content size.
|
|
42
|
+
* Otherwise, equal to the max-content size in that axis.
|
|
43
|
+
*/
|
|
44
|
+
FitContent,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
inline MeasureMode measureMode(SizingMode mode) {
|
|
48
|
+
switch (mode) {
|
|
49
|
+
case SizingMode::StretchFit:
|
|
50
|
+
return MeasureMode::Exactly;
|
|
51
|
+
case SizingMode::MaxContent:
|
|
52
|
+
return MeasureMode::Undefined;
|
|
53
|
+
case SizingMode::FitContent:
|
|
54
|
+
return MeasureMode::AtMost;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
fatalWithMessage("Invalid SizingMode");
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
inline SizingMode sizingMode(MeasureMode mode) {
|
|
61
|
+
switch (mode) {
|
|
62
|
+
case MeasureMode::Exactly:
|
|
63
|
+
return SizingMode::StretchFit;
|
|
64
|
+
case MeasureMode::Undefined:
|
|
65
|
+
return SizingMode::MaxContent;
|
|
66
|
+
case MeasureMode::AtMost:
|
|
67
|
+
return SizingMode::FitContent;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
fatalWithMessage("Invalid MeasureMode");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
} // namespace facebook::yoga
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <yoga/Yoga.h>
|
|
11
|
+
#include <yoga/algorithm/FlexDirection.h>
|
|
12
|
+
#include <yoga/event/event.h>
|
|
13
|
+
#include <yoga/node/Node.h>
|
|
14
|
+
|
|
15
|
+
namespace facebook::yoga {
|
|
16
|
+
|
|
17
|
+
// Given an offset to an edge, returns the offset to the opposite edge on the
|
|
18
|
+
// same axis. This assumes that the width/height of both nodes is determined at
|
|
19
|
+
// this point.
|
|
20
|
+
inline float getPositionOfOppositeEdge(
|
|
21
|
+
float position,
|
|
22
|
+
FlexDirection axis,
|
|
23
|
+
const yoga::Node* const containingNode,
|
|
24
|
+
const yoga::Node* const node) {
|
|
25
|
+
return containingNode->getLayout().measuredDimension(dimension(axis)) -
|
|
26
|
+
node->getLayout().measuredDimension(dimension(axis)) - position;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
inline void setChildTrailingPosition(
|
|
30
|
+
const yoga::Node* const node,
|
|
31
|
+
yoga::Node* const child,
|
|
32
|
+
const FlexDirection axis) {
|
|
33
|
+
child->setLayoutPosition(
|
|
34
|
+
getPositionOfOppositeEdge(
|
|
35
|
+
child->getLayout().position(flexStartEdge(axis)), axis, node, child),
|
|
36
|
+
flexEndEdge(axis));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
inline bool needsTrailingPosition(const FlexDirection axis) {
|
|
40
|
+
return axis == FlexDirection::RowReverse ||
|
|
41
|
+
axis == FlexDirection::ColumnReverse;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
} // namespace facebook::yoga
|