722 case ScrollLogicalPosition::End: {
723 switch (writingMode) {
724 case TopToBottomWritingMode:
725 case BottomToTopWritingMode:
726 return ScrollAlignment::alignRightAlways;
727 case LeftToRightWritingMode:
728 case RightToLeftWritingMode:
729 return ScrollAlignment::alignBottomAlways;
730 default:
731 ASSERT_NOT_REACHED();
732 return ScrollAlignment::alignRightAlways;
733 }
734 }
735 case ScrollLogicalPosition::Nearest:
736 return ScrollAlignment::alignToEdgeIfNeeded;
737 default:
738 ASSERT_NOT_REACHED();
739 return ScrollAlignment::alignToEdgeIfNeeded;
740 }
741}
742
743inline ScrollAlignment toScrollAlignmentForBlockDirection(Optional<ScrollLogicalPosition> position, WritingMode writingMode)
744{
745 switch (position.valueOr(ScrollLogicalPosition::Start)) {
746 case ScrollLogicalPosition::Start: {
747 switch (writingMode) {
748 case TopToBottomWritingMode:
749 return ScrollAlignment::alignTopAlways;
750 case BottomToTopWritingMode:
751 return ScrollAlignment::alignBottomAlways;
752 case LeftToRightWritingMode:
753 return ScrollAlignment::alignLeftAlways;
754 case RightToLeftWritingMode:
755 return ScrollAlignment::alignRightAlways;
756 default:
757 ASSERT_NOT_REACHED();
758 return ScrollAlignment::alignTopAlways;
759 }
760 }
761 case ScrollLogicalPosition::Center:
762 return ScrollAlignment::alignCenterAlways;
763 case ScrollLogicalPosition::End: {
764 switch (writingMode) {
765 case TopToBottomWritingMode:
766 return ScrollAlignment::alignBottomAlways;
767 case BottomToTopWritingMode:
768 return ScrollAlignment::alignTopAlways;
769 case LeftToRightWritingMode:
770 return ScrollAlignment::alignRightAlways;
771 case RightToLeftWritingMode:
772 return ScrollAlignment::alignLeftAlways;
773 default:
774 ASSERT_NOT_REACHED();
775 return ScrollAlignment::alignBottomAlways;
776 }
777 }