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

Side by Side Diff: Source/core/layout/LayoutBlock.cpp

Issue 1050243002: Revert Enable new multicol for testing and experimental web platform features. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/frame/Settings.in ('k') | Source/core/layout/LayoutBlockFlow.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2007 David Smith (catfish.man@gmail.com) 4 * (C) 2007 David Smith (catfish.man@gmail.com)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 #include "core/layout/line/InlineIterator.h" 59 #include "core/layout/line/InlineIterator.h"
60 #include "core/layout/line/InlineTextBox.h" 60 #include "core/layout/line/InlineTextBox.h"
61 #include "core/layout/shapes/ShapeOutsideInfo.h" 61 #include "core/layout/shapes/ShapeOutsideInfo.h"
62 #include "core/style/ContentData.h" 62 #include "core/style/ContentData.h"
63 #include "core/style/ComputedStyle.h" 63 #include "core/style/ComputedStyle.h"
64 #include "core/page/Page.h" 64 #include "core/page/Page.h"
65 #include "core/paint/BlockPainter.h" 65 #include "core/paint/BlockPainter.h"
66 #include "core/paint/BoxPainter.h" 66 #include "core/paint/BoxPainter.h"
67 #include "core/paint/DeprecatedPaintLayer.h" 67 #include "core/paint/DeprecatedPaintLayer.h"
68 #include "core/paint/LayoutObjectDrawingRecorder.h" 68 #include "core/paint/LayoutObjectDrawingRecorder.h"
69 #include "platform/RuntimeEnabledFeatures.h"
70 #include "platform/geometry/FloatQuad.h" 69 #include "platform/geometry/FloatQuad.h"
71 #include "platform/geometry/TransformState.h" 70 #include "platform/geometry/TransformState.h"
72 #include "wtf/StdLibExtras.h" 71 #include "wtf/StdLibExtras.h"
73 #include "wtf/TemporaryChange.h" 72 #include "wtf/TemporaryChange.h"
74 73
75 using namespace WTF; 74 using namespace WTF;
76 using namespace Unicode; 75 using namespace Unicode;
77 76
78 namespace blink { 77 namespace blink {
79 78
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 ASSERT(beforeChild->parent() == this); 842 ASSERT(beforeChild->parent() == this);
844 if (beforeChild->parent() != this) { 843 if (beforeChild->parent() != this) {
845 // We should never reach here. If we do, we need to use the 844 // We should never reach here. If we do, we need to use the
846 // safe fallback to use the topmost beforeChild container. 845 // safe fallback to use the topmost beforeChild container.
847 beforeChild = beforeChildContainer; 846 beforeChild = beforeChildContainer;
848 } 847 }
849 } 848 }
850 } 849 }
851 850
852 // Check for a spanning element in columns. 851 // Check for a spanning element in columns.
853 if (gColumnFlowSplitEnabled && !RuntimeEnabledFeatures::regionBasedColumnsEn abled()) { 852 if (gColumnFlowSplitEnabled && !document().regionBasedColumnsEnabled()) {
854 LayoutBlockFlow* columnsBlockAncestor = columnsBlockForSpanningElement(n ewChild); 853 LayoutBlockFlow* columnsBlockAncestor = columnsBlockForSpanningElement(n ewChild);
855 if (columnsBlockAncestor) { 854 if (columnsBlockAncestor) {
856 TemporaryChange<bool> columnFlowSplitEnabled(gColumnFlowSplitEnabled , false); 855 TemporaryChange<bool> columnFlowSplitEnabled(gColumnFlowSplitEnabled , false);
857 // We are placing a column-span element inside a block. 856 // We are placing a column-span element inside a block.
858 LayoutBlockFlow* newBox = createAnonymousColumnSpanBlock(); 857 LayoutBlockFlow* newBox = createAnonymousColumnSpanBlock();
859 858
860 if (columnsBlockAncestor != this && !isLayoutFlowThread()) { 859 if (columnsBlockAncestor != this && !isLayoutFlowThread()) {
861 // We are nested inside a multi-column element and are being spl it by the span. We have to break up 860 // We are nested inside a multi-column element and are being spl it by the span. We have to break up
862 // our block into continuations. 861 // our block into continuations.
863 LayoutBoxModelObject* oldContinuation = continuation(); 862 LayoutBoxModelObject* oldContinuation = continuation();
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
1526 1525
1527 IntRect inflatedRect = pixelSnappedBorderBoxRect(); 1526 IntRect inflatedRect = pixelSnappedBorderBoxRect();
1528 LayoutTheme::theme().adjustPaintInvalidationRect(this, inflatedRect); 1527 LayoutTheme::theme().adjustPaintInvalidationRect(this, inflatedRect);
1529 addVisualOverflow(LayoutRect(inflatedRect)); 1528 addVisualOverflow(LayoutRect(inflatedRect));
1530 } 1529 }
1531 1530
1532 bool LayoutBlock::createsNewFormattingContext() const 1531 bool LayoutBlock::createsNewFormattingContext() const
1533 { 1532 {
1534 return isInlineBlockOrInlineTable() || isFloatingOrOutOfFlowPositioned() || hasOverflowClip() || isFlexItemIncludingDeprecated() 1533 return isInlineBlockOrInlineTable() || isFloatingOrOutOfFlowPositioned() || hasOverflowClip() || isFlexItemIncludingDeprecated()
1535 || style()->specifiesColumns() || isLayoutFlowThread() || isTableCell() || isTableCaption() || isFieldset() || isWritingModeRoot() 1534 || style()->specifiesColumns() || isLayoutFlowThread() || isTableCell() || isTableCaption() || isFieldset() || isWritingModeRoot()
1536 || isDocumentElement() || (RuntimeEnabledFeatures::regionBasedColumnsEna bled() ? isColumnSpanAll() : style()->columnSpan()) || isGridItem(); 1535 || isDocumentElement() || (document().regionBasedColumnsEnabled() ? isCo lumnSpanAll() : style()->columnSpan()) || isGridItem();
1537 } 1536 }
1538 1537
1539 void LayoutBlock::updateBlockChildDirtyBitsBeforeLayout(bool relayoutChildren, L ayoutBox& child) 1538 void LayoutBlock::updateBlockChildDirtyBitsBeforeLayout(bool relayoutChildren, L ayoutBox& child)
1540 { 1539 {
1541 // FIXME: Technically percentage height objects only need a relayout if thei r percentage isn't going to be turned into 1540 // FIXME: Technically percentage height objects only need a relayout if thei r percentage isn't going to be turned into
1542 // an auto value. Add a method to determine this, so that we can avoid the r elayout. 1541 // an auto value. Add a method to determine this, so that we can avoid the r elayout.
1543 bool hasRelativeLogicalHeight = child.hasRelativeLogicalHeight() || (child.i sAnonymous() && this->hasRelativeLogicalHeight()); 1542 bool hasRelativeLogicalHeight = child.hasRelativeLogicalHeight() || (child.i sAnonymous() && this->hasRelativeLogicalHeight());
1544 if (relayoutChildren || (hasRelativeLogicalHeight && !isLayoutView())) 1543 if (relayoutChildren || (hasRelativeLogicalHeight && !isLayoutView()))
1545 child.setChildNeedsLayout(MarkOnlyThis); 1544 child.setChildNeedsLayout(MarkOnlyThis);
1546 1545
(...skipping 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after
2606 2605
2607 int LayoutBlock::columnGap() const 2606 int LayoutBlock::columnGap() const
2608 { 2607 {
2609 if (style()->hasNormalColumnGap()) 2608 if (style()->hasNormalColumnGap())
2610 return style()->fontDescription().computedPixelSize(); // "1em" is recom mended as the normal gap setting. Matches <p> margins. 2609 return style()->fontDescription().computedPixelSize(); // "1em" is recom mended as the normal gap setting. Matches <p> margins.
2611 return static_cast<int>(style()->columnGap()); 2610 return static_cast<int>(style()->columnGap());
2612 } 2611 }
2613 2612
2614 void LayoutBlock::calcColumnWidth() 2613 void LayoutBlock::calcColumnWidth()
2615 { 2614 {
2616 if (RuntimeEnabledFeatures::regionBasedColumnsEnabled()) 2615 if (document().regionBasedColumnsEnabled())
2617 return; 2616 return;
2618 2617
2619 // Calculate our column width and column count. 2618 // Calculate our column width and column count.
2620 // FIXME: Can overflow on fast/block/float/float-not-removed-from-next-sibli ng4.html, see https://bugs.webkit.org/show_bug.cgi?id=68744 2619 // FIXME: Can overflow on fast/block/float/float-not-removed-from-next-sibli ng4.html, see https://bugs.webkit.org/show_bug.cgi?id=68744
2621 unsigned desiredColumnCount = 1; 2620 unsigned desiredColumnCount = 1;
2622 LayoutUnit desiredColumnWidth = contentLogicalWidth(); 2621 LayoutUnit desiredColumnWidth = contentLogicalWidth();
2623 2622
2624 // For now, we don't support multi-column layouts when printing, since we ha ve to do a lot of work for proper pagination. 2623 // For now, we don't support multi-column layouts when printing, since we ha ve to do a lot of work for proper pagination.
2625 if (document().paginated() || !style()->specifiesColumns()) { 2624 if (document().paginated() || !style()->specifiesColumns()) {
2626 setDesiredColumnCountAndWidth(desiredColumnCount, desiredColumnWidth); 2625 setDesiredColumnCountAndWidth(desiredColumnCount, desiredColumnWidth);
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
2953 toLayoutBlockFlow(const_cast<LayoutBlock*>(this))->computeInlinePreferre dLogicalWidths(minLogicalWidth, maxLogicalWidth); 2952 toLayoutBlockFlow(const_cast<LayoutBlock*>(this))->computeInlinePreferre dLogicalWidths(minLogicalWidth, maxLogicalWidth);
2954 } else { 2953 } else {
2955 computeBlockPreferredLogicalWidths(minLogicalWidth, maxLogicalWidth); 2954 computeBlockPreferredLogicalWidths(minLogicalWidth, maxLogicalWidth);
2956 } 2955 }
2957 2956
2958 maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth); 2957 maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth);
2959 2958
2960 // The flow thread based multicol implementation will do this adjustment on the flow thread, and 2959 // The flow thread based multicol implementation will do this adjustment on the flow thread, and
2961 // not here on the multicol container, so that spanners won't incorrectly be treated as column 2960 // not here on the multicol container, so that spanners won't incorrectly be treated as column
2962 // content (and have spanners' preferred widths multiplied by the number of columns, etc.). 2961 // content (and have spanners' preferred widths multiplied by the number of columns, etc.).
2963 if (style()->specifiesColumns() && !RuntimeEnabledFeatures::regionBasedColum nsEnabled()) 2962 if (style()->specifiesColumns() && !document().regionBasedColumnsEnabled())
2964 adjustIntrinsicLogicalWidthsForColumns(minLogicalWidth, maxLogicalWidth) ; 2963 adjustIntrinsicLogicalWidthsForColumns(minLogicalWidth, maxLogicalWidth) ;
2965 2964
2966 if (isTableCell()) { 2965 if (isTableCell()) {
2967 Length tableCellWidth = toLayoutTableCell(this)->styleOrColLogicalWidth( ); 2966 Length tableCellWidth = toLayoutTableCell(this)->styleOrColLogicalWidth( );
2968 if (tableCellWidth.isFixed() && tableCellWidth.value() > 0) 2967 if (tableCellWidth.isFixed() && tableCellWidth.value() > 0)
2969 maxLogicalWidth = std::max(minLogicalWidth, adjustContentBoxLogicalW idthForBoxSizing(tableCellWidth.value())); 2968 maxLogicalWidth = std::max(minLogicalWidth, adjustContentBoxLogicalW idthForBoxSizing(tableCellWidth.value()));
2970 } 2969 }
2971 2970
2972 int scrollbarWidth = intrinsicScrollbarLogicalWidth(); 2971 int scrollbarWidth = intrinsicScrollbarLogicalWidth();
2973 maxLogicalWidth += scrollbarWidth; 2972 maxLogicalWidth += scrollbarWidth;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3008 3007
3009 LayoutUnit borderAndPadding = borderAndPaddingLogicalWidth(); 3008 LayoutUnit borderAndPadding = borderAndPaddingLogicalWidth();
3010 m_minPreferredLogicalWidth += borderAndPadding; 3009 m_minPreferredLogicalWidth += borderAndPadding;
3011 m_maxPreferredLogicalWidth += borderAndPadding; 3010 m_maxPreferredLogicalWidth += borderAndPadding;
3012 3011
3013 clearPreferredLogicalWidthsDirty(); 3012 clearPreferredLogicalWidthsDirty();
3014 } 3013 }
3015 3014
3016 void LayoutBlock::adjustIntrinsicLogicalWidthsForColumns(LayoutUnit& minLogicalW idth, LayoutUnit& maxLogicalWidth) const 3015 void LayoutBlock::adjustIntrinsicLogicalWidthsForColumns(LayoutUnit& minLogicalW idth, LayoutUnit& maxLogicalWidth) const
3017 { 3016 {
3018 ASSERT(!RuntimeEnabledFeatures::regionBasedColumnsEnabled()); 3017 ASSERT(!document().regionBasedColumnsEnabled());
3019 if (!style()->hasAutoColumnCount() || !style()->hasAutoColumnWidth()) { 3018 if (!style()->hasAutoColumnCount() || !style()->hasAutoColumnWidth()) {
3020 // The min/max intrinsic widths calculated really tell how much space el ements need when 3019 // The min/max intrinsic widths calculated really tell how much space el ements need when
3021 // laid out inside the columns. In order to eventually end up with the d esired column width, 3020 // laid out inside the columns. In order to eventually end up with the d esired column width,
3022 // we need to convert them to values pertaining to the multicol containe r. 3021 // we need to convert them to values pertaining to the multicol containe r.
3023 int columnCount = style()->hasAutoColumnCount() ? 1 : style()->columnCou nt(); 3022 int columnCount = style()->hasAutoColumnCount() ? 1 : style()->columnCou nt();
3024 LayoutUnit columnWidth; 3023 LayoutUnit columnWidth;
3025 LayoutUnit gapExtra = (columnCount - 1) * columnGap(); 3024 LayoutUnit gapExtra = (columnCount - 1) * columnGap();
3026 if (style()->hasAutoColumnWidth()) { 3025 if (style()->hasAutoColumnWidth()) {
3027 minLogicalWidth = minLogicalWidth * columnCount + gapExtra; 3026 minLogicalWidth = minLogicalWidth * columnCount + gapExtra;
3028 } else { 3027 } else {
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
3944 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout Object* obj) const 3943 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout Object* obj) const
3945 { 3944 {
3946 showLayoutObject(); 3945 showLayoutObject();
3947 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box()) 3946 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box())
3948 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1); 3947 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1);
3949 } 3948 }
3950 3949
3951 #endif 3950 #endif
3952 3951
3953 } // namespace blink 3952 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/frame/Settings.in ('k') | Source/core/layout/LayoutBlockFlow.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698