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 {
IsFlippedLinesWritingMode(style_->GetWritingMode());
}
return style_->IsLeftToRightDirection() ^
(style_->FlexDirection() == EFlexDirection::kRowReverse);
style_->ResolvedIsRowReverseFlexDirection();
}
const StyleContentAlignmentData&
......
......@@ -241,20 +241,18 @@ LayoutUnit LayoutFlexibleBox::InlineBlockBaseline(
}
bool LayoutFlexibleBox::HasTopOverflow() const {
EFlexDirection flex_direction = StyleRef().FlexDirection();
if (IsHorizontalWritingMode())
return flex_direction == EFlexDirection::kColumnReverse;
return StyleRef().ResolvedIsColumnReverseFlexDirection();
return !StyleRef().IsLeftToRightDirection() ^
(flex_direction == EFlexDirection::kRowReverse);
StyleRef().ResolvedIsRowReverseFlexDirection();
}
bool LayoutFlexibleBox::HasLeftOverflow() const {
EFlexDirection flex_direction = StyleRef().FlexDirection();
if (IsHorizontalWritingMode()) {
return !StyleRef().IsLeftToRightDirection() ^
(flex_direction == EFlexDirection::kRowReverse);
StyleRef().ResolvedIsRowReverseFlexDirection();
}
return flex_direction == EFlexDirection::kColumnReverse;
return StyleRef().ResolvedIsColumnReverseFlexDirection();
}
void LayoutFlexibleBox::MergeAnonymousFlexItems(LayoutObject* remove_child) {
......@@ -473,7 +471,7 @@ bool LayoutFlexibleBox::IsLeftToRightFlow() const {
IsFlippedLinesWritingMode(StyleRef().GetWritingMode());
}
return StyleRef().IsLeftToRightDirection() ^
(StyleRef().FlexDirection() == EFlexDirection::kRowReverse);
StyleRef().ResolvedIsRowReverseFlexDirection();
}
bool LayoutFlexibleBox::IsMultiline() const {
......@@ -1244,8 +1242,8 @@ LayoutUnit LayoutFlexibleBox::StaticMainAxisPositionForPositionedChild(
LayoutUnit offset = FlexLayoutAlgorithm::InitialContentPositionOffset(
available_space, FlexLayoutAlgorithm::ResolvedJustifyContent(StyleRef()),
1);
if (StyleRef().FlexDirection() == EFlexDirection::kRowReverse ||
StyleRef().FlexDirection() == EFlexDirection::kColumnReverse)
if (StyleRef().ResolvedIsRowReverseFlexDirection() ||
StyleRef().ResolvedIsColumnReverseFlexDirection())
offset = available_space - offset;
return offset;
}
......@@ -1462,7 +1460,7 @@ void LayoutFlexibleBox::ApplyLineItemsPosition(FlexLine* current_line) {
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
// items since the start depends on the height of the flexbox, which we
// only know after we've positioned all the flex items.
......
......@@ -1259,9 +1259,21 @@ class ComputedStyle : public ComputedStyleBase,
return FlexDirection() == EFlexDirection::kColumn ||
FlexDirection() == EFlexDirection::kColumnReverse;
}
bool IsReverseFlexDirection() const {
return FlexDirection() == EFlexDirection::kRowReverse ||
FlexDirection() == EFlexDirection::kColumnReverse;
bool ResolvedIsColumnReverseFlexDirection() const {
if (Display() == EDisplay::kWebkitBox ||
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 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