зеркало из https://github.com/mozilla/pjs.git
bug 124985 - nsCSSFrameConstructor - let the form frame have its original parent. nsTableFrame - don't reflow foreign frames. sr=attinasi, r=alexsavulov
This commit is contained in:
Родитель
1090e7dedf
Коммит
f9d631e41e
|
@ -2744,21 +2744,8 @@ nsCSSFrameConstructor::ConstructTableForeignFrame(nsIPresShell* aPres
|
|||
nsCOMPtr<nsIAtom> tag;
|
||||
aContent->GetTag(*getter_AddRefs(tag));
|
||||
|
||||
if (nsHTMLAtoms::form == tag.get()) {
|
||||
// A form doesn't get a psuedo frame parent, but it needs a frame.
|
||||
// if the parent is a table, put the form in the outer table frame
|
||||
// otherwise use aParentFrameIn as the parent
|
||||
nsCOMPtr<nsIAtom> frameType;
|
||||
aParentFrameIn->GetFrameType(getter_AddRefs(frameType));
|
||||
if (nsLayoutAtoms::tableFrame == frameType.get()) {
|
||||
aParentFrameIn->GetParent(&parentFrame);
|
||||
}
|
||||
else {
|
||||
parentFrame = aParentFrameIn;
|
||||
}
|
||||
}
|
||||
// Do not construct pseudo frames for trees
|
||||
else if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
|
||||
if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
|
||||
// this frame may have a pseudo parent, use block frame type to trigger foreign
|
||||
GetParentFrame(aPresShell, aPresContext, aTableCreator, *aParentFrameIn,
|
||||
nsLayoutAtoms::blockFrame, aState, parentFrame, aIsPseudoParent);
|
||||
|
@ -2939,9 +2926,22 @@ nsCSSFrameConstructor::TableProcessChild(nsIPresShell* aPresShell,
|
|||
break;
|
||||
|
||||
default:
|
||||
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
|
||||
aParentFrame, childStyleContext, aTableCreator,
|
||||
aChildItems, childFrame, isPseudoParent);
|
||||
{
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
aChildContent->GetTag(*getter_AddRefs(tag));
|
||||
// A form doesn't get a psuedo frame parent, but it needs a frame, so just use the current parent
|
||||
if (nsHTMLAtoms::form == tag.get()) {
|
||||
nsFrameItems items;
|
||||
rv = ConstructFrame(aPresShell, aPresContext, aState, aChildContent,
|
||||
aParentFrame, items);
|
||||
childFrame = items.childList;
|
||||
}
|
||||
else {
|
||||
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
|
||||
aParentFrame, childStyleContext, aTableCreator,
|
||||
aChildItems, childFrame, isPseudoParent);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -2744,21 +2744,8 @@ nsCSSFrameConstructor::ConstructTableForeignFrame(nsIPresShell* aPres
|
|||
nsCOMPtr<nsIAtom> tag;
|
||||
aContent->GetTag(*getter_AddRefs(tag));
|
||||
|
||||
if (nsHTMLAtoms::form == tag.get()) {
|
||||
// A form doesn't get a psuedo frame parent, but it needs a frame.
|
||||
// if the parent is a table, put the form in the outer table frame
|
||||
// otherwise use aParentFrameIn as the parent
|
||||
nsCOMPtr<nsIAtom> frameType;
|
||||
aParentFrameIn->GetFrameType(getter_AddRefs(frameType));
|
||||
if (nsLayoutAtoms::tableFrame == frameType.get()) {
|
||||
aParentFrameIn->GetParent(&parentFrame);
|
||||
}
|
||||
else {
|
||||
parentFrame = aParentFrameIn;
|
||||
}
|
||||
}
|
||||
// Do not construct pseudo frames for trees
|
||||
else if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
|
||||
if (MustGeneratePseudoParent(aPresContext, aParentFrameIn, tag.get(), aContent, aStyleContext)) {
|
||||
// this frame may have a pseudo parent, use block frame type to trigger foreign
|
||||
GetParentFrame(aPresShell, aPresContext, aTableCreator, *aParentFrameIn,
|
||||
nsLayoutAtoms::blockFrame, aState, parentFrame, aIsPseudoParent);
|
||||
|
@ -2939,9 +2926,22 @@ nsCSSFrameConstructor::TableProcessChild(nsIPresShell* aPresShell,
|
|||
break;
|
||||
|
||||
default:
|
||||
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
|
||||
aParentFrame, childStyleContext, aTableCreator,
|
||||
aChildItems, childFrame, isPseudoParent);
|
||||
{
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
aChildContent->GetTag(*getter_AddRefs(tag));
|
||||
// A form doesn't get a psuedo frame parent, but it needs a frame, so just use the current parent
|
||||
if (nsHTMLAtoms::form == tag.get()) {
|
||||
nsFrameItems items;
|
||||
rv = ConstructFrame(aPresShell, aPresContext, aState, aChildContent,
|
||||
aParentFrame, items);
|
||||
childFrame = items.childList;
|
||||
}
|
||||
else {
|
||||
rv = ConstructTableForeignFrame(aPresShell, aPresContext, aState, aChildContent,
|
||||
aParentFrame, childStyleContext, aTableCreator,
|
||||
aChildItems, childFrame, isPseudoParent);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -3189,15 +3189,6 @@ nsTableFrame::ReflowChildren(nsIPresContext* aPresContext,
|
|||
OrderRowGroups(rowGroups, numRowGroups, nsnull);
|
||||
}
|
||||
}
|
||||
else { // it's an unknown frame type, give it a generic reflow and ignore the results
|
||||
nsHTMLReflowState kidReflowState(aPresContext, aReflowState.reflowState, kidFrame,
|
||||
nsSize(0,0), eReflowReason_Resize);
|
||||
nsHTMLReflowMetrics unusedDesiredSize(nsnull);
|
||||
nsReflowStatus status;
|
||||
ReflowChild(kidFrame, aPresContext, unusedDesiredSize, kidReflowState,
|
||||
0, 0, 0, status);
|
||||
kidFrame->DidReflow(aPresContext, nsnull, NS_FRAME_REFLOW_FINISHED);
|
||||
}
|
||||
}
|
||||
else if (childX < numRowGroups) { // it is a row group but isn't being reflowed
|
||||
nsRect kidRect;
|
||||
|
|
|
@ -3189,15 +3189,6 @@ nsTableFrame::ReflowChildren(nsIPresContext* aPresContext,
|
|||
OrderRowGroups(rowGroups, numRowGroups, nsnull);
|
||||
}
|
||||
}
|
||||
else { // it's an unknown frame type, give it a generic reflow and ignore the results
|
||||
nsHTMLReflowState kidReflowState(aPresContext, aReflowState.reflowState, kidFrame,
|
||||
nsSize(0,0), eReflowReason_Resize);
|
||||
nsHTMLReflowMetrics unusedDesiredSize(nsnull);
|
||||
nsReflowStatus status;
|
||||
ReflowChild(kidFrame, aPresContext, unusedDesiredSize, kidReflowState,
|
||||
0, 0, 0, status);
|
||||
kidFrame->DidReflow(aPresContext, nsnull, NS_FRAME_REFLOW_FINISHED);
|
||||
}
|
||||
}
|
||||
else if (childX < numRowGroups) { // it is a row group but isn't being reflowed
|
||||
nsRect kidRect;
|
||||
|
|
Загрузка…
Ссылка в новой задаче