Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp

Issue 1639723003: [css-flexbox] Use correct aspect ratio for min-size: auto (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: now also handling min/max Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 24 matching lines...) Expand all
35 #include "core/layout/TextAutosizer.h" 35 #include "core/layout/TextAutosizer.h"
36 #include "core/paint/BlockPainter.h" 36 #include "core/paint/BlockPainter.h"
37 #include "core/paint/PaintLayer.h" 37 #include "core/paint/PaintLayer.h"
38 #include "core/style/ComputedStyle.h" 38 #include "core/style/ComputedStyle.h"
39 #include "platform/LengthFunctions.h" 39 #include "platform/LengthFunctions.h"
40 #include "wtf/MathExtras.h" 40 #include "wtf/MathExtras.h"
41 #include <limits> 41 #include <limits>
42 42
43 namespace blink { 43 namespace blink {
44 44
45 static bool hasAspectRatio(const LayoutBox& child)
46 {
47 return child.isImage() || child.isCanvas() || child.isVideo();
48 }
49
45 struct LayoutFlexibleBox::LineContext { 50 struct LayoutFlexibleBox::LineContext {
46 LineContext(LayoutUnit crossAxisOffset, LayoutUnit crossAxisExtent, size_t n umberOfChildren, LayoutUnit maxAscent) 51 LineContext(LayoutUnit crossAxisOffset, LayoutUnit crossAxisExtent, size_t n umberOfChildren, LayoutUnit maxAscent)
47 : crossAxisOffset(crossAxisOffset) 52 : crossAxisOffset(crossAxisOffset)
48 , crossAxisExtent(crossAxisExtent) 53 , crossAxisExtent(crossAxisExtent)
49 , numberOfChildren(numberOfChildren) 54 , numberOfChildren(numberOfChildren)
50 , maxAscent(maxAscent) 55 , maxAscent(maxAscent)
51 { 56 {
52 } 57 }
53 58
54 LayoutUnit crossAxisOffset; 59 LayoutUnit crossAxisOffset;
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 // Otherwise we need the logical height. 450 // Otherwise we need the logical height.
446 if (isHorizontalFlow() != child.styleRef().isHorizontalWritingMode()) { 451 if (isHorizontalFlow() != child.styleRef().isHorizontalWritingMode()) {
447 // We don't have to check for "auto" here - computeContentLogicalHeight will just return -1 for that case anyway. 452 // We don't have to check for "auto" here - computeContentLogicalHeight will just return -1 for that case anyway.
448 // It's safe to access scrollbarLogicalHeight here because computeNextFl exLine will have already 453 // It's safe to access scrollbarLogicalHeight here because computeNextFl exLine will have already
449 // forced layout on the child. 454 // forced layout on the child.
450 return child.computeContentLogicalHeight(sizeType, size, child.contentLo gicalHeight()) + child.scrollbarLogicalHeight(); 455 return child.computeContentLogicalHeight(sizeType, size, child.contentLo gicalHeight()) + child.scrollbarLogicalHeight();
451 } 456 }
452 // computeLogicalWidth always re-computes the intrinsic widths. However, whe n our logical width is auto, 457 // computeLogicalWidth always re-computes the intrinsic widths. However, whe n our logical width is auto,
453 // we can just use our cached value. So let's do that here. (Compare code in LayoutBlock::computePreferredLogicalWidths) 458 // we can just use our cached value. So let's do that here. (Compare code in LayoutBlock::computePreferredLogicalWidths)
454 LayoutUnit borderAndPadding = child.borderAndPaddingLogicalWidth(); 459 LayoutUnit borderAndPadding = child.borderAndPaddingLogicalWidth();
455 if (child.styleRef().logicalWidth().isAuto()) { 460 if (child.styleRef().logicalWidth().isAuto() && !hasAspectRatio(child)) {
456 if (size.type() == MinContent) 461 if (size.type() == MinContent)
457 return child.minPreferredLogicalWidth() - borderAndPadding; 462 return child.minPreferredLogicalWidth() - borderAndPadding;
458 if (size.type() == MaxContent) 463 if (size.type() == MaxContent)
459 return child.maxPreferredLogicalWidth() - borderAndPadding; 464 return child.maxPreferredLogicalWidth() - borderAndPadding;
460 } 465 }
461 return child.computeLogicalWidthUsing(sizeType, size, contentLogicalWidth(), this) - borderAndPadding; 466 return child.computeLogicalWidthUsing(sizeType, size, contentLogicalWidth(), this) - borderAndPadding;
462 } 467 }
463 468
464 LayoutFlexibleBox::TransformedWritingMode LayoutFlexibleBox::transformedWritingM ode() const 469 LayoutFlexibleBox::TransformedWritingMode LayoutFlexibleBox::transformedWritingM ode() const
465 { 470 {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 LayoutUnit LayoutFlexibleBox::crossAxisScrollbarExtentForChild(const LayoutBox& child) const 623 LayoutUnit LayoutFlexibleBox::crossAxisScrollbarExtentForChild(const LayoutBox& child) const
619 { 624 {
620 return isHorizontalFlow() ? child.horizontalScrollbarHeight() : child.vertic alScrollbarWidth(); 625 return isHorizontalFlow() ? child.horizontalScrollbarHeight() : child.vertic alScrollbarWidth();
621 } 626 }
622 627
623 LayoutPoint LayoutFlexibleBox::flowAwareLocationForChild(const LayoutBox& child) const 628 LayoutPoint LayoutFlexibleBox::flowAwareLocationForChild(const LayoutBox& child) const
624 { 629 {
625 return isHorizontalFlow() ? child.location() : child.location().transposedPo int(); 630 return isHorizontalFlow() ? child.location() : child.location().transposedPo int();
626 } 631 }
627 632
633 bool LayoutFlexibleBox::useChildAspectRatio(const LayoutBox& child) const
634 {
635 if (!hasAspectRatio(child))
636 return false;
637 if (child.intrinsicSize().height() == 0) {
638 // We can't compute a ratio in this case.
639 return false;
640 }
641 Length crossSize;
642 if (isHorizontalFlow())
643 crossSize = child.styleRef().height();
644 else
645 crossSize = child.styleRef().width();
646 // TODO(cbiesinger): Eventually we should support other types of sizes here
647 return (crossSize.isFixed() || crossSize.hasPercent()) && crossAxisLengthIsD efinite(child, crossSize);
648 }
649
650 LayoutUnit LayoutFlexibleBox::computeMainSizeFromAspectRatioUsing(const LayoutBo x& child, Length crossSizeLength) const
651 {
652 ASSERT(hasAspectRatio(child));
653 ASSERT(child.intrinsicSize().height() != 0);
654
655 LayoutUnit crossSize;
656 if (crossSizeLength.isFixed()) {
657 crossSize = crossSizeLength.value();
658 } else {
659 ASSERT(crossSizeLength.hasPercent());
660 crossSize = hasOrthogonalFlow(child) ?
661 adjustBorderBoxLogicalWidthForBoxSizing(valueForLength(crossSizeLeng th, contentWidth())) :
662 child.computePercentageLogicalHeight(crossSizeLength);
663 }
664
665 const LayoutSize& childIntrinsicSize = child.intrinsicSize();
666 double ratio = childIntrinsicSize.width().toFloat() / childIntrinsicSize.hei ght().toFloat();
667 if (isHorizontalFlow())
668 return crossSize * ratio;
669 return crossSize / ratio;
670 }
671
628 void LayoutFlexibleBox::setFlowAwareLocationForChild(LayoutBox& child, const Lay outPoint& location) 672 void LayoutFlexibleBox::setFlowAwareLocationForChild(LayoutBox& child, const Lay outPoint& location)
629 { 673 {
630 if (isHorizontalFlow()) 674 if (isHorizontalFlow())
631 child.setLocationAndUpdateOverflowControlsIfNeeded(location); 675 child.setLocationAndUpdateOverflowControlsIfNeeded(location);
632 else 676 else
633 child.setLocationAndUpdateOverflowControlsIfNeeded(location.transposedPo int()); 677 child.setLocationAndUpdateOverflowControlsIfNeeded(location.transposedPo int());
634 } 678 }
635 679
636 LayoutUnit LayoutFlexibleBox::mainAxisBorderAndPaddingExtentForChild(const Layou tBox& child) const 680 LayoutUnit LayoutFlexibleBox::mainAxisBorderAndPaddingExtentForChild(const Layou tBox& child) const
637 { 681 {
638 return isHorizontalFlow() ? child.borderAndPaddingWidth() : child.borderAndP addingHeight(); 682 return isHorizontalFlow() ? child.borderAndPaddingWidth() : child.borderAndP addingHeight();
639 } 683 }
640 684
641 bool LayoutFlexibleBox::mainAxisLengthIsDefinite(const LayoutBox& child, const L ength& flexBasis) const 685 bool LayoutFlexibleBox::mainAxisLengthIsDefinite(const LayoutBox& child, const L ength& flexBasis) const
642 { 686 {
643 if (flexBasis.isAuto()) 687 if (flexBasis.isAuto())
644 return false; 688 return false;
645 if (flexBasis.hasPercent()) { 689 if (flexBasis.hasPercent()) {
646 return isColumnFlow() ? 690 return isColumnFlow() ?
647 child.computePercentageLogicalHeight(flexBasis) != -1 : 691 child.computePercentageLogicalHeight(flexBasis) != -1 :
648 hasDefiniteLogicalWidth(); 692 hasDefiniteLogicalWidth();
649 } 693 }
650 return true; 694 return true;
651 } 695 }
652 696
697 bool LayoutFlexibleBox::crossAxisLengthIsDefinite(const LayoutBox& child, const Length& length) const
698 {
699 if (length.isAuto())
700 return false;
701 if (length.hasPercent()) {
702 return hasOrthogonalFlow(child) ?
703 hasDefiniteLogicalWidth() :
704 child.computePercentageLogicalHeight(length) != -1;
705 }
706 return true;
707 }
708
653 bool LayoutFlexibleBox::childFlexBaseSizeRequiresLayout(const LayoutBox& child) const 709 bool LayoutFlexibleBox::childFlexBaseSizeRequiresLayout(const LayoutBox& child) const
654 { 710 {
655 return !mainAxisLengthIsDefinite(child, flexBasisForChild(child)) && ( 711 return !mainAxisLengthIsDefinite(child, flexBasisForChild(child)) && (
656 hasOrthogonalFlow(child) || crossAxisOverflowForChild(child) == OAUTO); 712 hasOrthogonalFlow(child) || crossAxisOverflowForChild(child) == OAUTO);
657 } 713 }
658 714
659 LayoutUnit LayoutFlexibleBox::computeInnerFlexBaseSizeForChild(LayoutBox& child, ChildLayoutType childLayoutType) 715 LayoutUnit LayoutFlexibleBox::computeInnerFlexBaseSizeForChild(LayoutBox& child, ChildLayoutType childLayoutType)
660 { 716 {
661 child.clearOverrideSize(); 717 child.clearOverrideSize();
662 718
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 // computeMainAxisExtentForChild can return -1 when the child has a perc entage 968 // computeMainAxisExtentForChild can return -1 when the child has a perc entage
913 // min size, but we have an indefinite size in that axis. 969 // min size, but we have an indefinite size in that axis.
914 minExtent = std::max(LayoutUnit(), minExtent); 970 minExtent = std::max(LayoutUnit(), minExtent);
915 } else if (min.isAuto() && mainAxisOverflowForChild(child) == OVISIBLE && !( isColumnFlow() && child.isFlexibleBox())) { 971 } else if (min.isAuto() && mainAxisOverflowForChild(child) == OVISIBLE && !( isColumnFlow() && child.isFlexibleBox())) {
916 // TODO(cbiesinger): For now, we do not handle min-height: auto for nest ed column flexboxes. We need 972 // TODO(cbiesinger): For now, we do not handle min-height: auto for nest ed column flexboxes. We need
917 // to implement https://drafts.csswg.org/css-flexbox/#intrinsic-sizes be fore that produces 973 // to implement https://drafts.csswg.org/css-flexbox/#intrinsic-sizes be fore that produces
918 // reasonable results. Tracking bug: https://crbug.com/581553 974 // reasonable results. Tracking bug: https://crbug.com/581553
919 // css-flexbox section 4.5 975 // css-flexbox section 4.5
920 LayoutUnit contentSize = computeMainAxisExtentForChild(child, MinSize, L ength(MinContent)); 976 LayoutUnit contentSize = computeMainAxisExtentForChild(child, MinSize, L ength(MinContent));
921 ASSERT(contentSize >= 0); 977 ASSERT(contentSize >= 0);
978 if (hasAspectRatio(child) && child.intrinsicSize().height() > 0)
979 contentSize = adjustChildSizeForAspectRatioCrossAxisMinAndMax(child, contentSize);
922 if (maxExtent != -1 && contentSize > maxExtent) 980 if (maxExtent != -1 && contentSize > maxExtent)
923 contentSize = maxExtent; 981 contentSize = maxExtent;
924 982
925 Length mainSize = isHorizontalFlow() ? child.styleRef().width() : child. styleRef().height(); 983 Length mainSize = isHorizontalFlow() ? child.styleRef().width() : child. styleRef().height();
926 if (mainAxisLengthIsDefinite(child, mainSize)) { 984 if (mainAxisLengthIsDefinite(child, mainSize)) {
927 LayoutUnit resolvedMainSize = computeMainAxisExtentForChild(child, M ainOrPreferredSize, mainSize); 985 LayoutUnit resolvedMainSize = computeMainAxisExtentForChild(child, M ainOrPreferredSize, mainSize);
928 ASSERT(resolvedMainSize >= 0); 986 ASSERT(resolvedMainSize >= 0);
929 LayoutUnit specifiedSize = maxExtent != -1 ? std::min(resolvedMainSi ze, maxExtent) : resolvedMainSize; 987 LayoutUnit specifiedSize = maxExtent != -1 ? std::min(resolvedMainSi ze, maxExtent) : resolvedMainSize;
930 988
931 minExtent = std::min(specifiedSize, contentSize); 989 minExtent = std::min(specifiedSize, contentSize);
990 } else if (useChildAspectRatio(child)) {
991 Length crossSizeLength = isHorizontalFlow() ? child.styleRef().heigh t() : child.styleRef().width();
992 LayoutUnit transferredSize = computeMainSizeFromAspectRatioUsing(chi ld, crossSizeLength);
993 transferredSize = adjustChildSizeForAspectRatioCrossAxisMinAndMax(ch ild, transferredSize);
994 minExtent = std::min(transferredSize, contentSize);
932 } else { 995 } else {
933 minExtent = contentSize; 996 minExtent = contentSize;
934 } 997 }
935 // TODO(cbiesinger): Implement aspect ratio handling (here, transferred size) - crbug.com/249112
936 } 998 }
937 ASSERT(minExtent >= 0); 999 ASSERT(minExtent >= 0);
938 return std::max(childSize, minExtent); 1000 return std::max(childSize, minExtent);
939 } 1001 }
940 1002
1003 LayoutUnit LayoutFlexibleBox::adjustChildSizeForAspectRatioCrossAxisMinAndMax(co nst LayoutBox& child, LayoutUnit childSize)
1004 {
1005 Length crossMin = isHorizontalFlow() ? child.style()->minHeight() : child.st yle()->minWidth();
1006 Length crossMax = isHorizontalFlow() ? child.style()->maxHeight() : child.st yle()->maxWidth();
1007
1008 // TODO(cbiesinger): Eventually we should support other types of sizes here
1009 if ((crossMax.isFixed() || crossMax.hasPercent()) && crossAxisLengthIsDefini te(child, crossMax)) {
leviw_travelin_and_unemployed 2016/01/28 00:37:59 You check these same values in three places now. H
cbiesinger 2016/01/28 00:42:48 Fair point. I decided to just only allow fixed and
1010 LayoutUnit maxValue = computeMainSizeFromAspectRatioUsing(child, crossMa x);
1011 childSize = std::min(maxValue, childSize);
1012 }
1013
1014 // TODO(cbiesinger): Eventually we should support other types of sizes here
1015 if ((crossMin.isFixed() || crossMin.hasPercent()) && crossAxisLengthIsDefini te(child, crossMin)) {
1016 LayoutUnit minValue = computeMainSizeFromAspectRatioUsing(child, crossMi n);
1017 childSize = std::max(minValue, childSize);
1018 }
1019
1020 return childSize;
1021 }
1022
941 bool LayoutFlexibleBox::computeNextFlexLine(OrderedFlexItemList& orderedChildren , LayoutUnit& sumFlexBaseSize, double& totalFlexGrow, double& totalFlexShrink, d ouble& totalWeightedFlexShrink, LayoutUnit& sumHypotheticalMainSize, bool relayo utChildren) 1023 bool LayoutFlexibleBox::computeNextFlexLine(OrderedFlexItemList& orderedChildren , LayoutUnit& sumFlexBaseSize, double& totalFlexGrow, double& totalFlexShrink, d ouble& totalWeightedFlexShrink, LayoutUnit& sumHypotheticalMainSize, bool relayo utChildren)
942 { 1024 {
943 orderedChildren.clear(); 1025 orderedChildren.clear();
944 sumFlexBaseSize = 0; 1026 sumFlexBaseSize = 0;
945 totalFlexGrow = totalFlexShrink = totalWeightedFlexShrink = 0; 1027 totalFlexGrow = totalFlexShrink = totalWeightedFlexShrink = 0;
946 sumHypotheticalMainSize = 0; 1028 sumHypotheticalMainSize = 0;
947 1029
948 if (!m_orderIterator.currentChild()) 1030 if (!m_orderIterator.currentChild())
949 return false; 1031 return false;
950 1032
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 // So the child will automatically stretch if our cross axis is the child's inline axis. That's the case if: 1252 // So the child will automatically stretch if our cross axis is the child's inline axis. That's the case if:
1171 // - We are horizontal and the child is in vertical writing mode 1253 // - We are horizontal and the child is in vertical writing mode
1172 // - We are vertical and the child is in horizontal writing mode 1254 // - We are vertical and the child is in horizontal writing mode
1173 // Otherwise, we need to stretch if the cross axis size is auto. 1255 // Otherwise, we need to stretch if the cross axis size is auto.
1174 if (alignmentForChild(child) != ItemPositionStretch) 1256 if (alignmentForChild(child) != ItemPositionStretch)
1175 return false; 1257 return false;
1176 1258
1177 if (isHorizontalFlow() != child.styleRef().isHorizontalWritingMode()) 1259 if (isHorizontalFlow() != child.styleRef().isHorizontalWritingMode())
1178 return false; 1260 return false;
1179 1261
1262 // TODO(cbiesinger): what about indefinite percentage heights?
1180 return isHorizontalFlow() ? child.styleRef().height().isAuto() : child.style Ref().width().isAuto(); 1263 return isHorizontalFlow() ? child.styleRef().height().isAuto() : child.style Ref().width().isAuto();
1181 } 1264 }
1182 1265
1183 bool LayoutFlexibleBox::childHasIntrinsicMainAxisSize(const LayoutBox& child) co nst 1266 bool LayoutFlexibleBox::childHasIntrinsicMainAxisSize(const LayoutBox& child) co nst
1184 { 1267 {
1185 bool result = false; 1268 bool result = false;
1186 if (isHorizontalFlow() != child.styleRef().isHorizontalWritingMode()) { 1269 if (isHorizontalFlow() != child.styleRef().isHorizontalWritingMode()) {
1187 Length childFlexBasis = flexBasisForChild(child); 1270 Length childFlexBasis = flexBasisForChild(child);
1188 Length childMinSize = isHorizontalFlow() ? child.style()->minWidth() : c hild.style()->minHeight(); 1271 Length childMinSize = isHorizontalFlow() ? child.style()->minWidth() : c hild.style()->minHeight();
1189 Length childMaxSize = isHorizontalFlow() ? child.style()->maxWidth() : c hild.style()->maxHeight(); 1272 Length childMaxSize = isHorizontalFlow() ? child.style()->maxWidth() : c hild.style()->maxHeight();
1190 if (childFlexBasis.isIntrinsic() || childMinSize.isIntrinsicOrAuto() || childMaxSize.isIntrinsic()) 1273 if (childFlexBasis.isIntrinsic() || childMinSize.isIntrinsicOrAuto() || childMaxSize.isIntrinsic())
1191 result = true; 1274 result = true;
1192 } 1275 }
1193 return result; 1276 return result;
1194 } 1277 }
1195 1278
1196 EOverflow LayoutFlexibleBox::mainAxisOverflowForChild(const LayoutBox& child) co nst 1279 EOverflow LayoutFlexibleBox::mainAxisOverflowForChild(const LayoutBox& child) co nst
1197 { 1280 {
1198 if (isHorizontalFlow()) 1281 if (isHorizontalFlow())
1199 return child.styleRef().overflowX(); 1282 return child.styleRef().overflowX();
1200 return child.styleRef().overflowY(); 1283 return child.styleRef().overflowY();
1201 } 1284 }
1202 1285
1203 EOverflow LayoutFlexibleBox::crossAxisOverflowForChild(const LayoutBox& child) c onst 1286 EOverflow LayoutFlexibleBox::crossAxisOverflowForChild(const LayoutBox& child) c onst
1204 { 1287 {
1205 if (isHorizontalFlow()) 1288 if (isHorizontalFlow())
1206 return child.styleRef().overflowY(); 1289 return child.styleRef().overflowY();
1207 return child.styleRef().overflowX(); 1290 return child.styleRef().overflowX();
1208 } 1291 }
1292
1209 void LayoutFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons t OrderedFlexItemList& children, const Vector<LayoutUnit, 16>& childSizes, Layou tUnit availableFreeSpace, bool relayoutChildren, SubtreeLayoutScope& layoutScope , Vector<LineContext>& lineContexts) 1293 void LayoutFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons t OrderedFlexItemList& children, const Vector<LayoutUnit, 16>& childSizes, Layou tUnit availableFreeSpace, bool relayoutChildren, SubtreeLayoutScope& layoutScope , Vector<LineContext>& lineContexts)
1210 { 1294 {
1211 ASSERT(childSizes.size() == children.size()); 1295 ASSERT(childSizes.size() == children.size());
1212 1296
1213 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren( children); 1297 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren( children);
1214 LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, available FreeSpace); 1298 LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, available FreeSpace);
1215 LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart() ; 1299 LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart() ;
1216 mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, style()->j ustifyContentPosition(), style()->justifyContentDistribution(), numberOfChildren ForJustifyContent); 1300 mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, style()->j ustifyContentPosition(), style()->justifyContentDistribution(), numberOfChildren ForJustifyContent);
1217 if (style()->flexDirection() == FlowRowReverse) 1301 if (style()->flexDirection() == FlowRowReverse)
1218 mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizo ntalScrollbarHeight(); 1302 mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizo ntalScrollbarHeight();
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
1545 ASSERT(child); 1629 ASSERT(child);
1546 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent; 1630 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent;
1547 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge; 1631 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge;
1548 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent; 1632 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent;
1549 adjustAlignmentForChild(*child, newOffset - originalOffset); 1633 adjustAlignmentForChild(*child, newOffset - originalOffset);
1550 } 1634 }
1551 } 1635 }
1552 } 1636 }
1553 1637
1554 } // namespace blink 1638 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698