| OLD | NEW |
| 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 816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 if (isHorizontalFlow()) { | 827 if (isHorizontalFlow()) { |
| 828 child->setMarginLeft(computeChildMarginValue(child->style()->marginL
eft())); | 828 child->setMarginLeft(computeChildMarginValue(child->style()->marginL
eft())); |
| 829 child->setMarginRight(computeChildMarginValue(child->style()->margin
Right())); | 829 child->setMarginRight(computeChildMarginValue(child->style()->margin
Right())); |
| 830 } else { | 830 } else { |
| 831 child->setMarginTop(computeChildMarginValue(child->style()->marginTo
p())); | 831 child->setMarginTop(computeChildMarginValue(child->style()->marginTo
p())); |
| 832 child->setMarginBottom(computeChildMarginValue(child->style()->margi
nBottom())); | 832 child->setMarginBottom(computeChildMarginValue(child->style()->margi
nBottom())); |
| 833 } | 833 } |
| 834 } | 834 } |
| 835 } | 835 } |
| 836 | 836 |
| 837 LayoutUnit LayoutFlexibleBox::adjustChildSizeForMinAndMax(LayoutBox& child, Layo
utUnit childSize) | 837 LayoutUnit LayoutFlexibleBox::adjustChildSizeForMinAndMax(LayoutBox& child, Layo
utUnit childSize, bool childShrunk) |
| 838 { | 838 { |
| 839 Length max = isHorizontalFlow() ? child.style()->maxWidth() : child.style()-
>maxHeight(); | 839 Length max = isHorizontalFlow() ? child.style()->maxWidth() : child.style()-
>maxHeight(); |
| 840 LayoutUnit maxExtent = -1; | 840 LayoutUnit maxExtent = -1; |
| 841 if (max.isSpecifiedOrIntrinsic()) { | 841 if (max.isSpecifiedOrIntrinsic()) { |
| 842 maxExtent = computeMainAxisExtentForChild(child, MaxSize, max); | 842 maxExtent = computeMainAxisExtentForChild(child, MaxSize, max); |
| 843 if (maxExtent != -1 && childSize > maxExtent) | 843 if (maxExtent != -1 && childSize > maxExtent) |
| 844 childSize = maxExtent; | 844 childSize = maxExtent; |
| 845 } | 845 } |
| 846 | 846 |
| 847 Length min = isHorizontalFlow() ? child.style()->minWidth() : child.style()-
>minHeight(); | 847 Length min = isHorizontalFlow() ? child.style()->minWidth() : child.style()-
>minHeight(); |
| 848 LayoutUnit minExtent = 0; | 848 LayoutUnit minExtent = 0; |
| 849 if (min.isSpecifiedOrIntrinsic()) { | 849 if (min.isSpecifiedOrIntrinsic()) { |
| 850 minExtent = computeMainAxisExtentForChild(child, MinSize, min); | 850 minExtent = computeMainAxisExtentForChild(child, MinSize, min); |
| 851 // computeMainAxisExtentForChild can return -1 when the child has a perc
entage | 851 // computeMainAxisExtentForChild can return -1 when the child has a perc
entage |
| 852 // min size, but we have an indefinite size in that axis. | 852 // min size, but we have an indefinite size in that axis. |
| 853 minExtent = std::max(LayoutUnit(), minExtent); | 853 minExtent = std::max(LayoutUnit(), minExtent); |
| 854 } else if (min.isAuto() && mainAxisOverflowForChild(child) == OVISIBLE) { | 854 } else if (childShrunk && min.isAuto() && mainAxisOverflowForChild(child) ==
OVISIBLE) { |
| 855 // css-flexbox section 4.5 | 855 // css-flexbox section 4.5 |
| 856 LayoutUnit contentSize = computeMainAxisExtentForChild(child, MinSize, L
ength(MinContent)); | 856 LayoutUnit contentSize = computeMainAxisExtentForChild(child, MinSize, L
ength(MinContent)); |
| 857 ASSERT(contentSize >= 0); | 857 ASSERT(contentSize >= 0); |
| 858 if (maxExtent != -1 && contentSize > maxExtent) | 858 if (maxExtent != -1 && contentSize > maxExtent) |
| 859 contentSize = maxExtent; | 859 contentSize = maxExtent; |
| 860 | 860 |
| 861 bool hasClampedSize = !childPreferredMainAxisContentExtentRequiresLayout
(child); | 861 bool hasClampedSize = !childPreferredMainAxisContentExtentRequiresLayout
(child); |
| 862 if (hasClampedSize) { | 862 if (hasClampedSize) { |
| 863 const Length& flexBasis = flexBasisForChild(child); | 863 const Length& flexBasis = flexBasisForChild(child); |
| 864 bool flexBasisIsDefinite = flexBasis.isFixed() || (flexBasis.isPerce
nt() && mainAxisExtentIsDefinite()); | 864 bool flexBasisIsDefinite = flexBasis.isFixed() || (flexBasis.isPerce
nt() && mainAxisExtentIsDefinite()); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 childSizes.append(0); | 947 childSizes.append(0); |
| 948 continue; | 948 continue; |
| 949 } | 949 } |
| 950 | 950 |
| 951 if (inflexibleItems.contains(child)) { | 951 if (inflexibleItems.contains(child)) { |
| 952 childSizes.append(inflexibleItems.get(child)); | 952 childSizes.append(inflexibleItems.get(child)); |
| 953 } else { | 953 } else { |
| 954 LayoutUnit preferredChildSize = preferredMainAxisContentExtentForChi
ld(*child); | 954 LayoutUnit preferredChildSize = preferredMainAxisContentExtentForChi
ld(*child); |
| 955 LayoutUnit childSize = preferredChildSize; | 955 LayoutUnit childSize = preferredChildSize; |
| 956 double extraSpace = 0; | 956 double extraSpace = 0; |
| 957 if (availableFreeSpace > 0 && totalFlexGrow > 0 && flexSign == Posit
iveFlexibility && std::isfinite(totalFlexGrow)) | 957 bool childShrunk = false; |
| 958 if (availableFreeSpace > 0 && totalFlexGrow > 0 && flexSign == Posit
iveFlexibility && std::isfinite(totalFlexGrow)) { |
| 958 extraSpace = availableFreeSpace * child->style()->flexGrow() / t
otalFlexGrow; | 959 extraSpace = availableFreeSpace * child->style()->flexGrow() / t
otalFlexGrow; |
| 959 else if (availableFreeSpace < 0 && totalWeightedFlexShrink > 0 && fl
exSign == NegativeFlexibility && std::isfinite(totalWeightedFlexShrink)) | 960 } else if (availableFreeSpace < 0 && totalWeightedFlexShrink > 0 &&
flexSign == NegativeFlexibility && std::isfinite(totalWeightedFlexShrink) && chi
ld->style()->flexShrink()) { |
| 960 extraSpace = availableFreeSpace * child->style()->flexShrink() *
preferredChildSize / totalWeightedFlexShrink; | 961 extraSpace = availableFreeSpace * child->style()->flexShrink() *
preferredChildSize / totalWeightedFlexShrink; |
| 962 childShrunk = true; |
| 963 } |
| 961 if (std::isfinite(extraSpace)) | 964 if (std::isfinite(extraSpace)) |
| 962 childSize += LayoutUnit::fromFloatRound(extraSpace); | 965 childSize += LayoutUnit::fromFloatRound(extraSpace); |
| 963 | 966 |
| 964 LayoutUnit adjustedChildSize = adjustChildSizeForMinAndMax(*child, c
hildSize); | 967 LayoutUnit adjustedChildSize = adjustChildSizeForMinAndMax(*child, c
hildSize, childShrunk); |
| 965 ASSERT(adjustedChildSize >= 0); | 968 ASSERT(adjustedChildSize >= 0); |
| 966 childSizes.append(adjustedChildSize); | 969 childSizes.append(adjustedChildSize); |
| 967 usedFreeSpace += adjustedChildSize - preferredChildSize; | 970 usedFreeSpace += adjustedChildSize - preferredChildSize; |
| 968 | 971 |
| 969 LayoutUnit violation = adjustedChildSize - childSize; | 972 LayoutUnit violation = adjustedChildSize - childSize; |
| 970 if (violation > 0) | 973 if (violation > 0) |
| 971 minViolations.append(Violation(child, adjustedChildSize)); | 974 minViolations.append(Violation(child, adjustedChildSize)); |
| 972 else if (violation < 0) | 975 else if (violation < 0) |
| 973 maxViolations.append(Violation(child, adjustedChildSize)); | 976 maxViolations.append(Violation(child, adjustedChildSize)); |
| 974 totalViolation += violation; | 977 totalViolation += violation; |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1439 ASSERT(child); | 1442 ASSERT(child); |
| 1440 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; | 1443 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; |
| 1441 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; | 1444 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; |
| 1442 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; | 1445 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; |
| 1443 adjustAlignmentForChild(*child, newOffset - originalOffset); | 1446 adjustAlignmentForChild(*child, newOffset - originalOffset); |
| 1444 } | 1447 } |
| 1445 } | 1448 } |
| 1446 } | 1449 } |
| 1447 | 1450 |
| 1448 } | 1451 } |
| OLD | NEW |