react-native-windows 0.74.0-preview.3 → 0.74.0

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.
Files changed (66) hide show
  1. package/Microsoft.ReactNative/CompositionComponentView.idl +18 -3
  2. package/Microsoft.ReactNative/CompositionContext.idl +5 -5
  3. package/Microsoft.ReactNative/CompositionRootView.idl +22 -8
  4. package/Microsoft.ReactNative/CompositionSwitcher.idl +2 -2
  5. package/Microsoft.ReactNative/CompositionUIService.idl +8 -6
  6. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +8 -1
  7. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +7 -2
  8. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +4 -3
  9. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.h +5 -5
  10. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.cpp +1 -1
  11. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.h +2 -1
  12. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +181 -154
  13. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +8 -8
  14. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +13 -13
  15. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +1 -1
  16. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +14 -11
  17. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.cpp +36 -12
  18. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.h +16 -10
  19. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView_emptyimpl.cpp +15 -4
  20. package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService.cpp +20 -9
  21. package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService.h +6 -4
  22. package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService_emptyimpl.cpp +5 -2
  23. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +180 -128
  24. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +25 -19
  25. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +2 -2
  26. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.h +2 -2
  27. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +16 -22
  28. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +5 -5
  29. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +9 -10
  30. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.h +5 -5
  31. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -5
  32. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +5 -5
  33. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +1 -1
  34. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +5 -2
  35. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +7 -3
  36. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +2 -2
  37. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +36 -35
  38. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +6 -6
  39. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +9 -9
  40. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.h +6 -6
  41. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +25 -19
  42. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +6 -6
  43. package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +13 -3
  44. package/Microsoft.ReactNative/Fabric/Composition/Theme.h +16 -8
  45. package/Microsoft.ReactNative/Fabric/Composition/Theme_emptyimpl.cpp +3 -3
  46. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +5 -8
  47. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.h +3 -3
  48. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +1 -1
  49. package/Microsoft.ReactNative/Fabric/IComponentViewRegistry.h +1 -1
  50. package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.cpp +2 -1
  51. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +7 -5
  52. package/Microsoft.ReactNative/Theme.idl +12 -1
  53. package/Microsoft.ReactNative/Utils/KeyboardUtils.cpp +10 -2
  54. package/Microsoft.ReactNative/Utils/KeyboardUtils.h +4 -1
  55. package/Microsoft.ReactNative/ViewProps.idl +11 -1
  56. package/Microsoft.ReactNative/packages.lock.json +70 -42
  57. package/Microsoft.ReactNative.Cxx/AutoDraw.h +6 -4
  58. package/Microsoft.ReactNative.Cxx/{CompositionSwitcher.interop.h → CompositionSwitcher.Experimental.interop.h} +3 -3
  59. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +2 -0
  60. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +2 -11
  61. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppApp.props +1 -1
  62. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +5 -3
  63. package/PropertySheets/Generated/PackageVersion.g.props +2 -2
  64. package/Scripts/OfficeReact.Win32.nuspec +2 -0
  65. package/package.json +8 -5
  66. package/templates/cpp-app/windows/MyApp/MyApp.cpp +2 -7
@@ -27,16 +27,18 @@ struct CreateCompositionComponentViewArgs
27
27
  CreateCompositionComponentViewArgs(
28
28
  const winrt::Microsoft::ReactNative::IReactContext &reactContext,
29
29
  facebook::react::Tag tag,
30
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compositionContext);
30
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compositionContext);
31
31
 
32
- winrt::Microsoft::ReactNative::Composition::ICompositionContext CompositionContext() const noexcept;
32
+ winrt::Microsoft::UI::Composition::Compositor Compositor() const noexcept;
33
+
34
+ winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext CompositionContext() const noexcept;
33
35
 
34
36
  ComponentViewFeatures Features() const noexcept;
35
37
  void Features(ComponentViewFeatures value) noexcept;
36
38
 
37
39
  private:
38
40
  ComponentViewFeatures m_features{ComponentViewFeatures::Default};
39
- winrt::Microsoft::ReactNative::Composition::ICompositionContext m_compositionContext;
41
+ winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext m_compositionContext;
40
42
  };
41
43
 
42
44
  struct ComponentView
@@ -45,17 +47,17 @@ struct ComponentView
45
47
 
46
48
  ComponentView(winrt::Microsoft::ReactNative::Composition::CreateCompositionComponentViewArgs const &args);
47
49
  ComponentView(
48
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
50
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
49
51
  facebook::react::Tag tag,
50
52
  winrt::Microsoft::ReactNative::ReactContext const &reactContext,
51
53
  ComponentViewFeatures flags,
52
54
  bool customControl);
53
55
 
54
- virtual winrt::Microsoft::ReactNative::Composition::IVisual Visual() const noexcept {
56
+ virtual winrt::Microsoft::ReactNative::Composition::Experimental::IVisual Visual() const noexcept {
55
57
  return nullptr;
56
58
  };
57
59
  // Visual that should be parented to this ComponentView's parent
58
- virtual winrt::Microsoft::ReactNative::Composition::IVisual OuterVisual() const noexcept;
60
+ virtual winrt::Microsoft::ReactNative::Composition::Experimental::IVisual OuterVisual() const noexcept;
59
61
  void updateEventEmitter(facebook::react::EventEmitter::Shared const &eventEmitter) noexcept override;
60
62
  const facebook::react::SharedViewEventEmitter &GetEventEmitter() const noexcept;
61
63
  void HandleCommand(winrt::hstring commandName, const winrt::Microsoft::ReactNative::IJSValueReader &args) noexcept
@@ -94,7 +96,7 @@ struct ComponentView
94
96
  void updateTransformProps(
95
97
  const facebook::react::ViewProps &oldViewProps,
96
98
  const facebook::react::ViewProps &newViewProps,
97
- winrt::Microsoft::ReactNative::Composition::IVisual m_visual) noexcept;
99
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual m_visual) noexcept;
98
100
  void updateAccessibilityProps(
99
101
  const facebook::react::ViewProps &oldView,
100
102
  const facebook::react::ViewProps &newViewProps) noexcept;
@@ -116,7 +118,8 @@ struct ComponentView
116
118
  virtual std::string DefaultAccessibleName() const noexcept;
117
119
  virtual std::string DefaultHelpText() const noexcept;
118
120
 
119
- winrt::Microsoft::ReactNative::Composition::ICompositionContext CompositionContext() const noexcept;
121
+ winrt::Microsoft::UI::Composition::Compositor Compositor() const noexcept;
122
+ winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext CompositionContext() const noexcept;
120
123
 
121
124
  // Publicaly overridable APIs
122
125
  void FinalizeUpdates(winrt::Microsoft::ReactNative::ComponentViewUpdateMask updateMask) noexcept override;
@@ -129,7 +132,7 @@ struct ComponentView
129
132
  facebook::react::Point &localPt) const noexcept;
130
133
 
131
134
  winrt::IInspectable m_uiaProvider{nullptr};
132
- winrt::Microsoft::ReactNative::Composition::ICompositionContext m_compContext;
135
+ winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext m_compContext;
133
136
  comp::CompositionPropertySet m_centerPropSet{nullptr};
134
137
  facebook::react::SharedViewEventEmitter m_eventEmitter;
135
138
  facebook::react::LayoutMetrics m_layoutMetrics;
@@ -150,23 +153,24 @@ struct ComponentView
150
153
  const facebook::react::ViewProps &viewProps) noexcept;
151
154
  bool TryUpdateSpecialBorderLayers(
152
155
  winrt::Microsoft::ReactNative::Composition::implementation::Theme *theme,
153
- std::array<winrt::Microsoft::ReactNative::Composition::ISpriteVisual, SpecialBorderLayerCount> &spBorderVisuals,
156
+ std::array<winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual, SpecialBorderLayerCount>
157
+ &spBorderVisuals,
154
158
  facebook::react::LayoutMetrics const &layoutMetrics,
155
159
  const facebook::react::ViewProps &viewProps) noexcept;
156
- std::array<winrt::Microsoft::ReactNative::Composition::ISpriteVisual, SpecialBorderLayerCount>
160
+ std::array<winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual, SpecialBorderLayerCount>
157
161
  FindSpecialBorderLayers() const noexcept;
158
162
  void UpdateCenterPropertySet() noexcept;
159
163
 
160
164
  ComponentViewFeatures m_flags;
161
165
  void showFocusVisual(bool show) noexcept;
162
- winrt::Microsoft::ReactNative::Composition::IFocusVisual m_focusVisual{nullptr};
163
- winrt::Microsoft::ReactNative::Composition::IVisual m_outerVisual{nullptr};
166
+ winrt::Microsoft::ReactNative::Composition::Experimental::IFocusVisual m_focusVisual{nullptr};
167
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual m_outerVisual{nullptr};
164
168
  };
165
169
 
166
170
  struct ViewComponentView : public ViewComponentViewT<ViewComponentView, ComponentView> {
167
171
  ViewComponentView(winrt::Microsoft::ReactNative::Composition::CreateCompositionComponentViewArgs const &args);
168
172
  [[nodiscard]] static winrt::Microsoft::ReactNative::ComponentView Create(
169
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
173
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
170
174
  facebook::react::Tag tag,
171
175
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept;
172
176
 
@@ -200,23 +204,25 @@ struct ViewComponentView : public ViewComponentViewT<ViewComponentView, Componen
200
204
  bool ignorePointerEvents = false) const noexcept override;
201
205
  const winrt::Microsoft::ReactNative::IComponentProps userProps(
202
206
  facebook::react::Props::Shared const &props) noexcept override;
203
- winrt::Microsoft::ReactNative::Composition::IVisual Visual() const noexcept override;
207
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual Visual() const noexcept override;
204
208
  void ensureVisual() noexcept;
205
209
 
206
210
  ViewComponentView(
207
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
211
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
208
212
  facebook::react::Tag tag,
209
213
  winrt::Microsoft::ReactNative::ReactContext const &reactContext,
210
214
  ComponentViewFeatures flags,
211
215
  bool customComponent);
212
216
 
213
- // Publicaly overridable APIs
214
- virtual winrt::Microsoft::ReactNative::Composition::IVisual CreateVisual() noexcept;
217
+ virtual winrt::Microsoft::ReactNative::Composition::Experimental::IVisual createVisual() noexcept;
218
+
219
+ // Publicly overridable APIs
220
+ virtual winrt::Microsoft::UI::Composition::Visual CreateVisual() noexcept;
215
221
  virtual void UpdateLayoutMetrics(const LayoutMetrics &metrics, const LayoutMetrics &oldMetrics) noexcept;
216
222
 
217
223
  private:
218
224
  facebook::react::SharedViewProps m_props;
219
- winrt::Microsoft::ReactNative::Composition::IVisual m_visual{nullptr};
225
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual m_visual{nullptr};
220
226
  };
221
227
 
222
228
  } // namespace winrt::Microsoft::ReactNative::Composition::implementation
@@ -11,7 +11,7 @@
11
11
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
12
12
 
13
13
  DebuggingOverlayComponentView::DebuggingOverlayComponentView(
14
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
14
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
15
15
  facebook::react::Tag tag,
16
16
  winrt::Microsoft::ReactNative::ReactContext const &reactContext)
17
17
  : base_type(
@@ -38,7 +38,7 @@ void DebuggingOverlayComponentView::UnmountChildComponentView(
38
38
  }
39
39
 
40
40
  winrt::Microsoft::ReactNative::ComponentView DebuggingOverlayComponentView::Create(
41
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
41
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
42
42
  facebook::react::Tag tag,
43
43
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept {
44
44
  return winrt::make<DebuggingOverlayComponentView>(compContext, tag, reactContext);
@@ -13,7 +13,7 @@ namespace winrt::Microsoft::ReactNative::Composition::implementation {
13
13
  struct DebuggingOverlayComponentView
14
14
  : DebuggingOverlayComponentViewT<DebuggingOverlayComponentView, ViewComponentView> {
15
15
  [[nodiscard]] static winrt::Microsoft::ReactNative::ComponentView Create(
16
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
16
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
17
17
  facebook::react::Tag tag,
18
18
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept;
19
19
 
@@ -25,7 +25,7 @@ struct DebuggingOverlayComponentView
25
25
  uint32_t index) noexcept override;
26
26
 
27
27
  DebuggingOverlayComponentView(
28
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
28
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
29
29
  facebook::react::Tag tag,
30
30
  winrt::Microsoft::ReactNative::ReactContext const &reactContext);
31
31
 
@@ -49,7 +49,7 @@ void ImageComponentView::WindowsImageResponseObserver::didReceiveFailure() const
49
49
  }
50
50
 
51
51
  ImageComponentView::ImageComponentView(
52
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
52
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
53
53
  facebook::react::Tag tag,
54
54
  winrt::Microsoft::ReactNative::ReactContext const &reactContext)
55
55
  : Super(
@@ -225,7 +225,8 @@ void ImageComponentView::ensureDrawingSurface() noexcept {
225
225
  const auto frame{m_layoutMetrics.getContentFrame().size};
226
226
 
227
227
  if (imageProps->resizeMode == facebook::react::ImageResizeMode::Repeat) {
228
- drawingSurfaceSize = {frame.width, frame.height};
228
+ drawingSurfaceSize = {
229
+ frame.width * m_layoutMetrics.pointScaleFactor, frame.height * m_layoutMetrics.pointScaleFactor};
229
230
  } else if (imageProps->blurRadius > 0) {
230
231
  // https://learn.microsoft.com/en-us/windows/win32/direct2d/gaussian-blur#output-bitmap
231
232
  // The following equation that can be used to compute the output bitmap:
@@ -244,13 +245,14 @@ void ImageComponentView::ensureDrawingSurface() noexcept {
244
245
 
245
246
  switch (imageProps->resizeMode) {
246
247
  case facebook::react::ImageResizeMode::Stretch:
247
- m_drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::CompositionStretch::Fill);
248
+ m_drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::Experimental::CompositionStretch::Fill);
248
249
  break;
249
250
  case facebook::react::ImageResizeMode::Cover:
250
- m_drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::CompositionStretch::UniformToFill);
251
+ m_drawingSurface.Stretch(
252
+ winrt::Microsoft::ReactNative::Composition::Experimental::CompositionStretch::UniformToFill);
251
253
  break;
252
254
  case facebook::react::ImageResizeMode::Contain:
253
- m_drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::CompositionStretch::Uniform);
255
+ m_drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::Experimental::CompositionStretch::Uniform);
254
256
  break;
255
257
  case facebook::react::ImageResizeMode::Repeat:
256
258
  // TODO - set AlignmentRatio back to 0.5f when switching between resizeModes once we no longer recreate the
@@ -262,8 +264,8 @@ void ImageComponentView::ensureDrawingSurface() noexcept {
262
264
  case facebook::react::ImageResizeMode::Center: {
263
265
  m_drawingSurface.Stretch(
264
266
  (height < frame.height && width < frame.width)
265
- ? winrt::Microsoft::ReactNative::Composition::CompositionStretch::None
266
- : winrt::Microsoft::ReactNative::Composition::CompositionStretch::Uniform);
267
+ ? winrt::Microsoft::ReactNative::Composition::Experimental::CompositionStretch::None
268
+ : winrt::Microsoft::ReactNative::Composition::Experimental::CompositionStretch::Uniform);
267
269
  break;
268
270
  }
269
271
  default:
@@ -290,7 +292,7 @@ void ImageComponentView::DrawImage() noexcept {
290
292
 
291
293
  assert(m_reactContext.UIDispatcher().HasThreadAccess());
292
294
 
293
- ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(m_drawingSurface, &offset);
295
+ ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(m_drawingSurface, 1.0f, &offset);
294
296
  if (auto d2dDeviceContext = autoDraw.GetRenderTarget()) {
295
297
  winrt::com_ptr<ID2D1Bitmap1> bitmap;
296
298
  winrt::check_hresult(d2dDeviceContext->CreateBitmapFromWicBitmap(m_wicbmp.get(), nullptr, bitmap.put()));
@@ -361,20 +363,12 @@ void ImageComponentView::DrawImage() noexcept {
361
363
  winrt::check_hresult(m_wicbmp->GetSize(&width, &height));
362
364
 
363
365
  D2D1_RECT_F rect = D2D1::RectF(
364
- static_cast<float>(offset.x / m_layoutMetrics.pointScaleFactor),
365
- static_cast<float>(offset.y / m_layoutMetrics.pointScaleFactor),
366
- static_cast<float>((offset.x + width) / m_layoutMetrics.pointScaleFactor),
367
- static_cast<float>((offset.y + height) / m_layoutMetrics.pointScaleFactor));
368
-
369
- const auto dpi = m_layoutMetrics.pointScaleFactor * 96.0f;
370
- float oldDpiX, oldDpiY;
371
- d2dDeviceContext->GetDpi(&oldDpiX, &oldDpiY);
372
- d2dDeviceContext->SetDpi(dpi, dpi);
366
+ static_cast<float>(offset.x),
367
+ static_cast<float>(offset.y),
368
+ static_cast<float>(offset.x + width),
369
+ static_cast<float>(offset.y + height));
373
370
 
374
371
  d2dDeviceContext->DrawBitmap(bitmap.get(), rect);
375
-
376
- // Restore old dpi setting
377
- d2dDeviceContext->SetDpi(oldDpiX, oldDpiY);
378
372
  }
379
373
  }
380
374
  }
@@ -416,7 +410,7 @@ void ImageComponentView::ensureVisual() noexcept {
416
410
  }
417
411
  }
418
412
 
419
- winrt::Microsoft::ReactNative::Composition::IVisual ImageComponentView::Visual() const noexcept {
413
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual ImageComponentView::Visual() const noexcept {
420
414
  return m_visual;
421
415
  }
422
416
 
@@ -429,7 +423,7 @@ std::string ImageComponentView::DefaultControlType() const noexcept {
429
423
  }
430
424
 
431
425
  winrt::Microsoft::ReactNative::ComponentView ImageComponentView::Create(
432
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
426
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
433
427
  facebook::react::Tag tag,
434
428
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept {
435
429
  return winrt::make<ImageComponentView>(compContext, tag, reactContext);
@@ -32,7 +32,7 @@ struct ImageComponentView : ImageComponentViewT<ImageComponentView, ComponentVie
32
32
  using Super = ImageComponentViewT<ImageComponentView, ComponentView>;
33
33
 
34
34
  [[nodiscard]] static winrt::Microsoft::ReactNative::ComponentView Create(
35
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
35
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
36
36
  facebook::react::Tag tag,
37
37
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept;
38
38
 
@@ -56,12 +56,12 @@ struct ImageComponentView : ImageComponentViewT<ImageComponentView, ComponentVie
56
56
 
57
57
  facebook::react::Tag hitTest(facebook::react::Point pt, facebook::react::Point &localPt, bool ignorePointerEvents)
58
58
  const noexcept override;
59
- winrt::Microsoft::ReactNative::Composition::IVisual Visual() const noexcept override;
59
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual Visual() const noexcept override;
60
60
  bool focusable() const noexcept override;
61
61
  virtual std::string DefaultControlType() const noexcept;
62
62
 
63
63
  ImageComponentView(
64
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
64
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
65
65
  facebook::react::Tag tag,
66
66
  winrt::Microsoft::ReactNative::ReactContext const &reactContext);
67
67
 
@@ -91,8 +91,8 @@ struct ImageComponentView : ImageComponentViewT<ImageComponentView, ComponentVie
91
91
 
92
92
  std::shared_ptr<const facebook::react::ImageProps> m_props;
93
93
 
94
- winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual{nullptr};
95
- winrt::Microsoft::ReactNative::Composition::IDrawingSurfaceBrush m_drawingSurface;
94
+ winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual m_visual{nullptr};
95
+ winrt::Microsoft::ReactNative::Composition::Experimental::IDrawingSurfaceBrush m_drawingSurface;
96
96
  winrt::com_ptr<IWICBitmap> m_wicbmp;
97
97
  std::shared_ptr<WindowsImageResponseObserver> m_imageResponseObserver;
98
98
  facebook::react::ImageShadowNode::ConcreteState::Shared m_state;
@@ -19,7 +19,7 @@
19
19
 
20
20
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
21
21
  WindowsModalHostComponentView::WindowsModalHostComponentView(
22
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
22
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
23
23
  facebook::react::Tag tag,
24
24
  winrt::Microsoft::ReactNative::ReactContext const &reactContext)
25
25
  : Super(
@@ -34,7 +34,7 @@ WindowsModalHostComponentView::WindowsModalHostComponentView(
34
34
  }
35
35
 
36
36
  winrt::Microsoft::ReactNative::ComponentView WindowsModalHostComponentView::Create(
37
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
37
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
38
38
  facebook::react::Tag tag,
39
39
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept {
40
40
  return winrt::make<WindowsModalHostComponentView>(compContext, tag, reactContext);
@@ -240,7 +240,7 @@ void WindowsModalHostComponentView::updateLayoutMetrics(
240
240
 
241
241
  drawingSurface.HorizontalAlignmentRatio(0.f);
242
242
  drawingSurface.VerticalAlignmentRatio(0.f);
243
- drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::CompositionStretch::None);
243
+ drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::Experimental::CompositionStretch::None);
244
244
  m_visual.Brush(drawingSurface);
245
245
  m_visual.Size(surfaceSize);
246
246
  m_visual.Offset({
@@ -251,14 +251,11 @@ void WindowsModalHostComponentView::updateLayoutMetrics(
251
251
 
252
252
  POINT offset;
253
253
  {
254
- ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(drawingSurface, &offset);
254
+ ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(
255
+ drawingSurface, m_layoutMetrics.pointScaleFactor, &offset);
255
256
  if (auto d2dDeviceContext = autoDraw.GetRenderTarget()) {
256
257
  d2dDeviceContext->Clear(D2D1::ColorF(D2D1::ColorF::Blue, 0.3f));
257
258
  assert(d2dDeviceContext->GetUnitMode() == D2D1_UNIT_MODE_DIPS);
258
- const auto dpi = m_layoutMetrics.pointScaleFactor * 96.0f;
259
- float oldDpiX, oldDpiY;
260
- d2dDeviceContext->GetDpi(&oldDpiX, &oldDpiY);
261
- d2dDeviceContext->SetDpi(dpi, dpi);
262
259
 
263
260
  float offsetX = static_cast<float>(offset.x / m_layoutMetrics.pointScaleFactor);
264
261
  float offsetY = static_cast<float>(offset.y / m_layoutMetrics.pointScaleFactor);
@@ -307,11 +304,13 @@ facebook::react::SharedViewProps WindowsModalHostComponentView::viewProps() noex
307
304
  return m_props;
308
305
  }
309
306
 
310
- winrt::Microsoft::ReactNative::Composition::IVisual WindowsModalHostComponentView::Visual() const noexcept {
307
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual WindowsModalHostComponentView::Visual()
308
+ const noexcept {
311
309
  return m_visual;
312
310
  }
313
311
 
314
- winrt::Microsoft::ReactNative::Composition::IVisual WindowsModalHostComponentView::OuterVisual() const noexcept {
312
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual WindowsModalHostComponentView::OuterVisual()
313
+ const noexcept {
315
314
  return m_visual;
316
315
  }
317
316
 
@@ -17,7 +17,7 @@ struct WindowsModalHostComponentView : WindowsModalHostComponentViewT<WindowsMod
17
17
  using Super = WindowsModalHostComponentViewT<WindowsModalHostComponentView, ComponentView>;
18
18
 
19
19
  [[nodiscard]] static winrt::Microsoft::ReactNative::ComponentView Create(
20
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
20
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
21
21
  facebook::react::Tag tag,
22
22
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept;
23
23
 
@@ -42,12 +42,12 @@ struct WindowsModalHostComponentView : WindowsModalHostComponentViewT<WindowsMod
42
42
  bool focusable() const noexcept override;
43
43
  facebook::react::Tag hitTest(facebook::react::Point pt, facebook::react::Point &localPt, bool ignorePointerEvents)
44
44
  const noexcept override;
45
- winrt::Microsoft::ReactNative::Composition::IVisual Visual() const noexcept override;
46
- winrt::Microsoft::ReactNative::Composition::IVisual OuterVisual() const noexcept override;
45
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual Visual() const noexcept override;
46
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual OuterVisual() const noexcept override;
47
47
  virtual std::string DefaultControlType() const noexcept;
48
48
 
49
49
  WindowsModalHostComponentView(
50
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
50
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
51
51
  facebook::react::Tag tag,
52
52
  winrt::Microsoft::ReactNative::ReactContext const &reactContext);
53
53
 
@@ -59,7 +59,7 @@ struct WindowsModalHostComponentView : WindowsModalHostComponentViewT<WindowsMod
59
59
 
60
60
  private:
61
61
  std::shared_ptr<facebook::react::ModalHostViewProps const> m_props;
62
- winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual{nullptr};
62
+ winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual m_visual{nullptr};
63
63
  HWND m_hwnd{nullptr};
64
64
  winrt::Microsoft::ReactNative::ReactContext m_context;
65
65
  };
@@ -19,7 +19,7 @@
19
19
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
20
20
 
21
21
  ParagraphComponentView::ParagraphComponentView(
22
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
22
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
23
23
  facebook::react::Tag tag,
24
24
  winrt::Microsoft::ReactNative::ReactContext const &reactContext)
25
25
  : Super(
@@ -285,7 +285,7 @@ void ParagraphComponentView::updateVisualBrush() noexcept {
285
285
  if (m_drawingSurface) {
286
286
  m_drawingSurface.HorizontalAlignmentRatio(horizAlignment);
287
287
  m_drawingSurface.VerticalAlignmentRatio(0.f);
288
- m_drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::CompositionStretch::None);
288
+ m_drawingSurface.Stretch(winrt::Microsoft::ReactNative::Composition::Experimental::CompositionStretch::None);
289
289
  }
290
290
  m_visual.Brush(m_drawingSurface);
291
291
  }
@@ -312,7 +312,8 @@ void ParagraphComponentView::DrawText() noexcept {
312
312
 
313
313
  POINT offset;
314
314
  {
315
- ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(m_drawingSurface, &offset);
315
+ ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(
316
+ m_drawingSurface, m_layoutMetrics.pointScaleFactor, &offset);
316
317
  if (auto d2dDeviceContext = autoDraw.GetRenderTarget()) {
317
318
  d2dDeviceContext->Clear(
318
319
  m_props->backgroundColor ? theme()->D2DColor(*m_props->backgroundColor)
@@ -346,12 +347,12 @@ std::string ParagraphComponentView::DefaultAccessibleName() const noexcept {
346
347
  return m_attributedStringBox.getValue().getString();
347
348
  }
348
349
 
349
- winrt::Microsoft::ReactNative::Composition::IVisual ParagraphComponentView::Visual() const noexcept {
350
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual ParagraphComponentView::Visual() const noexcept {
350
351
  return m_visual;
351
352
  }
352
353
 
353
354
  winrt::Microsoft::ReactNative::ComponentView ParagraphComponentView::Create(
354
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
355
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
355
356
  facebook::react::Tag tag,
356
357
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept {
357
358
  return winrt::make<ParagraphComponentView>(compContext, tag, reactContext);
@@ -21,7 +21,7 @@ struct ParagraphComponentView : ParagraphComponentViewT<ParagraphComponentView,
21
21
  using Super = ParagraphComponentViewT<ParagraphComponentView, ComponentView>;
22
22
 
23
23
  [[nodiscard]] static winrt::Microsoft::ReactNative::ComponentView Create(
24
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
24
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
25
25
  facebook::react::Tag tag,
26
26
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept;
27
27
 
@@ -48,12 +48,12 @@ struct ParagraphComponentView : ParagraphComponentViewT<ParagraphComponentView,
48
48
  void onThemeChanged() noexcept override;
49
49
  facebook::react::SharedViewEventEmitter eventEmitterAtPoint(facebook::react::Point pt) noexcept override;
50
50
 
51
- winrt::Microsoft::ReactNative::Composition::IVisual Visual() const noexcept override;
51
+ winrt::Microsoft::ReactNative::Composition::Experimental::IVisual Visual() const noexcept override;
52
52
  virtual std::string DefaultControlType() const noexcept override;
53
53
  virtual std::string DefaultAccessibleName() const noexcept override;
54
54
 
55
55
  ParagraphComponentView(
56
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
56
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
57
57
  facebook::react::Tag tag,
58
58
  winrt::Microsoft::ReactNative::ReactContext const &reactContext);
59
59
 
@@ -64,13 +64,13 @@ struct ParagraphComponentView : ParagraphComponentViewT<ParagraphComponentView,
64
64
  void updateTextAlignment(const std::optional<facebook::react::TextAlignment> &fbAlignment) noexcept;
65
65
 
66
66
  std::shared_ptr<facebook::react::ParagraphProps const> m_props;
67
- winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual{nullptr};
67
+ winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual m_visual{nullptr};
68
68
  winrt::com_ptr<::IDWriteTextLayout> m_textLayout;
69
69
  facebook::react::AttributedStringBox m_attributedStringBox;
70
70
  facebook::react::ParagraphAttributes m_paragraphAttributes;
71
71
 
72
72
  bool m_requireRedraw{true};
73
- winrt::Microsoft::ReactNative::Composition::IDrawingSurfaceBrush m_drawingSurface;
73
+ winrt::Microsoft::ReactNative::Composition::Experimental::IDrawingSurfaceBrush m_drawingSurface;
74
74
  };
75
75
 
76
76
  } // namespace winrt::Microsoft::ReactNative::Composition::implementation
@@ -96,7 +96,7 @@ void ReactCompositionViewComponentBuilder::SetLayoutHandler(
96
96
  winrt::Microsoft::ReactNative::ComponentView ReactCompositionViewComponentBuilder::CreateView(
97
97
  const IReactContext &reactContext,
98
98
  int32_t tag,
99
- const ICompositionContext &context) noexcept {
99
+ const Experimental::ICompositionContext &context) noexcept {
100
100
  if (m_createView) {
101
101
  auto args = winrt::make<implementation::CreateCompositionComponentViewArgs>(reactContext, tag, context);
102
102
  return m_createView(args);
@@ -3,6 +3,7 @@
3
3
  // Licensed under the MIT License.
4
4
 
5
5
  #include <react/renderer/core/ReactPrimitives.h>
6
+ #include "winrt/Microsoft.ReactNative.Composition.Experimental.h"
6
7
  #include "winrt/Microsoft.ReactNative.Composition.h"
7
8
  #include "winrt/Microsoft.ReactNative.h"
8
9
 
@@ -40,8 +41,10 @@ struct ReactCompositionViewComponentBuilder : winrt::implements<
40
41
  LayoutHandler LayoutHandler() const noexcept;
41
42
  bool IsViewComponent() const noexcept;
42
43
 
43
- winrt::Microsoft::ReactNative::ComponentView
44
- CreateView(const IReactContext &reactContext, facebook::react::Tag tag, const ICompositionContext &context) noexcept;
44
+ winrt::Microsoft::ReactNative::ComponentView CreateView(
45
+ const IReactContext &reactContext,
46
+ facebook::react::Tag tag,
47
+ const Experimental::ICompositionContext &context) noexcept;
45
48
 
46
49
  private:
47
50
  ViewPropsFactory m_propsFactory;
@@ -14,7 +14,7 @@
14
14
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
15
15
 
16
16
  RootComponentView::RootComponentView(
17
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
17
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
18
18
  facebook::react::Tag tag,
19
19
  winrt::Microsoft::ReactNative::ReactContext const &reactContext)
20
20
  : base_type(
@@ -34,7 +34,7 @@ RootComponentView::~RootComponentView() {
34
34
  }
35
35
 
36
36
  winrt::Microsoft::ReactNative::ComponentView RootComponentView::Create(
37
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
37
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
38
38
  facebook::react::Tag tag,
39
39
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept {
40
40
  return winrt::make<RootComponentView>(compContext, tag, reactContext);
@@ -55,8 +55,12 @@ void RootComponentView::SetFocusedComponent(const winrt::Microsoft::ReactNative:
55
55
  winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(m_focusedComponent)->onFocusLost();
56
56
  }
57
57
 
58
- if (value)
58
+ if (value) {
59
+ if (auto rootView = m_wkRootView.get()) {
60
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(rootView)->TrySetFocus();
61
+ }
59
62
  winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(value)->onFocusGained();
63
+ }
60
64
 
61
65
  m_focusedComponent = value;
62
66
  }
@@ -21,7 +21,7 @@ struct RootComponentView : RootComponentViewT<RootComponentView, ViewComponentVi
21
21
  using Super = RootComponentViewT<RootComponentView, ViewComponentView>;
22
22
 
23
23
  [[nodiscard]] static winrt::Microsoft::ReactNative::ComponentView Create(
24
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
24
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
25
25
  facebook::react::Tag tag,
26
26
  winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept;
27
27
 
@@ -45,7 +45,7 @@ struct RootComponentView : RootComponentViewT<RootComponentView, ViewComponentVi
45
45
  winrt::IInspectable UiaProviderFromPoint(const POINT &ptPixels) noexcept;
46
46
 
47
47
  RootComponentView(
48
- const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
48
+ const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
49
49
  facebook::react::Tag tag,
50
50
  winrt::Microsoft::ReactNative::ReactContext const &reactContext);
51
51