diff options
author | win7-7 <win7-7@users.noreply.github.com> | 2020-02-25 00:17:54 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2020-04-14 12:58:11 +0200 |
commit | cbb61ab832508e9c231a256fb161d38d35faeabf (patch) | |
tree | fe4ffc233045d9b461460e19d31fcfbe64cae59f /layout/generic/nsIFrame.h | |
parent | cf288a1847afc0f101ff64afc29d8a2c3f7ffb03 (diff) | |
download | UXP-cbb61ab832508e9c231a256fb161d38d35faeabf.tar UXP-cbb61ab832508e9c231a256fb161d38d35faeabf.tar.gz UXP-cbb61ab832508e9c231a256fb161d38d35faeabf.tar.lz UXP-cbb61ab832508e9c231a256fb161d38d35faeabf.tar.xz UXP-cbb61ab832508e9c231a256fb161d38d35faeabf.zip |
Issue #1355 - Better way to create display items for column backgrounds
Part 1: Remove current table item, as it's never set.
Part 2: Get rid of generic table painting code, and handle each class separately.
Part 4: Hoist outline skipping into col(group) frame code.
Part 5: Skip box-shadow for table column and column groups.
Part 6: Store column and column group backgrounds separately, and then append them before the rest of the table contents.
Part 7: Pass rects in display list coordinates to AppendBackgroundItemsToTop.
Part 8: Create column and column group background display items as part of the cell's BuildDisplayList.
Part 9: Used cached values instead of calling nsDisplayListBuilder::ToReferenceFrame when possible, since it can be expensive when the requested frame isn't the builder's current frame.
Part 10: Make sure we build display items for table parts where only the normal position is visible, since we may need to create background items for ancestors at that position.
Part 11: Create an AutoBuildingDisplayList when we create background items for table columns and column groups, so that we initialize the invalidation state correctly.
Diffstat (limited to 'layout/generic/nsIFrame.h')
-rw-r--r-- | layout/generic/nsIFrame.h | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/layout/generic/nsIFrame.h b/layout/generic/nsIFrame.h index 93eb95099..90de72d8d 100644 --- a/layout/generic/nsIFrame.h +++ b/layout/generic/nsIFrame.h @@ -1435,21 +1435,14 @@ public: * BuildDisplayListForChild. * * See nsDisplayList.h for more information about display lists. - * - * @param aDirtyRect content outside this rectangle can be ignored; the - * rectangle is in frame coordinates */ virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, - const nsRect& aDirtyRect, const nsDisplayListSet& aLists) {} /** * Displays the caret onto the given display list builder. The caret is * painted on top of the rest of the display list items. - * - * @param aDirtyRect is the dirty rectangle that we're repainting. */ void DisplayCaret(nsDisplayListBuilder* aBuilder, - const nsRect& aDirtyRect, nsDisplayList* aList); /** @@ -1483,11 +1476,8 @@ public: /** * Builds a display list for the content represented by this frame, * treating this frame as the root of a stacking context. - * @param aDirtyRect content outside this rectangle can be ignored; the - * rectangle is in frame coordinates */ void BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder, - const nsRect& aDirtyRect, nsDisplayList* aList); enum { @@ -1506,7 +1496,6 @@ public: */ void BuildDisplayListForChild(nsDisplayListBuilder* aBuilder, nsIFrame* aChild, - const nsRect& aDirtyRect, const nsDisplayListSet& aLists, uint32_t aFlags = 0); @@ -3530,13 +3519,23 @@ protected: nsRect mRect; nsIContent* mContent; nsStyleContext* mStyleContext; + /** + * This bit is used during BuildDisplayList to mark frames that need to + * have display items rebuilt. We will descend into them if they are + * currently visible, even if they don't intersect the dirty area. + */ + bool mForceDescendIntoIfVisible : 1; private: nsContainerFrame* mParent; nsIFrame* mNextSibling; // doubly-linked list of frames nsIFrame* mPrevSibling; // Do not touch outside SetNextSibling! - void MarkAbsoluteFramesForDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect); - + void MarkAbsoluteFramesForDisplayList(nsDisplayListBuilder* aBuilder); + public: + bool ForceDescendIntoIfVisible() const { return mForceDescendIntoIfVisible; } + void SetForceDescendIntoIfVisible(bool aForce) { + mForceDescendIntoIfVisible = aForce; + } static void DestroyPaintedPresShellList(nsTArray<nsWeakPtr>* list) { list->Clear(); delete list; |