mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-09 16:57:30 +09:00
Issue #1355 - Speed up the traversal of a table row frame's child cells
Speed up getting the first cellframe in a row and the next cellframe after the given one
This commit is contained in:
parent
0070369171
commit
02487fecd6
4 changed files with 27 additions and 28 deletions
|
|
@ -59,20 +59,6 @@ nsTableCellFrame::~nsTableCellFrame()
|
||||||
|
|
||||||
NS_IMPL_FRAMEARENA_HELPERS(nsTableCellFrame)
|
NS_IMPL_FRAMEARENA_HELPERS(nsTableCellFrame)
|
||||||
|
|
||||||
nsTableCellFrame*
|
|
||||||
nsTableCellFrame::GetNextCell() const
|
|
||||||
{
|
|
||||||
nsIFrame* childFrame = GetNextSibling();
|
|
||||||
while (childFrame) {
|
|
||||||
nsTableCellFrame *cellFrame = do_QueryFrame(childFrame);
|
|
||||||
if (cellFrame) {
|
|
||||||
return cellFrame;
|
|
||||||
}
|
|
||||||
childFrame = childFrame->GetNextSibling();
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
nsTableCellFrame::Init(nsIContent* aContent,
|
nsTableCellFrame::Init(nsIContent* aContent,
|
||||||
nsContainerFrame* aParent,
|
nsContainerFrame* aParent,
|
||||||
|
|
|
||||||
|
|
@ -215,7 +215,17 @@ public:
|
||||||
bool HasPctOverBSize();
|
bool HasPctOverBSize();
|
||||||
void SetHasPctOverBSize(bool aValue);
|
void SetHasPctOverBSize(bool aValue);
|
||||||
|
|
||||||
nsTableCellFrame* GetNextCell() const;
|
nsTableCellFrame* GetNextCell() const
|
||||||
|
{
|
||||||
|
nsIFrame* sibling = GetNextSibling();
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (sibling) {
|
||||||
|
nsTableCellFrame* cellFrame = do_QueryFrame(sibling);
|
||||||
|
MOZ_ASSERT(cellFrame, "How do we have a non-cell sibling?");
|
||||||
|
}
|
||||||
|
#endif // DEBUG
|
||||||
|
return static_cast<nsTableCellFrame*>(sibling);
|
||||||
|
}
|
||||||
|
|
||||||
virtual LogicalMargin GetBorderWidth(WritingMode aWM) const;
|
virtual LogicalMargin GetBorderWidth(WritingMode aWM) const;
|
||||||
|
|
||||||
|
|
@ -350,4 +360,17 @@ private:
|
||||||
BCPixelSize mIStartBorder;
|
BCPixelSize mIStartBorder;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Implemented here because that's a sane-ish way to make the includes work out.
|
||||||
|
inline nsTableCellFrame* nsTableRowFrame::GetFirstCell() const
|
||||||
|
{
|
||||||
|
nsIFrame* firstChild = mFrames.FirstChild();
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (firstChild) {
|
||||||
|
nsTableCellFrame* cellFrame = do_QueryFrame(firstChild);
|
||||||
|
MOZ_ASSERT(cellFrame, "How do we have a non-cell sibling?");
|
||||||
|
}
|
||||||
|
#endif // DEBUG
|
||||||
|
return static_cast<nsTableCellFrame*>(firstChild);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -304,18 +304,6 @@ GetBSizeOfRowsSpannedBelowFirst(nsTableCellFrame& aTableCellFrame,
|
||||||
return bsize;
|
return bsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsTableCellFrame*
|
|
||||||
nsTableRowFrame::GetFirstCell()
|
|
||||||
{
|
|
||||||
for (nsIFrame* childFrame : mFrames) {
|
|
||||||
nsTableCellFrame *cellFrame = do_QueryFrame(childFrame);
|
|
||||||
if (cellFrame) {
|
|
||||||
return cellFrame;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post-reflow hook. This is where the table row does its post-processing
|
* Post-reflow hook. This is where the table row does its post-processing
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,9 @@ public:
|
||||||
const nsRect& aDirtyRect,
|
const nsRect& aDirtyRect,
|
||||||
const nsDisplayListSet& aLists) override;
|
const nsDisplayListSet& aLists) override;
|
||||||
|
|
||||||
nsTableCellFrame* GetFirstCell() ;
|
// Implemented in nsTableCellFrame.h, because it needs to know about the
|
||||||
|
// nsTableCellFrame class, but we can't include nsTableCellFrame.h here.
|
||||||
|
inline nsTableCellFrame* GetFirstCell() const;
|
||||||
|
|
||||||
/** calls Reflow for all of its child cells.
|
/** calls Reflow for all of its child cells.
|
||||||
* Cells with rowspan=1 are all set to the same height and stacked horizontally.
|
* Cells with rowspan=1 are all set to the same height and stacked horizontally.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue