mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 23:38:38 +09:00
Bug 1368547 - Remove nsFrameManagerBase::mPlaceholderMap and instead store the placeholder on a frame property on the out-of-flow
Tag #1375
This commit is contained in:
parent
854827bd83
commit
9b868f0298
18 changed files with 52 additions and 166 deletions
|
|
@ -46,34 +46,9 @@ using namespace mozilla::dom;
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
struct PlaceholderMapEntry : public PLDHashEntryHdr {
|
||||
// key (the out of flow frame) can be obtained through placeholder frame
|
||||
nsPlaceholderFrame *placeholderFrame;
|
||||
};
|
||||
|
||||
static bool
|
||||
PlaceholderMapMatchEntry(const PLDHashEntryHdr *hdr, const void *key)
|
||||
{
|
||||
const PlaceholderMapEntry *entry =
|
||||
static_cast<const PlaceholderMapEntry*>(hdr);
|
||||
NS_ASSERTION(entry->placeholderFrame->GetOutOfFlowFrame() !=
|
||||
(void*)0xdddddddd,
|
||||
"Dead placeholder in placeholder map");
|
||||
return entry->placeholderFrame->GetOutOfFlowFrame() == key;
|
||||
}
|
||||
|
||||
static const PLDHashTableOps PlaceholderMapOps = {
|
||||
PLDHashTable::HashVoidPtrKeyStub,
|
||||
PlaceholderMapMatchEntry,
|
||||
PLDHashTable::MoveEntryStub,
|
||||
PLDHashTable::ClearEntryStub,
|
||||
nullptr
|
||||
};
|
||||
|
||||
nsFrameManagerBase::nsFrameManagerBase()
|
||||
: mPresShell(nullptr)
|
||||
, mRootFrame(nullptr)
|
||||
, mPlaceholderMap(&PlaceholderMapOps, sizeof(PlaceholderMapEntry))
|
||||
, mUndisplayedMap(nullptr)
|
||||
, mDisplayContentsMap(nullptr)
|
||||
, mIsDestroyingFrames(false)
|
||||
|
|
@ -142,9 +117,6 @@ nsFrameManager::Destroy()
|
|||
// Destroy the frame hierarchy.
|
||||
mPresShell->SetIgnoreFrameDestruction(true);
|
||||
|
||||
// Unregister all placeholders before tearing down the frame tree
|
||||
nsFrameManager::ClearPlaceholderFrameMap();
|
||||
|
||||
if (mRootFrame) {
|
||||
mRootFrame->Destroy();
|
||||
mRootFrame = nullptr;
|
||||
|
|
@ -159,56 +131,6 @@ nsFrameManager::Destroy()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// Placeholder frame functions
|
||||
nsPlaceholderFrame*
|
||||
nsFrameManager::GetPlaceholderFrameFor(const nsIFrame* aFrame)
|
||||
{
|
||||
NS_PRECONDITION(aFrame, "null param unexpected");
|
||||
|
||||
auto entry = static_cast<PlaceholderMapEntry*>
|
||||
(const_cast<PLDHashTable*>(&mPlaceholderMap)->Search(aFrame));
|
||||
if (entry) {
|
||||
return entry->placeholderFrame;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
nsFrameManager::RegisterPlaceholderFrame(nsPlaceholderFrame* aPlaceholderFrame)
|
||||
{
|
||||
MOZ_ASSERT(aPlaceholderFrame, "null param unexpected");
|
||||
MOZ_ASSERT(nsGkAtoms::placeholderFrame == aPlaceholderFrame->GetType(),
|
||||
"unexpected frame type");
|
||||
auto entry = static_cast<PlaceholderMapEntry*>
|
||||
(mPlaceholderMap.Add(aPlaceholderFrame->GetOutOfFlowFrame()));
|
||||
MOZ_ASSERT(!entry->placeholderFrame,
|
||||
"Registering a placeholder for a frame that already has a placeholder!");
|
||||
entry->placeholderFrame = aPlaceholderFrame;
|
||||
}
|
||||
|
||||
void
|
||||
nsFrameManager::UnregisterPlaceholderFrame(nsPlaceholderFrame* aPlaceholderFrame)
|
||||
{
|
||||
NS_PRECONDITION(aPlaceholderFrame, "null param unexpected");
|
||||
NS_PRECONDITION(nsGkAtoms::placeholderFrame == aPlaceholderFrame->GetType(),
|
||||
"unexpected frame type");
|
||||
|
||||
mPlaceholderMap.Remove(aPlaceholderFrame->GetOutOfFlowFrame());
|
||||
}
|
||||
|
||||
void
|
||||
nsFrameManager::ClearPlaceholderFrameMap()
|
||||
{
|
||||
for (auto iter = mPlaceholderMap.Iter(); !iter.Done(); iter.Next()) {
|
||||
auto entry = static_cast<PlaceholderMapEntry*>(iter.Get());
|
||||
entry->placeholderFrame->SetOutOfFlowFrame(nullptr);
|
||||
}
|
||||
mPlaceholderMap.Clear();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
/* static */ nsStyleContext*
|
||||
nsFrameManager::GetStyleContextInMap(UndisplayedMap* aMap, nsIContent* aContent)
|
||||
{
|
||||
|
|
@ -497,7 +419,7 @@ nsFrameManager::RemoveFrame(ChildListID aListID,
|
|||
aOldFrame->GetType() == nsGkAtoms::textFrame,
|
||||
"Must remove first continuation.");
|
||||
NS_ASSERTION(!(aOldFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW &&
|
||||
GetPlaceholderFrameFor(aOldFrame)),
|
||||
aOldFrame->GetPlaceholderFrame()),
|
||||
"Must call RemoveFrame on placeholder for out-of-flows.");
|
||||
nsContainerFrame* parentFrame = aOldFrame->GetParent();
|
||||
if (parentFrame->IsAbsoluteContainer() &&
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue