Commit Graph
66 Commits
Author SHA1 Message Date
Emilio Cobos Álvarez cf22f69bc6 Bug 1908242 - Make sure that sticky items are processed in the right order. r=TYLin
We rely on positioning ancestors before descendants to get the right
position. This was very implicitly enforced before the regressing bug,
by reframing on position changes (due to the order
StickyScrollContainer::AddFrame was called, ancestors before children).

In order to support dynamic sticky changes without reframing, we need to
handle the case of an existing ancestor switching position to sticky
dynamically.

Luckily we already have the right data-structure for that, so the change
is rather trivial.

Write a testharness test for this because APZ does get the position
right, so it's more future-proof against regressions to just test the
raw layout values.

Differential Revision: https://phabricator.services.mozilla.com/D216858
2024-07-18 20:54:13 +00:00
Emilio Cobos Álvarez f65e8bf020 Bug 1908242 - Minor clean-ups to StickyScrollContainer. r=TYLin,layout-reviewers
Remove one totally unused function, and some useless virtual keywords.

Differential Revision: https://phabricator.services.mozilla.com/D216860
2024-07-18 13:43:41 +00:00
Ting-Yu Lin 5cdee429ce Bug 1896516 Part 11 - Remove nsIScrollableFrame usages under layout/, widget/, and toolkit/. r=layout-reviewers,emilio
Differential Revision: https://phabricator.services.mozilla.com/D211498
2024-05-30 06:32:22 +00:00
Ting-Yu Lin 76523f97b1 Bug 1896516 Part 6 - Remove nsIScrollableFrame usages in nsLayoutUtils. r=layout-reviewers,emilio
Convert `nsIScrollableFrame` to `ScrollContainerFrame` for all the APIs in
nsLayoutUtils, and then adapt other callers until everything compiles.

In `nsLayoutUtils::CalculateBasicFrameMetrics()`'s documentation,
s/ComputeFrameMetrics/ComputeScrollMetadata/ because the method was renamed in
https://hg.mozilla.org/mozilla-central/rev/cb2023f50288

Differential Revision: https://phabricator.services.mozilla.com/D211493
2024-05-30 06:32:20 +00:00
Sebastian Hengst bf4dfe53f8 Backed out 15 changesets (bug 1896516) for causing scrolling crashes on macOS. a=backout
Backed out changeset fd6904338812 (bug 1896516)
Backed out changeset 2977ff81a23e (bug 1896516)
Backed out changeset c8a6b0e526d6 (bug 1896516)
Backed out changeset 3c06f22da72b (bug 1896516)
Backed out changeset f63b0c4335fe (bug 1896516)
Backed out changeset 6f7ab8adfa6e (bug 1896516)
Backed out changeset 997c9249dbed (bug 1896516)
Backed out changeset c964fccd5180 (bug 1896516)
Backed out changeset 7b481b747b7a (bug 1896516)
Backed out changeset 42e1bbe0ecb6 (bug 1896516)
Backed out changeset 717dac08b607 (bug 1896516)
Backed out changeset 2f0817331dbe (bug 1896516)
Backed out changeset b765169a7a8f (bug 1896516)
Backed out changeset a2d37b98273c (bug 1896516)
Backed out changeset ea9ecb543e66 (bug 1896516)
2024-05-29 11:22:52 +02:00
Ting-Yu Lin 37e9b779f9 Bug 1896516 Part 11 - Remove nsIScrollableFrame usages under layout/, widget/, and toolkit/. r=layout-reviewers,emilio
Differential Revision: https://phabricator.services.mozilla.com/D211498
2024-05-28 04:46:20 +00:00
Ting-Yu Lin 16b24f6c41 Bug 1896516 Part 6 - Remove nsIScrollableFrame usages in nsLayoutUtils. r=layout-reviewers,emilio
Convert `nsIScrollableFrame` to `ScrollContainerFrame` for all the APIs in
nsLayoutUtils, and then adapt other callers until everything compiles.

In `nsLayoutUtils::CalculateBasicFrameMetrics()`'s documentation,
s/ComputeFrameMetrics/ComputeScrollMetadata/ because the method was renamed in
https://hg.mozilla.org/mozilla-central/rev/cb2023f50288

Differential Revision: https://phabricator.services.mozilla.com/D211493
2024-05-28 04:46:18 +00:00
Ting-Yu Lin 23d5641a3d Bug 1488080 Part 2 - Use margin-box with 'auto' margin resolved as zero when computing the sticky limits. r=dholbert
In block or flex layout, an 'auto' margin can be used to align the element by
consuming rest of the space of a particular side in its container [1]. However,
if we used the resolved 'auto' margin as part of the element's margin-box, it
won't stick within its scroll container if the margin is larger than the scroll
container's size in that dimension. Bug 1488080 comment 15 has more explanation.

The spec requires all 'auto' margin on the box are treated as zero when
computing Static-Position Rectangle [2] (See the requirement at the end of this
section).

[1] https://drafts.csswg.org/css-flexbox-1/#auto-margins
[2] https://drafts.csswg.org/css-position/#staticpos-rect

Differential Revision: https://phabricator.services.mozilla.com/D209097
2024-05-03 18:42:41 +00:00
Ting-Yu Lin 5604d30ede Bug 1488080 Part 1 - Convert GetAllInFlowRects flags to EnumSet. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D209096
2024-05-03 18:42:41 +00:00
Emilio Cobos Álvarez a4d68aea48 Bug 1882091 - Use scrolled rect minus padding to contain sticky children. r=TYLin
I think this makes sense now that the padding is included in the
scrollable overflow area.

Differential Revision: https://phabricator.services.mozilla.com/D204354
2024-03-13 16:16:42 +00:00
Sylvestre Ledru b0fe72dee5 Bug 1856795 - Remove redundant member init r=emilio
Done with:
./mach static-analysis check --checks="-*, readability-redundant-member-init" --fix .

https://clang.llvm.org/extra/clang-tidy/checks/readability/redundant-member-init.html

Differential Revision: https://phabricator.services.mozilla.com/D190002
2023-10-15 15:29:02 +00:00
Cristina Horotan 7388749830 Backed out 2 changesets (bug 1856795) for causing build bustage at BasicEvents.h CLOSED TREE
Backed out changeset 1d98b028923a (bug 1856795)
Backed out changeset eae2ac93e17c (bug 1856795)
2023-10-14 21:42:14 +03:00
Sylvestre Ledru 4a97019e39 Bug 1856795 - Remove redundant member init r=emilio
Done with:
./mach static-analysis check --checks="-*, readability-redundant-member-init" --fix .

https://clang.llvm.org/extra/clang-tidy/checks/readability/redundant-member-init.html

Differential Revision: https://phabricator.services.mozilla.com/D190002
2023-10-14 17:34:26 +00:00
serge-sans-paille a9fac04fe7 Bug 1854555 - Remove global constructor in layout/generic/StickyScrollContainer.cpp r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D188936
2023-09-27 07:15:20 +00:00
Emilio Cobos Álvarez 7ef18a962f Bug 1472602 - Sticky/relative position fixes in nsTableWrapperFrame. r=dholbert
Captions should be relatively-positioned (other browsers support this as
well). This ensures we correctly save their normal positions and thus
that the sticky scroll container knows how to reposition them correctly.

Avoid registering inner table frames with the sticky scroll container to
make the assertion sound in cases of sticky-positioned tables.

Differential Revision: https://phabricator.services.mozilla.com/D147092
2022-05-23 23:40:42 +00:00
Iulian Moraru 721e45f5a7 Backed out changeset e3377838e213 (bug 1472602) for causing multiple failures related to StickyScrollContainer. CLOSED TREE 2022-05-24 01:14:50 +03:00
Emilio Cobos Álvarez f475401d94 Bug 1472602 - Sticky/relative position fixes in nsTableWrapperFrame. r=dholbert
Captions should be relatively-positioned (other browsers support this as
well). This ensures we correctly save their normal positions and thus
that the sticky scroll container knows how to reposition them correctly.

Avoid registering inner table frames with the sticky scroll container to
make the assertion sound in cases of sticky-positioned tables.

Differential Revision: https://phabricator.services.mozilla.com/D147092
2022-05-23 20:43:15 +00:00
Ting-Yu Lin ede6f9503a Bug 1637130 - Rename visual overflow to ink overflow. r=dbaron
This patch is generated by:

```
# Rename the nsOverflowType enum.
rg -l "eVisualOverflow" layout/ gfx/ | xargs sed -i "s/eVisualOverflow/eInkOverflow/g"

# Rename and drop the "Get" prefix from various functions.
rg -l "GetVisualOverflowRect" layout/ gfx/ | xargs sed -i "s/GetVisualOverflowRect/InkOverflowRect/g"
rg -l "GetPreEffectsVisualOverflowRect" layout/ gfx/ | xargs sed -i "s/GetPreEffectsVisualOverflowRect/PreEffectsInkOverflowRect/g"
rg -l "GetVisualOverflowFromDeltas" layout/ gfx/ | xargs sed -i "s/GetVisualOverflowFromDeltas/InkOverflowFromDeltas/g"
rg -l "GetScrollableOverflowRect" layout/ gfx/ | xargs sed -i "s/GetScrollableOverflowRect/ScrollableOverflowRect/g"

# Rename, drop the "Get" prefix, and change the suffix "Area" to "Rect"
# (because they return nsRect) for the two methods in nsLineBox.
rg -l "GetVisualOverflowArea" layout/ gfx/ | xargs sed -i "s/GetVisualOverflowArea/InkOverflowRect/g"
rg -l "GetScrollableOverflowArea" layout/ gfx/ | xargs sed -i "s/GetScrollableOverflowArea/ScrollableOverflowRect/g"

# Rename rest of the functions and variables.
rg -l "VisualOverflow" layout/ gfx/ | xargs sed -i "s/VisualOverflow/InkOverflow/g"
rg -l "visual overflow" layout/ gfx/ | xargs sed -i "s/visual overflow/ink overflow/g"
rg -l "visualOverflow" layout/ gfx/ | xargs sed -i "s/visualOverflow/inkOverflow/g"
rg -l "visOverflow" layout/ gfx/ | xargs sed -i "s/visOverflow/inkOverflow/g"
rg -l "vis-overflow" layout/ gfx/ python/ | xargs sed -i "s/vis-overflow/ink-overflow/g"

./mach clang-format
```

Differential Revision: https://phabricator.services.mozilla.com/D84231
2020-07-20 20:17:36 +00:00
Kagami Sascha Rosylight 93741338a8 Bug 1630704 - Part 27: Remove nsFrame from inheritance chain r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D81864
2020-07-06 22:29:42 +00:00
Mats Palmgren e7f922b1e5 Bug 1633045 - Don't use the Print Preview viewport scroll frame as a scroll container for 'position:sticky' content. r=TYLin
Differential Revision: https://phabricator.services.mozilla.com/D72529
2020-04-27 19:19:38 +00:00
Daniel Holbert 86280b8f73 Bug 1613198: Move inline impls for nsIFrame::GetNormalPosition and GetLogicalNormalPosition into nsIFrameInlines.h. r=jfkthame
Also, add an nsIFrameInlines.h include to all .cpp files who call these APIs
and who don't yet have an include for this header.

Differential Revision: https://phabricator.services.mozilla.com/D61615
2020-02-05 09:52:35 +00:00
Emilio Cobos Álvarez 79768ff848 Bug 1611181 - Make direction use an enum class. r=boris
Differential Revision: https://phabricator.services.mozilla.com/D60857
2020-01-24 11:46:14 +00:00
Ting-Yu Lin 71f2a14c61 Bug 1598112 - Use scrolled frame's overflow rect as a the bounding box for position:sticky elements. r=emilio
This change effectively disallows sticky elements to enlarge overflow
area. That is, the position of a sticky element will be bounded by the
union of scrolled frame's border-box and the overflow area created by
other non-sticky elements within the same block formatting context.

This makes Firefox's position:sticky elements behaves like Google Chrome
in this respect.

Differential Revision: https://phabricator.services.mozilla.com/D54345
2019-12-21 00:24:57 +00:00
Narcis Beleuzu 86f579c5f8 Backed out changeset b2e78ee1b18e (bug 1598112) for Linting failure on position-sticky-large-top-2-ref.tentative.html . CLOSED TREE 2019-12-21 02:02:00 +02:00
Ting-Yu Lin 3c5859d252 Bug 1598112 - Use scrolled frame's overflow rect as a the bounding box for position:sticky elements. r=emilio
This change effectively disallows sticky elements to enlarge overflow
area. That is, the position of a sticky element will be bounded by the
union of scrolled frame's border-box and the overflow area created by
other non-sticky elements within the same block formatting context.

This makes Firefox's position:sticky elements behaves like Google Chrome
in this respect.

Differential Revision: https://phabricator.services.mozilla.com/D54345
2019-12-20 19:30:05 +00:00
Timothy Nikkel ff391cfb57 Bug 1308286. Consider sticky frames that are acting like fixed position frames when determining page scroll amount. r=botond
Differential Revision: https://phabricator.services.mozilla.com/D48618
2019-10-09 23:51:05 +00:00
Emilio Cobos Álvarez ce3d5d43c1 Bug 1523071 - Use Rust lengths for margin / padding / inset. r=jwatt
Also for the intersection observer root margin, since it was easier to fix it
up and clean it up than not doing it.

This is the first big step to get rid of nscoord. It duplicates a bit of logic
in nsLayoutUtils since for now max/min-width/height are still represented with
nsStyleCoord, but I think I prefer to land this incrementally.

I didn't add helpers for the physical accessors of the style rect sides that
nsStyleSides has (top/bottom/left/right) since I think we generally should
encourage the logical versions, but let me know if you want me to do that.

Differential Revision: https://phabricator.services.mozilla.com/D17739
2019-02-10 04:11:58 +01:00
Kartikaya Gupta f57df49b65 Bug 1496194 - Ensure the inner sticky rect stays inside the outer sticky rect. r=botond
Depends on D15136

Differential Revision: https://phabricator.services.mozilla.com/D15137
2018-12-21 22:37:28 +00:00
Sylvestre Ledru e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Emilio Cobos Álvarez 68ee99d4c8 Bug 1448688: Remove RestyleTracker, ComputedStyle::AsServo, old style system element bits. r=xidorn
MozReview-Commit-ID: ALiOngGqozN
2018-03-26 09:38:07 +02:00
Botond Ballo 436c9a74eb Bug 1442767 - Rename Box to RectAbsolute (Gecko changes). r=kats
MozReview-Commit-ID: 1wrzwQw8bdx
2018-03-05 18:08:18 -05:00
Botond Ballo 09f98979a9 Bug 1434250 - Use a Box, rather than a Rect, representation for position:sticky inner/outer rects in the Layers API. r=kats
MozReview-Commit-ID: 4LDQ3XmWynx
2018-02-09 15:40:13 -05:00
Emilio Cobos Álvarez 8245586af5 Bug 975644: Enable position sticky in table parts. r=bz
MozReview-Commit-ID: 85nCuChHdTa
2017-12-21 20:29:20 +01:00
Emilio Cobos Álvarez beefce9983 Bug 975644: Add a hack to skip table row groups for sticky positioning. r=bz
This matches Blink's behavior.

Just skipping table row groups from being containing blocks makes
layout/reftests/table-overflow/table-cell-block-overflow.html render differently
(and way more different than any other browser, actually...), so I avoided doing
that.

Though I'm not really proud of this one, better ideas welcome. Maybe I should
just fix table layout so that we agree with WebKit / Blink... But that seemed
harder, too.

MozReview-Commit-ID: AkUB4MFzwZK
2017-12-21 20:29:19 +01:00
Kartikaya Gupta 39aa643cab Bug 1413666 - Fix off-by-one error in sticky positioning code. r=botond
MozReview-Commit-ID: J33lrH03HyA
2017-11-01 16:13:18 -04:00
Daniel Holbert 8fea3c215f Bug 1412346 part 5: (automated patch) Switch a bunch of C++ files in layout to use our standard mode lines. r=jfkthame
This patch was generated automatically by the "modeline.py" script, available
here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py

For every file that is modified in this patch, the changes are as follows:
 (1) The patch changes the file to use the exact C++ mode lines from the
     Mozilla coding style guide, available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line

 (2) The patch deletes any blank lines between the mode line & the MPL
     boilerplate comment.

 (3) If the file previously had the mode lines and MPL boilerplate in a
     single contiguous C++ comment, then the patch splits them into
     separate C++ comments, to match the boilerplate in the coding style.

MozReview-Commit-ID: EuRsDue63tK
2017-10-27 10:33:53 -07:00
Sylvestre Ledru 9d4a84d778 Bug 1378712 - Remove all trailing whitespaces r=Ehsan
MozReview-Commit-ID: Kdz2xtTF9EG
2017-07-06 14:00:35 +02:00
Jonathan Kew 4dcf0fe444 Bug 1365982 - Attach frame properties to each frame instead of looking them up in a hashtable on the prescontext. r=mats 2017-05-27 12:36:00 +01:00
Botond Ballo 01cab5f1f6 Bug 1316101 - Avoid excessive clamping in StickyScrollContainer::GetScrollRanges(). r=mstange
Excessive clamping can cause incorrect behaviour in the presence of negative
margins.

MozReview-Commit-ID: AkQEqcQpAxx
2016-11-14 19:01:37 -05:00
Botond Ballo a0499c511d Bug 1293125 - Work around a layout issue that causes StickyScrollContainer::GetScrollRanges() to compute malformed rects. r=mstange
MozReview-Commit-ID: IClxdc8tfBh
2016-10-07 19:31:14 -04:00
Corey Ford 2161e58d27 Bug 1280344 - Use first continuation's normal position in computing sticky scroll ranges for APZ. r=dholbert
MozReview-Commit-ID: L0wRgCvb8h8
2016-07-12 12:36:31 -04:00
Brad Werth 69ccb7e3db Bug 1243559 - Removes static casts from calls to FrameProperties::Get, ::Set, and ::Remove, and forces callers to use the type associated with the property. r=dbaron 2016-06-21 13:17:11 -07:00
Phil Ringnalda ae1f6b874d Back out changeset 0bb00282a4c2 (bug 1243559) for widespread SVG assertion failures
CLOSED TREE
2016-06-22 18:45:08 -07:00
Brad Werth 665cd94da6 Bug 1243559 - Removes static casts from calls to FrameProperties::Get, ::Set, and ::Remove, and forces callers to use the type associated with the property. r=dbaron 2016-06-21 13:17:11 -07:00
Xidorn Quan ca146f45ac Bug 1230034 part 5 - Convert all frame properties which use DeleteValue and ReleaseValue as destructor to be typesafe. r=dbaron
By changing signature of those two functions, we make compiler complain about
all their existing uses, so we can find all of them and convert them.

Some of the callsites of Get() with those properties are also converted, but not
all of them. It is fine because if there is any incorrect conversion, compilers
is able to find out now. So they are completely typesafe.
2016-01-28 14:23:59 +11:00
Seth Fowler 72fb0505de Bug 1128356 - Add template functions for common frame property destructors. r=dbaron 2015-02-04 15:22:27 -08:00
Mats Palmgren 57f71caceb Bug 1028460 - part 3, Change the return type for Get*SkipSides(). r=roc 2014-06-28 10:13:13 +00:00
Phil Ringnalda 650df8d81e Back out 5 changesets (bug 1028460, bug 1031444) for somehow breaking asmjscache/test/test_cachingBasic.html on Android 2.2
Backed out changeset 0b5918ec6521 (bug 1031444)
Backed out changeset 663ff18cd4a1 (bug 1028460)
Backed out changeset ae01b3919c8c (bug 1028460)
Backed out changeset 316c8dfeca9b (bug 1028460)
Backed out changeset e237b2c61ea2 (bug 1028460)
2014-06-28 22:01:28 -07:00
Mats Palmgren 3949ce77fb Bug 1028460 - part 3, Change the return type for Get*SkipSides(). r=roc 2014-06-28 10:13:13 +00:00
Kearwood (Kip) Gilbert 45a5d12315 Bug 920688 - Remove FIXME comment from StickyScrollContainer::ComputeStickyLimits. r=dbaron
- The condition described in the FIXME comment is already handled by
  GetNearestBlockContainer in nsFrame.cpp (helper for
  nsIFrame::GetContainingBlock).
2014-04-22 15:30:00 +02:00