Commit Graph

1868 Commits

Author SHA1 Message Date
Ting-Yu Lin
a791330c80 Bug 1575305 Part 1 - Remove an unneeded condition used for ::-moz-column-content. r=dbaron
Before bug 1411422, a ::-moz-column-content has height:100%, so it could
go into this path if ColumnSet's available block-size is unconstrained.

However, after bug 1411422, height:100% was removed for
::-moz-column-content. That is, its computed block-size is
unconstrained, so it can't go into this path. This applies regardless of
whether column-span is enabled or not.

Differential Revision: https://phabricator.services.mozilla.com/D42708
2019-08-20 22:29:55 +00:00
Daniel Holbert
8865537b64 Bug 1574310: clang-reformat the layout directory. (no review, just doing automated reformatting)
This patch is auto-generated by the following command:
./mach clang-format -p layout/

Differential Revision: https://phabricator.services.mozilla.com/D42218
2019-08-15 22:13:49 +00:00
Ting-Yu Lin
92903384ba Bug 1569701 Part 2 - Use ColumnSetWrapper's effective computed content block-size to impose constraint for ColumnSet. r=dbaron
Run broken-column-rule-1.html with column-span enabled because it was
regressed by Bug 1548100 Part 2, but fixed by this patch.

Differential Revision: https://phabricator.services.mozilla.com/D41907
2019-08-15 16:59:13 +00:00
Ting-Yu Lin
d3b16d837d Bug 1569701 Part 1 - Make BlockReflowInput::mConsumedBSize a constant, and delete it assessor method. r=dbaron
We always pass consumed block-size into BlockReflowInput's constructor
in nsBlockFrame::Reflow(). By making mConsumedBSize a constant, its
assessor method becomes redundant.

Update the documentation to reflect the reality that ConsumedBSize()
accumulates content block-size from all previous *continuations*, which
was done in Bug 1506293 Part 2.

Differential Revision: https://phabricator.services.mozilla.com/D41906
2019-08-15 16:49:14 +00:00
Mats Palmgren
096cb3e48f Bug 1557825 part 1 - Implement 'display:block ruby'. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D40211
2019-08-14 14:38:31 +00:00
Mats Palmgren
78ed7e52c0 Bug 1105868 part 4 - Accessibility support for inline list-items. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D39833
2019-08-14 14:37:16 +00:00
Mats Palmgren
7183051087 Bug 1105868 part 1 - Use nsStyleDisplay::IsListItem() in a few places to prepare for inline list-items. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D39830
2019-08-14 14:36:18 +00:00
L. David Baron
94e5b517b7 Bug 1571250 - Convert flags passed to ReflowChild, FinishReflowChild, SyncFrameViewAfterReflow and from GetXULLayoutFlags / GetLayoutFlags into an enum class. r=TYLin
It seems better to convert this before adding a new flag (in bug
1547759) and risking replacing the wrong 0 with a flag.

Differential Revision: https://phabricator.services.mozilla.com/D40562
2019-08-08 19:48:19 +00:00
Ting-Yu Lin
88c956facf Bug 1569252 Part 2 - Let mHasColumnSpanSiblings propagate to all the continuations. r=dbaron
We want mHasColumnSpanSiblings to propagate to all the
continuations (both fixed ones or fluid ones) in nsFrame::Init() so that
we don't need to traverse all the way to FirstInFlow() for the bit in
nsBlockFrame::ComputeFinalBSize().

For the last ColumnSet or the last non-column-span wrapper, we'll need
to unset the bit for them manually after constructing them.

Differential Revision: https://phabricator.services.mozilla.com/D40761
2019-08-07 20:20:25 +00:00
Ting-Yu Lin
d366d2dec4 Bug 1569252 Part 1 - Convert nsIFrame::HasColumnSpanSiblings() property into an nsIFrame bit. r=dbaron
Differential Revision: https://phabricator.services.mozilla.com/D40760
2019-08-07 20:20:18 +00:00
Ting-Yu Lin
7bbc854b8d Bug 1571118 - Keep NS_FRAME_FIRST_REFLOW bit in nsBlockFrame::Reflow() until nsFrame::DidReflow(). r=dholbert
This patch lets nsBlockFrame keep its NS_FRAME_FIRST_REFLOW bit a bit
longer, for the full duration of its first reflow, so that in the future
we may add more code to inspect it if needed before nsFrame::DidReflow()
clears it.

Differential Revision: https://phabricator.services.mozilla.com/D40512
2019-08-05 17:54:34 +00:00
Ting-Yu Lin
0cb468ba90 Bug 1571135 - Remove the preference that controls breaking floats inside columns. r=mats
Differential Revision: https://phabricator.services.mozilla.com/D40587
2019-08-05 17:39:19 +00:00
L. David Baron
e0f6989e68 Bug 1404868 - Always reflow float placeholders when they move to a different block fragment. r=TYLin
Differential Revision: https://phabricator.services.mozilla.com/D40276
2019-08-02 21:05:20 +00:00
L. David Baron
76d9a75dcb Bug 1404868 - Record in the reflow input whether we're in a different page/column than before. r=TYLin
This depends on the line state stored in the previous patch, and will be
used in the following patch.

I'm passing this information through the reflow input here, rather than
doing an extra pass over the frame tree in the following patch, because
I believe it's substantially better for memory locality during reflow.

Differential Revision: https://phabricator.services.mozilla.com/D40275
2019-08-02 23:51:21 +00:00
L. David Baron
6c1efb285e Bug 1404868 - Record when lines are in a different fragment than the one in which they were previously reflowed. r=TYLin
This will be used in the following patch.

Differential Revision: https://phabricator.services.mozilla.com/D40274
2019-08-02 20:44:53 +00:00
Ting-Yu Lin
382eda9e61 Bug 1548100 Part 2 - Fix the block-size of the column-rule by consuming available block-size. r=dbaron
After enabling column-span, ColumnSet becomes an anonymous child under
ColumnSetWrapperFrame. It doesn't need to handle border and padding,
containment, and non-auto block-size. ColumnSet's final block-size is
simply the union of ::-moz-column-content frames' rects.

However, we should extend ColumnSet's block-size to consume the
available block-size if the ColumnSetWrapper's block-size is constrained
so that the column rules are drawn to the block-end edge of the multicol
container.

Differential Revision: https://phabricator.services.mozilla.com/D39060
2019-08-01 22:48:55 +00:00
L. David Baron
2f24a7139f Bug 1420528 - As with constrained block-size, reflow lines with floats when block-size was *previously* constrained. r=TYLin
On its own (without the previous patch), this fixes bug 1406291.

Combined with the previous patch, this patch fixes this bug (bug
1420528) when column-span is not enabled (today's configuration), and
also fixes 1411799.

Differential Revision: https://phabricator.services.mozilla.com/D39818
2019-08-01 06:57:07 +00:00
L. David Baron
f3c5f6fdce Bug 1420528 - When a frame that was incomplete doesn't fit, make sure we reflow it again. r=TYLin
This patch fixes bug 1420528 when column-span is enabled, and it also
fixes bug 1468654.

Differential Revision: https://phabricator.services.mozilla.com/D39582
2019-08-01 00:48:05 +00:00
Ciure Andrei
af9491ad4f Backed out 2 changesets (bug 1548100) for causing nsColumnSetFrame.cpp perma asertion failures CLOSED TREE
Backed out changeset a06a6a6e1c5e (bug 1548100)
Backed out changeset 03a11c109d07 (bug 1548100)
2019-08-02 00:44:55 +03:00
Ting-Yu Lin
c7f4a489b5 Bug 1548100 Part 2 - Fix the block-size of the column-rule by consuming available block-size. r=dbaron
After enabling column-span, ColumnSet becomes an anonymous child under
ColumnSetWrapperFrame. It doesn't need to handle border and padding,
containment, and non-auto block-size. ColumnSet's final block-size is
simply the union of ::-moz-column-content frames' rects.

However, we should extend ColumnSet's block-size to consume the
available block-size if the ColumnSetWrapper's block-size is constrained
so that the column rules are drawn to the block-end edge of the multicol
container.

Differential Revision: https://phabricator.services.mozilla.com/D39060
2019-08-01 00:03:22 +00:00
Ting-Yu Lin
ac3684f84c Bug 1506293 Part 2 - Fix the block-size distribution across column-span split. r=dbaron
In frame construction, a block can be split by column-spans into several
fragments and each of the fragments is chained together by non-fluid
continuations. Later in reflow, each fragment can create its own fluid
continuations due to reasons such as the constraint of its available
block-size.

The main idea of this patch is that we calculate the block's final
block-size by shrinkwrapping the children for every fragment except for
those fluid continuations after the final column-span. To do that, we
need to correctly tag each non-column-span-wrappers
nsIFrame::HasColumnSpanSiblings() except the last one.

We also need to modify nsSplittableFrame::ConsumedBSize() so that it
includes the block-size for both fluid and non-fluid continuations.

Differential Revision: https://phabricator.services.mozilla.com/D38124
2019-07-30 18:03:25 +00:00
L. David Baron
dd49dc6004 Bug 1568501 - Search from the end of the line rather than the start, like this code did before bug 1566945. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D39268
2019-07-25 21:02:40 +00:00
Cameron McCormack
5194b7b61f Bug 1555142 - Don't assert if we don't find a -webkit-line-clamp ellipsis when searching for one to clear. r=dholbert
The line the ellipsis was on may have already been removed.

Differential Revision: https://phabricator.services.mozilla.com/D38449
2019-07-18 16:49:38 +00:00
L. David Baron
61799cdec1 Bug 1566945 - Make nsBlockFrame::AddFrames not search for the line box if it is provided. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D38392
2019-07-18 05:45:38 +00:00
L. David Baron
3b0f606428 Bug 1566945 - Pass line box through to nsBlockFrame::AddFrames. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D38391
2019-07-17 23:34:46 +00:00
L. David Baron
ca88671959 Bug 1566945 - Add a parameter to nsContainerFrame::InsertFrames for aPrevFrame's line box. r=dholbert
For now, always pass null, except when passing it through from one
overload to another.

Differential Revision: https://phabricator.services.mozilla.com/D38389
2019-07-17 23:34:45 +00:00
Ting-Yu Lin
57c1fd2509 Bug 1565037 Part 4 - Rename aContentBSize to aBEndEdgeOfChildren. r=dholbert
As described in https://bugzilla.mozilla.org/show_bug.cgi?id=1562122#c5,
this precomputed argument is not our children's block-size, but is the
block-end edge of children because aState.mBCoord is initialized as our
border-padding block-start in BlockReflowInput's constructor.

I also delete the sentence "The final block-size that is used in
aMetrics will be set ..." because this is the implementation details of
this function, and is likely to become inaccurate after considering the
block split by column-span.

Depends on D37625

Differential Revision: https://phabricator.services.mozilla.com/D37626
2019-07-11 18:43:35 +00:00
Ting-Yu Lin
9c8054f7ce Bug 1565037 Part 3 - Cache our children's reflow status, and use it to guide the morphing into our reflow status. r=dholbert
Because aStatus is also used as an output argument, caching aStatus as
our children's reflow status can and make the logic that morphs aStatus
to our reflow status easier to follow. And this helps the patch I'm
going to add for computing the block-size for column-span split.

Depends on D37624

Differential Revision: https://phabricator.services.mozilla.com/D37625
2019-07-11 18:50:14 +00:00
Ting-Yu Lin
40dd2212fa Bug 1565037 Part 2 - Change aStatus to a reference for ComputeFinalBSize(). r=dholbert
We usually use reference to manipulate nsReflowStatus like in Reflow().

The documentation for aStatus needs edit, and is done in next part.

Depends on D37623

Differential Revision: https://phabricator.services.mozilla.com/D37624
2019-07-11 18:43:23 +00:00
Ting-Yu Lin
3a5cf8abb6 Bug 1565037 Part 1 - Make nsBlockFrame::ComputeFinalBSize() return the final block size. r=dholbert
ComputeFinalBSize() doesn't need to modify the final inline-size, so we
don't need to pass the entire LogicalSize into it.

Also, aReflowInput.AvailableBSize() is used multiple times. Cache it to
shorten some statements.

Differential Revision: https://phabricator.services.mozilla.com/D37623
2019-07-11 18:43:14 +00:00
L. David Baron
46e66698c1 Bug 1474771 - Revert all changes from bug 1459937 since they are no longer needed. r=dholbert
(The single line that made them active was commented out in the previous patch.)

Differential Revision: https://phabricator.services.mozilla.com/D36425
2019-07-01 21:58:35 +00:00
Gerald Squelart
0088545108 Bug 1474771 - Propagate NS_FRAME_IS_DIRTY to descendants when marking as dirty rather than during reflow. r=dholbert
This simplifies dealing with frames that are pushed/pulled between
continuations during reflow, allows us to avoid the complexity of the
fix to 1459937, and hopefully fixes some of the regressions from bug
1308876.

This disables the changes from bug 1459937 by commenting out a single
line in ReparentFrameInternal in nsBlockFrame.cpp, but all the added
code will be removed in the following patch.

Co-authored-by: Gerald Squelart <gsquelart@mozilla.com>
Co-authored-by: L. David Baron <dbaron@dbaron.org>

Depends on D36423

Differential Revision: https://phabricator.services.mozilla.com/D36424
2019-07-01 21:56:43 +00:00
Ting-Yu Lin
79d4dedeae Bug 1562122 Part 4 - Return early in the overflow incomplete case, and add an assertion for the bound of final block size. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D36291
2019-06-28 21:21:15 +00:00
Ting-Yu Lin
9cabf875ee Bug 1562122 Part 3 - Delete the duplicate logic computing the final block size. r=dholbert
After the deleted logic

```
aFinalSize.BSize(wm) =
    std::max(aReflowInput.AvailableBSize(), aContentBSize);
```

aStatus changes to incomplete, so it computes the same thing again.

Differential Revision: https://phabricator.services.mozilla.com/D36290
2019-06-28 21:21:06 +00:00
Ting-Yu Lin
d86fd95e08 Bug 1562122 Part 2 - Replace effectiveComputedBSize with computedBSizeLeftOver. r=dholbert
No need to call GetEffectiveComputedBSize() twice.

Also, calling aState.ConsumedBSize() instead of using
aState.mConsumedBSize directly because the accessor function caches
mConsumedBSize properly when it is called the first time.

Differential Revision: https://phabricator.services.mozilla.com/D36289
2019-06-28 21:21:03 +00:00
Ting-Yu Lin
a6ffd944db Bug 1562122 Part 1 - Move the logic after ComputeFinalBSize() into ComputeFinalBSize(). r=dholbert
This patch only moves the logic, and rename some variables. More
clean-up follows.

Note in the middle of ComputeFinalBSize(), ShouldAvoidBreakInside() can
do early return under the condition that aStatus is complete. The logic
moved in this patch is executed only when aStatus is *incomplete*, so no
behavior is changed after applying this change.

Differential Revision: https://phabricator.services.mozilla.com/D36288
2019-06-28 21:20:54 +00:00
Daniel Holbert
40ffb19d22 Bug 1476127: Implement 'contain:size' for select elements. r=TYLin
Note that this is an imperfect implementation, in that it doesn't exactly
match the sizing behavior of a truly empty `<select>` element.  I've filed
followup bug 1562057 on that.  However, the behavior that's implemented
here *does* successfully make us ignore a `<select>`'s contents for sizing
purposes, and it's much better than what we do currently (which is pretty
broken via inheriting a partial `contain:size` implementation from our
parent class, nsBlockFrame).

Differential Revision: https://phabricator.services.mozilla.com/D36253
2019-06-28 20:32:13 +00:00
Mats Palmgren
80f5a4ec51 Bug 1560460 - Build display items for an outside ::marker before child content to get the correct paint order. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D35553
2019-06-21 05:20:51 +02:00
Ting-Yu Lin
374e1381f9 Bug 1523595 Part 3 - Apply ColumnSetWrapper's block size constraint to the available size when creating BlockReflowInput for ColumnSet. r=dbaron
We used to apply the column container's block size constraint on top of
the available block size in nsColumnSetFrame::ChooseColumnStrategy().
After column-span is enabled, ColumnSet is no longer the outermost
column container frame. We need to apply ColumnSetWrapper's block size
constraint to the available size when creating the ReflowInput for
ColumnSet so that ColumnSet can use it to compute the max column block
size in ChooseColumnStrategy().

This is calculated in nsBlockFrame::ReflowBlockFrame() instead of
nsColumnSetFrame::ChooseColumnStrategy() because we need
BlockReflowInput::mBCoord to determine the remaining block size.

multicol-breaking-004.html is copied and modified from
multicol-breaking-001.html with border-bottom added to test
"box-decoration-break: clone".

Differential Revision: https://phabricator.services.mozilla.com/D31676
2019-06-19 17:05:22 +00:00
shindli
e799adf87f Merge inbound to mozilla-central. a=merge 2019-06-06 12:57:52 +03:00
Ting-Yu Lin
697f516e19 Bug 1549267 Part 1 - Remove NS_INTRINSICSIZE and NS_AUTOHEIGHT. r=mats
This patch is generated by the following steps.

1) Manually delete NS_INTRINSICSIZE and NS_AUTOHEIGHT in LayoutConstants.

2) Run the following script.
```
  #!/bin/bash
  function rename() {
      find .\
           -type f\
           ! -path "./obj*"\
           ! -path "./.git"\
           ! -path "./.hg"\
           \( -name "*.cpp" -or\
              -name "*.h" \)\
              -exec sed -i -e "s/$1/$2/g" "{}" \;
  }

  rename NS_INTRINSICSIZE NS_UNCONSTRAINEDSIZE
  rename NS_AUTOHEIGHT NS_UNCONSTRAINEDSIZE
```

3) ./mach clang-format

Differential Revision: https://phabricator.services.mozilla.com/D31696
2019-06-04 23:41:20 +00:00
Mats Palmgren
3783028e44 Bug 1556709 - Only call OptionallyBreak() if we may break at white-space. r=jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D33718
2019-06-04 21:20:33 +02:00
Mats Palmgren
cdb244b878 Bug 1552357 - Improve intrinsic sizing of inlines. r=jfkthame
This is primarily to fix sizing of 'box-decoration-break:clone' inlines,
but also some 'slice' edge cases by recognizing more break opportunities,
and to improve sizing when BIDI-continuations are involved.

Differential Revision: https://phabricator.services.mozilla.com/D32915
2019-05-29 01:25:12 +02:00
Daniel Holbert
121bbfedfb Bug 1552287 part 2: [css-contain] Adjust various reflow & baseline methods so that layout-contained frames behave as if they have no baseline. r=TYLin
We previously (in bug 1491235) adjusted some utility code to make
layout-contained frames behave as if they have no baseline.

But that's not sufficient. To make frames fully report lack-of-a-baseline,
we now do the following for layout-contained frames, as of this patch:

 (a) We now leave the ReflowOutput outparam's BlockStartAscent member at its
     default value (which is what we do for frames without a baseline like
     e.g. nsCheckboxRadioFrame and nsHTMLCanvasFrame). And if the parent cares
     about the baseline, it'll then ask directly, using a baseline getter.

 (b) We now return 'false' in more implementations of bool-returning
     baseline-getter-methods (where 'false' indicates 'no baseline').

 (c) We now return the margin-box-bottom edge, in the nscoord-returning
     'GetLogicalBaseline()' getter method. (We typically do this by deferring
     to the inherited method, which ultimately comes from nsFrame's
     implementation). It's appropriate to use the margin-box-bottom edge when
     there's no baseline, per the definition of 'vertical-align: baseline',
     here: https://drafts.csswg.org/css2/visudet.html#propdef-vertical-align

Depends on D32182

Differential Revision: https://phabricator.services.mozilla.com/D32183
2019-05-24 04:46:17 +00:00
Emilio Cobos Álvarez
433868d057 Bug 1544242 - Cleanup selector-matching for nested pseudo-elements, match ::slotted correctly when there's no selector before it, and add tests. r=heycam,mats
D29542 fixed the bogus checks that was making nested pseudo-elements match
author rules. This adds tests and ends up being just a cleanup, though as it
turns out we it also fixes an issue with ::slotted() matched from
Element.matches.

Differential Revision: https://phabricator.services.mozilla.com/D27529
2019-05-24 01:09:15 +00:00
Andreea Pavel
e5c6f3b507 Backed out 2 changesets (bug 1552287) for failing contain-layout-suppress-baseline-002.html on a CLOSED TREE
Backed out changeset 815c6657d164 (bug 1552287)
Backed out changeset 888c32d2a32e (bug 1552287)
2019-05-24 03:34:03 +03:00
Daniel Holbert
47497d4e75 Bug 1552287 part 2: [css-contain] Adjust various reflow & baseline methods so that layout-contained frames behave as if they have no baseline. r=TYLin
We previously (in bug 1491235) adjusted some utility code to make
layout-contained frames behave as if they have no baseline.

But that's not sufficient. To make frames fully report lack-of-a-baseline,
we now do the following for layout-contained frames, as of this patch:

 (a) We now leave the ReflowOutput outparam's BlockStartAscent member at its
     default value (which is what we do for frames without a baseline like
     e.g. nsCheckboxRadioFrame and nsHTMLCanvasFrame). And if the parent cares
     about the baseline, it'll then ask directly, using a baseline getter.

 (b) We now return 'false' in more implementations of bool-returning
     baseline-getter-methods (where 'false' indicates 'no baseline').

 (c) We now return the margin-box-bottom edge, in the nscoord-returning
     'GetLogicalBaseline()' getter method. (We typically do this by deferring
     to the inherited method, which ultimately comes from nsFrame's
     implementation). It's appropriate to use the margin-box-bottom edge when
     there's no baseline, per the definition of 'vertical-align: baseline',
     here: https://drafts.csswg.org/css2/visudet.html#propdef-vertical-align

Depends on D32182

Differential Revision: https://phabricator.services.mozilla.com/D32183
2019-05-23 21:41:35 +00:00
Miko Mynttinen
c4bebb140a Bug 1552789 - Check NS_FRAME_FORCE_DISPLAY_LIST_DESCEND_INTO flag for every line r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D31865
2019-05-20 22:54:18 +00:00
Emilio Cobos Álvarez
cf9e540a86 Bug 1551065 - Properly discard empty lines for -webkit-line-clamp. r=heycam
That being said, this code is clearly not getting hit, are we 100% sure that
this is interoperable with what WebKit / Blink do?

Differential Revision: https://phabricator.services.mozilla.com/D30830
2019-05-13 09:14:33 +00:00
Ting-Yu Lin
d959a49a54 Bug 1550629 - Fix comments mentioning GetAvailableSpace. r=dholbert
GetAvailableSpace was renamed to GetFloatAvailableSpace in bug 25888.

DONTBUILD because this is a comment-only change.

Differential Revision: https://phabricator.services.mozilla.com/D30581
2019-05-10 21:06:48 +00:00