Skip to content

Commit

Permalink
Default scroll to bring a component into view should have padding aro…
Browse files Browse the repository at this point in the history
…und the viewport (microsoft#14018)

* Default scroll to bring a component into view should have padding around the viewport

* Change files
  • Loading branch information
acoates-ms authored and rnbot committed Nov 12, 2024
1 parent cee6b12 commit 27a4b42
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Default scroll to bring a component into view should have padding around the viewport",
"packageName": "react-native-windows",
"email": "[email protected]",
"dependentChangeType": "patch"
}
4 changes: 2 additions & 2 deletions vnext/Microsoft.ReactNative/Fabric/ComponentView.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ struct BringIntoViewOptions {
bool AnimationDesired{false};
// NaN will bring the element fully into view aligned to the nearest edge of the viewport
float HorizontalAlignmentRatio{std::numeric_limits<float>::quiet_NaN()};
float HorizontalOffset{0};
float HorizontalOffset{20};
std::optional<facebook::react::Rect> TargetRect;
// NaN will bring the element fully into view aligned to the nearest edge of the viewport
float VerticalAlignmentRatio{std::numeric_limits<float>::quiet_NaN()};
float VerticalOffset{0};
float VerticalOffset{20};
};

struct LayoutMetricsChangedArgs : public LayoutMetricsChangedArgsT<LayoutMetricsChangedArgs> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1112,19 +1112,19 @@ void ScrollViewComponentView::StartBringIntoView(
options.TargetRect->origin.y > m_scrollVisual.ScrollPosition().y) {
needsScroll = true;
if (options.TargetRect->size.height > viewerHeight) {
scrollToVertical = options.TargetRect->origin.y + options.VerticalOffset;
scrollToVertical = options.TargetRect->origin.y + options.VerticalOffset * m_layoutMetrics.pointScaleFactor;
} else {
scrollToVertical = (targetBottom - viewerHeight) + options.VerticalOffset;
scrollToVertical = (targetBottom - viewerHeight) + options.VerticalOffset * m_layoutMetrics.pointScaleFactor;
}
// Scroll Up
} else if (
options.TargetRect->origin.y < m_scrollVisual.ScrollPosition().y &&
targetBottom < (m_scrollVisual.ScrollPosition().y + viewerHeight)) {
needsScroll = true;
if (options.TargetRect->size.height > viewerHeight) {
scrollToVertical = targetBottom - viewerHeight - options.VerticalOffset;
scrollToVertical = targetBottom - viewerHeight - options.VerticalOffset * m_layoutMetrics.pointScaleFactor;
} else {
scrollToVertical = options.TargetRect->origin.y - options.VerticalOffset;
scrollToVertical = options.TargetRect->origin.y - options.VerticalOffset * m_layoutMetrics.pointScaleFactor;
}
}
} else {
Expand All @@ -1138,19 +1138,19 @@ void ScrollViewComponentView::StartBringIntoView(
options.TargetRect->origin.x > m_scrollVisual.ScrollPosition().x) {
needsScroll = true;
if (options.TargetRect->size.width > viewerWidth) {
scrollToHorizontal = options.TargetRect->origin.x + options.HorizontalOffset;
scrollToHorizontal = options.TargetRect->origin.x + options.HorizontalOffset * m_layoutMetrics.pointScaleFactor;
} else {
scrollToHorizontal = (targetRight - viewerWidth) + options.HorizontalOffset;
scrollToHorizontal = (targetRight - viewerWidth) + options.HorizontalOffset * m_layoutMetrics.pointScaleFactor;
}
// Scroll Left
} else if (
options.TargetRect->origin.x < m_scrollVisual.ScrollPosition().x &&
targetRight < (m_scrollVisual.ScrollPosition().x + viewerWidth)) {
needsScroll = true;
if (options.TargetRect->size.width > viewerWidth) {
scrollToHorizontal = targetRight - viewerWidth - options.HorizontalOffset;
scrollToHorizontal = targetRight - viewerWidth - options.HorizontalOffset * m_layoutMetrics.pointScaleFactor;
} else {
scrollToHorizontal = options.TargetRect->origin.x - options.HorizontalOffset;
scrollToHorizontal = options.TargetRect->origin.x - options.HorizontalOffset * m_layoutMetrics.pointScaleFactor;
}
}
} else {
Expand Down

0 comments on commit 27a4b42

Please sign in to comment.