| Index: third_party/WebKit/Source/core/layout/LayoutFieldset.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp b/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp
|
| index 1527da1bdd632aaf0803296b2e45862baf241dfd..f21440a3e74f770c344fc45205a4277a3b8c0786 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp
|
| @@ -174,29 +174,27 @@ LayoutObject* LayoutFieldset::layoutSpecialExcludedChild(bool relayoutChildren,
|
| LayoutUnit legendLogicalTop;
|
| LayoutUnit collapsedLegendExtent;
|
| LayoutUnit innerBlockPadding;
|
| -
|
| - if (legendLogicalHeight < fieldsetBorderBefore) {
|
| - // Center legend in fieldset border
|
| + // FIXME: We need to account for the legend's margin before too.
|
| + if (fieldsetBorderBefore > legendLogicalHeight) {
|
| + // The <legend> is smaller than the associated fieldset before border
|
| + // so the latter determines positioning of the <legend>. The sizing
|
| + // depends on the legend's margins as we want to still follow the
|
| + // author's cues.
|
| + // Firefox completely ignores the margins in this case which seems wrong.
|
| legendLogicalTop = (fieldsetBorderBefore - legendLogicalHeight) / 2;
|
| + collapsedLegendExtent = max<LayoutUnit>(
|
| + fieldsetBorderBefore, legendLogicalTop + legendLogicalHeight +
|
| + marginAfterForChild(*legend));
|
| + innerBlockPadding = marginAfterForChild(*legend)
|
| + ? marginAfterForChild(*legend) - legendLogicalTop
|
| + : LayoutUnit();
|
| + } else {
|
| + collapsedLegendExtent =
|
| + legendLogicalHeight + marginAfterForChild(*legend);
|
| + innerBlockPadding =
|
| + legendLogicalHeight - borderAfter() + marginAfterForChild(*legend);
|
| }
|
|
|
| - // Calculate how much legend + bottom margin sticks below the fieldset
|
| - // border
|
| - innerBlockPadding = (legendLogicalTop + legendLogicalHeight +
|
| - marginAfterForChild(*legend) - fieldsetBorderBefore)
|
| - .clampNegativeToZero();
|
| -
|
| - if (legendLogicalTop < marginBeforeForChild(*legend)) {
|
| - // legend margin pushes everything down
|
| - innerBlockPadding += marginBeforeForChild(*legend) - legendLogicalTop;
|
| - legendLogicalTop = marginBeforeForChild(*legend);
|
| - }
|
| -
|
| - collapsedLegendExtent =
|
| - std::max(fieldsetBorderBefore, marginBeforeForChild(*legend) +
|
| - legendLogicalHeight +
|
| - marginAfterForChild(*legend));
|
| -
|
| if (m_innerBlock)
|
| setInnerBlockPadding(isHorizontalWritingMode(), m_innerBlock,
|
| innerBlockPadding);
|
|
|