Changeset 275462 in webkit
- Timestamp:
- Apr 5, 2021 5:42:08 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r275456 r275462 1 2021-04-05 Cameron McCormack <heycam@apple.com> 2 3 Fix max-content on tables with percentage cell widths. 4 https://bugs.webkit.org/show_bug.cgi?id=221165 5 6 Reviewed by Zalan Bujtas. 7 8 Fix max-content on tables with percentage cell widths. 9 10 * fast/table/percent-width-max-content-expected.html: Added. 11 * fast/table/percent-width-max-content.html: Added. 12 1 13 2021-04-05 Devin Rousso <drousso@apple.com> 2 14 -
trunk/Source/WebCore/ChangeLog
r275459 r275462 1 2021-04-05 Cameron McCormack <heycam@apple.com> 2 3 Fix max-content on tables with percentage cell widths. 4 https://bugs.webkit.org/show_bug.cgi?id=221165 5 6 Reviewed by Zalan Bujtas. 7 8 When `width: max-content` is specified on an element, any percentages 9 on content inside the element that are relative to the containing block 10 width should be treated as auto. Percentages on table cells and columns 11 in tables using auto table layout are not quite relative to the 12 containing block width, but do have a similar influence. So when 13 computing the intrinsic width of a table for the purpose of determining 14 the max-content value to use, ignore any percentages specified on table 15 cells and columns. 16 17 This change makes us match Firefox and Chrome on the test case. 18 19 Test: fast/table/percent-width-max-content.html 20 21 * rendering/AutoTableLayout.cpp: 22 (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths): 23 * rendering/AutoTableLayout.h: 24 * rendering/FixedTableLayout.cpp: 25 (WebCore::FixedTableLayout::computeIntrinsicLogicalWidths): 26 * rendering/FixedTableLayout.h: 27 * rendering/RenderBox.cpp: 28 (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing const): Call 29 into the new computeIntrinsicKeywordLogicalWidths function so that 30 tables can return different values for layout and intrinsic keyword 31 calculation. 32 * rendering/RenderBox.h: 33 (WebCore::RenderBox::computeIntrinsicKeywordLogicalWidths const): 34 Added to support computing intrinsic keyword lengths that differ from 35 those returned by computeIntrinsicLogicalWidths. 36 * rendering/RenderTable.cpp: 37 (WebCore::RenderTable::computeIntrinsicLogicalWidths const): Factored 38 this out to allow specifying an argument for whether the intrinsics 39 being computed are for layout or for instrinsic keyword calculation, 40 like max-content. 41 (WebCore::RenderTable::computeIntrinsicKeywordLogicalWidths const): 42 Added. This is the only override of the default implementation in 43 RenderBox. 44 * rendering/RenderTable.h: 45 * rendering/TableLayout.h: 46 1 47 2021-04-05 Myles C. Maxfield <mmaxfield@apple.com> 2 48 -
trunk/Source/WebCore/rendering/AutoTableLayout.cpp
r272805 r275462 238 238 } 239 239 240 void AutoTableLayout::computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth )240 void AutoTableLayout::computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth, TableIntrinsics intrinsics) 241 241 { 242 242 fullRecalc(); … … 247 247 float maxPercent = 0; 248 248 float maxNonPercent = 0; 249 bool scaleColumnsForSelf = shouldScaleColumnsForSelf(m_table) ;249 bool scaleColumnsForSelf = shouldScaleColumnsForSelf(m_table) && intrinsics == TableIntrinsics::ForLayout; 250 250 251 251 // We substitute 0 percent by (epsilon / percentScaleFactor) percent in two places below to avoid division by zero. -
trunk/Source/WebCore/rendering/AutoTableLayout.h
r233148 r275462 36 36 virtual ~AutoTableLayout(); 37 37 38 void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth ) override;38 void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth, TableIntrinsics) override; 39 39 LayoutUnit scaledWidthFromPercentColumns() const override { return m_scaledWidthFromPercentColumns; } 40 40 void applyPreferredLogicalWidthQuirks(LayoutUnit& minWidth, LayoutUnit& maxWidth) const override; -
trunk/Source/WebCore/rendering/FixedTableLayout.cpp
r272805 r275462 170 170 } 171 171 172 void FixedTableLayout::computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth )172 void FixedTableLayout::computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth, TableIntrinsics) 173 173 { 174 174 minWidth = maxWidth = calcWidthArray(); -
trunk/Source/WebCore/rendering/FixedTableLayout.h
r208668 r275462 34 34 explicit FixedTableLayout(RenderTable*); 35 35 36 void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth ) override;36 void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth, TableIntrinsics) override; 37 37 void applyPreferredLogicalWidthQuirks(LayoutUnit& minWidth, LayoutUnit& maxWidth) const override; 38 38 void layout() override; -
trunk/Source/WebCore/rendering/RenderBox.cpp
r275430 r275462 2618 2618 minLogicalWidth = maxLogicalWidth = computeLogicalWidthFromAspectRatio(); 2619 2619 else 2620 computeIntrinsic LogicalWidths(minLogicalWidth, maxLogicalWidth);2620 computeIntrinsicKeywordLogicalWidths(minLogicalWidth, maxLogicalWidth); 2621 2621 2622 2622 if (logicalWidthLength.isMinContent() || logicalWidthLength.isMinIntrinsic()) -
trunk/Source/WebCore/rendering/RenderBox.h
r275413 r275462 752 752 753 753 virtual void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const; 754 virtual void computeIntrinsicKeywordLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const 755 { 756 computeIntrinsicLogicalWidths(minLogicalWidth, maxLogicalWidth); 757 } 754 758 755 759 // This function calculates the minimum and maximum preferred widths for an object. -
trunk/Source/WebCore/rendering/RenderTable.cpp
r275413 r275462 803 803 } 804 804 805 void RenderTable::computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth ) const805 void RenderTable::computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth, TableIntrinsics intrinsics) const 806 806 { 807 807 recalcSectionsIfNeeded(); … … 811 811 const_cast<RenderTable*>(this)->recalcBordersInRowDirection(); 812 812 // FIXME: Restructure the table layout code so that we can make this method const. 813 const_cast<RenderTable*>(this)->m_tableLayout->computeIntrinsicLogicalWidths(minWidth, maxWidth );813 const_cast<RenderTable*>(this)->m_tableLayout->computeIntrinsicLogicalWidths(minWidth, maxWidth, intrinsics); 814 814 815 815 // FIXME: We should include captions widths here like we do in computePreferredLogicalWidths. 816 } 817 818 void RenderTable::computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth) const 819 { 820 computeIntrinsicLogicalWidths(minWidth, maxWidth, TableIntrinsics::ForLayout); 821 } 822 823 void RenderTable::computeIntrinsicKeywordLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth) const 824 { 825 computeIntrinsicLogicalWidths(minWidth, maxWidth, TableIntrinsics::ForKeyword); 816 826 } 817 827 -
trunk/Source/WebCore/rendering/RenderTable.h
r275413 r275462 41 41 42 42 enum SkipEmptySectionsValue { DoNotSkipEmptySections, SkipEmptySections }; 43 enum class TableIntrinsics : uint8_t { ForLayout, ForKeyword }; 43 44 44 45 class RenderTable : public RenderBlock { … … 289 290 void paintMask(PaintInfo&, const LayoutPoint&) final; 290 291 void layout() final; 292 void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth, TableIntrinsics) const; 291 293 void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth) const final; 294 void computeIntrinsicKeywordLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth) const final; 292 295 void computePreferredLogicalWidths() override; 293 296 bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override; -
trunk/Source/WebCore/rendering/TableLayout.h
r253987 r275462 29 29 class RenderTable; 30 30 31 enum class TableIntrinsics : uint8_t; 32 31 33 DECLARE_ALLOCATOR_WITH_HEAP_IDENTIFIER(TableLayout); 32 34 class TableLayout { … … 41 43 virtual ~TableLayout() = default; 42 44 43 virtual void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth ) = 0;45 virtual void computeIntrinsicLogicalWidths(LayoutUnit& minWidth, LayoutUnit& maxWidth, TableIntrinsics) = 0; 44 46 virtual LayoutUnit scaledWidthFromPercentColumns() const { return 0_lu; } 45 47 virtual void applyPreferredLogicalWidthQuirks(LayoutUnit& minWidth, LayoutUnit& maxWidth) const = 0;
Note: See TracChangeset
for help on using the changeset viewer.