Bug 1905247 - Clamp scroll-snap-align: start snap points inside the scroll range. r=emilio
This change is basically equivalent with what we did for bug 1788029 but for `scroll-snap-align: start` cases. The test case was originally written by Daniel Holbert. Differential Revision: https://phabricator.services.mozilla.com/D215315
This commit is contained in:
@@ -7328,11 +7328,14 @@ static void AppendScrollPositionsForSnap(
|
||||
switch (styleDisplay->mScrollSnapAlign.block) {
|
||||
case StyleScrollSnapAlignKeyword::None:
|
||||
break;
|
||||
case StyleScrollSnapAlignKeyword::Start:
|
||||
blockDirectionPosition.emplace(
|
||||
writingMode.IsVerticalRL() ? -logicalTargetRect.BStart(writingMode)
|
||||
: logicalTargetRect.BStart(writingMode));
|
||||
case StyleScrollSnapAlignKeyword::Start: {
|
||||
nscoord candidate = std::clamp(logicalTargetRect.BStart(writingMode),
|
||||
logicalScrollRange.BStart(writingMode),
|
||||
logicalScrollRange.BEnd(writingMode));
|
||||
blockDirectionPosition.emplace(writingMode.IsVerticalRL() ? -candidate
|
||||
: candidate);
|
||||
break;
|
||||
}
|
||||
case StyleScrollSnapAlignKeyword::End: {
|
||||
nscoord candidate = std::clamp(
|
||||
// What we need here is the scroll position instead of the snap
|
||||
@@ -7369,12 +7372,14 @@ static void AppendScrollPositionsForSnap(
|
||||
switch (styleDisplay->mScrollSnapAlign.inline_) {
|
||||
case StyleScrollSnapAlignKeyword::None:
|
||||
break;
|
||||
case StyleScrollSnapAlignKeyword::Start:
|
||||
case StyleScrollSnapAlignKeyword::Start: {
|
||||
nscoord candidate = std::clamp(logicalTargetRect.IStart(writingMode),
|
||||
logicalScrollRange.IStart(writingMode),
|
||||
logicalScrollRange.IEnd(writingMode));
|
||||
inlineDirectionPosition.emplace(
|
||||
writingMode.IsInlineReversed()
|
||||
? -logicalTargetRect.IStart(writingMode)
|
||||
: logicalTargetRect.IStart(writingMode));
|
||||
writingMode.IsInlineReversed() ? -candidate : candidate);
|
||||
break;
|
||||
}
|
||||
case StyleScrollSnapAlignKeyword::End: {
|
||||
nscoord candidate = std::clamp(
|
||||
// Same as above BEnd case, we subtract containerISize.
|
||||
|
||||
Reference in New Issue
Block a user