зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1083004 - Create anonymous ruby base container when necessary. r=bz
This commit is contained in:
Родитель
08b79732f2
Коммит
2d623e68f6
|
@ -2282,8 +2282,8 @@ NeedFrameFor(const nsFrameConstructorState& aState,
|
|||
// should be considered ignorable just because they evaluate to
|
||||
// whitespace.
|
||||
|
||||
// We could handle all this in CreateNeededPseudos or some other place
|
||||
// after we build our frame construction items, but that would involve
|
||||
// We could handle all this in CreateNeededPseudoContainers or some other
|
||||
// place after we build our frame construction items, but that would involve
|
||||
// creating frame construction items for whitespace kids of
|
||||
// eExcludesIgnorableWhitespace frames, where we know we'll be dropping them
|
||||
// all anyway, and involve an extra walk down the frame construction item
|
||||
|
@ -9347,7 +9347,8 @@ nsCSSFrameConstructor::CreateNeededAnonFlexOrGridItems(
|
|||
* contain only items for frames that can be direct kids of aParentFrame.
|
||||
*/
|
||||
void
|
||||
nsCSSFrameConstructor::CreateNeededPseudos(nsFrameConstructorState& aState,
|
||||
nsCSSFrameConstructor::CreateNeededPseudoContainers(
|
||||
nsFrameConstructorState& aState,
|
||||
FrameConstructionItemList& aItems,
|
||||
nsIFrame* aParentFrame)
|
||||
{
|
||||
|
@ -9622,14 +9623,58 @@ nsCSSFrameConstructor::CreateNeededPseudos(nsFrameConstructorState& aState,
|
|||
} while (!iter.IsDone());
|
||||
}
|
||||
|
||||
void nsCSSFrameConstructor::CreateNeededPseudoSiblings(
|
||||
nsFrameConstructorState& aState,
|
||||
FrameConstructionItemList& aItems,
|
||||
nsIFrame* aParentFrame)
|
||||
{
|
||||
if (aItems.IsEmpty() ||
|
||||
GetParentType(aParentFrame) != eTypeRuby) {
|
||||
return;
|
||||
}
|
||||
|
||||
FCItemIterator iter(aItems);
|
||||
// XXX Use computed display value instead in bug 1096639.
|
||||
auto creationFunc = reinterpret_cast<void*>(
|
||||
iter.item().mFCData->mFunc.mCreationFunc);
|
||||
if (creationFunc == NS_NewRubyBaseContainerFrame) {
|
||||
return;
|
||||
}
|
||||
|
||||
NS_ASSERTION(creationFunc == NS_NewRubyTextContainerFrame,
|
||||
"Child of ruby frame should either a rbc or a rtc");
|
||||
|
||||
const PseudoParentData& pseudoData =
|
||||
sPseudoParentData[eTypeRubyBaseContainer];
|
||||
already_AddRefed<nsStyleContext> pseudoStyle = mPresShell->StyleSet()->
|
||||
ResolveAnonymousBoxStyle(*pseudoData.mPseudoType,
|
||||
aParentFrame->StyleContext());
|
||||
FrameConstructionItem* newItem =
|
||||
new FrameConstructionItem(&pseudoData.mFCData,
|
||||
// Use the content of the parent frame
|
||||
aParentFrame->GetContent(),
|
||||
// Tag type
|
||||
*pseudoData.mPseudoType,
|
||||
// Use the namespace of the rtc frame
|
||||
iter.item().mNameSpaceID,
|
||||
// no pending binding
|
||||
nullptr,
|
||||
pseudoStyle,
|
||||
true, nullptr);
|
||||
newItem->mIsAllInline = true;
|
||||
newItem->mChildItems.SetParentHasNoXBLChildren(true);
|
||||
iter.InsertItem(newItem);
|
||||
}
|
||||
|
||||
inline void
|
||||
nsCSSFrameConstructor::ConstructFramesFromItemList(nsFrameConstructorState& aState,
|
||||
FrameConstructionItemList& aItems,
|
||||
nsContainerFrame* aParentFrame,
|
||||
nsFrameItems& aFrameItems)
|
||||
{
|
||||
CreateNeededPseudos(aState, aItems, aParentFrame);
|
||||
CreateNeededPseudoContainers(aState, aItems, aParentFrame);
|
||||
CreateNeededAnonFlexOrGridItems(aState, aItems, aParentFrame);
|
||||
CreateNeededPseudoSiblings(aState, aItems, aParentFrame);
|
||||
|
||||
aItems.SetTriedConstructingFrames();
|
||||
for (FCItemIterator iter(aItems); !iter.IsDone(); iter.Next()) {
|
||||
|
|
|
@ -1097,11 +1097,18 @@ private:
|
|||
nsIFrame* aParentFrame);
|
||||
|
||||
/**
|
||||
* Function to create the table pseudo items we need.
|
||||
* Function to create the pseudo intermediate containers we need.
|
||||
* @param aItems the child frame construction items before pseudo creation
|
||||
* @param aParentFrame the parent frame we're creating pseudos for
|
||||
*/
|
||||
inline void CreateNeededPseudos(nsFrameConstructorState& aState,
|
||||
inline void CreateNeededPseudoContainers(nsFrameConstructorState& aState,
|
||||
FrameConstructionItemList& aItems,
|
||||
nsIFrame* aParentFrame);
|
||||
|
||||
/**
|
||||
* Function to create the pseudo siblings we need.
|
||||
*/
|
||||
inline void CreateNeededPseudoSiblings(nsFrameConstructorState& aState,
|
||||
FrameConstructionItemList& aItems,
|
||||
nsIFrame* aParentFrame);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче