react-native-windows 0.74.19 → 0.74.21
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/Microsoft.ReactNative/ComponentView.idl +33 -32
- package/Microsoft.ReactNative/Composition.Input.idl +2 -0
- package/Microsoft.ReactNative/CompositionComponentView.idl +43 -24
- package/Microsoft.ReactNative/Fabric/AbiEventEmitter.cpp +21 -0
- package/Microsoft.ReactNative/Fabric/AbiEventEmitter.h +23 -0
- package/Microsoft.ReactNative/Fabric/AbiShadowNode.cpp +7 -0
- package/Microsoft.ReactNative/Fabric/AbiShadowNode.h +3 -0
- package/Microsoft.ReactNative/Fabric/ComponentView.cpp +318 -59
- package/Microsoft.ReactNative/Fabric/ComponentView.h +155 -33
- package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.cpp +3 -0
- package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +25 -7
- package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +22 -4
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +43 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +6 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +147 -119
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +4 -8
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +97 -101
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +28 -52
- package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.cpp +133 -0
- package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.h +61 -0
- package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +1 -2
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +1 -4
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +1 -2
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +1 -6
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +0 -1
- package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +108 -18
- package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +33 -5
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +57 -1
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +6 -0
- package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +8 -2
- package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +2 -0
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +195 -182
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +1 -3
- package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +16 -4
- package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.h +3 -3
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +12 -17
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +4 -11
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +19 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +4 -0
- package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +1 -2
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +10 -7
- package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +1 -3
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +20 -1
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h +3 -0
- package/Microsoft.ReactNative/IReactCompositionViewComponentBuilder.idl +13 -3
- package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +57 -4
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +14 -32
- package/Microsoft.ReactNative/ReactNativeIsland.idl +3 -0
- package/PropertySheets/External/Microsoft.ReactNative.Composition.Package.props +1 -0
- package/PropertySheets/External/Microsoft.ReactNative.Composition.Package.targets +4 -0
- package/PropertySheets/External/Microsoft.ReactNative.Cpp.PackageReferences.props +14 -4
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/WinUI.props +1 -1
- package/Scripts/Microsoft.ReactNative.VersionCheck.targets +2 -0
- package/Shared/Shared.vcxitems +7 -0
- package/Shared/Shared.vcxitems.filters +1 -0
- package/just-task.js +1 -1
- package/package.json +3 -3
- package/template/cpp-app/proj/MyApp.sln +19 -19
- package/template/cpp-lib/proj/MyLib.sln +19 -19
- package/template/cs-app/proj/MyApp.sln +21 -21
- package/template/cs-lib/proj/MyLib.sln +21 -21
- package/template/metro.config.js +13 -2
- package/templates/cpp-app/NuGet_Config +13 -0
- package/templates/cpp-app/template.config.js +11 -1
- package/templates/cpp-app/windows/ExperimentalFeatures.props +1 -0
- package/templates/cpp-app/windows/MyApp.sln +29 -19
- package/templates/cpp-lib/NuGet_Config +13 -0
- package/templates/cpp-lib/example/NuGet_Config +6 -0
- package/templates/cpp-lib/template.config.js +11 -1
- package/templates/cpp-lib/windows/ExperimentalFeatures.props +1 -0
- package/templates/cpp-lib/windows/MyLib.sln +35 -25
- package/templates/old/generateWrapper.js +7 -4
- package/templates/templateUtils.js +3 -1
- package/template/metro.devMode.config.js +0 -56
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include <Fabric/ComponentView.h>
|
|
8
|
+
|
|
9
|
+
#include <Microsoft.ReactNative.Cxx/ReactContext.h>
|
|
10
|
+
#include <winrt/Microsoft.UI.Content.h>
|
|
11
|
+
#include <winrt/Windows.UI.Composition.h>
|
|
12
|
+
#include "CompositionHelpers.h"
|
|
13
|
+
#include "CompositionViewComponentView.h"
|
|
14
|
+
|
|
15
|
+
#pragma warning(push)
|
|
16
|
+
#pragma warning(disable : 4244 4305)
|
|
17
|
+
#include <react/renderer/components/view/ViewProps.h>
|
|
18
|
+
#pragma warning(pop)
|
|
19
|
+
#include "Composition.ContentIslandComponentView.g.h"
|
|
20
|
+
|
|
21
|
+
namespace winrt::Microsoft::ReactNative::Composition::implementation {
|
|
22
|
+
|
|
23
|
+
struct ContentIslandComponentView : ContentIslandComponentViewT<ContentIslandComponentView, ViewComponentView> {
|
|
24
|
+
using Super = ContentIslandComponentViewT<ContentIslandComponentView, ViewComponentView>;
|
|
25
|
+
|
|
26
|
+
void MountChildComponentView(
|
|
27
|
+
const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
|
|
28
|
+
uint32_t index) noexcept override;
|
|
29
|
+
void UnmountChildComponentView(
|
|
30
|
+
const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
|
|
31
|
+
uint32_t index) noexcept override;
|
|
32
|
+
void Connect(const winrt::Microsoft::UI::Content::ContentIsland &contentIsland) noexcept;
|
|
33
|
+
|
|
34
|
+
void updateLayoutMetrics(
|
|
35
|
+
facebook::react::LayoutMetrics const &layoutMetrics,
|
|
36
|
+
facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept;
|
|
37
|
+
|
|
38
|
+
void prepareForRecycle() noexcept override;
|
|
39
|
+
|
|
40
|
+
ContentIslandComponentView(
|
|
41
|
+
const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
|
|
42
|
+
facebook::react::Tag tag,
|
|
43
|
+
winrt::Microsoft::ReactNative::ReactContext const &reactContext);
|
|
44
|
+
~ContentIslandComponentView() noexcept;
|
|
45
|
+
|
|
46
|
+
private:
|
|
47
|
+
void OnMounted() noexcept;
|
|
48
|
+
void OnUnmounted() noexcept;
|
|
49
|
+
void ParentLayoutChanged() noexcept;
|
|
50
|
+
|
|
51
|
+
bool m_layoutChangePosted{false};
|
|
52
|
+
winrt::Microsoft::UI::Content::ContentIsland m_islandToConnect{nullptr};
|
|
53
|
+
winrt::event_token m_mountedToken;
|
|
54
|
+
winrt::event_token m_unmountedToken;
|
|
55
|
+
std::vector<winrt::Microsoft::ReactNative::ComponentView::LayoutMetricsChanged_revoker> m_layoutMetricChangedRevokers;
|
|
56
|
+
#ifdef USE_EXPERIMENTAL_WINUI3
|
|
57
|
+
winrt::Microsoft::UI::Content::ChildContentLink m_childContentLink{nullptr};
|
|
58
|
+
#endif
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
} // namespace winrt::Microsoft::ReactNative::Composition::implementation
|
|
@@ -21,8 +21,7 @@ DebuggingOverlayComponentView::DebuggingOverlayComponentView(
|
|
|
21
21
|
reactContext,
|
|
22
22
|
ComponentViewFeatures::Default &
|
|
23
23
|
~(ComponentViewFeatures::Background | ComponentViewFeatures::ShadowProps |
|
|
24
|
-
ComponentViewFeatures::NativeBorder)
|
|
25
|
-
false) {}
|
|
24
|
+
ComponentViewFeatures::NativeBorder)) {}
|
|
26
25
|
|
|
27
26
|
void DebuggingOverlayComponentView::MountChildComponentView(
|
|
28
27
|
const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
|
|
@@ -70,8 +70,7 @@ ImageComponentView::ImageComponentView(
|
|
|
70
70
|
compContext,
|
|
71
71
|
tag,
|
|
72
72
|
reactContext,
|
|
73
|
-
ComponentViewFeatures::Default & ~ComponentViewFeatures::Background
|
|
74
|
-
false) {}
|
|
73
|
+
ComponentViewFeatures::Default & ~ComponentViewFeatures::Background) {}
|
|
75
74
|
|
|
76
75
|
void ImageComponentView::MountChildComponentView(
|
|
77
76
|
const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
|
|
@@ -185,7 +184,6 @@ void ImageComponentView::prepareForRecycle() noexcept {
|
|
|
185
184
|
winrt::Microsoft::ReactNative::ImageProps ImageComponentView::ImageProps() noexcept {
|
|
186
185
|
// We do not currently support custom ImageComponentView's
|
|
187
186
|
// If we did we would need to create a AbiImageProps and possibly return them here
|
|
188
|
-
assert(!m_customComponent);
|
|
189
187
|
return winrt::make<winrt::Microsoft::ReactNative::implementation::ImageProps>(viewProps());
|
|
190
188
|
}
|
|
191
189
|
|
|
@@ -196,7 +194,6 @@ winrt::Microsoft::ReactNative::ImageProps ImageComponentView::ViewProps() noexce
|
|
|
196
194
|
winrt::Microsoft::ReactNative::ViewProps ImageComponentView::ViewPropsInner() noexcept {
|
|
197
195
|
// We do not currently support custom ImageComponentView's
|
|
198
196
|
// If we did we would need to create a AbiImageProps and possibly return them here
|
|
199
|
-
assert(!m_customComponent);
|
|
200
197
|
return winrt::make<winrt::Microsoft::ReactNative::implementation::ImageProps>(viewProps());
|
|
201
198
|
}
|
|
202
199
|
|
package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp
CHANGED
|
@@ -27,8 +27,7 @@ WindowsModalHostComponentView::WindowsModalHostComponentView(
|
|
|
27
27
|
compContext,
|
|
28
28
|
tag,
|
|
29
29
|
reactContext,
|
|
30
|
-
ComponentViewFeatures::Default & ~ComponentViewFeatures::Background
|
|
31
|
-
false) {
|
|
30
|
+
ComponentViewFeatures::Default & ~ComponentViewFeatures::Background) {
|
|
32
31
|
m_context = reactContext; // save context
|
|
33
32
|
}
|
|
34
33
|
|
|
@@ -27,8 +27,7 @@ ParagraphComponentView::ParagraphComponentView(
|
|
|
27
27
|
compContext,
|
|
28
28
|
tag,
|
|
29
29
|
reactContext,
|
|
30
|
-
ComponentViewFeatures::Default & ~ComponentViewFeatures::Background
|
|
31
|
-
false) {}
|
|
30
|
+
ComponentViewFeatures::Default & ~ComponentViewFeatures::Background) {}
|
|
32
31
|
|
|
33
32
|
void ParagraphComponentView::MountChildComponentView(
|
|
34
33
|
const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
|
|
@@ -68,10 +67,6 @@ void ParagraphComponentView::updateProps(
|
|
|
68
67
|
Super::updateProps(props, oldProps);
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
void ParagraphComponentView::updateEventEmitter(facebook::react::EventEmitter::Shared const &eventEmitter) noexcept {
|
|
72
|
-
Super::updateEventEmitter(eventEmitter);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
70
|
void ParagraphComponentView::updateState(
|
|
76
71
|
facebook::react::State::Shared const &state,
|
|
77
72
|
facebook::react::State::Shared const &oldState) noexcept {
|
|
@@ -33,7 +33,6 @@ struct ParagraphComponentView : ParagraphComponentViewT<ParagraphComponentView,
|
|
|
33
33
|
uint32_t index) noexcept override;
|
|
34
34
|
void updateProps(facebook::react::Props::Shared const &props, facebook::react::Props::Shared const &oldProps) noexcept
|
|
35
35
|
override;
|
|
36
|
-
void updateEventEmitter(facebook::react::EventEmitter::Shared const &eventEmitter) noexcept override;
|
|
37
36
|
void updateLayoutMetrics(
|
|
38
37
|
facebook::react::LayoutMetrics const &layoutMetrics,
|
|
39
38
|
facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept override;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
#include "pch.h"
|
|
5
5
|
#include "ReactCompositionViewComponentBuilder.h"
|
|
6
6
|
#include <Fabric/Composition/CompositionViewComponentView.h>
|
|
7
|
+
#include <Fabric/Composition/ContentIslandComponentView.h>
|
|
7
8
|
#include <strsafe.h>
|
|
8
9
|
#include "DynamicWriter.h"
|
|
9
10
|
#include "ReactHost/MsoUtils.h"
|
|
@@ -46,16 +47,74 @@ LayoutHandler ReactCompositionViewComponentBuilder::LayoutHandler() const noexce
|
|
|
46
47
|
return m_layoutHandler;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
void ReactCompositionViewComponentBuilder::
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
void ReactCompositionViewComponentBuilder::InitializeComponentView(
|
|
51
|
+
const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
|
|
52
|
+
auto self = winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(view);
|
|
53
|
+
self->MarkAsCustomComponent();
|
|
54
|
+
if (m_customCommandHandler)
|
|
55
|
+
self->CustomCommandHandler(m_customCommandHandler);
|
|
56
|
+
if (m_finalizeUpdateHandler)
|
|
57
|
+
self->FinalizeUpdateHandler(m_finalizeUpdateHandler);
|
|
58
|
+
if (m_updatePropsHandler)
|
|
59
|
+
self->UpdatePropsHandler(m_updatePropsHandler);
|
|
60
|
+
if (m_updateStateHandler)
|
|
61
|
+
self->UpdateStateHandler(m_updateStateHandler);
|
|
62
|
+
if (m_updateEventEmitterHandler)
|
|
63
|
+
self->UpdateEventEmitterHandler(m_updateEventEmitterHandler);
|
|
64
|
+
if (m_mountChildComponentViewHandler)
|
|
65
|
+
self->MountChildComponentViewHandler(m_mountChildComponentViewHandler);
|
|
66
|
+
if (m_unmountChildComponentViewHandler)
|
|
67
|
+
self->UnmountChildComponentViewHandler(m_unmountChildComponentViewHandler);
|
|
68
|
+
if (m_createVisualHandler)
|
|
69
|
+
view.as<winrt::Microsoft::ReactNative::Composition::implementation::ViewComponentView>()->CreateVisualHandler(
|
|
70
|
+
m_createVisualHandler);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
void ReactCompositionViewComponentBuilder::SetComponentViewInitializer(
|
|
74
|
+
const ComponentViewInitializer &initializer) noexcept {
|
|
75
|
+
m_fnCreateView =
|
|
76
|
+
[initializer](const IReactContext &reactContext, int32_t tag, const Experimental::ICompositionContext &context) {
|
|
77
|
+
auto view = winrt::make<winrt::Microsoft::ReactNative::implementation::ComponentView>(tag, reactContext);
|
|
78
|
+
initializer(view);
|
|
79
|
+
return view;
|
|
80
|
+
};
|
|
81
|
+
m_descriptorConstructorFactory = []() {
|
|
82
|
+
return &facebook::react::concreteComponentDescriptorConstructor<::Microsoft::ReactNative::AbiComponentDescriptor>;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
void ReactCompositionViewComponentBuilder::SetViewComponentViewInitializer(
|
|
87
|
+
const ViewComponentViewInitializer &initializer) noexcept {
|
|
88
|
+
m_fnCreateView =
|
|
89
|
+
[initializer](const IReactContext &reactContext, int32_t tag, const Experimental::ICompositionContext &context) {
|
|
90
|
+
auto view = winrt::Microsoft::ReactNative::Composition::implementation::ViewComponentView::Create(
|
|
91
|
+
context, tag, reactContext)
|
|
92
|
+
.as<winrt::Microsoft::ReactNative::Composition::ViewComponentView>();
|
|
93
|
+
initializer(view);
|
|
94
|
+
return view;
|
|
95
|
+
};
|
|
96
|
+
m_descriptorConstructorFactory = []() {
|
|
97
|
+
return &facebook::react::concreteComponentDescriptorConstructor<
|
|
98
|
+
::Microsoft::ReactNative::AbiViewComponentDescriptor>;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
void ReactCompositionViewComponentBuilder::SetContentIslandComponentViewInitializer(
|
|
103
|
+
const ComponentIslandComponentViewInitializer &initializer) noexcept {
|
|
104
|
+
m_fnCreateView = [initializer](
|
|
105
|
+
const IReactContext &reactContext, int32_t tag, const Experimental::ICompositionContext &context)
|
|
106
|
+
-> winrt::Microsoft::ReactNative::Composition::ContentIslandComponentView {
|
|
107
|
+
auto view = winrt::make<winrt::Microsoft::ReactNative::Composition::implementation::ContentIslandComponentView>(
|
|
108
|
+
context, tag, reactContext);
|
|
109
|
+
initializer(view);
|
|
110
|
+
return view;
|
|
111
|
+
};
|
|
112
|
+
m_descriptorConstructorFactory = []() {
|
|
113
|
+
return &facebook::react::concreteComponentDescriptorConstructor<
|
|
114
|
+
::Microsoft::ReactNative::AbiViewComponentDescriptor>;
|
|
115
|
+
};
|
|
52
116
|
}
|
|
53
117
|
|
|
54
|
-
void ReactCompositionViewComponentBuilder::SetCreateViewComponentView(
|
|
55
|
-
CompositionViewComponentViewFactory impl) noexcept {
|
|
56
|
-
m_createView = impl;
|
|
57
|
-
assert(!m_createComponentView); // Only SetCreateComponentView OR SetCreateViewComponentView should be called
|
|
58
|
-
}
|
|
59
118
|
// (Object handle, Microsoft.ReactNative.IComponentState state) => void
|
|
60
119
|
// void ReactCompositionViewComponentBuilder::SetStateUpdater(StateUpdater impl) noexcept {
|
|
61
120
|
// m_stateUpdater = impl;
|
|
@@ -93,22 +152,53 @@ void ReactCompositionViewComponentBuilder::SetLayoutHandler(
|
|
|
93
152
|
m_layoutHandler = impl;
|
|
94
153
|
}
|
|
95
154
|
|
|
155
|
+
void ReactCompositionViewComponentBuilder::SetCustomCommandHandler(HandleCommandDelegate impl) noexcept {
|
|
156
|
+
m_customCommandHandler = impl;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
void ReactCompositionViewComponentBuilder::SetFinalizeUpdateHandler(UpdateFinalizerDelegate impl) noexcept {
|
|
160
|
+
m_finalizeUpdateHandler = impl;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
void ReactCompositionViewComponentBuilder::SetUpdatePropsHandler(UpdatePropsDelegate impl) noexcept {
|
|
164
|
+
m_updatePropsHandler = impl;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
void ReactCompositionViewComponentBuilder::SetUpdateStateHandler(UpdateStateDelegate impl) noexcept {
|
|
168
|
+
m_updateStateHandler = impl;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
void ReactCompositionViewComponentBuilder::SetUpdateEventEmitterHandler(UpdateEventEmitterDelegate impl) noexcept {
|
|
172
|
+
m_updateEventEmitterHandler = impl;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
void ReactCompositionViewComponentBuilder::SetMountChildComponentViewHandler(
|
|
176
|
+
MountChildComponentViewDelegate impl) noexcept {
|
|
177
|
+
m_mountChildComponentViewHandler = impl;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
void ReactCompositionViewComponentBuilder::SetUnmountChildComponentViewHandler(
|
|
181
|
+
UnmountChildComponentViewDelegate impl) noexcept {
|
|
182
|
+
m_unmountChildComponentViewHandler = impl;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
void ReactCompositionViewComponentBuilder::SetCreateVisualHandler(CreateVisualDelegate impl) noexcept {
|
|
186
|
+
m_createVisualHandler = impl;
|
|
187
|
+
}
|
|
188
|
+
|
|
96
189
|
winrt::Microsoft::ReactNative::ComponentView ReactCompositionViewComponentBuilder::CreateView(
|
|
97
190
|
const IReactContext &reactContext,
|
|
98
191
|
int32_t tag,
|
|
99
192
|
const Experimental::ICompositionContext &context) noexcept {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
assert(m_createComponentView);
|
|
105
|
-
auto args = winrt::make<winrt::Microsoft::ReactNative::implementation::CreateComponentViewArgs>(reactContext, tag);
|
|
106
|
-
return m_createComponentView(args);
|
|
107
|
-
}
|
|
193
|
+
assert(m_fnCreateView);
|
|
194
|
+
auto view = m_fnCreateView(reactContext, tag, context);
|
|
195
|
+
InitializeComponentView(view);
|
|
196
|
+
return view;
|
|
108
197
|
}
|
|
109
198
|
|
|
110
|
-
|
|
111
|
-
|
|
199
|
+
facebook::react::ComponentDescriptorConstructor *ReactCompositionViewComponentBuilder::GetComponentDescriptorProvider()
|
|
200
|
+
const noexcept {
|
|
201
|
+
return m_descriptorConstructorFactory();
|
|
112
202
|
}
|
|
113
203
|
|
|
114
204
|
} // namespace winrt::Microsoft::ReactNative::Composition
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
// Copyright (c) Microsoft Corporation.
|
|
3
3
|
// Licensed under the MIT License.
|
|
4
4
|
|
|
5
|
+
#include <Fabric/AbiComponentDescriptor.h>
|
|
6
|
+
#include <Fabric/AbiViewComponentDescriptor.h>
|
|
7
|
+
#include <react/renderer/componentregistry/ComponentDescriptorProvider.h>
|
|
5
8
|
#include <react/renderer/core/ReactPrimitives.h>
|
|
6
9
|
#include "winrt/Microsoft.ReactNative.Composition.Experimental.h"
|
|
7
10
|
#include "winrt/Microsoft.ReactNative.Composition.h"
|
|
@@ -16,7 +19,7 @@ struct ReactCompositionViewComponentBuilder : winrt::implements<
|
|
|
16
19
|
ReactCompositionViewComponentBuilder() noexcept;
|
|
17
20
|
|
|
18
21
|
public: // IReactViewComponentBuilder
|
|
19
|
-
void
|
|
22
|
+
void SetComponentViewInitializer(const ComponentViewInitializer &initializer) noexcept;
|
|
20
23
|
void SetCreateProps(ViewPropsFactory impl) noexcept;
|
|
21
24
|
|
|
22
25
|
// (Object handle, Microsoft.ReactNative.IComponentState state) => void
|
|
@@ -28,8 +31,19 @@ struct ReactCompositionViewComponentBuilder : winrt::implements<
|
|
|
28
31
|
void SetMeasureContentHandler(MeasureContentHandler impl) noexcept;
|
|
29
32
|
void SetLayoutHandler(LayoutHandler impl) noexcept;
|
|
30
33
|
|
|
34
|
+
void SetCustomCommandHandler(HandleCommandDelegate impl) noexcept;
|
|
35
|
+
void SetFinalizeUpdateHandler(UpdateFinalizerDelegate impl) noexcept;
|
|
36
|
+
void SetUpdatePropsHandler(UpdatePropsDelegate impl) noexcept;
|
|
37
|
+
void SetUpdateStateHandler(UpdateStateDelegate impl) noexcept;
|
|
38
|
+
void SetUpdateEventEmitterHandler(UpdateEventEmitterDelegate impl) noexcept;
|
|
39
|
+
void SetMountChildComponentViewHandler(MountChildComponentViewDelegate impl) noexcept;
|
|
40
|
+
void SetUnmountChildComponentViewHandler(UnmountChildComponentViewDelegate impl) noexcept;
|
|
41
|
+
|
|
31
42
|
public: // Composition::IReactCompositionViewComponentBuilder
|
|
32
|
-
void
|
|
43
|
+
void SetViewComponentViewInitializer(const ViewComponentViewInitializer &initializer) noexcept;
|
|
44
|
+
void SetContentIslandComponentViewInitializer(const ComponentIslandComponentViewInitializer &initializer) noexcept;
|
|
45
|
+
|
|
46
|
+
void SetCreateVisualHandler(CreateVisualDelegate impl) noexcept;
|
|
33
47
|
|
|
34
48
|
public:
|
|
35
49
|
IComponentProps CreateProps(ViewProps props) noexcept;
|
|
@@ -39,7 +53,7 @@ struct ReactCompositionViewComponentBuilder : winrt::implements<
|
|
|
39
53
|
winrt::Microsoft::ReactNative::IComponentProps props) noexcept;
|
|
40
54
|
MeasureContentHandler MeasureContentHandler() const noexcept;
|
|
41
55
|
LayoutHandler LayoutHandler() const noexcept;
|
|
42
|
-
|
|
56
|
+
facebook::react::ComponentDescriptorConstructor *GetComponentDescriptorProvider() const noexcept;
|
|
43
57
|
|
|
44
58
|
winrt::Microsoft::ReactNative::ComponentView CreateView(
|
|
45
59
|
const IReactContext &reactContext,
|
|
@@ -47,15 +61,29 @@ struct ReactCompositionViewComponentBuilder : winrt::implements<
|
|
|
47
61
|
const Experimental::ICompositionContext &context) noexcept;
|
|
48
62
|
|
|
49
63
|
private:
|
|
64
|
+
void InitializeComponentView(const winrt::Microsoft::ReactNative::ComponentView &view) noexcept;
|
|
65
|
+
|
|
50
66
|
ViewPropsFactory m_propsFactory;
|
|
51
67
|
ViewShadowNodeFactory m_shadowNodeFactory;
|
|
52
68
|
ViewShadowNodeCloner m_shadowNodeCloner;
|
|
53
69
|
InitialStateDataFactory m_initialStateDataFactory;
|
|
54
70
|
winrt::Microsoft::ReactNative::MeasureContentHandler m_measureContent;
|
|
55
71
|
winrt::Microsoft::ReactNative::LayoutHandler m_layoutHandler;
|
|
72
|
+
std::function<winrt::Microsoft::ReactNative::ComponentView(
|
|
73
|
+
const IReactContext &reactContext,
|
|
74
|
+
int32_t tag,
|
|
75
|
+
const Experimental::ICompositionContext &context)>
|
|
76
|
+
m_fnCreateView;
|
|
77
|
+
std::function<facebook::react::ComponentDescriptorConstructor *()> m_descriptorConstructorFactory;
|
|
78
|
+
winrt::Microsoft::ReactNative::HandleCommandDelegate m_customCommandHandler;
|
|
79
|
+
winrt::Microsoft::ReactNative::UpdateFinalizerDelegate m_finalizeUpdateHandler;
|
|
80
|
+
winrt::Microsoft::ReactNative::UpdatePropsDelegate m_updatePropsHandler;
|
|
81
|
+
winrt::Microsoft::ReactNative::UpdateStateDelegate m_updateStateHandler;
|
|
82
|
+
winrt::Microsoft::ReactNative::UpdateEventEmitterDelegate m_updateEventEmitterHandler;
|
|
83
|
+
winrt::Microsoft::ReactNative::MountChildComponentViewDelegate m_mountChildComponentViewHandler;
|
|
84
|
+
winrt::Microsoft::ReactNative::UnmountChildComponentViewDelegate m_unmountChildComponentViewHandler;
|
|
56
85
|
|
|
57
|
-
|
|
58
|
-
CompositionViewComponentViewFactory m_createView{nullptr};
|
|
86
|
+
winrt::Microsoft::ReactNative::Composition::CreateVisualDelegate m_createVisualHandler;
|
|
59
87
|
};
|
|
60
88
|
|
|
61
89
|
} // namespace winrt::Microsoft::ReactNative::Composition
|
|
@@ -143,9 +143,13 @@ ReactNativeIsland::ReactNativeIsland(const winrt::Microsoft::UI::Composition::Co
|
|
|
143
143
|
|
|
144
144
|
ReactNativeIsland::~ReactNativeIsland() noexcept {
|
|
145
145
|
#ifdef USE_WINUI3
|
|
146
|
-
if (m_island
|
|
146
|
+
if (m_island) {
|
|
147
147
|
m_island.AutomationProviderRequested(m_islandAutomationProviderRequestedToken);
|
|
148
148
|
m_island.StateChanged(m_islandStateChangedToken);
|
|
149
|
+
#ifdef USE_EXPERIMENTAL_WINUI3
|
|
150
|
+
m_island.Connected(m_islandConnectedToken);
|
|
151
|
+
m_island.Disconnected(m_islandDisconnectedToken);
|
|
152
|
+
#endif
|
|
149
153
|
}
|
|
150
154
|
#endif
|
|
151
155
|
|
|
@@ -199,6 +203,12 @@ void ReactNativeIsland::AddRenderedVisual(
|
|
|
199
203
|
assert(!m_hasRenderedVisual);
|
|
200
204
|
InternalRootVisual().InsertAt(visual, 0);
|
|
201
205
|
m_hasRenderedVisual = true;
|
|
206
|
+
|
|
207
|
+
if (m_mounted) {
|
|
208
|
+
if (auto componentView = GetComponentView()) {
|
|
209
|
+
componentView->onMounted();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
202
212
|
}
|
|
203
213
|
|
|
204
214
|
void ReactNativeIsland::RemoveRenderedVisual(
|
|
@@ -398,6 +408,7 @@ void ReactNativeIsland::InitRootView(
|
|
|
398
408
|
m_context = winrt::Microsoft::ReactNative::ReactContext(std::move(context));
|
|
399
409
|
m_reactViewOptions = std::move(viewOptions);
|
|
400
410
|
m_CompositionEventHandler = std::make_shared<::Microsoft::ReactNative::CompositionEventHandler>(m_context, *this);
|
|
411
|
+
m_CompositionEventHandler->Initialize();
|
|
401
412
|
|
|
402
413
|
UpdateRootViewInternal();
|
|
403
414
|
|
|
@@ -752,13 +763,58 @@ winrt::Microsoft::UI::Content::ContentIsland ReactNativeIsland::Island() {
|
|
|
752
763
|
if (args.DidRasterizationScaleChange()) {
|
|
753
764
|
pThis->ScaleFactor(island.RasterizationScale());
|
|
754
765
|
}
|
|
766
|
+
#ifndef USE_EXPERIMENTAL_WINUI3 // Use this in place of Connected/Disconnected events for now. -- Its not quite what we
|
|
767
|
+
// want, but it will do for now.
|
|
768
|
+
if (args.DidSiteVisibleChange()) {
|
|
769
|
+
if (island.IsSiteVisible()) {
|
|
770
|
+
pThis->OnMounted();
|
|
771
|
+
} else {
|
|
772
|
+
pThis->OnUnmounted();
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
#endif
|
|
755
776
|
}
|
|
756
777
|
});
|
|
778
|
+
#ifdef USE_EXPERIMENTAL_WINUI3
|
|
779
|
+
m_islandConnectedToken = m_island.Connected(
|
|
780
|
+
[weakThis = get_weak()](
|
|
781
|
+
winrt::IInspectable const &, winrt::Microsoft::UI::Content::ContentIsland const &island) {
|
|
782
|
+
if (auto pThis = weakThis.get()) {
|
|
783
|
+
pThis->OnMounted();
|
|
784
|
+
}
|
|
785
|
+
});
|
|
786
|
+
|
|
787
|
+
m_islandDisconnectedToken = m_island.Disconnected(
|
|
788
|
+
[weakThis = get_weak()](
|
|
789
|
+
winrt::IInspectable const &, winrt::Microsoft::UI::Content::ContentIsland const &island) {
|
|
790
|
+
if (auto pThis = weakThis.get()) {
|
|
791
|
+
pThis->OnUnmounted();
|
|
792
|
+
}
|
|
793
|
+
});
|
|
794
|
+
#endif
|
|
757
795
|
}
|
|
758
796
|
return m_island;
|
|
759
797
|
}
|
|
760
798
|
#endif
|
|
761
799
|
|
|
800
|
+
void ReactNativeIsland::OnMounted() noexcept {
|
|
801
|
+
if (m_mounted)
|
|
802
|
+
return;
|
|
803
|
+
m_mounted = true;
|
|
804
|
+
if (auto componentView = GetComponentView()) {
|
|
805
|
+
componentView->onMounted();
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
void ReactNativeIsland::OnUnmounted() noexcept {
|
|
810
|
+
if (!m_mounted)
|
|
811
|
+
return;
|
|
812
|
+
m_mounted = false;
|
|
813
|
+
if (auto componentView = GetComponentView()) {
|
|
814
|
+
componentView->onUnmounted();
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
|
|
762
818
|
winrt::Microsoft::ReactNative::Composition::implementation::RootComponentView *
|
|
763
819
|
ReactNativeIsland::GetComponentView() noexcept {
|
|
764
820
|
if (!m_context || m_context.Handle().LoadingState() != winrt::Microsoft::ReactNative::LoadingState::Loaded ||
|
|
@@ -61,6 +61,9 @@ struct ReactNativeIsland
|
|
|
61
61
|
winrt::Microsoft::ReactNative::Composition::Experimental::IVisual InternalRootVisual() noexcept;
|
|
62
62
|
void InternalRootVisual(winrt::Microsoft::ReactNative::Composition::Experimental::IVisual const &value) noexcept;
|
|
63
63
|
|
|
64
|
+
void OnMounted() noexcept;
|
|
65
|
+
void OnUnmounted() noexcept;
|
|
66
|
+
|
|
64
67
|
// property Size
|
|
65
68
|
winrt::Windows::Foundation::Size Size() noexcept;
|
|
66
69
|
void Size(winrt::Windows::Foundation::Size value) noexcept;
|
|
@@ -126,6 +129,8 @@ struct ReactNativeIsland
|
|
|
126
129
|
winrt::event_token m_islandFrameworkClosedToken;
|
|
127
130
|
winrt::event_token m_islandAutomationProviderRequestedToken;
|
|
128
131
|
winrt::event_token m_islandStateChangedToken;
|
|
132
|
+
winrt::event_token m_islandConnectedToken;
|
|
133
|
+
winrt::event_token m_islandDisconnectedToken;
|
|
129
134
|
#endif
|
|
130
135
|
|
|
131
136
|
HWND m_hwnd{0};
|
|
@@ -133,6 +138,7 @@ struct ReactNativeIsland
|
|
|
133
138
|
bool m_isJSViewAttached{false};
|
|
134
139
|
bool m_hasRenderedVisual{false};
|
|
135
140
|
bool m_showingLoadingUI{false};
|
|
141
|
+
bool m_mounted{false};
|
|
136
142
|
IReactDispatcher m_uiDispatcher{nullptr};
|
|
137
143
|
winrt::IInspectable m_uiaProvider{nullptr};
|
|
138
144
|
int64_t m_rootTag{-1};
|
|
@@ -24,8 +24,7 @@ RootComponentView::RootComponentView(
|
|
|
24
24
|
reactContext,
|
|
25
25
|
ComponentViewFeatures::Default &
|
|
26
26
|
~(ComponentViewFeatures::Background | ComponentViewFeatures::ShadowProps |
|
|
27
|
-
ComponentViewFeatures::NativeBorder)
|
|
28
|
-
false) {}
|
|
27
|
+
ComponentViewFeatures::NativeBorder)) {}
|
|
29
28
|
|
|
30
29
|
RootComponentView::~RootComponentView() {
|
|
31
30
|
if (auto rootView = m_wkRootView.get()) {
|
|
@@ -203,6 +202,13 @@ winrt::IInspectable RootComponentView::UiaProviderFromPoint(const POINT &ptPixel
|
|
|
203
202
|
return winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(view)->EnsureUiaProvider();
|
|
204
203
|
}
|
|
205
204
|
|
|
205
|
+
winrt::Microsoft::UI::Content::ContentIsland RootComponentView::parentContentIsland() noexcept {
|
|
206
|
+
if (auto rootView = m_wkRootView.get()) {
|
|
207
|
+
return winrt::get_self<winrt::Microsoft::ReactNative::implementation::ReactNativeIsland>(rootView)->Island();
|
|
208
|
+
}
|
|
209
|
+
return nullptr;
|
|
210
|
+
}
|
|
211
|
+
|
|
206
212
|
winrt::Microsoft::ReactNative::implementation::ClipState RootComponentView::getClipState() noexcept {
|
|
207
213
|
return winrt::Microsoft::ReactNative::implementation::ClipState::NoClip;
|
|
208
214
|
}
|
|
@@ -36,6 +36,8 @@ struct RootComponentView : RootComponentViewT<RootComponentView, ViewComponentVi
|
|
|
36
36
|
|
|
37
37
|
RootComponentView *rootComponentView() noexcept override;
|
|
38
38
|
|
|
39
|
+
winrt::Microsoft::UI::Content::ContentIsland parentContentIsland() noexcept;
|
|
40
|
+
|
|
39
41
|
// Index that visuals can be inserted into OuterVisual for debugging UI
|
|
40
42
|
uint32_t overlayIndex() noexcept;
|
|
41
43
|
void start(const winrt::Microsoft::ReactNative::ReactNativeIsland &rootView) noexcept;
|