Commit 59a89c1b authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

blink: add support for webkit-box-direction to LayoutFlexibleBox

This provides mapping in ComputedStyle for webkit-box-direction so
that it works when LayoutFlexibleBox is used for webkit-box.

BUG=993813
TEST=none

Change-Id: I2a5526666bf0966f2ade73f4be41e4aaeab5b0ae
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1761393Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarChristian Biesinger <cbiesinger@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#688656}
parent 4d583d43
...@@ -522,7 +522,7 @@ bool FlexLayoutAlgorithm::IsLeftToRightFlow() const { ...@@ -522,7 +522,7 @@ bool FlexLayoutAlgorithm::IsLeftToRightFlow() const {
IsFlippedLinesWritingMode(style_->GetWritingMode()); IsFlippedLinesWritingMode(style_->GetWritingMode());
} }
return style_->IsLeftToRightDirection() ^ return style_->IsLeftToRightDirection() ^
(style_->FlexDirection() == EFlexDirection::kRowReverse); style_->ResolvedIsRowReverseFlexDirection();
} }
const StyleContentAlignmentData& const StyleContentAlignmentData&
......
...@@ -241,20 +241,18 @@ LayoutUnit LayoutFlexibleBox::InlineBlockBaseline( ...@@ -241,20 +241,18 @@ LayoutUnit LayoutFlexibleBox::InlineBlockBaseline(
} }
bool LayoutFlexibleBox::HasTopOverflow() const { bool LayoutFlexibleBox::HasTopOverflow() const {
EFlexDirection flex_direction = StyleRef().FlexDirection();
if (IsHorizontalWritingMode()) if (IsHorizontalWritingMode())
return flex_direction == EFlexDirection::kColumnReverse; return StyleRef().ResolvedIsColumnReverseFlexDirection();
return !StyleRef().IsLeftToRightDirection() ^ return !StyleRef().IsLeftToRightDirection() ^
(flex_direction == EFlexDirection::kRowReverse); StyleRef().ResolvedIsRowReverseFlexDirection();
} }
bool LayoutFlexibleBox::HasLeftOverflow() const { bool LayoutFlexibleBox::HasLeftOverflow() const {
EFlexDirection flex_direction = StyleRef().FlexDirection();
if (IsHorizontalWritingMode()) { if (IsHorizontalWritingMode()) {
return !StyleRef().IsLeftToRightDirection() ^ return !StyleRef().IsLeftToRightDirection() ^
(flex_direction == EFlexDirection::kRowReverse); StyleRef().ResolvedIsRowReverseFlexDirection();
} }
return flex_direction == EFlexDirection::kColumnReverse; return StyleRef().ResolvedIsColumnReverseFlexDirection();
} }
void LayoutFlexibleBox::MergeAnonymousFlexItems(LayoutObject* remove_child) { void LayoutFlexibleBox::MergeAnonymousFlexItems(LayoutObject* remove_child) {
...@@ -473,7 +471,7 @@ bool LayoutFlexibleBox::IsLeftToRightFlow() const { ...@@ -473,7 +471,7 @@ bool LayoutFlexibleBox::IsLeftToRightFlow() const {
IsFlippedLinesWritingMode(StyleRef().GetWritingMode()); IsFlippedLinesWritingMode(StyleRef().GetWritingMode());
} }
return StyleRef().IsLeftToRightDirection() ^ return StyleRef().IsLeftToRightDirection() ^
(StyleRef().FlexDirection() == EFlexDirection::kRowReverse); StyleRef().ResolvedIsRowReverseFlexDirection();
} }
bool LayoutFlexibleBox::IsMultiline() const { bool LayoutFlexibleBox::IsMultiline() const {
...@@ -1244,8 +1242,8 @@ LayoutUnit LayoutFlexibleBox::StaticMainAxisPositionForPositionedChild( ...@@ -1244,8 +1242,8 @@ LayoutUnit LayoutFlexibleBox::StaticMainAxisPositionForPositionedChild(
LayoutUnit offset = FlexLayoutAlgorithm::InitialContentPositionOffset( LayoutUnit offset = FlexLayoutAlgorithm::InitialContentPositionOffset(
available_space, FlexLayoutAlgorithm::ResolvedJustifyContent(StyleRef()), available_space, FlexLayoutAlgorithm::ResolvedJustifyContent(StyleRef()),
1); 1);
if (StyleRef().FlexDirection() == EFlexDirection::kRowReverse || if (StyleRef().ResolvedIsRowReverseFlexDirection() ||
StyleRef().FlexDirection() == EFlexDirection::kColumnReverse) StyleRef().ResolvedIsColumnReverseFlexDirection())
offset = available_space - offset; offset = available_space - offset;
return offset; return offset;
} }
...@@ -1462,7 +1460,7 @@ void LayoutFlexibleBox::ApplyLineItemsPosition(FlexLine* current_line) { ...@@ -1462,7 +1460,7 @@ void LayoutFlexibleBox::ApplyLineItemsPosition(FlexLine* current_line) {
current_line->cross_axis_extent)); current_line->cross_axis_extent));
} }
if (StyleRef().FlexDirection() == EFlexDirection::kColumnReverse) { if (StyleRef().ResolvedIsColumnReverseFlexDirection()) {
// We have to do an extra pass for column-reverse to reposition the flex // We have to do an extra pass for column-reverse to reposition the flex
// items since the start depends on the height of the flexbox, which we // items since the start depends on the height of the flexbox, which we
// only know after we've positioned all the flex items. // only know after we've positioned all the flex items.
......
...@@ -1259,9 +1259,21 @@ class ComputedStyle : public ComputedStyleBase, ...@@ -1259,9 +1259,21 @@ class ComputedStyle : public ComputedStyleBase,
return FlexDirection() == EFlexDirection::kColumn || return FlexDirection() == EFlexDirection::kColumn ||
FlexDirection() == EFlexDirection::kColumnReverse; FlexDirection() == EFlexDirection::kColumnReverse;
} }
bool IsReverseFlexDirection() const { bool ResolvedIsColumnReverseFlexDirection() const {
return FlexDirection() == EFlexDirection::kRowReverse || if (Display() == EDisplay::kWebkitBox ||
FlexDirection() == EFlexDirection::kColumnReverse; Display() == EDisplay::kWebkitInlineBox) {
return BoxOrient() == EBoxOrient::kVertical &&
BoxDirection() == EBoxDirection::kReverse;
}
return FlexDirection() == EFlexDirection::kColumnReverse;
}
bool ResolvedIsRowReverseFlexDirection() const {
if (Display() == EDisplay::kWebkitBox ||
Display() == EDisplay::kWebkitInlineBox) {
return BoxOrient() == EBoxOrient::kHorizontal &&
BoxDirection() == EBoxDirection::kReverse;
}
return FlexDirection() == EFlexDirection::kRowReverse;
} }
bool HasBoxReflect() const { return BoxReflect(); } bool HasBoxReflect() const { return BoxReflect(); }
bool ReflectionDataEquivalent(const ComputedStyle& other) const { bool ReflectionDataEquivalent(const ComputedStyle& other) const {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment