react-native-windows 0.81.0-preview.1 → 0.81.0-preview.10
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/Chakra/ChakraUtils.cpp +0 -2
- package/Directory.Build.props +5 -2
- package/Folly/Folly.vcxproj +6 -7
- package/Folly/cgmanifest.json +1 -1
- package/Microsoft.ReactNative/CompositionSwitcher.idl +163 -162
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +104 -4
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +60 -33
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +19 -0
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +102 -18
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +1 -0
- package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.cpp +5 -3
- package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +14 -1
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +21 -2
- package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +39 -10
- package/PropertySheets/Generated/PackageVersion.g.props +2 -2
- package/PropertySheets/React.Cpp.props +1 -0
- package/Shared/MemoryMappedBuffer.cpp +0 -2
- package/package.json +14 -14
- package/template/metro.config.js +2 -4
- package/templates/cpp-app/metro.config.js +2 -4
- package/templates/cpp-lib/example/metro.config.js +2 -3
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/css/CSSTokenizer.h +0 -232
package/Chakra/ChakraUtils.cpp
CHANGED
|
@@ -166,8 +166,6 @@ FileMappingBigString::FileMappingBigString(const std::wstring &filename, uint32_
|
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
WerRegisterMemoryBlock(m_fileData.get(), m_fileSize);
|
|
170
|
-
|
|
171
169
|
static const uint32_t s_pageSize = getPageSize();
|
|
172
170
|
if (m_fileSize % s_pageSize != 0) {
|
|
173
171
|
// Data are owned by m_fileData, deleter is no-op
|
package/Directory.Build.props
CHANGED
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
<IncludeSource Condition="'$(Configuration)' == 'Release'">false</IncludeSource>
|
|
28
28
|
<!-- When bumping the Folly version, be sure to bump the git hash of that version's commit, find the matching fastfloat dependency and build Folly.vcxproj (to update its cgmanifest.json) too. -->
|
|
29
29
|
<FollyVersion>2024.10.14.00</FollyVersion>
|
|
30
|
-
<FastFloatVersion>
|
|
30
|
+
<FastFloatVersion>8.0.0</FastFloatVersion>
|
|
31
31
|
<FollyCommitHash>ad90720829db5ba0c3d0e44994856dcce33d7940</FollyCommitHash>
|
|
32
|
-
<FastFloatCommitHash>
|
|
32
|
+
<FastFloatCommitHash>77cc847c842c49e7e3477c1e95da2b6540166d66</FastFloatCommitHash>
|
|
33
33
|
<!-- When bumping the fmt version, be sure to bump the git hash of that version's commit and build fmt.vcxproj (to update its cgmanifest.json) too. -->
|
|
34
34
|
<FmtVersion>10.1.0</FmtVersion>
|
|
35
35
|
<FmtCommitHash>ca2e3685b160617d3d95fcd9e789c4e06ca88</FmtCommitHash>
|
|
@@ -52,6 +52,9 @@
|
|
|
52
52
|
<FollyDir Condition="'$(FollyDir)' == '' AND Exists('$([MSBuild]::NormalizeDirectory($(ReactNativeDir)..\..\node_modules))')">$(ReactNativeDir)..\..\node_modules\.folly\folly-$(FollyVersion)</FollyDir>
|
|
53
53
|
<FollyDir>$([MSBuild]::NormalizeDirectory($(FollyDir)))</FollyDir>
|
|
54
54
|
|
|
55
|
+
<FastFloatDir Condition="'$(FastFloatDir)' == '' AND Exists('$([MSBuild]::NormalizeDirectory($(ReactNativeDir)..\..\node_modules))')">$(ReactNativeDir)..\..\node_modules\.fastfloat\fast_float-$(FastFloatVersion)</FastFloatDir>
|
|
56
|
+
<FastFloatDir>$([MSBuild]::NormalizeDirectory($(FastFloatDir)))</FastFloatDir>
|
|
57
|
+
|
|
55
58
|
<FmtDir Condition="'$(FmtDir)' == '' AND Exists('$([MSBuild]::NormalizeDirectory($(ReactNativeDir)..\..\node_modules))')">$(ReactNativeDir)..\..\node_modules\.fmt\fmt-$(FmtVersion)</FmtDir>
|
|
56
59
|
<FmtDir>$([MSBuild]::NormalizeDirectory($(FmtDir)))</FmtDir>
|
|
57
60
|
|
package/Folly/Folly.vcxproj
CHANGED
|
@@ -243,7 +243,6 @@
|
|
|
243
243
|
<ClInclude Include="$(FollyDir)\folly\Uri.h" />
|
|
244
244
|
<ClInclude Include="$(FollyDir)\folly\Utility.h" />
|
|
245
245
|
<ClInclude Include="$(FollyDir)\folly\Varint.h" />
|
|
246
|
-
<ClInclude Include="$(FollyDir)\..\fast_float-6.1.4\include\fast_float\fast_float.h" />
|
|
247
246
|
<ClInclude Include="pch.h" />
|
|
248
247
|
</ItemGroup>
|
|
249
248
|
<ItemGroup>
|
|
@@ -271,7 +270,7 @@
|
|
|
271
270
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
272
271
|
<CompileAsWinRT>false</CompileAsWinRT>
|
|
273
272
|
<SDLCheck>true</SDLCheck>
|
|
274
|
-
<AdditionalIncludeDirectories>$(ReactNativeWindowsDir)stubs;$(FollyDir);$(
|
|
273
|
+
<AdditionalIncludeDirectories>$(ReactNativeWindowsDir)stubs;$(FollyDir);$(FastFloatDir)\include;$(FmtDir)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
275
274
|
<PreprocessorDefinitions>FOLLY_CFG_NO_COROUTINES;FOLLY_NO_CONFIG;NOMINMAX;_CRT_SECURE_NO_WARNINGS;WINAPI_PARTITION_APP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
276
275
|
<ForcedUsingFiles />
|
|
277
276
|
<DisableSpecificWarnings>4251;4293;4305;4800;4804;4310;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
|
@@ -292,8 +291,8 @@
|
|
|
292
291
|
<CGManifestFile>$(MSBuildThisFileDirectory)cgmanifest.json</CGManifestFile>
|
|
293
292
|
</PropertyGroup>
|
|
294
293
|
<PropertyGroup>
|
|
295
|
-
<FastFloatZipDir>$(
|
|
296
|
-
<FastFloatZipFile>$(
|
|
294
|
+
<FastFloatZipDir>$(FastFloatDir)..\.fastfloatzip</FastFloatZipDir>
|
|
295
|
+
<FastFloatZipFile>$(FastFloatZipDir)\fastfloat.zip</FastFloatZipFile>
|
|
297
296
|
</PropertyGroup>
|
|
298
297
|
<Target Name="DownloadFolly" BeforeTargets="PrepareForBuild" Inputs="$(FollyZipFile)" Outputs="$(FollyZipFile)">
|
|
299
298
|
<Message Importance="High" Text="Downloading folly..." />
|
|
@@ -320,11 +319,11 @@
|
|
|
320
319
|
OverwriteReadOnlyFiles="true" />
|
|
321
320
|
</Target>
|
|
322
321
|
<Target Name="UnzipFastFloat" BeforeTargets="PrepareForBuild" DependsOnTargets="DownloadFastFloat">
|
|
323
|
-
<Message Condition="!Exists('$(
|
|
322
|
+
<Message Condition="!Exists('$(FastFloatDir)\include\fast_float\fast_float.h')" Importance="High" Text="Unzipping FastFloat to $([MSBuild]::NormalizePath($(FastFloatDir)..))." />
|
|
324
323
|
<Unzip
|
|
325
|
-
Condition="!Exists('$(
|
|
324
|
+
Condition="!Exists('$(FastFloatDir)\include\fast_float\fast_float.h')"
|
|
326
325
|
SourceFiles="$(FastFloatZipFile)"
|
|
327
|
-
DestinationFolder="$([MSBuild]::NormalizePath($(
|
|
326
|
+
DestinationFolder="$([MSBuild]::NormalizePath($(FastFloatDir)..))"
|
|
328
327
|
OverwriteReadOnlyFiles="true" />
|
|
329
328
|
</Target>
|
|
330
329
|
<Target Name="WriteCGManifest" BeforeTargets="PrepareForBuild" DependsOnTargets="DownloadFolly" Inputs="$(FollyZipFile)" Outputs="$(CGManifestFile)">
|
package/Folly/cgmanifest.json
CHANGED
|
@@ -1,178 +1,179 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
|
|
4
|
-
#include "NamespaceRedirect.h"
|
|
5
4
|
#include "DocString.h"
|
|
5
|
+
#include "NamespaceRedirect.h"
|
|
6
6
|
import "Composition.Input.idl";
|
|
7
7
|
|
|
8
|
-
namespace Microsoft.ReactNative.Composition.Experimental
|
|
8
|
+
namespace Microsoft.ReactNative.Composition.Experimental {
|
|
9
|
+
enum CompositionStretch {
|
|
10
|
+
None,
|
|
11
|
+
Fill,
|
|
12
|
+
Uniform,
|
|
13
|
+
UniformToFill,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
enum BackfaceVisibility { Inherit, Visible, Hidden };
|
|
17
|
+
|
|
18
|
+
enum AnimationClass {
|
|
19
|
+
None = 0,
|
|
20
|
+
ScrollBar,
|
|
21
|
+
ScrollBarThumbHorizontal,
|
|
22
|
+
ScrollBarThumbVertical,
|
|
23
|
+
SwitchThumb,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
enum SnapPointsAlignment {
|
|
27
|
+
Near = 0, // Start alignment (left/top)
|
|
28
|
+
Center = 1, // Center alignment
|
|
29
|
+
Far = 2, // End alignment (right/bottom)
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
[webhosthidden][uuid("172def51-9e1a-4e3c-841a-e5a470065acc")] // uuid needed for empty interfaces
|
|
33
|
+
[version(0)][experimental] interface IBrush {}
|
|
34
|
+
|
|
35
|
+
[webhosthidden][experimental] interface IDrawingSurfaceBrush
|
|
36
|
+
requires IBrush
|
|
37
|
+
{
|
|
38
|
+
void HorizontalAlignmentRatio(Single value);
|
|
39
|
+
void VerticalAlignmentRatio(Single value);
|
|
40
|
+
void Stretch(CompositionStretch value);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
[webhosthidden][experimental] interface IDropShadow {
|
|
44
|
+
void Offset(Windows.Foundation.Numerics.Vector3 value);
|
|
45
|
+
void Opacity(Single value);
|
|
46
|
+
void BlurRadius(Single value);
|
|
47
|
+
void Color(Windows.UI.Color value);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
[webhosthidden][experimental] interface IVisual {
|
|
51
|
+
void InsertAt(IVisual visual, Int32 index);
|
|
52
|
+
void Remove(IVisual visual);
|
|
53
|
+
IVisual GetAt(UInt32 index);
|
|
54
|
+
void Opacity(Single opacity);
|
|
55
|
+
void Scale(Windows.Foundation.Numerics.Vector3 scale);
|
|
56
|
+
void TransformMatrix(Windows.Foundation.Numerics.Matrix4x4 transform);
|
|
57
|
+
void RotationAngle(Single angle);
|
|
58
|
+
void IsVisible(Boolean isVisible);
|
|
59
|
+
void Size(Windows.Foundation.Numerics.Vector2 size);
|
|
60
|
+
void Offset(Windows.Foundation.Numerics.Vector3 offset);
|
|
61
|
+
void Offset(Windows.Foundation.Numerics.Vector3 offset, Windows.Foundation.Numerics.Vector3 relativeAdjustment);
|
|
62
|
+
void RelativeSizeWithOffset(
|
|
63
|
+
Windows.Foundation.Numerics.Vector2 size, Windows.Foundation.Numerics.Vector2 relativeSizeAdjustment);
|
|
64
|
+
BackfaceVisibility BackfaceVisibility {
|
|
65
|
+
get;
|
|
66
|
+
set;
|
|
67
|
+
};
|
|
68
|
+
String Comment {
|
|
69
|
+
get;
|
|
70
|
+
set;
|
|
71
|
+
};
|
|
72
|
+
void AnimationClass(AnimationClass value);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
[webhosthidden][experimental] interface ISpriteVisual
|
|
76
|
+
requires IVisual
|
|
77
|
+
{
|
|
78
|
+
void Brush(IBrush brush);
|
|
79
|
+
void Shadow(IDropShadow shadow);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
[webhosthidden][experimental] interface IRoundedRectangleVisual
|
|
83
|
+
requires IVisual
|
|
9
84
|
{
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
85
|
+
void Brush(IBrush brush);
|
|
86
|
+
void CornerRadius(Windows.Foundation.Numerics.Vector2 value);
|
|
87
|
+
void StrokeBrush(IBrush brush);
|
|
88
|
+
void StrokeThickness(Single value);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
[webhosthidden][experimental] interface IScrollPositionChangedArgs {
|
|
92
|
+
Windows.Foundation.Numerics.Vector2 Position {
|
|
93
|
+
get;
|
|
16
94
|
};
|
|
95
|
+
}
|
|
17
96
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
97
|
+
[webhosthidden][experimental] interface IScrollVisual
|
|
98
|
+
requires IVisual
|
|
99
|
+
{
|
|
100
|
+
void Brush(IBrush brush);
|
|
101
|
+
void ScrollEnabled(Boolean isScrollEnabled);
|
|
102
|
+
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollPositionChanged;
|
|
103
|
+
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollBeginDrag;
|
|
104
|
+
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollEndDrag;
|
|
105
|
+
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollMomentumBegin;
|
|
106
|
+
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollMomentumEnd;
|
|
107
|
+
void ContentSize(Windows.Foundation.Numerics.Vector2 size);
|
|
108
|
+
Windows.Foundation.Numerics.Vector3 ScrollPosition {
|
|
109
|
+
get;
|
|
110
|
+
};
|
|
111
|
+
void ScrollBy(Windows.Foundation.Numerics.Vector3 offset, Boolean animate);
|
|
112
|
+
void TryUpdatePosition(Windows.Foundation.Numerics.Vector3 position, Boolean animate);
|
|
113
|
+
void OnPointerPressed(Microsoft.ReactNative.Composition.Input.PointerRoutedEventArgs args);
|
|
114
|
+
void SetDecelerationRate(Windows.Foundation.Numerics.Vector3 decelerationRate);
|
|
115
|
+
void SetMaximumZoomScale(Single maximumZoomScale);
|
|
116
|
+
void SetMinimumZoomScale(Single minimumZoomScale);
|
|
117
|
+
Boolean Horizontal;
|
|
118
|
+
void SetSnapPoints(
|
|
119
|
+
Boolean snapToStart, Boolean snapToEnd, Windows.Foundation.Collections.IVectorView<Single> offsets);
|
|
120
|
+
void PagingEnabled(Boolean pagingEnabled);
|
|
121
|
+
void SnapToInterval(Single interval);
|
|
122
|
+
void SnapToAlignment(SnapPointsAlignment alignment);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
[webhosthidden][experimental] interface IActivityVisual
|
|
126
|
+
requires IVisual
|
|
127
|
+
{
|
|
128
|
+
void Size(Single value);
|
|
129
|
+
void Brush(IBrush brush);
|
|
130
|
+
void StartAnimation();
|
|
131
|
+
void StopAnimation();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
[webhosthidden][experimental] interface ICaretVisual {
|
|
135
|
+
IVisual InnerVisual {
|
|
136
|
+
get;
|
|
23
137
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
ScrollBarThumbHorizontal,
|
|
30
|
-
ScrollBarThumbVertical,
|
|
31
|
-
SwitchThumb,
|
|
138
|
+
void Size(Windows.Foundation.Numerics.Vector2 size);
|
|
139
|
+
void Position(Windows.Foundation.Numerics.Vector2 position);
|
|
140
|
+
Boolean IsVisible {
|
|
141
|
+
get;
|
|
142
|
+
set;
|
|
32
143
|
};
|
|
144
|
+
void Brush(IBrush brush);
|
|
145
|
+
}
|
|
33
146
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
[webhosthidden]
|
|
60
|
-
[experimental]
|
|
61
|
-
interface IVisual
|
|
62
|
-
{
|
|
63
|
-
void InsertAt(IVisual visual, Int32 index);
|
|
64
|
-
void Remove(IVisual visual);
|
|
65
|
-
IVisual GetAt(UInt32 index);
|
|
66
|
-
void Opacity(Single opacity);
|
|
67
|
-
void Scale(Windows.Foundation.Numerics.Vector3 scale);
|
|
68
|
-
void TransformMatrix(Windows.Foundation.Numerics.Matrix4x4 transform);
|
|
69
|
-
void RotationAngle(Single angle);
|
|
70
|
-
void IsVisible(Boolean isVisible);
|
|
71
|
-
void Size(Windows.Foundation.Numerics.Vector2 size);
|
|
72
|
-
void Offset(Windows.Foundation.Numerics.Vector3 offset);
|
|
73
|
-
void Offset(Windows.Foundation.Numerics.Vector3 offset, Windows.Foundation.Numerics.Vector3 relativeAdjustment);
|
|
74
|
-
void RelativeSizeWithOffset(Windows.Foundation.Numerics.Vector2 size, Windows.Foundation.Numerics.Vector2 relativeSizeAdjustment);
|
|
75
|
-
BackfaceVisibility BackfaceVisibility{ get; set; };
|
|
76
|
-
String Comment { get; set; };
|
|
77
|
-
void AnimationClass(AnimationClass value);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
[webhosthidden]
|
|
81
|
-
[experimental]
|
|
82
|
-
interface ISpriteVisual requires IVisual
|
|
83
|
-
{
|
|
84
|
-
void Brush(IBrush brush);
|
|
85
|
-
void Shadow(IDropShadow shadow);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
[webhosthidden]
|
|
89
|
-
[experimental]
|
|
90
|
-
interface IRoundedRectangleVisual requires IVisual
|
|
91
|
-
{
|
|
92
|
-
void Brush(IBrush brush);
|
|
93
|
-
void CornerRadius(Windows.Foundation.Numerics.Vector2 value);
|
|
94
|
-
void StrokeBrush(IBrush brush);
|
|
95
|
-
void StrokeThickness(Single value);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
[webhosthidden]
|
|
99
|
-
[experimental]
|
|
100
|
-
interface IScrollPositionChangedArgs
|
|
101
|
-
{
|
|
102
|
-
Windows.Foundation.Numerics.Vector2 Position { get; };
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
[webhosthidden]
|
|
106
|
-
[experimental]
|
|
107
|
-
interface IScrollVisual requires IVisual
|
|
108
|
-
{
|
|
109
|
-
void Brush(IBrush brush);
|
|
110
|
-
void ScrollEnabled(Boolean isScrollEnabled);
|
|
111
|
-
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollPositionChanged;
|
|
112
|
-
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollBeginDrag;
|
|
113
|
-
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollEndDrag;
|
|
114
|
-
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollMomentumBegin;
|
|
115
|
-
event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollMomentumEnd;
|
|
116
|
-
void ContentSize(Windows.Foundation.Numerics.Vector2 size);
|
|
117
|
-
Windows.Foundation.Numerics.Vector3 ScrollPosition { get; };
|
|
118
|
-
void ScrollBy(Windows.Foundation.Numerics.Vector3 offset, Boolean animate);
|
|
119
|
-
void TryUpdatePosition(Windows.Foundation.Numerics.Vector3 position, Boolean animate);
|
|
120
|
-
void OnPointerPressed(Microsoft.ReactNative.Composition.Input.PointerRoutedEventArgs args);
|
|
121
|
-
void SetDecelerationRate(Windows.Foundation.Numerics.Vector3 decelerationRate);
|
|
122
|
-
void SetMaximumZoomScale(Single maximumZoomScale);
|
|
123
|
-
void SetMinimumZoomScale(Single minimumZoomScale);
|
|
124
|
-
Boolean Horizontal;
|
|
125
|
-
void SetSnapPoints(Boolean snapToStart, Boolean snapToEnd, Windows.Foundation.Collections.IVectorView<Single> offsets);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
[webhosthidden]
|
|
129
|
-
[experimental]
|
|
130
|
-
interface IActivityVisual requires IVisual
|
|
131
|
-
{
|
|
132
|
-
void Size(Single value);
|
|
133
|
-
void Brush(IBrush brush);
|
|
134
|
-
void StartAnimation();
|
|
135
|
-
void StopAnimation();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
[webhosthidden]
|
|
139
|
-
[experimental]
|
|
140
|
-
interface ICaretVisual
|
|
141
|
-
{
|
|
142
|
-
IVisual InnerVisual { get; };
|
|
143
|
-
void Size(Windows.Foundation.Numerics.Vector2 size);
|
|
144
|
-
void Position(Windows.Foundation.Numerics.Vector2 position);
|
|
145
|
-
Boolean IsVisible { get; set; };
|
|
146
|
-
void Brush(IBrush brush);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
[webhosthidden]
|
|
150
|
-
[experimental]
|
|
151
|
-
interface IFocusVisual
|
|
152
|
-
{
|
|
153
|
-
IVisual InnerVisual { get; };
|
|
154
|
-
Boolean IsFocused { get; set; };
|
|
155
|
-
Single ScaleFactor { get; set; };
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
[webhosthidden]
|
|
159
|
-
[experimental]
|
|
160
|
-
interface ICompositionContext
|
|
161
|
-
{
|
|
162
|
-
ISpriteVisual CreateSpriteVisual();
|
|
163
|
-
IScrollVisual CreateScrollerVisual();
|
|
164
|
-
IRoundedRectangleVisual CreateRoundedRectangleVisual();
|
|
165
|
-
IActivityVisual CreateActivityVisual();
|
|
166
|
-
ICaretVisual CreateCaretVisual();
|
|
167
|
-
IFocusVisual CreateFocusVisual();
|
|
168
|
-
IDropShadow CreateDropShadow();
|
|
169
|
-
IBrush CreateColorBrush(Windows.UI.Color color);
|
|
170
|
-
IDrawingSurfaceBrush CreateDrawingSurfaceBrush(Windows.Foundation.Size surfaceSize,
|
|
147
|
+
[webhosthidden][experimental] interface IFocusVisual {
|
|
148
|
+
IVisual InnerVisual {
|
|
149
|
+
get;
|
|
150
|
+
};
|
|
151
|
+
Boolean IsFocused {
|
|
152
|
+
get;
|
|
153
|
+
set;
|
|
154
|
+
};
|
|
155
|
+
Single ScaleFactor {
|
|
156
|
+
get;
|
|
157
|
+
set;
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
[webhosthidden][experimental] interface ICompositionContext {
|
|
162
|
+
ISpriteVisual CreateSpriteVisual();
|
|
163
|
+
IScrollVisual CreateScrollerVisual();
|
|
164
|
+
IRoundedRectangleVisual CreateRoundedRectangleVisual();
|
|
165
|
+
IActivityVisual CreateActivityVisual();
|
|
166
|
+
ICaretVisual CreateCaretVisual();
|
|
167
|
+
IFocusVisual CreateFocusVisual();
|
|
168
|
+
IDropShadow CreateDropShadow();
|
|
169
|
+
IBrush CreateColorBrush(Windows.UI.Color color);
|
|
170
|
+
IDrawingSurfaceBrush CreateDrawingSurfaceBrush(
|
|
171
|
+
Windows.Foundation.Size surfaceSize,
|
|
171
172
|
Windows.Graphics.DirectX.DirectXPixelFormat pixelFormat,
|
|
172
173
|
Windows.Graphics.DirectX.DirectXAlphaMode alphaMode);
|
|
173
174
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
// TODO Add and hook up to rootnode - to notify the tree
|
|
176
|
+
// event Windows.Foundation.EventHandler<RenderingDeviceReplacedArgs> RenderingDeviceReplaced;
|
|
177
|
+
}
|
|
177
178
|
|
|
178
|
-
} // namespace Microsoft.ReactNative.Composition.Experimental
|
|
179
|
+
} // namespace Microsoft.ReactNative.Composition. Experimental
|
|
@@ -910,6 +910,31 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
910
910
|
m_snapToOffsets.push_back(offset);
|
|
911
911
|
}
|
|
912
912
|
}
|
|
913
|
+
// Match Paper behavior: snapToOffsets disables pagingEnabled and snapToInterval
|
|
914
|
+
if (!m_snapToOffsets.empty()) {
|
|
915
|
+
m_pagingEnabled = false;
|
|
916
|
+
m_snapToInterval = 0.0f;
|
|
917
|
+
}
|
|
918
|
+
ConfigureSnapInertiaModifiers();
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
void PagingEnabled(bool pagingEnabled) noexcept {
|
|
922
|
+
m_pagingEnabled = pagingEnabled;
|
|
923
|
+
ConfigureSnapInertiaModifiers();
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
void SnapToInterval(float interval) noexcept {
|
|
927
|
+
m_snapToInterval = interval;
|
|
928
|
+
// Match Paper behavior: snapToOffsets disables snapToInterval
|
|
929
|
+
if (!m_snapToOffsets.empty()) {
|
|
930
|
+
m_snapToInterval = 0.0f;
|
|
931
|
+
}
|
|
932
|
+
ConfigureSnapInertiaModifiers();
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
void SnapToAlignment(
|
|
936
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::SnapPointsAlignment alignment) noexcept {
|
|
937
|
+
m_snapToAlignment = alignment;
|
|
913
938
|
ConfigureSnapInertiaModifiers();
|
|
914
939
|
}
|
|
915
940
|
|
|
@@ -934,9 +959,13 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
934
959
|
}
|
|
935
960
|
|
|
936
961
|
void Size(winrt::Windows::Foundation::Numerics::float2 const &size) noexcept {
|
|
962
|
+
bool sizeChanged = (m_visualSize.x != size.x || m_visualSize.y != size.y);
|
|
937
963
|
m_visualSize = size;
|
|
938
964
|
m_visual.Size(size);
|
|
939
965
|
UpdateMaxPosition();
|
|
966
|
+
if (sizeChanged && m_pagingEnabled) {
|
|
967
|
+
ConfigureSnapInertiaModifiers();
|
|
968
|
+
}
|
|
940
969
|
}
|
|
941
970
|
|
|
942
971
|
void Offset(winrt::Windows::Foundation::Numerics::float3 const &offset) noexcept {
|
|
@@ -1046,9 +1075,13 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1046
1075
|
}
|
|
1047
1076
|
|
|
1048
1077
|
void ContentSize(winrt::Windows::Foundation::Numerics::float2 const &size) noexcept {
|
|
1078
|
+
bool sizeChanged = (m_contentSize.x != size.x || m_contentSize.y != size.y);
|
|
1049
1079
|
m_contentSize = size;
|
|
1050
1080
|
m_contentVisual.Size(size);
|
|
1051
1081
|
UpdateMaxPosition();
|
|
1082
|
+
if (sizeChanged && m_pagingEnabled) {
|
|
1083
|
+
ConfigureSnapInertiaModifiers();
|
|
1084
|
+
}
|
|
1052
1085
|
}
|
|
1053
1086
|
|
|
1054
1087
|
winrt::Windows::Foundation::Numerics::float3 ScrollPosition() const noexcept {
|
|
@@ -1155,11 +1188,73 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1155
1188
|
// Collect and deduplicate all snap positions
|
|
1156
1189
|
std::vector<float> snapPositions;
|
|
1157
1190
|
|
|
1158
|
-
|
|
1159
|
-
|
|
1191
|
+
// Priority: snapToOffsets > snapToInterval > pagingEnabled
|
|
1192
|
+
if (!m_snapToOffsets.empty()) {
|
|
1193
|
+
// Use explicit snap points when snapToOffsets is set (highest priority)
|
|
1194
|
+
if (m_snapToStart) {
|
|
1195
|
+
snapPositions.push_back(0.0f);
|
|
1196
|
+
}
|
|
1197
|
+
snapPositions.insert(snapPositions.end(), m_snapToOffsets.begin(), m_snapToOffsets.end());
|
|
1198
|
+
} else if (m_snapToInterval > 0.0f) {
|
|
1199
|
+
// Generate snap points at interval positions
|
|
1200
|
+
float viewportSize = m_horizontal ? visualSize.x : visualSize.y;
|
|
1201
|
+
float maxScroll =
|
|
1202
|
+
m_horizontal ? std::max(contentSize.x - visualSize.x, 0.0f) : std::max(contentSize.y - visualSize.y, 0.0f);
|
|
1203
|
+
|
|
1204
|
+
// Calculate alignment offset based on snapToAlignment
|
|
1205
|
+
float alignmentOffset = 0.0f;
|
|
1206
|
+
using SnapPointsAlignment = winrt::Microsoft::ReactNative::Composition::Experimental::SnapPointsAlignment;
|
|
1207
|
+
if (m_snapToAlignment == SnapPointsAlignment::Center) {
|
|
1208
|
+
alignmentOffset = -viewportSize / 2.0f;
|
|
1209
|
+
} else if (m_snapToAlignment == SnapPointsAlignment::Far) {
|
|
1210
|
+
alignmentOffset = -viewportSize;
|
|
1211
|
+
}
|
|
1212
|
+
// Near (start) alignment has no offset (alignmentOffset = 0)
|
|
1213
|
+
|
|
1214
|
+
// Generate snap points at interval positions with alignment offset
|
|
1215
|
+
for (float position = alignmentOffset; position <= maxScroll; position += m_snapToInterval) {
|
|
1216
|
+
if (position >= 0.0f) { // Only include positions >= 0
|
|
1217
|
+
snapPositions.push_back(position);
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
// Ensure we have at least the start position
|
|
1222
|
+
if (snapPositions.empty() || snapPositions.front() > 0.0f) {
|
|
1223
|
+
snapPositions.insert(snapPositions.begin(), 0.0f);
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
// Ensure the end position is included if not already
|
|
1227
|
+
if (!snapPositions.empty() && snapPositions.back() < maxScroll) {
|
|
1228
|
+
snapPositions.push_back(maxScroll);
|
|
1229
|
+
}
|
|
1230
|
+
} else if (m_pagingEnabled) {
|
|
1231
|
+
// Generate snap points at viewport intervals (paging)
|
|
1232
|
+
float viewportSize = m_horizontal ? visualSize.x : visualSize.y;
|
|
1233
|
+
float maxScroll =
|
|
1234
|
+
m_horizontal ? std::max(contentSize.x - visualSize.x, 0.0f) : std::max(contentSize.y - visualSize.y, 0.0f);
|
|
1235
|
+
|
|
1236
|
+
// Only generate paging snap points if viewport size is valid
|
|
1237
|
+
if (viewportSize > 0 && maxScroll > 0) {
|
|
1238
|
+
// Add snap points at each page (viewport size) interval
|
|
1239
|
+
for (float position = 0.0f; position <= maxScroll; position += viewportSize) {
|
|
1240
|
+
snapPositions.push_back(position);
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
// Ensure the end position is included if not already
|
|
1244
|
+
if (!snapPositions.empty() && snapPositions.back() < maxScroll) {
|
|
1245
|
+
snapPositions.push_back(maxScroll);
|
|
1246
|
+
}
|
|
1247
|
+
} else {
|
|
1248
|
+
// If content fits in viewport or invalid size, just snap to start
|
|
1249
|
+
snapPositions.push_back(0.0f);
|
|
1250
|
+
}
|
|
1251
|
+
} else {
|
|
1252
|
+
// No interval or paging - use explicit snap points only
|
|
1253
|
+
if (m_snapToStart) {
|
|
1254
|
+
snapPositions.push_back(0.0f);
|
|
1255
|
+
}
|
|
1160
1256
|
}
|
|
1161
1257
|
|
|
1162
|
-
snapPositions.insert(snapPositions.end(), m_snapToOffsets.begin(), m_snapToOffsets.end());
|
|
1163
1258
|
std::sort(snapPositions.begin(), snapPositions.end());
|
|
1164
1259
|
snapPositions.erase(std::unique(snapPositions.begin(), snapPositions.end()), snapPositions.end());
|
|
1165
1260
|
|
|
@@ -1222,7 +1317,8 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1222
1317
|
restingValues.push_back(restingValue);
|
|
1223
1318
|
}
|
|
1224
1319
|
|
|
1225
|
-
|
|
1320
|
+
// Only add snapToEnd handling when NOT using pagingEnabled or snapToInterval (they already include end position)
|
|
1321
|
+
if (m_snapToEnd && !m_pagingEnabled && m_snapToInterval <= 0.0f) {
|
|
1226
1322
|
auto endRestingValue = TTypeRedirects::InteractionTrackerInertiaRestingValue::Create(compositor);
|
|
1227
1323
|
|
|
1228
1324
|
// Create property sets to dynamically compute content - visual size
|
|
@@ -1286,6 +1382,10 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1286
1382
|
bool m_horizontal{false};
|
|
1287
1383
|
bool m_snapToStart{true};
|
|
1288
1384
|
bool m_snapToEnd{true};
|
|
1385
|
+
bool m_pagingEnabled{false};
|
|
1386
|
+
float m_snapToInterval{0.0f};
|
|
1387
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::SnapPointsAlignment m_snapToAlignment{
|
|
1388
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::SnapPointsAlignment::Near};
|
|
1289
1389
|
std::vector<float> m_snapToOffsets;
|
|
1290
1390
|
bool m_inertia{false};
|
|
1291
1391
|
bool m_custom{false};
|