Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "extracts transform and backfaceVisibility to baseComponent",
"packageName": "react-native-windows",
"email": "[email protected]",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
Expand Up @@ -1078,6 +1078,55 @@ void CompositionBaseComponentView::updateShadowProps(
}
}

void CompositionBaseComponentView::updateTransformProps(
const facebook::react::ViewProps &oldViewProps,
const facebook::react::ViewProps &newViewProps,
winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept {
// check for backfaceVisibility prop
if (oldViewProps.backfaceVisibility != newViewProps.backfaceVisibility) {
static_assert(
static_cast<facebook::react::BackfaceVisibility>(
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Inherit) ==
facebook::react::BackfaceVisibility::Auto);
static_assert(
static_cast<facebook::react::BackfaceVisibility>(
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Visible) ==
facebook::react::BackfaceVisibility::Visible);
static_assert(
static_cast<facebook::react::BackfaceVisibility>(
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Hidden) ==
facebook::react::BackfaceVisibility::Hidden);
m_visual.BackfaceVisibility(
static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(newViewProps.backfaceVisibility));
}

// Transform - TODO doesn't handle multiple of the same kind of transform -- Doesn't handle hittesting updates
if (oldViewProps.transform != newViewProps.transform) {
winrt::Windows::Foundation::Numerics::float4x4 transformMatrix;
transformMatrix.m11 = newViewProps.transform.matrix[0];
transformMatrix.m12 = newViewProps.transform.matrix[1];
transformMatrix.m13 = newViewProps.transform.matrix[2];
transformMatrix.m14 = newViewProps.transform.matrix[3];
transformMatrix.m21 = newViewProps.transform.matrix[4];
transformMatrix.m22 = newViewProps.transform.matrix[5];
transformMatrix.m23 = newViewProps.transform.matrix[6];
transformMatrix.m24 = newViewProps.transform.matrix[7];
transformMatrix.m31 = newViewProps.transform.matrix[8];
transformMatrix.m32 = newViewProps.transform.matrix[9];
transformMatrix.m33 = newViewProps.transform.matrix[10];
transformMatrix.m34 = newViewProps.transform.matrix[11];
transformMatrix.m41 = newViewProps.transform.matrix[12];
transformMatrix.m42 = newViewProps.transform.matrix[13];
transformMatrix.m43 = newViewProps.transform.matrix[14];
transformMatrix.m44 = newViewProps.transform.matrix[15];

auto centerPointPropSet = EnsureCenterPointPropertySet();
centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);

EnsureTransformMatrixFacade();
}
}

void CompositionBaseComponentView::updateAccessibilityProps(
const facebook::react::ViewProps &oldViewProps,
const facebook::react::ViewProps &newViewProps) noexcept {
Expand Down Expand Up @@ -1304,52 +1353,11 @@ void CompositionViewComponentView::updateProps(
m_visual.Opacity(newViewProps.opacity);
}

// update BaseComponentView props
updateAccessibilityProps(oldViewProps, newViewProps);
updateBorderProps(oldViewProps, newViewProps);
updateShadowProps(oldViewProps, newViewProps, m_visual);

if (oldViewProps.backfaceVisibility != newViewProps.backfaceVisibility) {
static_assert(
static_cast<facebook::react::BackfaceVisibility>(
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Inherit) ==
facebook::react::BackfaceVisibility::Auto);
static_assert(
static_cast<facebook::react::BackfaceVisibility>(
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Visible) ==
facebook::react::BackfaceVisibility::Visible);
static_assert(
static_cast<facebook::react::BackfaceVisibility>(
winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Hidden) ==
facebook::react::BackfaceVisibility::Hidden);
m_visual.BackfaceVisibility(
static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(newViewProps.backfaceVisibility));
}

// Transform - TODO doesn't handle multiple of the same kind of transform -- Doesn't handle hittesting updates
if (oldViewProps.transform != newViewProps.transform) {
winrt::Windows::Foundation::Numerics::float4x4 transformMatrix;
transformMatrix.m11 = newViewProps.transform.matrix[0];
transformMatrix.m12 = newViewProps.transform.matrix[1];
transformMatrix.m13 = newViewProps.transform.matrix[2];
transformMatrix.m14 = newViewProps.transform.matrix[3];
transformMatrix.m21 = newViewProps.transform.matrix[4];
transformMatrix.m22 = newViewProps.transform.matrix[5];
transformMatrix.m23 = newViewProps.transform.matrix[6];
transformMatrix.m24 = newViewProps.transform.matrix[7];
transformMatrix.m31 = newViewProps.transform.matrix[8];
transformMatrix.m32 = newViewProps.transform.matrix[9];
transformMatrix.m33 = newViewProps.transform.matrix[10];
transformMatrix.m34 = newViewProps.transform.matrix[11];
transformMatrix.m41 = newViewProps.transform.matrix[12];
transformMatrix.m42 = newViewProps.transform.matrix[13];
transformMatrix.m43 = newViewProps.transform.matrix[14];
transformMatrix.m44 = newViewProps.transform.matrix[15];

auto centerPointPropSet = EnsureCenterPointPropertySet();
centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);

EnsureTransformMatrixFacade();
}
updateTransformProps(oldViewProps, newViewProps, m_visual);
updateBorderProps(oldViewProps, newViewProps);

m_props = std::static_pointer_cast<facebook::react::ViewProps const>(props);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ struct CompositionBaseComponentView : public IComponentView,
const facebook::react::ViewProps &oldViewProps,
const facebook::react::ViewProps &newViewProps,
winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept;
void updateTransformProps(
const facebook::react::ViewProps &oldViewProps,
const facebook::react::ViewProps &newViewProps,
winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept;
void updateAccessibilityProps(
const facebook::react::ViewProps &oldView,
const facebook::react::ViewProps &newViewProps) noexcept;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,9 @@ void ImageComponentView::updateProps(

ensureVisual();

// update BaseComponentView props
updateShadowProps(oldImageProps, newImageProps, m_visual);
updateTransformProps(oldImageProps, newImageProps, m_visual);
updateBorderProps(oldImageProps, newImageProps);

if (oldImageProps.backgroundColor != newImageProps.backgroundColor ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,10 @@ void ParagraphComponentView::updateProps(
updateTextAlignment(newViewProps.textAttributes.alignment);
}

updateShadowProps(oldViewProps, newViewProps, m_visual);
// update BaseComponentView props
updateAccessibilityProps(oldViewProps, newViewProps);
updateShadowProps(oldViewProps, newViewProps, m_visual);
updateTransformProps(oldViewProps, newViewProps, m_visual);
updateBorderProps(oldViewProps, newViewProps);

m_props = std::static_pointer_cast<facebook::react::ParagraphProps const>(props);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,11 @@ void ScrollViewComponentView::updateProps(
}
*/

// update BaseComponentView props
updateShadowProps(oldViewProps, newViewProps, m_visual);
updateTransformProps(oldViewProps, newViewProps, m_visual);
updateBorderProps(oldViewProps, newViewProps);

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ void SwitchComponentView::updateProps(
m_drawingSurface = nullptr;
}

// update BaseComponentView props
updateShadowProps(oldViewProps, newViewProps, m_visual);
updateTransformProps(oldViewProps, newViewProps, m_visual);
updateBorderProps(oldViewProps, newViewProps);
m_props = std::static_pointer_cast<facebook::react::ViewProps const>(props);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,9 @@ void WindowsTextInputComponentView::updateProps(

ensureVisual();

// update BaseComponentView props
updateShadowProps(oldTextInputProps, newTextInputProps, m_visual);
updateTransformProps(oldTextInputProps, newTextInputProps, m_visual);
updateBorderProps(oldTextInputProps, newTextInputProps);

if (!facebook::react::floatEquality(
Expand Down