OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 2882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2893 if (marginBefore.isAuto() && marginAfter.isAuto()) { | 2893 if (marginBefore.isAuto() && marginAfter.isAuto()) { |
2894 child.setMarginBefore(availableAlignmentSpace / 2, style()); | 2894 child.setMarginBefore(availableAlignmentSpace / 2, style()); |
2895 child.setMarginAfter(availableAlignmentSpace / 2, style()); | 2895 child.setMarginAfter(availableAlignmentSpace / 2, style()); |
2896 } else if (marginBefore.isAuto()) { | 2896 } else if (marginBefore.isAuto()) { |
2897 child.setMarginBefore(availableAlignmentSpace, style()); | 2897 child.setMarginBefore(availableAlignmentSpace, style()); |
2898 } else if (marginAfter.isAuto()) { | 2898 } else if (marginAfter.isAuto()) { |
2899 child.setMarginAfter(availableAlignmentSpace, style()); | 2899 child.setMarginAfter(availableAlignmentSpace, style()); |
2900 } | 2900 } |
2901 } | 2901 } |
2902 | 2902 |
2903 static int synthesizedBaselineFromContentBox(const LayoutBox& box, | |
2904 LineDirectionMode direction) { | |
2905 if (direction == HorizontalLine) { | |
2906 return (box.size().height() - box.borderBottom() - box.paddingBottom() - | |
2907 box.verticalScrollbarWidth()) | |
svillar
2016/10/21 12:53:06
Why aren't you directly using contentHeight() ?
jfernandez
2016/10/26 14:22:31
Well, we don't want contentHeight, but the distanc
| |
2908 .toInt(); | |
2909 } | |
2910 return (box.size().width() - box.borderLeft() - box.paddingLeft() - | |
2911 box.horizontalScrollbarHeight()) | |
svillar
2016/10/21 12:53:06
Why aren't you directly using contentWidth() ?
jfernandez
2016/10/26 14:22:31
Ditto.
| |
2912 .toInt(); | |
2913 } | |
2914 | |
2915 int LayoutGrid::baselinePosition(FontBaseline, | |
2916 bool, | |
2917 LineDirectionMode direction, | |
2918 LinePositionMode mode) const { | |
Manuel Rego
2016/10/25 19:42:09
This is the same code than flexbox, probably it'd
jfernandez
2016/10/26 14:22:31
Acknowledged.
| |
2919 DCHECK_EQ(mode, PositionOnContainingLine); | |
2920 int baseline = firstLineBoxBaseline(); | |
2921 // We take content-box's bottom if no valid baseline. | |
2922 if (baseline == -1) | |
2923 baseline = synthesizedBaselineFromContentBox(*this, direction); | |
2924 | |
2925 return baseline + beforeMarginInLineDirection(direction); | |
2926 } | |
2927 | |
2928 int LayoutGrid::firstLineBoxBaseline() const { | |
2929 if (isWritingModeRoot()) | |
2930 return -1; | |
2931 const LayoutBox* baselineChild = nullptr; | |
2932 for (const LayoutBox* child = m_orderIterator.first(); child; | |
svillar
2016/10/21 12:53:06
This is order-modified document order not grid-mod
Manuel Rego
2016/10/25 19:42:09
Yeah you should check the things in the first row
jfernandez
2016/10/26 14:22:31
Done.
| |
2933 child = m_orderIterator.next()) { | |
2934 if (child->isOutOfFlowPositioned()) | |
2935 continue; | |
2936 const GridSpan& rowsSpan = cachedGridSpan(*child, ForRows); | |
2937 // TODO (lajava): propertly identifying grid items whose areas | |
2938 // intersect the grid container's first row. | |
2939 if (rowsSpan.startLine() > 0) | |
2940 continue; | |
2941 ItemPosition align = alignSelfForChild(*child).position(); | |
2942 // Orthogonal children don't participate in baseline alignment. | |
2943 if (align == ItemPositionBaseline && !isOrthogonalChild(*child) && | |
2944 !hasAutoMarginsInColumnAxis(*child)) { | |
2945 // TODO (lajava): self-baseline and content-baseline alignment | |
2946 // still not implemented. | |
2947 baselineChild = child; | |
2948 break; | |
2949 } | |
2950 if (!baselineChild) | |
2951 baselineChild = child; | |
2952 } | |
2953 | |
2954 if (!baselineChild) | |
2955 return -1; | |
2956 | |
2957 if (isOrthogonalChild(*baselineChild)) { | |
2958 return ((isHorizontalWritingMode() ? baselineChild->size().height() | |
2959 : baselineChild->size().width()) + | |
2960 baselineChild->logicalTop()) | |
2961 .toInt(); | |
2962 } | |
2963 | |
2964 int baseline = baselineChild->firstLineBoxBaseline(); | |
2965 if (baseline == -1) { | |
2966 // TODO (lajava): We should pass |direction| into | |
2967 // firstLineBoxBaseline and stop bailing out if we're a writing | |
2968 // mode root. This would also fix some cases where the grid is | |
2969 // orthogonal to its container. | |
2970 LineDirectionMode direction = | |
2971 isHorizontalWritingMode() ? HorizontalLine : VerticalLine; | |
2972 return (synthesizedBaselineFromContentBox(*baselineChild, direction) + | |
2973 baselineChild->logicalTop()) | |
2974 .toInt(); | |
2975 } | |
2976 | |
2977 return (baseline + baselineChild->logicalTop()).toInt(); | |
2978 } | |
2979 | |
2980 int LayoutGrid::inlineBlockBaseline(LineDirectionMode direction) const { | |
Manuel Rego
2016/10/25 19:42:09
Again same code than flexbox, please add a comment
jfernandez
2016/10/26 14:22:31
Acknowledged.
| |
2981 int baseline = firstLineBoxBaseline(); | |
2982 if (baseline != -1) | |
2983 return baseline; | |
2984 | |
2985 int marginHeight = | |
2986 (direction == HorizontalLine ? marginTop() : marginRight()).toInt(); | |
2987 return synthesizedBaselineFromContentBox(*this, direction) + marginHeight; | |
2988 } | |
2989 | |
2903 GridAxisPosition LayoutGrid::columnAxisPositionForChild( | 2990 GridAxisPosition LayoutGrid::columnAxisPositionForChild( |
2904 const LayoutBox& child) const { | 2991 const LayoutBox& child) const { |
2905 bool hasSameWritingMode = | 2992 bool hasSameWritingMode = |
2906 child.styleRef().getWritingMode() == styleRef().getWritingMode(); | 2993 child.styleRef().getWritingMode() == styleRef().getWritingMode(); |
2907 bool childIsLTR = child.styleRef().isLeftToRightDirection(); | 2994 bool childIsLTR = child.styleRef().isLeftToRightDirection(); |
2908 | 2995 |
2909 switch (alignSelfForChild(child).position()) { | 2996 switch (alignSelfForChild(child).position()) { |
2910 case ItemPositionSelfStart: | 2997 case ItemPositionSelfStart: |
2911 // TODO (lajava): Should we implement this logic in a generic utility | 2998 // TODO (lajava): Should we implement this logic in a generic utility |
2912 // function? | 2999 // function? |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3323 if (!m_gridItemArea.isEmpty()) | 3410 if (!m_gridItemArea.isEmpty()) |
3324 GridPainter(*this).paintChildren(paintInfo, paintOffset); | 3411 GridPainter(*this).paintChildren(paintInfo, paintOffset); |
3325 } | 3412 } |
3326 | 3413 |
3327 bool LayoutGrid::cachedHasDefiniteLogicalHeight() const { | 3414 bool LayoutGrid::cachedHasDefiniteLogicalHeight() const { |
3328 SECURITY_DCHECK(m_hasDefiniteLogicalHeight); | 3415 SECURITY_DCHECK(m_hasDefiniteLogicalHeight); |
3329 return m_hasDefiniteLogicalHeight.value(); | 3416 return m_hasDefiniteLogicalHeight.value(); |
3330 } | 3417 } |
3331 | 3418 |
3332 } // namespace blink | 3419 } // namespace blink |
OLD | NEW |