summaryrefslogtreecommitdiffstats
path: root/layout/tables
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2019-09-28 23:36:05 -0400
committerGaming4JC <g4jc@hyperbola.info>2019-09-28 23:47:05 -0400
commit8ff295747e7f5e205313e4405d5a63ce23fca993 (patch)
tree97e62467bb84625caa59b1c3620c7c5606ebe6cd /layout/tables
parentf1adcd1eeed03591f10ecc72c5e5b71856a18ca9 (diff)
downloadUXP-8ff295747e7f5e205313e4405d5a63ce23fca993.tar
UXP-8ff295747e7f5e205313e4405d5a63ce23fca993.tar.gz
UXP-8ff295747e7f5e205313e4405d5a63ce23fca993.tar.lz
UXP-8ff295747e7f5e205313e4405d5a63ce23fca993.tar.xz
UXP-8ff295747e7f5e205313e4405d5a63ce23fca993.zip
Issue #1230 - Part 1: Fix Back-computing percentages for intrinsic sizing in Layout CSS-Grid
List of relevant patches applied: 1398537 part 2 - [css-multicol] Implement percentages for 'column-gap' (Gecko part). 1434478 part 1 - [css-grid] Stop back-computing percentage grid gaps when the percentage basis is indefinite. Treat them as zero sized instead. 1434478 part 2 - Stop back-computing percentage padding/margin when the percentage basis is indefinite. Treat them as zero sized instead. 1434478 part 3 - Remove IntrinsicISizeOffsetData::hPctPadding/hPctMargin members since they are now unused. 1434478 part 4 - Factor out constants like NS_UNCONSTRAINEDSIZE so they can be used in headers without needing nsIFrame.h (idempotent patch). 1434478 part 5 - Create nsLayoutUtils::ResolveToLength for resolving CSS <length-percentage> (idempotent patch). 1434478 part 6 - Propagate a percentage basis to nsIFrame::IntrinsicISizeOffsets for resolving padding/margin. This is needed only for CSS Grid since in other cases we're only using IntrinsicISizeOffsets in the inline-axis and the percentage basis is always indefinite for *intrinsic sizing*. When calculating the intrinsic size of grid items in the grid container's block axis however, we do have a definite size for the grid area in the inline-axis and it should be used per: https://drafts.csswg.org/css-grid/#algo-overview "2. Next, the track sizing algorithm resolves the sizes of the grid rows, using the grid column sizes calculated in the previous step." (Percentage padding/margin for grid items is always resolved against the grid area's inline-size nowadays.)
Diffstat (limited to 'layout/tables')
-rw-r--r--layout/tables/nsTableCellFrame.cpp6
-rw-r--r--layout/tables/nsTableCellFrame.h3
-rw-r--r--layout/tables/nsTableFrame.cpp7
-rw-r--r--layout/tables/nsTableFrame.h3
4 files changed, 10 insertions, 9 deletions
diff --git a/layout/tables/nsTableCellFrame.cpp b/layout/tables/nsTableCellFrame.cpp
index 316a96613..dea82ea59 100644
--- a/layout/tables/nsTableCellFrame.cpp
+++ b/layout/tables/nsTableCellFrame.cpp
@@ -796,12 +796,12 @@ nsTableCellFrame::GetPrefISize(nsRenderingContext *aRenderingContext)
}
/* virtual */ nsIFrame::IntrinsicISizeOffsetData
-nsTableCellFrame::IntrinsicISizeOffsets()
+nsTableCellFrame::IntrinsicISizeOffsets(nscoord aPercentageBasis)
{
- IntrinsicISizeOffsetData result = nsContainerFrame::IntrinsicISizeOffsets();
+ IntrinsicISizeOffsetData result =
+ nsContainerFrame::IntrinsicISizeOffsets(aPercentageBasis);
result.hMargin = 0;
- result.hPctMargin = 0;
WritingMode wm = GetWritingMode();
result.hBorder = GetBorderWidth(wm).IStartEnd(wm);
diff --git a/layout/tables/nsTableCellFrame.h b/layout/tables/nsTableCellFrame.h
index 6717e1b70..240809850 100644
--- a/layout/tables/nsTableCellFrame.h
+++ b/layout/tables/nsTableCellFrame.h
@@ -118,7 +118,8 @@ public:
virtual nscoord GetMinISize(nsRenderingContext *aRenderingContext) override;
virtual nscoord GetPrefISize(nsRenderingContext *aRenderingContext) override;
- virtual IntrinsicISizeOffsetData IntrinsicISizeOffsets() override;
+ IntrinsicISizeOffsetData IntrinsicISizeOffsets(nscoord aPercentageBasis =
+ NS_UNCONSTRAINEDSIZE) override;
virtual void Reflow(nsPresContext* aPresContext,
ReflowOutput& aDesiredSize,
diff --git a/layout/tables/nsTableFrame.cpp b/layout/tables/nsTableFrame.cpp
index b9b6ca5fe..272a77406 100644
--- a/layout/tables/nsTableFrame.cpp
+++ b/layout/tables/nsTableFrame.cpp
@@ -1564,16 +1564,15 @@ nsTableFrame::GetPrefISize(nsRenderingContext *aRenderingContext)
}
/* virtual */ nsIFrame::IntrinsicISizeOffsetData
-nsTableFrame::IntrinsicISizeOffsets()
+nsTableFrame::IntrinsicISizeOffsets(nscoord aPercentageBasis)
{
- IntrinsicISizeOffsetData result = nsContainerFrame::IntrinsicISizeOffsets();
+ IntrinsicISizeOffsetData result =
+ nsContainerFrame::IntrinsicISizeOffsets(aPercentageBasis);
result.hMargin = 0;
- result.hPctMargin = 0;
if (IsBorderCollapse()) {
result.hPadding = 0;
- result.hPctPadding = 0;
WritingMode wm = GetWritingMode();
LogicalMargin outerBC = GetIncludedOuterBCBorder(wm);
diff --git a/layout/tables/nsTableFrame.h b/layout/tables/nsTableFrame.h
index 7e56c28c1..c7b92d387 100644
--- a/layout/tables/nsTableFrame.h
+++ b/layout/tables/nsTableFrame.h
@@ -324,7 +324,8 @@ public:
// border to the results of these functions.
virtual nscoord GetMinISize(nsRenderingContext *aRenderingContext) override;
virtual nscoord GetPrefISize(nsRenderingContext *aRenderingContext) override;
- virtual IntrinsicISizeOffsetData IntrinsicISizeOffsets() override;
+ IntrinsicISizeOffsetData IntrinsicISizeOffsets(nscoord aPercentageBasis =
+ NS_UNCONSTRAINEDSIZE) override;
virtual mozilla::LogicalSize
ComputeSize(nsRenderingContext* aRenderingContext,