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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutFieldset.cpp

Issue 2555413002: Revert commit# 415577 "Add grid/flex layout support for <fieldset>" (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
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 4768383f5be022928a5ccc4fa0f5d645eab0f4c0..e636e9348c136af359bd79d6c78c0fe4e633106f 100644
--- a/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp
@@ -25,7 +25,6 @@
#include "core/CSSPropertyNames.h"
#include "core/HTMLNames.h"
-#include "core/dom/AXObjectCache.h"
#include "core/html/HTMLLegendElement.h"
#include "core/paint/FieldsetPainter.h"
@@ -35,87 +34,24 @@ namespace blink {
using namespace HTMLNames;
-namespace {
+LayoutFieldset::LayoutFieldset(Element* element) : LayoutBlockFlow(element) {}
-void setInnerBlockPadding(bool isHorizontalWritingMode,
- const LayoutObject* innerBlock,
- const LayoutUnit& padding) {
- if (isHorizontalWritingMode)
- innerBlock->mutableStyleRef().setPaddingTop(Length(padding, Fixed));
- else
- innerBlock->mutableStyleRef().setPaddingLeft(Length(padding, Fixed));
-}
-
-void resetInnerBlockPadding(bool isHorizontalWritingMode,
- const LayoutObject* innerBlock) {
- if (isHorizontalWritingMode)
- innerBlock->mutableStyleRef().setPaddingTop(Length(0, Fixed));
- else
- innerBlock->mutableStyleRef().setPaddingLeft(Length(0, Fixed));
-}
-
-} // namespace
-
-LayoutFieldset::LayoutFieldset(Element* element)
- : LayoutFlexibleBox(element), m_innerBlock(nullptr) {}
-
-int LayoutFieldset::baselinePosition(FontBaseline baseline,
- bool firstLine,
- LineDirectionMode direction,
- LinePositionMode position) const {
- return LayoutBlock::baselinePosition(baseline, firstLine, direction,
- position);
-}
-
-void LayoutFieldset::computeIntrinsicLogicalWidths(
- LayoutUnit& minLogicalWidth,
- LayoutUnit& maxLogicalWidth) const {
- for (LayoutBox* child = firstChildBox(); child;
- child = child->nextSiblingBox()) {
- if (child->isOutOfFlowPositioned())
- continue;
-
- LayoutUnit margin = marginIntrinsicLogicalWidthForChild(*child);
-
- LayoutUnit minPreferredLogicalWidth;
- LayoutUnit maxPreferredLogicalWidth;
- computeChildPreferredLogicalWidths(*child, minPreferredLogicalWidth,
- maxPreferredLogicalWidth);
- DCHECK_GE(minPreferredLogicalWidth, LayoutUnit());
- DCHECK_GE(maxPreferredLogicalWidth, LayoutUnit());
- minPreferredLogicalWidth += margin;
- maxPreferredLogicalWidth += margin;
- minLogicalWidth = std::max(minPreferredLogicalWidth, minLogicalWidth);
- maxLogicalWidth = std::max(maxPreferredLogicalWidth, maxLogicalWidth);
- }
+void LayoutFieldset::computePreferredLogicalWidths() {
+ LayoutBlockFlow::computePreferredLogicalWidths();
+ if (LayoutBox* legend = findInFlowLegend()) {
+ int legendMinWidth = legend->minPreferredLogicalWidth().toInt();
- maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth);
+ Length legendMarginLeft = legend->style()->marginLeft();
+ Length legendMarginRight = legend->style()->marginRight();
- // Due to negative margins, it is possible that we calculated a negative intrinsic width. Make sure that we
- // never return a negative width.
- minLogicalWidth = std::max(LayoutUnit(), minLogicalWidth);
- maxLogicalWidth = std::max(LayoutUnit(), maxLogicalWidth);
+ if (legendMarginLeft.isFixed())
+ legendMinWidth += legendMarginLeft.value();
- LayoutUnit scrollbarWidth(scrollbarLogicalWidth());
- maxLogicalWidth += scrollbarWidth;
- minLogicalWidth += scrollbarWidth;
-}
-
-void LayoutFieldset::setLogicalLeftForChild(LayoutBox& child,
- LayoutUnit logicalLeft) {
- if (isHorizontalWritingMode()) {
- child.setX(logicalLeft);
- } else {
- child.setY(logicalLeft);
- }
-}
+ if (legendMarginRight.isFixed())
+ legendMinWidth += legendMarginRight.value();
-void LayoutFieldset::setLogicalTopForChild(LayoutBox& child,
- LayoutUnit logicalTop) {
- if (isHorizontalWritingMode()) {
- child.setY(logicalTop);
- } else {
- child.setX(logicalTop);
+ m_minPreferredLogicalWidth = max(m_minPreferredLogicalWidth,
+ legendMinWidth + borderAndPaddingWidth());
}
}
@@ -173,7 +109,6 @@ LayoutObject* LayoutFieldset::layoutSpecialExcludedChild(bool relayoutChildren,
LayoutUnit legendLogicalTop;
LayoutUnit collapsedLegendExtent;
- LayoutUnit innerBlockPadding;
// 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
@@ -184,28 +119,17 @@ LayoutObject* LayoutFieldset::layoutSpecialExcludedChild(bool relayoutChildren,
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);
}
- if (m_innerBlock)
- setInnerBlockPadding(isHorizontalWritingMode(), m_innerBlock,
- innerBlockPadding);
setLogicalTopForChild(*legend, legendLogicalTop);
setLogicalHeight(paddingBefore() + collapsedLegendExtent);
if (legend->frameRect() != oldLegendFrameRect) {
// We need to invalidate the fieldset border if the legend's frame changed.
setShouldDoFullPaintInvalidation();
- if (m_innerBlock)
- m_innerBlock->setNeedsLayout(LayoutInvalidationReason::FieldsetChanged,
- MarkOnlyThis);
}
}
return legend;
@@ -234,68 +158,4 @@ void LayoutFieldset::paintMask(const PaintInfo& paintInfo,
FieldsetPainter(*this).paintMask(paintInfo, paintOffset);
}
-void LayoutFieldset::updateAnonymousChildStyle(
- const LayoutObject& child,
- ComputedStyle& childStyle) const {
- childStyle.setFlexShrink(1.0f);
- childStyle.setFlexGrow(1.0f);
- // min-width: 0; is needed for correct shrinking.
- childStyle.setMinWidth(Length(0, Fixed));
- childStyle.setFlexDirection(style()->flexDirection());
- childStyle.setJustifyContent(style()->justifyContent());
- childStyle.setFlexWrap(style()->flexWrap());
- childStyle.setAlignItems(style()->alignItems());
- childStyle.setAlignContent(style()->alignContent());
- // Let anonymous block to be the 1st for correct layout positioning.
- childStyle.setOrder(1);
-}
-
-void LayoutFieldset::addChild(LayoutObject* newChild,
- LayoutObject* beforeChild) {
- if (!m_innerBlock)
- createInnerBlock();
-
- if (isHTMLLegendElement(newChild->node())) {
- // Let legend block to be the 2nd for correct layout positioning.
- newChild->mutableStyle()->setOrder(2);
- LayoutFlexibleBox::addChild(newChild, m_innerBlock);
- } else {
- if (beforeChild && isHTMLLegendElement(beforeChild->node())) {
- m_innerBlock->addChild(newChild);
- } else {
- m_innerBlock->addChild(newChild, beforeChild);
- }
- if (AXObjectCache* cache = document().existingAXObjectCache())
- cache->childrenChanged(this);
- }
-}
-
-void LayoutFieldset::createInnerBlock() {
- if (m_innerBlock) {
- DCHECK(firstChild() == m_innerBlock);
- return;
- }
- m_innerBlock = createAnonymousBlock(style()->display());
- LayoutFlexibleBox::addChild(m_innerBlock);
-}
-
-void LayoutFieldset::removeChild(LayoutObject* oldChild) {
- if (isHTMLLegendElement(oldChild->node())) {
- LayoutFlexibleBox::removeChild(oldChild);
- if (m_innerBlock) {
- resetInnerBlockPadding(isHorizontalWritingMode(), m_innerBlock);
- m_innerBlock->setNeedsLayout(LayoutInvalidationReason::FieldsetChanged,
- MarkOnlyThis);
- }
- setShouldDoFullPaintInvalidation();
- } else if (oldChild == m_innerBlock) {
- LayoutFlexibleBox::removeChild(oldChild);
- m_innerBlock = nullptr;
- } else if (oldChild->parent() == this) {
- LayoutFlexibleBox::removeChild(oldChild);
- } else if (m_innerBlock) {
- m_innerBlock->removeChild(oldChild);
- }
-}
-
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutFieldset.h ('k') | third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698