mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1083004 - Create anonymous ruby base container when necessary. r=bz
This commit is contained in:
parent
ccaf23b377
commit
05c9cf167b
@ -2282,8 +2282,8 @@ NeedFrameFor(const nsFrameConstructorState& aState,
|
|||||||
// should be considered ignorable just because they evaluate to
|
// should be considered ignorable just because they evaluate to
|
||||||
// whitespace.
|
// whitespace.
|
||||||
|
|
||||||
// We could handle all this in CreateNeededPseudos or some other place
|
// We could handle all this in CreateNeededPseudoContainers or some other
|
||||||
// after we build our frame construction items, but that would involve
|
// place after we build our frame construction items, but that would involve
|
||||||
// creating frame construction items for whitespace kids of
|
// creating frame construction items for whitespace kids of
|
||||||
// eExcludesIgnorableWhitespace frames, where we know we'll be dropping them
|
// eExcludesIgnorableWhitespace frames, where we know we'll be dropping them
|
||||||
// all anyway, and involve an extra walk down the frame construction item
|
// all anyway, and involve an extra walk down the frame construction item
|
||||||
@ -9347,9 +9347,10 @@ nsCSSFrameConstructor::CreateNeededAnonFlexOrGridItems(
|
|||||||
* contain only items for frames that can be direct kids of aParentFrame.
|
* contain only items for frames that can be direct kids of aParentFrame.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
nsCSSFrameConstructor::CreateNeededPseudos(nsFrameConstructorState& aState,
|
nsCSSFrameConstructor::CreateNeededPseudoContainers(
|
||||||
FrameConstructionItemList& aItems,
|
nsFrameConstructorState& aState,
|
||||||
nsIFrame* aParentFrame)
|
FrameConstructionItemList& aItems,
|
||||||
|
nsIFrame* aParentFrame)
|
||||||
{
|
{
|
||||||
ParentType ourParentType = GetParentType(aParentFrame);
|
ParentType ourParentType = GetParentType(aParentFrame);
|
||||||
if (aItems.AllWantParentType(ourParentType)) {
|
if (aItems.AllWantParentType(ourParentType)) {
|
||||||
@ -9675,14 +9676,58 @@ nsCSSFrameConstructor::CreateNeededPseudos(nsFrameConstructorState& aState,
|
|||||||
} while (!iter.IsDone());
|
} 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
|
inline void
|
||||||
nsCSSFrameConstructor::ConstructFramesFromItemList(nsFrameConstructorState& aState,
|
nsCSSFrameConstructor::ConstructFramesFromItemList(nsFrameConstructorState& aState,
|
||||||
FrameConstructionItemList& aItems,
|
FrameConstructionItemList& aItems,
|
||||||
nsContainerFrame* aParentFrame,
|
nsContainerFrame* aParentFrame,
|
||||||
nsFrameItems& aFrameItems)
|
nsFrameItems& aFrameItems)
|
||||||
{
|
{
|
||||||
CreateNeededPseudos(aState, aItems, aParentFrame);
|
CreateNeededPseudoContainers(aState, aItems, aParentFrame);
|
||||||
CreateNeededAnonFlexOrGridItems(aState, aItems, aParentFrame);
|
CreateNeededAnonFlexOrGridItems(aState, aItems, aParentFrame);
|
||||||
|
CreateNeededPseudoSiblings(aState, aItems, aParentFrame);
|
||||||
|
|
||||||
aItems.SetTriedConstructingFrames();
|
aItems.SetTriedConstructingFrames();
|
||||||
for (FCItemIterator iter(aItems); !iter.IsDone(); iter.Next()) {
|
for (FCItemIterator iter(aItems); !iter.IsDone(); iter.Next()) {
|
||||||
|
@ -1097,13 +1097,20 @@ private:
|
|||||||
nsIFrame* aParentFrame);
|
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 aItems the child frame construction items before pseudo creation
|
||||||
* @param aParentFrame the parent frame we're creating pseudos for
|
* @param aParentFrame the parent frame we're creating pseudos for
|
||||||
*/
|
*/
|
||||||
inline void CreateNeededPseudos(nsFrameConstructorState& aState,
|
inline void CreateNeededPseudoContainers(nsFrameConstructorState& aState,
|
||||||
FrameConstructionItemList& aItems,
|
FrameConstructionItemList& aItems,
|
||||||
nsIFrame* aParentFrame);
|
nsIFrame* aParentFrame);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to create the pseudo siblings we need.
|
||||||
|
*/
|
||||||
|
inline void CreateNeededPseudoSiblings(nsFrameConstructorState& aState,
|
||||||
|
FrameConstructionItemList& aItems,
|
||||||
|
nsIFrame* aParentFrame);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to adjust aParentFrame to deal with captions.
|
* Function to adjust aParentFrame to deal with captions.
|
||||||
|
Loading…
Reference in New Issue
Block a user