Skip to content

Commit e37345b

Browse files
authored
[Fabric] Enable backfaceVisibility and transform prop for all Fabric Components (#12115)
* extract transform and backfaceVisiblity to baseComponent * Change files
1 parent 65467c4 commit e37345b

File tree

8 files changed

+75
-45
lines changed

8 files changed

+75
-45
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "extracts transform and backfaceVisibility to baseComponent",
4+
"packageName": "react-native-windows",
5+
"email": "tatianakapos@microsoft.com",
6+
"dependentChangeType": "patch"
7+
}

vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,6 +1078,55 @@ void CompositionBaseComponentView::updateShadowProps(
10781078
}
10791079
}
10801080

1081+
void CompositionBaseComponentView::updateTransformProps(
1082+
const facebook::react::ViewProps &oldViewProps,
1083+
const facebook::react::ViewProps &newViewProps,
1084+
winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept {
1085+
// check for backfaceVisibility prop
1086+
if (oldViewProps.backfaceVisibility != newViewProps.backfaceVisibility) {
1087+
static_assert(
1088+
static_cast<facebook::react::BackfaceVisibility>(
1089+
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Inherit) ==
1090+
facebook::react::BackfaceVisibility::Auto);
1091+
static_assert(
1092+
static_cast<facebook::react::BackfaceVisibility>(
1093+
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Visible) ==
1094+
facebook::react::BackfaceVisibility::Visible);
1095+
static_assert(
1096+
static_cast<facebook::react::BackfaceVisibility>(
1097+
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Hidden) ==
1098+
facebook::react::BackfaceVisibility::Hidden);
1099+
m_visual.BackfaceVisibility(
1100+
static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(newViewProps.backfaceVisibility));
1101+
}
1102+
1103+
// Transform - TODO doesn't handle multiple of the same kind of transform -- Doesn't handle hittesting updates
1104+
if (oldViewProps.transform != newViewProps.transform) {
1105+
winrt::Windows::Foundation::Numerics::float4x4 transformMatrix;
1106+
transformMatrix.m11 = newViewProps.transform.matrix[0];
1107+
transformMatrix.m12 = newViewProps.transform.matrix[1];
1108+
transformMatrix.m13 = newViewProps.transform.matrix[2];
1109+
transformMatrix.m14 = newViewProps.transform.matrix[3];
1110+
transformMatrix.m21 = newViewProps.transform.matrix[4];
1111+
transformMatrix.m22 = newViewProps.transform.matrix[5];
1112+
transformMatrix.m23 = newViewProps.transform.matrix[6];
1113+
transformMatrix.m24 = newViewProps.transform.matrix[7];
1114+
transformMatrix.m31 = newViewProps.transform.matrix[8];
1115+
transformMatrix.m32 = newViewProps.transform.matrix[9];
1116+
transformMatrix.m33 = newViewProps.transform.matrix[10];
1117+
transformMatrix.m34 = newViewProps.transform.matrix[11];
1118+
transformMatrix.m41 = newViewProps.transform.matrix[12];
1119+
transformMatrix.m42 = newViewProps.transform.matrix[13];
1120+
transformMatrix.m43 = newViewProps.transform.matrix[14];
1121+
transformMatrix.m44 = newViewProps.transform.matrix[15];
1122+
1123+
auto centerPointPropSet = EnsureCenterPointPropertySet();
1124+
centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);
1125+
1126+
EnsureTransformMatrixFacade();
1127+
}
1128+
}
1129+
10811130
void CompositionBaseComponentView::updateAccessibilityProps(
10821131
const facebook::react::ViewProps &oldViewProps,
10831132
const facebook::react::ViewProps &newViewProps) noexcept {
@@ -1304,52 +1353,11 @@ void CompositionViewComponentView::updateProps(
13041353
m_visual.Opacity(newViewProps.opacity);
13051354
}
13061355

1356+
// update BaseComponentView props
13071357
updateAccessibilityProps(oldViewProps, newViewProps);
1308-
updateBorderProps(oldViewProps, newViewProps);
13091358
updateShadowProps(oldViewProps, newViewProps, m_visual);
1310-
1311-
if (oldViewProps.backfaceVisibility != newViewProps.backfaceVisibility) {
1312-
static_assert(
1313-
static_cast<facebook::react::BackfaceVisibility>(
1314-
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Inherit) ==
1315-
facebook::react::BackfaceVisibility::Auto);
1316-
static_assert(
1317-
static_cast<facebook::react::BackfaceVisibility>(
1318-
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Visible) ==
1319-
facebook::react::BackfaceVisibility::Visible);
1320-
static_assert(
1321-
static_cast<facebook::react::BackfaceVisibility>(
1322-
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Hidden) ==
1323-
facebook::react::BackfaceVisibility::Hidden);
1324-
m_visual.BackfaceVisibility(
1325-
static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(newViewProps.backfaceVisibility));
1326-
}
1327-
1328-
// Transform - TODO doesn't handle multiple of the same kind of transform -- Doesn't handle hittesting updates
1329-
if (oldViewProps.transform != newViewProps.transform) {
1330-
winrt::Windows::Foundation::Numerics::float4x4 transformMatrix;
1331-
transformMatrix.m11 = newViewProps.transform.matrix[0];
1332-
transformMatrix.m12 = newViewProps.transform.matrix[1];
1333-
transformMatrix.m13 = newViewProps.transform.matrix[2];
1334-
transformMatrix.m14 = newViewProps.transform.matrix[3];
1335-
transformMatrix.m21 = newViewProps.transform.matrix[4];
1336-
transformMatrix.m22 = newViewProps.transform.matrix[5];
1337-
transformMatrix.m23 = newViewProps.transform.matrix[6];
1338-
transformMatrix.m24 = newViewProps.transform.matrix[7];
1339-
transformMatrix.m31 = newViewProps.transform.matrix[8];
1340-
transformMatrix.m32 = newViewProps.transform.matrix[9];
1341-
transformMatrix.m33 = newViewProps.transform.matrix[10];
1342-
transformMatrix.m34 = newViewProps.transform.matrix[11];
1343-
transformMatrix.m41 = newViewProps.transform.matrix[12];
1344-
transformMatrix.m42 = newViewProps.transform.matrix[13];
1345-
transformMatrix.m43 = newViewProps.transform.matrix[14];
1346-
transformMatrix.m44 = newViewProps.transform.matrix[15];
1347-
1348-
auto centerPointPropSet = EnsureCenterPointPropertySet();
1349-
centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);
1350-
1351-
EnsureTransformMatrixFacade();
1352-
}
1359+
updateTransformProps(oldViewProps, newViewProps, m_visual);
1360+
updateBorderProps(oldViewProps, newViewProps);
13531361

13541362
m_props = std::static_pointer_cast<facebook::react::ViewProps const>(props);
13551363
}

vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ struct CompositionBaseComponentView : public IComponentView,
5454
const facebook::react::ViewProps &oldViewProps,
5555
const facebook::react::ViewProps &newViewProps,
5656
winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept;
57+
void updateTransformProps(
58+
const facebook::react::ViewProps &oldViewProps,
59+
const facebook::react::ViewProps &newViewProps,
60+
winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept;
5761
void updateAccessibilityProps(
5862
const facebook::react::ViewProps &oldView,
5963
const facebook::react::ViewProps &newViewProps) noexcept;

vnext/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ void ImageComponentView::updateProps(
108108

109109
ensureVisual();
110110

111+
// update BaseComponentView props
111112
updateShadowProps(oldImageProps, newImageProps, m_visual);
113+
updateTransformProps(oldImageProps, newImageProps, m_visual);
112114
updateBorderProps(oldImageProps, newImageProps);
113115

114116
if (oldImageProps.backgroundColor != newImageProps.backgroundColor ||

vnext/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,10 @@ void ParagraphComponentView::updateProps(
5555
updateTextAlignment(newViewProps.textAttributes.alignment);
5656
}
5757

58-
updateShadowProps(oldViewProps, newViewProps, m_visual);
58+
// update BaseComponentView props
5959
updateAccessibilityProps(oldViewProps, newViewProps);
60+
updateShadowProps(oldViewProps, newViewProps, m_visual);
61+
updateTransformProps(oldViewProps, newViewProps, m_visual);
6062
updateBorderProps(oldViewProps, newViewProps);
6163

6264
m_props = std::static_pointer_cast<facebook::react::ParagraphProps const>(props);

vnext/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,11 @@ void ScrollViewComponentView::updateProps(
169169
}
170170
*/
171171

172+
// update BaseComponentView props
172173
updateShadowProps(oldViewProps, newViewProps, m_visual);
174+
updateTransformProps(oldViewProps, newViewProps, m_visual);
173175
updateBorderProps(oldViewProps, newViewProps);
176+
174177
m_props = std::static_pointer_cast<facebook::react::ViewProps const>(props);
175178
}
176179

vnext/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ void SwitchComponentView::updateProps(
5656
m_drawingSurface = nullptr;
5757
}
5858

59+
// update BaseComponentView props
5960
updateShadowProps(oldViewProps, newViewProps, m_visual);
61+
updateTransformProps(oldViewProps, newViewProps, m_visual);
6062
updateBorderProps(oldViewProps, newViewProps);
6163
m_props = std::static_pointer_cast<facebook::react::ViewProps const>(props);
6264
}

vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,9 @@ void WindowsTextInputComponentView::updateProps(
609609

610610
ensureVisual();
611611

612+
// update BaseComponentView props
612613
updateShadowProps(oldTextInputProps, newTextInputProps, m_visual);
614+
updateTransformProps(oldTextInputProps, newTextInputProps, m_visual);
613615
updateBorderProps(oldTextInputProps, newTextInputProps);
614616

615617
if (!facebook::react::floatEquality(

0 commit comments

Comments
 (0)