react-native-windows 0.84.0-preview.9 → 0.85.0-preview.1
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/.flowconfig +1 -5
- package/Common/unicode.cpp +36 -0
- package/Common/unicode.h +8 -0
- package/Directory.Build.props +1 -16
- package/Directory.Build.targets +12 -4
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +3 -3
- package/Libraries/Animated/Animated.d.ts +8 -1
- package/Libraries/Animated/AnimatedEvent.js +4 -4
- package/Libraries/Animated/AnimatedImplementation.js +2 -2
- package/Libraries/Animated/animations/Animation.js +3 -3
- package/Libraries/Animated/animations/DecayAnimation.js +4 -4
- package/Libraries/Animated/animations/SpringAnimation.js +5 -5
- package/Libraries/Animated/animations/TimingAnimation.js +5 -5
- package/Libraries/Animated/createAnimatedComponent.js +7 -7
- package/Libraries/Animated/nodes/AnimatedColor.js +2 -2
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +12 -12
- package/Libraries/Animated/nodes/AnimatedNode.js +3 -3
- package/Libraries/Animated/nodes/AnimatedObject.js +3 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +6 -6
- package/Libraries/Animated/nodes/AnimatedStyle.js +7 -7
- package/Libraries/Animated/nodes/AnimatedTransform.js +13 -13
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/Animated/nodes/AnimatedValueXY.js +1 -1
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
- package/Libraries/Animated/useAnimatedColor.d.ts +15 -0
- package/Libraries/Animated/useAnimatedColor.js +25 -0
- package/Libraries/Animated/useAnimatedValueXY.d.ts +15 -0
- package/Libraries/Animated/useAnimatedValueXY.js +26 -0
- package/Libraries/AppState/AppState.js +1 -1
- package/Libraries/BatchedBridge/MessageQueue.js +3 -3
- package/Libraries/BatchedBridge/NativeModules.js +12 -10
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +30 -26
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +34 -30
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +2 -2
- package/Libraries/Components/Button.js +2 -2
- package/Libraries/Components/Button.windows.js +2 -2
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes.js +2 -2
- package/Libraries/Components/Keyboard/Keyboard.js +6 -6
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -1
- package/Libraries/Components/LayoutConformance/LayoutConformance.js +1 -1
- package/Libraries/Components/LayoutConformance/LayoutConformanceNativeComponent.js +1 -1
- package/Libraries/Components/Pressable/Pressable.d.ts +5 -0
- package/Libraries/Components/Pressable/Pressable.js +3 -3
- package/Libraries/Components/Pressable/Pressable.windows.js +3 -3
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +4 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +3 -3
- package/Libraries/Components/RefreshControl/RefreshControl.js +5 -5
- package/Libraries/Components/RefreshControl/RefreshControl.windows.js +5 -5
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +8 -12
- package/Libraries/Components/ScrollView/ScrollView.d.ts +9 -0
- package/Libraries/Components/ScrollView/ScrollView.js +19 -9
- package/Libraries/Components/ScrollView/ScrollView.windows.js +19 -9
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +8 -18
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +8 -18
- package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +4 -3
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
- package/Libraries/Components/StaticRenderer.js +1 -1
- package/Libraries/Components/StatusBar/StatusBar.js +8 -8
- package/Libraries/Components/Switch/Switch.js +3 -3
- package/Libraries/Components/Switch/Switch.windows.js +3 -3
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +33 -48
- package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +6 -11
- package/Libraries/Components/TextInput/TextInput.flow.js +21 -20
- package/Libraries/Components/TextInput/TextInput.flow.windows.js +23 -22
- package/Libraries/Components/TextInput/TextInput.js +8 -4
- package/Libraries/Components/TextInput/TextInput.windows.js +3 -4
- package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +33 -48
- package/Libraries/Components/Touchable/PooledClass.js +1 -1
- package/Libraries/Components/Touchable/Touchable.js +2 -2
- package/Libraries/Components/Touchable/Touchable.windows.js +2 -2
- package/Libraries/Components/Touchable/TouchableBounce.js +4 -4
- package/Libraries/Components/Touchable/TouchableBounce.windows.js +4 -4
- package/Libraries/Components/Touchable/TouchableHighlight.js +8 -8
- package/Libraries/Components/Touchable/TouchableHighlight.windows.js +9 -9
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +7 -7
- package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +7 -7
- package/Libraries/Components/Touchable/TouchableOpacity.js +4 -4
- package/Libraries/Components/Touchable/TouchableOpacity.windows.js +4 -4
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +1 -1
- package/Libraries/Components/UnimplementedViews/UnimplementedView.js +1 -1
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +68 -31
- package/Libraries/Components/View/View.windows.js +1 -1
- package/Libraries/Components/View/ViewAccessibility.js +7 -7
- package/Libraries/Components/View/ViewAccessibility.windows.js +7 -7
- package/Libraries/Components/View/ViewPropTypes.js +14 -14
- package/Libraries/Components/View/ViewPropTypes.windows.js +18 -16
- package/Libraries/Core/Devtools/parseHermesStack.js +8 -8
- package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -2
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/ExtendedError.js +3 -3
- package/Libraries/Core/RawEventEmitter.js +1 -1
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/Core/Timers/JSTimers.js +3 -2
- package/Libraries/Core/setUpDeveloperTools.js +1 -1
- package/Libraries/Core/setUpErrorHandling.js +4 -2
- package/Libraries/Core/setUpReactDevTools.js +23 -6
- package/Libraries/Core/setUpSegmentFetcher.js +1 -1
- package/Libraries/Debugging/DebuggingOverlay.js +2 -2
- package/Libraries/EventEmitter/NativeEventEmitter.js +7 -9
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +1 -1
- package/Libraries/Image/AssetSourceResolver.js +1 -1
- package/Libraries/Image/AssetSourceResolver.windows.js +1 -1
- package/Libraries/Image/Image.android.js +172 -306
- package/Libraries/Image/ImageProps.js +9 -11
- package/Libraries/Image/ImageSource.js +2 -2
- package/Libraries/Image/ImageSourceUtils.js +8 -4
- package/Libraries/Image/ImageTypes.flow.js +2 -2
- package/Libraries/Image/ImageViewNativeComponent.js +7 -16
- package/Libraries/Image/nativeImageSource.js +1 -1
- package/Libraries/Interaction/InteractionManager.js +5 -4
- package/Libraries/Interaction/PanResponder.js +1 -1
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
- package/Libraries/Linking/Linking.js +1 -1
- package/Libraries/Lists/FlatList.js +3 -3
- package/Libraries/Lists/SectionList.js +1 -1
- package/Libraries/Lists/SectionListModern.js +2 -2
- package/Libraries/LogBox/Data/LogBoxData.js +38 -24
- package/Libraries/LogBox/Data/LogBoxLog.js +43 -112
- package/Libraries/LogBox/Data/parseLogBoxLog.js +21 -117
- package/Libraries/LogBox/LogBox.js +42 -19
- package/Libraries/LogBox/LogBoxInspectorContainer.js +2 -2
- package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
- package/Libraries/LogBox/UI/LogBoxButton.js +14 -16
- package/Libraries/LogBox/UI/LogBoxInspector.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -9
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +6 -9
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +10 -15
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +25 -18
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +15 -16
- package/Libraries/LogBox/UI/LogBoxInspectorSection.js +5 -7
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +8 -10
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +8 -6
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js +3 -5
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +17 -29
- package/Libraries/LogBox/UI/LogBoxMessage.js +28 -37
- package/Libraries/LogBox/UI/LogBoxNotification.js +1 -1
- package/Libraries/Modal/Modal.d.ts +4 -0
- package/Libraries/Modal/Modal.js +3 -3
- package/Libraries/Modal/Modal.windows.js +7 -3
- package/Libraries/NativeComponent/BaseViewConfig.android.js +28 -52
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +19 -21
- package/Libraries/NativeComponent/BaseViewConfig.windows.js +26 -17
- package/Libraries/Network/RCTNetworking.android.js +1 -1
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.js.flow +1 -1
- package/Libraries/Network/RCTNetworking.windows.js +1 -1
- package/Libraries/Network/RCTNetworkingEventDefinitions.flow.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
- package/Libraries/Pressability/Pressability.js +5 -5
- package/Libraries/Pressability/Pressability.windows.js +5 -5
- package/Libraries/Pressability/PressabilityDebug.js +1 -1
- package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +1 -1
- package/Libraries/Pressability/usePressability.js +3 -14
- package/Libraries/PushNotificationIOS/PushNotificationIOS.js +2 -2
- package/Libraries/ReactNative/AppContainer-dev.js +18 -1
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/AppRegistry.flow.js +2 -2
- package/Libraries/ReactNative/AppRegistryImpl.js +2 -2
- package/Libraries/ReactNative/FabricUIManager.js +1 -1
- package/Libraries/ReactNative/RendererImplementation.js +4 -4
- package/Libraries/ReactNative/UIManagerProperties.js +1 -1
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +3 -2
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -2
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -2
- package/Libraries/Renderer/shims/ReactFabric.js +1 -3
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +1 -3
- package/Libraries/Renderer/shims/ReactNative.js +3 -2
- package/Libraries/Renderer/shims/ReactNativeTypes.js +1 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.windows.js +1 -3
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +1 -3
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +1 -3
- package/Libraries/StyleSheet/PointPropType.js +1 -1
- package/Libraries/StyleSheet/Rect.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.d.ts +0 -5
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.js.flow +1 -1
- package/Libraries/StyleSheet/StyleSheetExports.js +16 -25
- package/Libraries/StyleSheet/StyleSheetExports.js.flow +2 -7
- package/Libraries/StyleSheet/StyleSheetTypes.js +33 -35
- package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +5 -5
- package/Libraries/StyleSheet/private/_TransformStyle.js +7 -7
- package/Libraries/StyleSheet/processBackgroundImage.js +7 -7
- package/Libraries/StyleSheet/processBackgroundPosition.js +4 -4
- package/Libraries/StyleSheet/processBackgroundRepeat.js +4 -4
- package/Libraries/StyleSheet/processBackgroundSize.js +4 -4
- package/Libraries/StyleSheet/processBoxShadow.js +44 -4
- package/Libraries/StyleSheet/processColorArray.js +2 -2
- package/Libraries/StyleSheet/processFilter.js +2 -2
- package/Libraries/Text/Text.js +295 -627
- package/Libraries/Text/Text.windows.js +342 -717
- package/Libraries/Text/TextNativeComponent.js +14 -7
- package/Libraries/Text/TextProps.js +4 -4
- package/Libraries/Text/TextProps.windows.js +4 -4
- package/Libraries/Types/CodegenTypes.js +1 -1
- package/Libraries/Types/CoreEventTypes.js +21 -21
- package/Libraries/Types/CoreEventTypes.windows.js +21 -21
- package/Libraries/Types/ReactDevToolsTypes.js +2 -2
- package/Libraries/Utilities/Appearance.js +6 -1
- package/Libraries/Utilities/Dimensions.js +1 -1
- package/Libraries/Utilities/HMRClient.js +32 -5
- package/Libraries/Utilities/IPerformanceLogger.js +4 -4
- package/Libraries/Utilities/codegenNativeCommands.js +4 -4
- package/Libraries/Utilities/codegenNativeComponent.d.ts +2 -0
- package/Libraries/Utilities/codegenNativeComponent.js +2 -2
- package/Libraries/Utilities/logError.js +1 -1
- package/Libraries/Utilities/stringifySafe.js +3 -3
- package/Libraries/Utilities/useMergeRefs.js +2 -2
- package/Libraries/vendor/core/ErrorUtils.js +4 -4
- package/Libraries/vendor/emitter/EventEmitter.js +16 -20
- package/Microsoft.ReactNative/CallInvoker.cpp +14 -4
- package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/AbiPortalShadowNode.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +73 -97
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.h +4 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +0 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +5 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +94 -26
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +11 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +135 -18
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +10 -0
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +7 -2
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +2 -0
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +63 -15
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +9 -5
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +28 -6
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +80 -0
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.h +17 -0
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +11 -0
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +1 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/HostPlatformColor.h +3 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp +0 -3
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +3 -8
- package/Microsoft.ReactNative/IReactPackageBuilder.idl +6 -0
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +4 -63
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +1 -26
- package/Microsoft.ReactNative/Modules/AlertModule.cpp +2 -1
- package/Microsoft.ReactNative/Modules/AppStateModule.cpp +2 -17
- package/Microsoft.ReactNative/Modules/AppStateModule.h +0 -4
- package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +0 -2
- package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +16 -15
- package/Microsoft.ReactNative/Modules/AppearanceModule.h +5 -1
- package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +2 -7
- package/Microsoft.ReactNative/Modules/DeviceInfoModule.h +0 -1
- package/Microsoft.ReactNative/Modules/I18nManagerModule.h +4 -4
- package/Microsoft.ReactNative/QuirkSettings.cpp +0 -133
- package/Microsoft.ReactNative/QuirkSettings.h +0 -43
- package/Microsoft.ReactNative/QuirkSettings.idl +0 -41
- package/Microsoft.ReactNative/ReactHost/CrashManager.cpp +0 -4
- package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +0 -2
- package/Microsoft.ReactNative/ReactHost/React.h +0 -5
- package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +0 -1
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +3 -26
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +0 -5
- package/Microsoft.ReactNative/ReactHost/React_Win.h +0 -2
- package/Microsoft.ReactNative/ReactNativeAppBuilder.idl +3 -0
- package/Microsoft.ReactNative/ReactPackageBuilder.cpp +7 -0
- package/Microsoft.ReactNative/ReactPackageBuilder.h +1 -0
- package/Microsoft.ReactNative/RedBox.cpp +0 -9
- package/Microsoft.ReactNative/RedBoxHandler.cpp +0 -4
- package/Microsoft.ReactNative/TurboModulesProvider.cpp +5 -10
- package/Microsoft.ReactNative/TurboModulesProvider.h +2 -0
- package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +33 -25
- package/Microsoft.ReactNative/Utils/LocalBundleReader.h +5 -3
- package/Microsoft.ReactNative/Utils/ValueUtils.cpp +1 -1
- package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -7
- package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +0 -22
- package/Microsoft.ReactNative.Cxx/ModuleRegistration.cpp +8 -2
- package/Microsoft.ReactNative.Cxx/ModuleRegistration.h +36 -20
- package/Microsoft.ReactNative.Cxx/NamespaceRedirect.h +0 -3
- package/Microsoft.ReactNative.Cxx/NativeModules.h +8 -2
- package/Microsoft.ReactNative.Cxx/XamlUtils.h +0 -9
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +3 -3
- package/Microsoft.ReactNative.Managed/ReactContext.cs +0 -9
- package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +10 -10
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +1 -1
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +1 -1
- package/PropertySheets/Autolink.props +1 -1
- package/PropertySheets/Bundle.props +1 -1
- package/PropertySheets/Codegen.props +1 -1
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +8 -0
- package/PropertySheets/React.Cpp.props +8 -7
- package/PropertySheets/ReactNativeArchitecture.props +6 -24
- package/PropertySheets/WinUI.props +2 -2
- package/ReactCommon/ReactCommon.vcxproj +5 -6
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +1 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +15 -4
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h +13 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/defaults/DefaultTurboModules.cpp +69 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/animationbackend/AnimatedPropSerializer.cpp +717 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +10 -10
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +2 -21
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/TouchEventEmitter.cpp +151 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/TouchEventEmitter.h +50 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mapbuffer/MapBuffer.cpp +178 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp +69 -39
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/OfficeReact.Win32.nuspec +0 -1
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -39
- package/Scripts/UnitTest.ps1 +3 -1
- package/Scripts/creaternwapp.cmd +1 -9
- package/Scripts/creaternwlib.cmd +4 -24
- package/Scripts/rnw-dependencies.ps1 +15 -16
- package/Shared/DevSettings.h +0 -3
- package/Shared/DevSupportManager.cpp +55 -48
- package/Shared/DevSupportManager.h +0 -1
- package/Shared/Modules/IWebSocketModuleContentHandler.h +15 -0
- package/Shared/Modules/WebSocketModule.cpp +8 -3
- package/Shared/Networking/DefaultBlobResource.cpp +37 -0
- package/Shared/Networking/DefaultBlobResource.h +12 -0
- package/Shared/Networking/WinRTWebSocketResource.cpp +23 -408
- package/Shared/Networking/WinRTWebSocketResource.h +8 -120
- package/Shared/Shared.vcxitems +63 -38
- package/Shared/Shared.vcxitems.filters +54 -0
- package/Shared/Utils.cpp +0 -88
- package/Shared/Utils.h +0 -14
- package/Shared/WebSocketResourceFactory.cpp +28 -0
- package/Shared/tracing/fbsystrace.h +1 -0
- package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +172 -160
- package/codegen/react/components/rnwcore/ModalHostView.g.h +8 -0
- package/codegen/react/components/rnwcore/Props.cpp +17 -7
- package/codegen/react/components/rnwcore/Props.h +3 -1
- package/codegen/react/components/rnwcore/VirtualViewExperimental.g.h +4 -4
- package/codegen/rnwcoreJSI.h +93 -77
- package/index.js +9 -0
- package/index.windows.js +9 -0
- package/jest/RefreshControlMock.js +2 -2
- package/jest/assetFileTransformer.js +8 -3
- package/jest/mockComponent.js +3 -4
- package/jest/mockNativeComponent.js +1 -1
- package/jest/mocks/ActivityIndicator.js +2 -2
- package/jest/mocks/Image.js +2 -2
- package/jest/mocks/Modal.js +2 -2
- package/jest/mocks/RefreshControl.js +3 -3
- package/jest/mocks/RendererProxy.js +2 -2
- package/jest/mocks/ScrollView.js +5 -5
- package/jest/mocks/Text.js +2 -2
- package/jest/mocks/TextInput.js +2 -2
- package/jest/mocks/View.js +2 -2
- package/jest/mocks/ViewNativeComponent.js +1 -1
- package/jest/mocks/requireNativeComponent.js +1 -1
- package/jest/mocks/useColorScheme.js +1 -1
- package/jest/setup.js +68 -31
- package/just-task.js +13 -2
- package/package.json +25 -20
- package/src/private/animated/NativeAnimatedHelper.js +2 -2
- package/src/private/animated/createAnimatedPropsMemoHook.js +19 -19
- package/src/private/components/virtualview/VirtualView.js +14 -21
- package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +11 -10
- package/src/private/components/virtualview/VirtualViewNativeComponent.js +4 -4
- package/src/private/devsupport/devmenu/elementinspector/BorderBox.js +2 -2
- package/src/private/devsupport/devmenu/elementinspector/BoxInspector.js +3 -3
- package/src/private/devsupport/devmenu/elementinspector/ElementBox.js +4 -4
- package/src/private/devsupport/devmenu/elementinspector/ElementProperties.js +1 -1
- package/src/private/devsupport/devmenu/elementinspector/Inspector.js +39 -17
- package/src/private/devsupport/devmenu/elementinspector/InspectorOverlay.js +15 -3
- package/src/private/devsupport/devmenu/elementinspector/InspectorPanel.js +2 -2
- package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +2 -8
- package/src/private/devsupport/devmenu/elementinspector/StyleInspector.js +1 -1
- package/src/private/devsupport/devmenu/elementinspector/resolveBoxStyle.js +1 -1
- package/src/private/devsupport/devmenu/elementinspector/useExternalInspection.js +102 -0
- package/src/private/devsupport/rndevtools/FuseboxSessionObserver.js +12 -25
- package/src/private/devsupport/rndevtools/GlobalStateObserver.js +56 -0
- package/src/private/devsupport/rndevtools/TracingStateObserver.js +28 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +71 -79
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +2 -2
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +14 -12
- package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
- package/src/private/specs_DEPRECATED/components/ActivityIndicatorViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/AndroidDrawerLayoutNativeComponent.js +3 -3
- package/src/private/specs_DEPRECATED/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/AndroidSwitchNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/DebuggingOverlayNativeComponent.js +3 -3
- package/src/private/specs_DEPRECATED/components/ProgressBarAndroidNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/PullToRefreshViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/RCTInputAccessoryViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js +7 -3
- package/src/private/specs_DEPRECATED/components/RCTSafeAreaViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/UnimplementedNativeViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeImageLoaderIOS.js +1 -1
- package/src/private/styles/composeStyles.js +1 -1
- package/src/private/utilities/toError.js +27 -0
- package/src/private/utilities/toExtendedError.js +30 -0
- package/src/private/webapis/dom/events/Event.js +1 -1
- package/src/private/webapis/dom/events/EventHandlerAttributes.js +2 -2
- package/src/private/webapis/dom/events/EventTarget.js +3 -3
- package/src/private/webapis/dom/events/internals/EventInternals.js +2 -2
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +1 -1
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +2 -2
- package/src/private/webapis/dom/nodes/specs/NativeDOM.js +14 -14
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +2 -2
- package/src/private/webapis/dom/oldstylecollections/NodeList.js +2 -2
- package/src/private/webapis/geometry/DOMRectList.js +2 -2
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +8 -8
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +6 -6
- package/src/private/webapis/mutationobserver/MutationObserver.js +2 -2
- package/src/private/webapis/mutationobserver/MutationRecord.js +2 -2
- package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +1 -1
- package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +3 -3
- package/src/private/webapis/performance/LongTasks.js +3 -3
- package/src/private/webapis/performance/Performance.js +4 -4
- package/src/private/webapis/performance/PerformanceEntry.js +1 -1
- package/src/private/webapis/performance/PerformanceObserver.js +2 -2
- package/src/private/webapis/performance/specs/NativePerformance.js +8 -8
- package/src/private/webapis/structuredClone/structuredClone.js +2 -2
- package/src/types/globals.d.ts +4 -4
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cpp-lib/proj/MyLib.vcxproj +1 -1
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/template/metro.config.js +12 -2
- package/templates/cpp-app/metro.config.js +12 -2
- package/templates/cpp-app/windows/MyApp/MyApp.cpp +9 -6
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +2 -2
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +12 -2
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +2 -2
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/types/index.d.ts +2 -0
- package/Folly/.clang-format +0 -2
- package/Folly/Folly.natvis +0 -25
- package/Folly/Folly.vcxproj +0 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/Folly/TEMP_UntilFollyUpdate/ConstexprMath.h +0 -978
- package/Folly/TEMP_UntilFollyUpdate/Conv.cpp +0 -1205
- package/Folly/TEMP_UntilFollyUpdate/chrono/Hardware.h +0 -155
- package/Folly/TEMP_UntilFollyUpdate/concurrency/CacheLocality.cpp +0 -633
- package/Folly/TEMP_UntilFollyUpdate/json/dynamic-inl.h +0 -1438
- package/Folly/TEMP_UntilFollyUpdate/json/json.cpp +0 -1118
- package/Folly/TEMP_UntilFollyUpdate/lang/SafeAssert.h +0 -188
- package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.cpp +0 -348
- package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.h +0 -182
- package/Folly/TEMP_UntilFollyUpdate/portability/Unistd.cpp +0 -33
- package/Folly/cgmanifest.json +0 -25
- package/Libraries/Components/View/ReactNativeViewAttributes.js +0 -60
- package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +0 -64
- package/Libraries/Image/TextInlineImageNativeComponent.js +0 -49
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +0 -75
- package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService_emptyimpl.cpp +0 -27
- package/Microsoft.ReactNative/Fabric/Composition/Theme_emptyimpl.cpp +0 -81
- package/Microsoft.ReactNative/Modules/CreateModules.cpp +0 -24
- package/Microsoft.ReactNative/ReactSupport.cpp +0 -221
- package/Microsoft.ReactNative/ReactSupport.h +0 -13
- package/Microsoft.ReactNative/Utils/UwpPreparedScriptStore.cpp +0 -107
- package/Microsoft.ReactNative/Utils/UwpPreparedScriptStore.h +0 -62
- package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +0 -56
- package/Microsoft.ReactNative/Utils/UwpScriptStore.h +0 -22
- package/Microsoft.ReactNative/XamlUIService.cpp +0 -68
- package/Microsoft.ReactNative/XamlUIService.h +0 -37
- package/Microsoft.ReactNative/XamlUIService.idl +0 -53
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +0 -259
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/Instance.cpp +0 -381
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSIndexedRAMBundle.cpp +0 -145
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/MethodCall.cpp +0 -100
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/ModuleRegistry.cpp +0 -256
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +0 -363
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/RAMBundleRegistry.cpp +0 -93
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/ReactMarker.cpp +0 -148
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +0 -190
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsiexecutor/jsireact/JSINativeModules.cpp +0 -123
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleWithJSIBindings.cpp +0 -27
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/webperformance/NativePerformance.cpp +0 -414
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.h +0 -91
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventDispatcher.cpp +0 -80
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventQueueProcessor.cpp +0 -138
- package/fmt/.clang-format +0 -2
- package/fmt/cgmanifest.json +0 -15
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
|
@@ -88,13 +88,13 @@ facebook::react::SharedEventEmitter EventEmitterForComponent(
|
|
|
88
88
|
auto viewComponent = descriptor.view.as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>();
|
|
89
89
|
auto emitter = viewComponent->GetEventEmitter();
|
|
90
90
|
if (emitter)
|
|
91
|
-
return emitter;
|
|
91
|
+
return std::const_pointer_cast<facebook::react::ViewEventEmitter>(emitter);
|
|
92
92
|
|
|
93
93
|
for (auto it = view.Parent(); it; it = it.Parent()) {
|
|
94
94
|
auto emitter =
|
|
95
95
|
it.as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>()->GetEventEmitter();
|
|
96
96
|
if (emitter)
|
|
97
|
-
return emitter;
|
|
97
|
+
return std::const_pointer_cast<facebook::react::ViewEventEmitter>(emitter);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
return nullptr;
|
|
@@ -224,6 +224,28 @@ void CompositionEventHandler::Initialize() noexcept {
|
|
|
224
224
|
}
|
|
225
225
|
});
|
|
226
226
|
|
|
227
|
+
// Issue #16047: when ScrollView calls VisualInteractionSource::TryRedirectForManipulation
|
|
228
|
+
// and the OS hands the pointer over to the InteractionTracker, WinAppSDK
|
|
229
|
+
// does not fire PointerCaptureLost on this source — but it does fire
|
|
230
|
+
// PointerRoutedAway. Treat it the same way as captureloss: cancel any
|
|
231
|
+
// active touch RN is tracking for this pointer so Pressables don't get
|
|
232
|
+
// stuck in their pressed state.
|
|
233
|
+
m_pointerRoutedAwayToken =
|
|
234
|
+
pointerSource.PointerRoutedAway([wkThis = weak_from_this()](
|
|
235
|
+
winrt::Microsoft::UI::Input::InputPointerSource const &,
|
|
236
|
+
winrt::Microsoft::UI::Input::PointerEventArgs const &args) {
|
|
237
|
+
if (auto strongThis = wkThis.lock()) {
|
|
238
|
+
if (auto strongRootView = strongThis->m_wkRootView.get()) {
|
|
239
|
+
if (strongThis->SurfaceId() == -1)
|
|
240
|
+
return;
|
|
241
|
+
|
|
242
|
+
auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
|
|
243
|
+
args.CurrentPoint(), strongRootView.ScaleFactor());
|
|
244
|
+
strongThis->onPointerRoutedAway(pp, args.KeyModifiers());
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
|
|
227
249
|
m_pointerWheelChangedToken =
|
|
228
250
|
pointerSource.PointerWheelChanged([wkThis = weak_from_this()](
|
|
229
251
|
winrt::Microsoft::UI::Input::InputPointerSource const &,
|
|
@@ -369,6 +391,7 @@ CompositionEventHandler::~CompositionEventHandler() {
|
|
|
369
391
|
pointerSource.PointerReleased(m_pointerReleasedToken);
|
|
370
392
|
pointerSource.PointerMoved(m_pointerMovedToken);
|
|
371
393
|
pointerSource.PointerCaptureLost(m_pointerCaptureLostToken);
|
|
394
|
+
pointerSource.PointerRoutedAway(m_pointerRoutedAwayToken);
|
|
372
395
|
pointerSource.PointerWheelChanged(m_pointerWheelChangedToken);
|
|
373
396
|
pointerSource.PointerExited(m_pointerExitedToken);
|
|
374
397
|
auto keyboardSource = winrt::Microsoft::UI::Input::InputKeyboardSource::GetForIsland(island);
|
|
@@ -1116,6 +1139,50 @@ void CompositionEventHandler::onPointerCaptureLost(
|
|
|
1116
1139
|
|
|
1117
1140
|
m_pointerCapturingComponentTag = -1;
|
|
1118
1141
|
}
|
|
1142
|
+
|
|
1143
|
+
// Defense-in-depth cleanup for the specific pointer that lost capture, even
|
|
1144
|
+
// when no JS-level CapturePointer was ever issued. The ScrollView
|
|
1145
|
+
// TryRedirectForManipulation path comes in via PointerRoutedAway, not
|
|
1146
|
+
// PointerCaptureLost (see onPointerRoutedAway and issue #16047), so this
|
|
1147
|
+
// path covers the remaining system-driven losses (focus change, another
|
|
1148
|
+
// window stealing input, system back gesture, etc.).
|
|
1149
|
+
CancelActiveTouchForPointerInternal(pointerPoint.PointerId(), pointerPoint, keyModifiers);
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
void CompositionEventHandler::onPointerRoutedAway(
|
|
1153
|
+
const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
|
|
1154
|
+
winrt::Windows::System::VirtualKeyModifiers keyModifiers) noexcept {
|
|
1155
|
+
if (SurfaceId() == -1)
|
|
1156
|
+
return;
|
|
1157
|
+
|
|
1158
|
+
// Issue #16047: WinAppSDK fires PointerRoutedAway when the OS hands the
|
|
1159
|
+
// pointer to another InputPointerSource — most importantly for us, when
|
|
1160
|
+
// ScrollView calls VisualInteractionSource::TryRedirectForManipulation and
|
|
1161
|
+
// the InteractionTracker takes the gesture for scrolling. We never get
|
|
1162
|
+
// PointerMoved / PointerReleased / PointerCaptureLost for that pointer
|
|
1163
|
+
// afterwards, so without this cleanup m_activeTouches keeps a zombie entry
|
|
1164
|
+
// and the originally-pressed Pressable stays stuck in its pressed state.
|
|
1165
|
+
CancelActiveTouchForPointerInternal(pointerPoint.PointerId(), pointerPoint, keyModifiers);
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
bool CompositionEventHandler::CancelActiveTouchForPointerInternal(
|
|
1169
|
+
PointerId pointerId,
|
|
1170
|
+
const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
|
|
1171
|
+
winrt::Windows::System::VirtualKeyModifiers keyModifiers) noexcept {
|
|
1172
|
+
auto activeTouch = m_activeTouches.find(pointerId);
|
|
1173
|
+
if (activeTouch == m_activeTouches.end()) {
|
|
1174
|
+
return false;
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
ActiveTouch cancelledTouchCopy = std::move(activeTouch->second);
|
|
1178
|
+
m_activeTouches.erase(activeTouch);
|
|
1179
|
+
|
|
1180
|
+
if (!cancelledTouchCopy.eventEmitter) {
|
|
1181
|
+
return false;
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
DispatchSynthesizedTouchCancelForActiveTouch(cancelledTouchCopy, pointerPoint, keyModifiers);
|
|
1185
|
+
return true;
|
|
1119
1186
|
}
|
|
1120
1187
|
|
|
1121
1188
|
void CompositionEventHandler::onPointerMoved(
|
|
@@ -1366,7 +1433,7 @@ void CompositionEventHandler::onPointerPressed(
|
|
|
1366
1433
|
|
|
1367
1434
|
UpdateActiveTouch(activeTouch, ptScaled, ptLocal);
|
|
1368
1435
|
|
|
1369
|
-
activeTouch.isPrimary =
|
|
1436
|
+
activeTouch.isPrimary = pointerPoint.Properties().IsPrimary();
|
|
1370
1437
|
// Map the Windows pointer ID to a small identifier (0–19) safe for use as a JS array index.
|
|
1371
1438
|
// Windows touch IDs can be arbitrarily large (e.g. 2233), which causes React Native to warn
|
|
1372
1439
|
// and corrupts touch state, leaving Pressables stuck after a scroll.
|
|
@@ -1614,16 +1681,6 @@ bool CompositionEventHandler::IsPointerWithinInitialTree(const ActiveTouch &acti
|
|
|
1614
1681
|
currentView = currentView.Parent();
|
|
1615
1682
|
}
|
|
1616
1683
|
|
|
1617
|
-
// Fallback: if the pointer drifted spatially but the original target
|
|
1618
|
-
// is still structurally within the initial tree, honor the tap.
|
|
1619
|
-
// This provides touch-device tolerance for finger drift.
|
|
1620
|
-
auto targetView = viewRegistry.componentViewDescriptorWithTag(activeTouch.touch.target).view;
|
|
1621
|
-
while (targetView) {
|
|
1622
|
-
if (targetView.Tag() == initialTag)
|
|
1623
|
-
return true;
|
|
1624
|
-
targetView = targetView.Parent();
|
|
1625
|
-
}
|
|
1626
|
-
|
|
1627
1684
|
return false;
|
|
1628
1685
|
}
|
|
1629
1686
|
|
|
@@ -1685,7 +1742,15 @@ void CompositionEventHandler::DispatchTouchEvent(
|
|
|
1685
1742
|
|
|
1686
1743
|
facebook::react::TouchEvent event;
|
|
1687
1744
|
|
|
1688
|
-
|
|
1745
|
+
// First pass: build changedTouches and the set of unique emitters from every active
|
|
1746
|
+
// touch. The per-pointer PointerEvent dispatch (onPointerDown/Move/Up/Cancel/Click) is
|
|
1747
|
+
// fired only for the touch whose state actually changed — non-changed touches contribute
|
|
1748
|
+
// to the W3C TouchEvent's touches/targetTouches sets in the loops below but must not
|
|
1749
|
+
// re-fire pointer events of their own. Previously we dispatched the per-pointer event
|
|
1750
|
+
// for every entry in m_activeTouches, which produced duplicated onPointerMove on
|
|
1751
|
+
// non-moving fingers and replayed onPointerUp/onClick on stale targets after the OS
|
|
1752
|
+
// reclaimed a pointer (e.g. ScrollView manipulation redirect leaving a zombie touch).
|
|
1753
|
+
const ActiveTouch *changedTouch = nullptr;
|
|
1689
1754
|
for (const auto &pair : m_activeTouches) {
|
|
1690
1755
|
const auto &activeTouch = pair.second;
|
|
1691
1756
|
|
|
@@ -1694,14 +1759,17 @@ void CompositionEventHandler::DispatchTouchEvent(
|
|
|
1694
1759
|
}
|
|
1695
1760
|
|
|
1696
1761
|
if (pair.first == pointerId) {
|
|
1762
|
+
changedTouch = &activeTouch;
|
|
1697
1763
|
event.changedTouches.insert(activeTouch.touch);
|
|
1698
1764
|
}
|
|
1699
1765
|
uniqueEventEmitters.insert(activeTouch.eventEmitter);
|
|
1766
|
+
}
|
|
1700
1767
|
|
|
1701
|
-
|
|
1768
|
+
if (changedTouch) {
|
|
1769
|
+
facebook::react::PointerEvent pointerEvent = CreatePointerEventFromActiveTouch(*changedTouch, eventType);
|
|
1702
1770
|
|
|
1703
1771
|
winrt::Microsoft::ReactNative::ComponentView targetView{nullptr};
|
|
1704
|
-
bool shouldLeave = (eventType == TouchEventType::End &&
|
|
1772
|
+
bool shouldLeave = (eventType == TouchEventType::End && changedTouch->shouldLeaveWhenReleased) ||
|
|
1705
1773
|
eventType == TouchEventType::Cancel;
|
|
1706
1774
|
if (!shouldLeave) {
|
|
1707
1775
|
auto *rootViewForHit = RootComponentView();
|
|
@@ -1716,29 +1784,29 @@ void CompositionEventHandler::DispatchTouchEvent(
|
|
|
1716
1784
|
}
|
|
1717
1785
|
}
|
|
1718
1786
|
|
|
1719
|
-
auto handler = [this,
|
|
1787
|
+
auto handler = [this, changedTouch, eventType, &pointerEvent](
|
|
1720
1788
|
std::vector<winrt::Microsoft::ReactNative::ComponentView> &eventPathViews) {
|
|
1721
1789
|
switch (eventType) {
|
|
1722
1790
|
case TouchEventType::Start:
|
|
1723
|
-
|
|
1791
|
+
changedTouch->eventEmitter->onPointerDown(pointerEvent);
|
|
1724
1792
|
break;
|
|
1725
1793
|
case TouchEventType::Move: {
|
|
1726
|
-
|
|
1794
|
+
changedTouch->eventEmitter->onPointerMove(pointerEvent);
|
|
1727
1795
|
break;
|
|
1728
1796
|
}
|
|
1729
1797
|
case TouchEventType::End:
|
|
1730
|
-
|
|
1798
|
+
changedTouch->eventEmitter->onPointerUp(pointerEvent);
|
|
1731
1799
|
if (pointerEvent.isPrimary && pointerEvent.button == 0) {
|
|
1732
|
-
if (IsPointerWithinInitialTree(
|
|
1733
|
-
|
|
1800
|
+
if (IsPointerWithinInitialTree(*changedTouch)) {
|
|
1801
|
+
changedTouch->eventEmitter->onClick(pointerEvent);
|
|
1734
1802
|
}
|
|
1735
|
-
}
|
|
1736
|
-
|
|
1737
|
-
}
|
|
1803
|
+
} else if (IsPointerWithinInitialTree(*changedTouch)) {
|
|
1804
|
+
changedTouch->eventEmitter->onAuxClick(pointerEvent);
|
|
1805
|
+
}
|
|
1738
1806
|
break;
|
|
1739
1807
|
case TouchEventType::Cancel:
|
|
1740
1808
|
case TouchEventType::CaptureLost:
|
|
1741
|
-
|
|
1809
|
+
changedTouch->eventEmitter->onPointerCancel(pointerEvent);
|
|
1742
1810
|
break;
|
|
1743
1811
|
}
|
|
1744
1812
|
};
|
|
@@ -66,6 +66,9 @@ class CompositionEventHandler : public std::enable_shared_from_this<CompositionE
|
|
|
66
66
|
void onPointerCaptureLost(
|
|
67
67
|
const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
|
|
68
68
|
winrt::Windows::System::VirtualKeyModifiers keyModifiers) noexcept;
|
|
69
|
+
void onPointerRoutedAway(
|
|
70
|
+
const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
|
|
71
|
+
winrt::Windows::System::VirtualKeyModifiers keyModifiers) noexcept;
|
|
69
72
|
void onKeyDown(const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept;
|
|
70
73
|
void onKeyUp(const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept;
|
|
71
74
|
void onCharacterReceived(
|
|
@@ -156,6 +159,13 @@ class CompositionEventHandler : public std::enable_shared_from_this<CompositionE
|
|
|
156
159
|
const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
|
|
157
160
|
winrt::Windows::System::VirtualKeyModifiers keyModifiers);
|
|
158
161
|
|
|
162
|
+
// Look up the active touch for pointerId, erase it, and dispatch cancel events.
|
|
163
|
+
// Returns true iff a touch was found and cancel events were dispatched.
|
|
164
|
+
bool CancelActiveTouchForPointerInternal(
|
|
165
|
+
PointerId pointerId,
|
|
166
|
+
const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
|
|
167
|
+
winrt::Windows::System::VirtualKeyModifiers keyModifiers) noexcept;
|
|
168
|
+
|
|
159
169
|
std::vector<winrt::Microsoft::ReactNative::ComponentView> GetTouchableViewsInPathToRoot(
|
|
160
170
|
const winrt::Microsoft::ReactNative::ComponentView &componentView);
|
|
161
171
|
|
|
@@ -186,6 +196,7 @@ class CompositionEventHandler : public std::enable_shared_from_this<CompositionE
|
|
|
186
196
|
winrt::event_token m_pointerMovedToken;
|
|
187
197
|
winrt::event_token m_pointerWheelChangedToken;
|
|
188
198
|
winrt::event_token m_pointerCaptureLostToken;
|
|
199
|
+
winrt::event_token m_pointerRoutedAwayToken;
|
|
189
200
|
winrt::event_token m_pointerExitedToken;
|
|
190
201
|
winrt::event_token m_keyDownToken;
|
|
191
202
|
winrt::event_token m_keyUpToken;
|
|
@@ -38,9 +38,11 @@ constexpr float FOCUS_VISUAL_RADIUS = 3.0f;
|
|
|
38
38
|
|
|
39
39
|
// m_outerVisual
|
|
40
40
|
// |
|
|
41
|
-
// ----- m_visual
|
|
41
|
+
// ----- m_visual - Can be a custom visual depending on Component type
|
|
42
42
|
// |
|
|
43
|
-
// -----
|
|
43
|
+
// ----- m_backgroundVisual <-- Background / clip (ComponentViewFeatures::Background)
|
|
44
|
+
// ----- Border Visuals x N (BorderPrimitive attached to m_visual) (ComponentViewFeatures::NativeBorder)
|
|
45
|
+
// ----- Outline Visuals x N(BorderPrimitive) (ComponentViewFeatures::NativeBorder)
|
|
44
46
|
// ----- <children> (default: directly in m_visual after border visuals)
|
|
45
47
|
// ----- m_childrenContainer (created on demand when overflow:hidden, children moved here)
|
|
46
48
|
// ------Focus Visual Container (created when hosting focus visuals)
|
|
@@ -79,18 +81,16 @@ facebook::react::Props::Shared ComponentView::props() noexcept {
|
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
void ComponentView::onThemeChanged() noexcept {
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
Visual().as<Experimental::ISpriteVisual>().Brush(theme()->Brush(*viewProps()->backgroundColor));
|
|
85
|
-
} else {
|
|
86
|
-
Visual().as<Experimental::ISpriteVisual>().Brush(nullptr);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
84
|
+
if (m_backgroundVisual)
|
|
85
|
+
m_backgroundVisual.Brush(theme()->Brush(*viewProps()->backgroundColor));
|
|
89
86
|
|
|
90
87
|
if (m_borderPrimitive) {
|
|
91
88
|
m_borderPrimitive->onThemeChanged(
|
|
92
89
|
m_layoutMetrics, BorderPrimitive::resolveAndAlignBorderMetrics(m_layoutMetrics, *viewProps()));
|
|
93
90
|
}
|
|
91
|
+
if (m_outlinePrimitive) {
|
|
92
|
+
m_outlinePrimitive->onThemeChanged(outlineLayoutMetrics(), outlineBorderMetrics());
|
|
93
|
+
}
|
|
94
94
|
if (m_componentHostingFocusVisual) {
|
|
95
95
|
if (m_componentHostingFocusVisual->m_focusPrimitive->m_focusInnerPrimitive) {
|
|
96
96
|
auto innerFocusMetrics = focusLayoutMetrics(true /*inner*/);
|
|
@@ -154,10 +154,18 @@ void ComponentView::updateProps(
|
|
|
154
154
|
|
|
155
155
|
if ((m_flags & ComponentViewFeatures::Background) == ComponentViewFeatures::Background) {
|
|
156
156
|
if (oldViewProps.backgroundColor != newViewProps.backgroundColor) {
|
|
157
|
-
if (newViewProps.backgroundColor) {
|
|
158
|
-
|
|
157
|
+
if (facebook::react::isColorMeaningful(newViewProps.backgroundColor)) {
|
|
158
|
+
if (!m_backgroundVisual) {
|
|
159
|
+
m_backgroundVisual = m_compContext.CreateSpriteVisual();
|
|
160
|
+
m_backgroundVisual.RelativeSizeWithOffset({0, 0}, {1.0f, 1.0f});
|
|
161
|
+
Visual().InsertAt(m_backgroundVisual, 0);
|
|
162
|
+
}
|
|
163
|
+
m_backgroundVisual.Brush(theme()->Brush(*newViewProps.backgroundColor));
|
|
164
|
+
updateClippingPath(m_layoutMetrics, *viewProps());
|
|
159
165
|
} else {
|
|
160
|
-
|
|
166
|
+
if (m_backgroundVisual) {
|
|
167
|
+
m_backgroundVisual.Brush(nullptr);
|
|
168
|
+
}
|
|
161
169
|
}
|
|
162
170
|
}
|
|
163
171
|
}
|
|
@@ -166,6 +174,16 @@ void ComponentView::updateProps(
|
|
|
166
174
|
m_borderPrimitive->updateProps(oldViewProps, newViewProps);
|
|
167
175
|
}
|
|
168
176
|
|
|
177
|
+
if (m_outlinePrimitive) {
|
|
178
|
+
if (oldViewProps.outlineOffset != newViewProps.outlineOffset ||
|
|
179
|
+
oldViewProps.outlineWidth != newViewProps.outlineWidth ||
|
|
180
|
+
oldViewProps.borderRadii != newViewProps.borderRadii ||
|
|
181
|
+
oldViewProps.outlineColor != newViewProps.outlineColor ||
|
|
182
|
+
oldViewProps.outlineStyle != newViewProps.outlineStyle) {
|
|
183
|
+
m_outlinePrimitive->markNeedsUpdate();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
169
187
|
if (m_componentHostingFocusVisual) {
|
|
170
188
|
if (!newViewProps.enableFocusRing) {
|
|
171
189
|
m_componentHostingFocusVisual->hostFocusVisual(false, get_strong());
|
|
@@ -200,8 +218,9 @@ void ComponentView::updateProps(
|
|
|
200
218
|
void ComponentView::updateLayoutMetrics(
|
|
201
219
|
facebook::react::LayoutMetrics const &layoutMetrics,
|
|
202
220
|
facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept {
|
|
221
|
+
updateClippingPath(layoutMetrics, *viewProps());
|
|
222
|
+
|
|
203
223
|
if ((m_flags & ComponentViewFeatures::NativeBorder) == ComponentViewFeatures::NativeBorder) {
|
|
204
|
-
updateClippingPath(layoutMetrics, *viewProps());
|
|
205
224
|
OuterVisual().Size(
|
|
206
225
|
{layoutMetrics.frame.size.width * layoutMetrics.pointScaleFactor,
|
|
207
226
|
layoutMetrics.frame.size.height * layoutMetrics.pointScaleFactor});
|
|
@@ -218,6 +237,9 @@ void ComponentView::updateLayoutMetrics(
|
|
|
218
237
|
if (m_borderPrimitive) {
|
|
219
238
|
m_borderPrimitive->markNeedsUpdate();
|
|
220
239
|
}
|
|
240
|
+
if (m_outlinePrimitive) {
|
|
241
|
+
m_outlinePrimitive->markNeedsUpdate();
|
|
242
|
+
}
|
|
221
243
|
|
|
222
244
|
if (m_componentHostingFocusVisual) {
|
|
223
245
|
m_componentHostingFocusVisual->updateFocusLayoutMetrics();
|
|
@@ -301,6 +323,23 @@ void ComponentView::FinalizeUpdates(winrt::Microsoft::ReactNative::ComponentView
|
|
|
301
323
|
if (m_borderPrimitive) {
|
|
302
324
|
m_borderPrimitive->finalize(m_layoutMetrics, borderMetrics);
|
|
303
325
|
}
|
|
326
|
+
|
|
327
|
+
auto outlineMetrics = outlineBorderMetrics();
|
|
328
|
+
if (!m_outlinePrimitive && BorderPrimitive::requiresBorder(outlineMetrics, theme())) {
|
|
329
|
+
m_outlinePrimitive = std::make_shared<BorderPrimitive>(*this);
|
|
330
|
+
Visual().InsertAt(
|
|
331
|
+
m_outlinePrimitive->RootVisual(),
|
|
332
|
+
(m_backgroundVisual ? 1 : 0) + (m_borderPrimitive ? m_borderPrimitive->numberOfVisuals() : 0));
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (m_outlinePrimitive) {
|
|
336
|
+
auto offset = pixelRoundAndScaleBorderWidth(viewProps()->outlineWidth, m_layoutMetrics.pointScaleFactor) +
|
|
337
|
+
std::round(viewProps()->outlineOffset * m_layoutMetrics.pointScaleFactor);
|
|
338
|
+
m_outlinePrimitive->RootVisual().Offset({-offset, -offset, 0.0f});
|
|
339
|
+
m_outlinePrimitive->RootVisual().RelativeSizeWithOffset({offset * 2, offset * 2}, {1.0f, 1.0f});
|
|
340
|
+
|
|
341
|
+
m_outlinePrimitive->finalize(outlineLayoutMetrics(), outlineMetrics);
|
|
342
|
+
}
|
|
304
343
|
}
|
|
305
344
|
|
|
306
345
|
if (m_componentHostingFocusVisual) {
|
|
@@ -581,6 +620,67 @@ facebook::react::LayoutMetrics ComponentView::focusLayoutMetrics(bool inner) con
|
|
|
581
620
|
return layoutMetrics;
|
|
582
621
|
}
|
|
583
622
|
|
|
623
|
+
facebook::react::LayoutMetrics ComponentView::outlineLayoutMetrics() const noexcept {
|
|
624
|
+
auto &props = *viewProps();
|
|
625
|
+
auto offset = (pixelRoundAndScaleBorderWidth(viewProps()->outlineWidth, m_layoutMetrics.pointScaleFactor) +
|
|
626
|
+
std::round(viewProps()->outlineOffset * m_layoutMetrics.pointScaleFactor)) /
|
|
627
|
+
m_layoutMetrics.pointScaleFactor;
|
|
628
|
+
facebook::react::LayoutMetrics layoutMetrics = m_layoutMetrics;
|
|
629
|
+
layoutMetrics.frame.origin.x -= offset;
|
|
630
|
+
layoutMetrics.frame.origin.y -= offset;
|
|
631
|
+
layoutMetrics.frame.size.height += offset * 2;
|
|
632
|
+
layoutMetrics.frame.size.width += offset * 2;
|
|
633
|
+
return layoutMetrics;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
facebook::react::BorderMetrics ComponentView::outlineBorderMetrics() const noexcept {
|
|
637
|
+
auto &props = *viewProps();
|
|
638
|
+
|
|
639
|
+
facebook::react::BorderMetrics metrics = BorderPrimitive::resolveAndAlignBorderMetrics(m_layoutMetrics, props);
|
|
640
|
+
metrics.borderColors.bottom = metrics.borderColors.left = metrics.borderColors.right = metrics.borderColors.top =
|
|
641
|
+
props.outlineColor;
|
|
642
|
+
|
|
643
|
+
auto offset = pixelRoundAndScaleBorderWidth(viewProps()->outlineWidth, m_layoutMetrics.pointScaleFactor) +
|
|
644
|
+
std::round(viewProps()->outlineOffset * m_layoutMetrics.pointScaleFactor);
|
|
645
|
+
|
|
646
|
+
if (metrics.borderRadii.bottomLeft.horizontal)
|
|
647
|
+
metrics.borderRadii.bottomLeft.horizontal = std::max(0.0f, metrics.borderRadii.bottomLeft.horizontal + offset);
|
|
648
|
+
if (metrics.borderRadii.bottomLeft.vertical)
|
|
649
|
+
metrics.borderRadii.bottomLeft.vertical = std::max(0.0f, metrics.borderRadii.bottomLeft.vertical + offset);
|
|
650
|
+
if (metrics.borderRadii.bottomRight.horizontal)
|
|
651
|
+
metrics.borderRadii.bottomRight.horizontal = std::max(0.0f, metrics.borderRadii.bottomRight.horizontal + offset);
|
|
652
|
+
if (metrics.borderRadii.bottomRight.vertical)
|
|
653
|
+
metrics.borderRadii.bottomRight.vertical = std::max(0.0f, metrics.borderRadii.bottomRight.vertical + offset);
|
|
654
|
+
if (metrics.borderRadii.topLeft.horizontal)
|
|
655
|
+
metrics.borderRadii.topLeft.horizontal = std::max(0.0f, metrics.borderRadii.topLeft.horizontal + offset);
|
|
656
|
+
if (metrics.borderRadii.topLeft.vertical)
|
|
657
|
+
metrics.borderRadii.topLeft.vertical = std::max(0.0f, metrics.borderRadii.topLeft.vertical + offset);
|
|
658
|
+
if (metrics.borderRadii.topRight.horizontal)
|
|
659
|
+
metrics.borderRadii.topRight.horizontal = std::max(0.0f, metrics.borderRadii.topRight.horizontal + offset);
|
|
660
|
+
if (metrics.borderRadii.topRight.vertical)
|
|
661
|
+
metrics.borderRadii.topRight.vertical = std::max(0.0f, metrics.borderRadii.topRight.vertical + offset);
|
|
662
|
+
|
|
663
|
+
static_assert(
|
|
664
|
+
facebook::react::BorderStyle::Solid ==
|
|
665
|
+
static_cast<facebook::react::BorderStyle>(facebook::react::OutlineStyle::Solid));
|
|
666
|
+
static_assert(
|
|
667
|
+
facebook::react::BorderStyle::Dotted ==
|
|
668
|
+
static_cast<facebook::react::BorderStyle>(facebook::react::OutlineStyle::Dotted));
|
|
669
|
+
static_assert(
|
|
670
|
+
facebook::react::BorderStyle::Dashed ==
|
|
671
|
+
static_cast<facebook::react::BorderStyle>(facebook::react::OutlineStyle::Dashed));
|
|
672
|
+
assert(
|
|
673
|
+
props.outlineStyle == facebook::react::OutlineStyle::Solid ||
|
|
674
|
+
props.outlineStyle == facebook::react::OutlineStyle::Dotted ||
|
|
675
|
+
props.outlineStyle == facebook::react::OutlineStyle::Dashed);
|
|
676
|
+
metrics.borderStyles.bottom = metrics.borderStyles.left = metrics.borderStyles.right = metrics.borderStyles.top =
|
|
677
|
+
static_cast<facebook::react::BorderStyle>(props.outlineStyle);
|
|
678
|
+
|
|
679
|
+
metrics.borderWidths.bottom = metrics.borderWidths.left = metrics.borderWidths.right = metrics.borderWidths.top =
|
|
680
|
+
pixelRoundAndScaleBorderWidth(viewProps()->outlineWidth, m_layoutMetrics.pointScaleFactor);
|
|
681
|
+
return metrics;
|
|
682
|
+
}
|
|
683
|
+
|
|
584
684
|
facebook::react::BorderMetrics ComponentView::focusBorderMetrics(
|
|
585
685
|
bool inner,
|
|
586
686
|
const facebook::react::LayoutMetrics &layoutMetrics) const noexcept {
|
|
@@ -654,7 +754,7 @@ void ComponentView::hostFocusVisual(bool show, winrt::com_ptr<ComponentView> vie
|
|
|
654
754
|
assert(
|
|
655
755
|
view.get() ==
|
|
656
756
|
this); // When not using lifted comp, focus visuals should always host within their own component
|
|
657
|
-
OuterVisual().InsertAt(m_focusPrimitive->m_focusVisual, 1);
|
|
757
|
+
OuterVisual().InsertAt(m_focusPrimitive->m_focusVisual, (m_backgroundVisual ? 2 : 1));
|
|
658
758
|
}
|
|
659
759
|
}
|
|
660
760
|
|
|
@@ -898,9 +998,23 @@ void ComponentView::Toggle() noexcept {
|
|
|
898
998
|
// no-op
|
|
899
999
|
}
|
|
900
1000
|
|
|
1001
|
+
// This offset ensures that the m_borderPrimitive inserts its layers above the background
|
|
1002
|
+
int32_t ComponentView::borderInsertAtIndex() const noexcept {
|
|
1003
|
+
return m_backgroundVisual ? 1 : 0;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::IVisual ComponentView::VisualToApplyBackgroundClipTo()
|
|
1007
|
+
const noexcept {
|
|
1008
|
+
return m_backgroundVisual;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
901
1011
|
void ComponentView::updateClippingPath(
|
|
902
1012
|
facebook::react::LayoutMetrics const &layoutMetrics,
|
|
903
1013
|
const facebook::react::ViewProps &viewProps) noexcept {
|
|
1014
|
+
auto clipTarget = VisualToApplyBackgroundClipTo();
|
|
1015
|
+
if (!clipTarget)
|
|
1016
|
+
return;
|
|
1017
|
+
|
|
904
1018
|
auto borderMetrics = BorderPrimitive::resolveAndAlignBorderMetrics(layoutMetrics, viewProps);
|
|
905
1019
|
|
|
906
1020
|
bool hasRoundedCorners = borderMetrics.borderRadii.topLeft.horizontal != 0 ||
|
|
@@ -919,10 +1033,10 @@ void ComponentView::updateClippingPath(
|
|
|
919
1033
|
winrt::com_ptr<ID2D1PathGeometry> pathGeometry = BorderPrimitive::GenerateRoundedRectPathGeometry(
|
|
920
1034
|
m_compContext, borderMetrics.borderRadii, {0, 0, 0, 0}, {0, 0, viewWidth, viewHeight});
|
|
921
1035
|
|
|
922
|
-
|
|
1036
|
+
clipTarget.as<::Microsoft::ReactNative::Composition::Experimental::IVisualInterop>()->SetClippingPath(
|
|
923
1037
|
pathGeometry.get());
|
|
924
1038
|
} else {
|
|
925
|
-
|
|
1039
|
+
clipTarget.as<::Microsoft::ReactNative::Composition::Experimental::IVisualInterop>()->SetClippingPath(nullptr);
|
|
926
1040
|
}
|
|
927
1041
|
}
|
|
928
1042
|
|
|
@@ -934,6 +1048,9 @@ void ComponentView::indexOffsetForBorder(uint32_t &index) const noexcept {
|
|
|
934
1048
|
if (m_borderPrimitive) {
|
|
935
1049
|
index += m_borderPrimitive->numberOfVisuals();
|
|
936
1050
|
}
|
|
1051
|
+
if (m_outlinePrimitive) {
|
|
1052
|
+
index += 1;
|
|
1053
|
+
}
|
|
937
1054
|
}
|
|
938
1055
|
|
|
939
1056
|
void ComponentView::OnRenderingDeviceLost() noexcept {}
|
|
@@ -1084,7 +1201,7 @@ void ViewComponentView::ensureVisual() noexcept {
|
|
|
1084
1201
|
} else {
|
|
1085
1202
|
m_visual = createVisual();
|
|
1086
1203
|
}
|
|
1087
|
-
OuterVisual().InsertAt(m_visual, 0);
|
|
1204
|
+
OuterVisual().InsertAt(m_visual, m_backgroundVisual ? 1 : 0);
|
|
1088
1205
|
}
|
|
1089
1206
|
}
|
|
1090
1207
|
|
|
@@ -1382,7 +1499,7 @@ void ViewComponentView::updateChildrenClippingPath(
|
|
|
1382
1499
|
}
|
|
1383
1500
|
|
|
1384
1501
|
// Insert m_childrenContainer after border visuals in m_visual
|
|
1385
|
-
Visual().InsertAt(m_childrenContainer, borderCount);
|
|
1502
|
+
Visual().InsertAt(m_childrenContainer, (m_backgroundVisual ? 1 : 0) + borderCount);
|
|
1386
1503
|
|
|
1387
1504
|
// Use relative sizing so container automatically tracks parent's size
|
|
1388
1505
|
m_childrenContainer.RelativeSizeWithOffset({0, 0}, {1, 1});
|
|
@@ -111,6 +111,9 @@ struct ComponentView : public ComponentViewT<
|
|
|
111
111
|
bool getAcccessiblityIsReadOnly() noexcept override;
|
|
112
112
|
ToggleState getToggleState() noexcept override;
|
|
113
113
|
void Toggle() noexcept override;
|
|
114
|
+
|
|
115
|
+
int32_t borderInsertAtIndex() const noexcept;
|
|
116
|
+
|
|
114
117
|
virtual winrt::Microsoft::ReactNative::implementation::ClipState getClipState() noexcept;
|
|
115
118
|
|
|
116
119
|
virtual std::pair<facebook::react::Cursor, HCURSOR> cursor() const noexcept;
|
|
@@ -130,6 +133,8 @@ struct ComponentView : public ComponentViewT<
|
|
|
130
133
|
void ThemeChanged(winrt::event_token const &token) noexcept;
|
|
131
134
|
|
|
132
135
|
protected:
|
|
136
|
+
virtual winrt::Microsoft::ReactNative::Composition::Experimental::IVisual VisualToApplyBackgroundClipTo()
|
|
137
|
+
const noexcept;
|
|
133
138
|
bool anyHitTestHelper(
|
|
134
139
|
facebook::react::Tag &targetTag,
|
|
135
140
|
facebook::react::Point &ptContent,
|
|
@@ -141,6 +146,7 @@ struct ComponentView : public ComponentViewT<
|
|
|
141
146
|
winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext m_compContext;
|
|
142
147
|
comp::CompositionPropertySet m_centerPropSet{nullptr};
|
|
143
148
|
facebook::react::SharedViewEventEmitter m_eventEmitter;
|
|
149
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual m_backgroundVisual{nullptr};
|
|
144
150
|
|
|
145
151
|
private:
|
|
146
152
|
void updateFocusLayoutMetrics() noexcept;
|
|
@@ -157,6 +163,9 @@ struct ComponentView : public ComponentViewT<
|
|
|
157
163
|
facebook::react::BorderMetrics focusBorderMetrics(bool inner, const facebook::react::LayoutMetrics &layoutMetrics)
|
|
158
164
|
const noexcept;
|
|
159
165
|
|
|
166
|
+
facebook::react::LayoutMetrics outlineLayoutMetrics() const noexcept;
|
|
167
|
+
facebook::react::BorderMetrics outlineBorderMetrics() const noexcept;
|
|
168
|
+
|
|
160
169
|
virtual winrt::Microsoft::ReactNative::Composition::Experimental::IVisual visualToHostFocus() noexcept;
|
|
161
170
|
virtual winrt::com_ptr<ComponentView> focusVisualRoot(const facebook::react::Rect &focusRect) noexcept;
|
|
162
171
|
|
|
@@ -168,6 +177,7 @@ struct ComponentView : public ComponentViewT<
|
|
|
168
177
|
winrt::com_ptr<ComponentView>
|
|
169
178
|
m_componentHostingFocusVisual; // The component that we are showing our focus visuals within
|
|
170
179
|
std::shared_ptr<BorderPrimitive> m_borderPrimitive;
|
|
180
|
+
std::shared_ptr<BorderPrimitive> m_outlinePrimitive;
|
|
171
181
|
std::unique_ptr<FocusPrimitive> m_focusPrimitive{nullptr};
|
|
172
182
|
winrt::Microsoft::ReactNative::Composition::Experimental::IVisual m_outerVisual{nullptr};
|
|
173
183
|
winrt::event<winrt::Windows::Foundation::EventHandler<winrt::IInspectable>> m_themeChangedEvent;
|
|
@@ -189,14 +189,14 @@ void ImageComponentView::setStateAndResubscribeImageResponseObserver(
|
|
|
189
189
|
facebook::react::ImageShadowNode::ConcreteState::Shared const &state) noexcept {
|
|
190
190
|
if (m_state) {
|
|
191
191
|
auto &observerCoordinator = m_state->getData().getImageRequest().getObserverCoordinator();
|
|
192
|
-
observerCoordinator.removeObserver(
|
|
192
|
+
observerCoordinator.removeObserver(m_imageResponseObserver);
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
m_state = state;
|
|
196
196
|
|
|
197
197
|
if (m_state) {
|
|
198
198
|
auto &observerCoordinator = m_state->getData().getImageRequest().getObserverCoordinator();
|
|
199
|
-
observerCoordinator.addObserver(
|
|
199
|
+
observerCoordinator.addObserver(m_imageResponseObserver);
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
|
|
@@ -237,6 +237,11 @@ void ImageComponentView::onThemeChanged() noexcept {
|
|
|
237
237
|
Super::onThemeChanged();
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::IVisual ImageComponentView::VisualToApplyBackgroundClipTo()
|
|
241
|
+
const noexcept {
|
|
242
|
+
return Visual();
|
|
243
|
+
}
|
|
244
|
+
|
|
240
245
|
void ImageComponentView::ensureDrawingSurface() noexcept {
|
|
241
246
|
assert(m_reactContext.UIDispatcher().HasThreadAccess());
|
|
242
247
|
|
|
@@ -52,6 +52,8 @@ struct ImageComponentView : ImageComponentViewT<ImageComponentView, ViewComponen
|
|
|
52
52
|
|
|
53
53
|
virtual std::string DefaultControlType() const noexcept;
|
|
54
54
|
static facebook::react::SharedViewProps defaultProps() noexcept;
|
|
55
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::IVisual VisualToApplyBackgroundClipTo()
|
|
56
|
+
const noexcept override;
|
|
55
57
|
|
|
56
58
|
ImageComponentView(
|
|
57
59
|
const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
|