зеркало из https://github.com/mozilla/gecko-dev.git
WIP moving margin, border & padding out of nsStyleMolecule
Switch to nsIPtr for style context ptrs to eliminate leaks
This commit is contained in:
Родитель
730fbbc6d6
Коммит
c6fc3d1e32
|
@ -34,6 +34,7 @@
|
|||
#include "nsHTMLAtoms.h"
|
||||
#include "nsHTMLValue.h"
|
||||
#include "nsIHTMLContent.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#undef NOISY
|
||||
|
@ -49,6 +50,9 @@ static NS_DEFINE_IID(kIAnchoredItemsIID, NS_IANCHOREDITEMS_IID);
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleFontSID, NS_STYLEFONT_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct BlockBandData : public nsBandData {
|
||||
nsBandTrapezoid data[5];
|
||||
|
||||
|
@ -345,11 +349,10 @@ void nsBlockFrame::PlaceBelowCurrentLineFloaters(nsIPresContext* aCX,
|
|||
GetAvailableSpaceBand(aState, aY);
|
||||
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
floater->GetStyleContext(aCX, styleContext);
|
||||
floater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
floater->GetRect(region);
|
||||
region.y = mCurrentState->currentBand->trapezoids[0].yTop;
|
||||
|
@ -853,13 +856,12 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
|
||||
// Get kid and its style
|
||||
// XXX How is this any different than what was passed in to us as aKidMol?
|
||||
nsIContent* kid;
|
||||
nsIStyleContext* kidSC;
|
||||
nsIContentPtr kid;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
aKidFrame->GetContent(kid);
|
||||
aKidFrame->GetStyleContext(aCX, kidSC);
|
||||
aKidFrame->GetContent(kid.AssignRef());
|
||||
aKidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Figure out if kid is a block element or not
|
||||
PRBool isInline = PR_TRUE;
|
||||
|
@ -899,14 +901,13 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// Get the style for the last child, and see if it wanted to clear floaters.
|
||||
// This handles the BR tag, which is the only inline element for which clear
|
||||
// applies
|
||||
nsIStyleContext* lastChildSC;
|
||||
nsIStyleContextPtr lastChildSC;
|
||||
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC);
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC.AssignRef());
|
||||
nsStyleMolecule* lastChildMol = (nsStyleMolecule*)lastChildSC->GetData(kStyleMoleculeSID);
|
||||
if (lastChildMol->clear != NS_STYLE_CLEAR_NONE) {
|
||||
ClearFloaters(aState, lastChildMol->clear);
|
||||
}
|
||||
NS_RELEASE(lastChildSC);
|
||||
}
|
||||
|
||||
// Now that we've handled force breaks (and maybe called AdvanceToNextLine()
|
||||
|
@ -1096,7 +1097,6 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// a line break before the next frame is placed.
|
||||
aState.breakAfterChild = PR_TRUE;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
aState.reflowStatus = status;
|
||||
return PLACE_FLOWED | PLACE_FIT;
|
||||
|
@ -1132,12 +1132,11 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
nsIFrame* prevKidFrame = nsnull;
|
||||
|
||||
for (kidFrame = mFirstChild; nsnull != kidFrame; ) {
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Attempt to place and reflow the child
|
||||
|
||||
|
@ -1147,7 +1146,6 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
|
||||
PRIntn placeStatus = PlaceAndReflowChild(aCX, aState, kidFrame, kidMol);
|
||||
ReflowStatus status = aState.reflowStatus;
|
||||
NS_RELEASE(kidSC);
|
||||
if (0 == (placeStatus & PLACE_FIT)) {
|
||||
// The child doesn't fit. Push it and any remaining children.
|
||||
PushKids(aState);
|
||||
|
@ -1224,10 +1222,10 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
if (IsPseudoFrame()) {
|
||||
// Get the next content object that we would like to reflow
|
||||
PRInt32 kidIndex = NextChildOffset();
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull != kid) {
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
switch (kidMol->display) {
|
||||
case NS_STYLE_DISPLAY_BLOCK:
|
||||
|
@ -1239,8 +1237,6 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
rv = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
}
|
||||
} else {
|
||||
if (NextChildOffset() < mContent->ChildCount()) {
|
||||
|
@ -1288,14 +1284,14 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -1321,8 +1317,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
result = frComplete;
|
||||
goto done;
|
||||
}
|
||||
|
@ -1379,8 +1373,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mLastContentIsComplete = PRBool(nsnull == kidNextInFlow);
|
||||
PushKids(aState);
|
||||
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1403,8 +1395,7 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
}
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1414,8 +1405,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
NS_ASSERTION(nsnull == kidNextInFlow, "huh?");
|
||||
#endif
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// The child that we just reflowed is complete
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1485,10 +1474,10 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
|
||||
// Get style information for the pulled up kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
ReflowStatus status;
|
||||
|
@ -1504,8 +1493,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
PushKids(aState);
|
||||
|
||||
result = PR_FALSE;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1531,8 +1518,7 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
} else {
|
||||
// The child has a next-in-flow, but it's not one of ours.
|
||||
|
@ -1543,8 +1529,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
}
|
||||
|
@ -1950,11 +1934,10 @@ void nsBlockFrame::PlaceFloater(nsIPresContext* aCX,
|
|||
// todo list and we'll handle it when we flush out the line
|
||||
if (IsLeftMostChild(aPlaceholder)) {
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
aFloater->GetStyleContext(aCX, styleContext);
|
||||
aFloater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
if (!mCurrentState->isInline) {
|
||||
// Get the current band for this line
|
||||
|
@ -2008,13 +1991,13 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
flow->LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -2039,9 +2022,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
// FALL THROUGH (and create frame)
|
||||
|
@ -2058,8 +2038,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
}
|
||||
}
|
||||
kidFrame->SetStyleContext(kidSC);
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Link child frame into the list of children
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "nsHTMLAtoms.h"
|
||||
#include "nsHTMLValue.h"
|
||||
#include "nsIHTMLContent.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#undef NOISY
|
||||
|
@ -49,6 +50,9 @@ static NS_DEFINE_IID(kIAnchoredItemsIID, NS_IANCHOREDITEMS_IID);
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleFontSID, NS_STYLEFONT_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct BlockBandData : public nsBandData {
|
||||
nsBandTrapezoid data[5];
|
||||
|
||||
|
@ -345,11 +349,10 @@ void nsBlockFrame::PlaceBelowCurrentLineFloaters(nsIPresContext* aCX,
|
|||
GetAvailableSpaceBand(aState, aY);
|
||||
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
floater->GetStyleContext(aCX, styleContext);
|
||||
floater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
floater->GetRect(region);
|
||||
region.y = mCurrentState->currentBand->trapezoids[0].yTop;
|
||||
|
@ -853,13 +856,12 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
|
||||
// Get kid and its style
|
||||
// XXX How is this any different than what was passed in to us as aKidMol?
|
||||
nsIContent* kid;
|
||||
nsIStyleContext* kidSC;
|
||||
nsIContentPtr kid;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
aKidFrame->GetContent(kid);
|
||||
aKidFrame->GetStyleContext(aCX, kidSC);
|
||||
aKidFrame->GetContent(kid.AssignRef());
|
||||
aKidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Figure out if kid is a block element or not
|
||||
PRBool isInline = PR_TRUE;
|
||||
|
@ -899,14 +901,13 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// Get the style for the last child, and see if it wanted to clear floaters.
|
||||
// This handles the BR tag, which is the only inline element for which clear
|
||||
// applies
|
||||
nsIStyleContext* lastChildSC;
|
||||
nsIStyleContextPtr lastChildSC;
|
||||
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC);
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC.AssignRef());
|
||||
nsStyleMolecule* lastChildMol = (nsStyleMolecule*)lastChildSC->GetData(kStyleMoleculeSID);
|
||||
if (lastChildMol->clear != NS_STYLE_CLEAR_NONE) {
|
||||
ClearFloaters(aState, lastChildMol->clear);
|
||||
}
|
||||
NS_RELEASE(lastChildSC);
|
||||
}
|
||||
|
||||
// Now that we've handled force breaks (and maybe called AdvanceToNextLine()
|
||||
|
@ -1096,7 +1097,6 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// a line break before the next frame is placed.
|
||||
aState.breakAfterChild = PR_TRUE;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
aState.reflowStatus = status;
|
||||
return PLACE_FLOWED | PLACE_FIT;
|
||||
|
@ -1132,12 +1132,11 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
nsIFrame* prevKidFrame = nsnull;
|
||||
|
||||
for (kidFrame = mFirstChild; nsnull != kidFrame; ) {
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Attempt to place and reflow the child
|
||||
|
||||
|
@ -1147,7 +1146,6 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
|
||||
PRIntn placeStatus = PlaceAndReflowChild(aCX, aState, kidFrame, kidMol);
|
||||
ReflowStatus status = aState.reflowStatus;
|
||||
NS_RELEASE(kidSC);
|
||||
if (0 == (placeStatus & PLACE_FIT)) {
|
||||
// The child doesn't fit. Push it and any remaining children.
|
||||
PushKids(aState);
|
||||
|
@ -1224,10 +1222,10 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
if (IsPseudoFrame()) {
|
||||
// Get the next content object that we would like to reflow
|
||||
PRInt32 kidIndex = NextChildOffset();
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull != kid) {
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
switch (kidMol->display) {
|
||||
case NS_STYLE_DISPLAY_BLOCK:
|
||||
|
@ -1239,8 +1237,6 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
rv = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
}
|
||||
} else {
|
||||
if (NextChildOffset() < mContent->ChildCount()) {
|
||||
|
@ -1288,14 +1284,14 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -1321,8 +1317,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
result = frComplete;
|
||||
goto done;
|
||||
}
|
||||
|
@ -1379,8 +1373,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mLastContentIsComplete = PRBool(nsnull == kidNextInFlow);
|
||||
PushKids(aState);
|
||||
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1403,8 +1395,7 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
}
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1414,8 +1405,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
NS_ASSERTION(nsnull == kidNextInFlow, "huh?");
|
||||
#endif
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// The child that we just reflowed is complete
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1485,10 +1474,10 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
|
||||
// Get style information for the pulled up kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
ReflowStatus status;
|
||||
|
@ -1504,8 +1493,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
PushKids(aState);
|
||||
|
||||
result = PR_FALSE;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1531,8 +1518,7 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
} else {
|
||||
// The child has a next-in-flow, but it's not one of ours.
|
||||
|
@ -1543,8 +1529,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
}
|
||||
|
@ -1950,11 +1934,10 @@ void nsBlockFrame::PlaceFloater(nsIPresContext* aCX,
|
|||
// todo list and we'll handle it when we flush out the line
|
||||
if (IsLeftMostChild(aPlaceholder)) {
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
aFloater->GetStyleContext(aCX, styleContext);
|
||||
aFloater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
if (!mCurrentState->isInline) {
|
||||
// Get the current band for this line
|
||||
|
@ -2008,13 +1991,13 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
flow->LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -2039,9 +2022,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
// FALL THROUGH (and create frame)
|
||||
|
@ -2058,8 +2038,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
}
|
||||
}
|
||||
kidFrame->SetStyleContext(kidSC);
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Link child frame into the list of children
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "nsHTMLAtoms.h"
|
||||
#include "nsHTMLValue.h"
|
||||
#include "nsIHTMLContent.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#undef NOISY
|
||||
|
@ -49,6 +50,9 @@ static NS_DEFINE_IID(kIAnchoredItemsIID, NS_IANCHOREDITEMS_IID);
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleFontSID, NS_STYLEFONT_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct BlockBandData : public nsBandData {
|
||||
nsBandTrapezoid data[5];
|
||||
|
||||
|
@ -345,11 +349,10 @@ void nsBlockFrame::PlaceBelowCurrentLineFloaters(nsIPresContext* aCX,
|
|||
GetAvailableSpaceBand(aState, aY);
|
||||
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
floater->GetStyleContext(aCX, styleContext);
|
||||
floater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
floater->GetRect(region);
|
||||
region.y = mCurrentState->currentBand->trapezoids[0].yTop;
|
||||
|
@ -853,13 +856,12 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
|
||||
// Get kid and its style
|
||||
// XXX How is this any different than what was passed in to us as aKidMol?
|
||||
nsIContent* kid;
|
||||
nsIStyleContext* kidSC;
|
||||
nsIContentPtr kid;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
aKidFrame->GetContent(kid);
|
||||
aKidFrame->GetStyleContext(aCX, kidSC);
|
||||
aKidFrame->GetContent(kid.AssignRef());
|
||||
aKidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Figure out if kid is a block element or not
|
||||
PRBool isInline = PR_TRUE;
|
||||
|
@ -899,14 +901,13 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// Get the style for the last child, and see if it wanted to clear floaters.
|
||||
// This handles the BR tag, which is the only inline element for which clear
|
||||
// applies
|
||||
nsIStyleContext* lastChildSC;
|
||||
nsIStyleContextPtr lastChildSC;
|
||||
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC);
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC.AssignRef());
|
||||
nsStyleMolecule* lastChildMol = (nsStyleMolecule*)lastChildSC->GetData(kStyleMoleculeSID);
|
||||
if (lastChildMol->clear != NS_STYLE_CLEAR_NONE) {
|
||||
ClearFloaters(aState, lastChildMol->clear);
|
||||
}
|
||||
NS_RELEASE(lastChildSC);
|
||||
}
|
||||
|
||||
// Now that we've handled force breaks (and maybe called AdvanceToNextLine()
|
||||
|
@ -1096,7 +1097,6 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// a line break before the next frame is placed.
|
||||
aState.breakAfterChild = PR_TRUE;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
aState.reflowStatus = status;
|
||||
return PLACE_FLOWED | PLACE_FIT;
|
||||
|
@ -1132,12 +1132,11 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
nsIFrame* prevKidFrame = nsnull;
|
||||
|
||||
for (kidFrame = mFirstChild; nsnull != kidFrame; ) {
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Attempt to place and reflow the child
|
||||
|
||||
|
@ -1147,7 +1146,6 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
|
||||
PRIntn placeStatus = PlaceAndReflowChild(aCX, aState, kidFrame, kidMol);
|
||||
ReflowStatus status = aState.reflowStatus;
|
||||
NS_RELEASE(kidSC);
|
||||
if (0 == (placeStatus & PLACE_FIT)) {
|
||||
// The child doesn't fit. Push it and any remaining children.
|
||||
PushKids(aState);
|
||||
|
@ -1224,10 +1222,10 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
if (IsPseudoFrame()) {
|
||||
// Get the next content object that we would like to reflow
|
||||
PRInt32 kidIndex = NextChildOffset();
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull != kid) {
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
switch (kidMol->display) {
|
||||
case NS_STYLE_DISPLAY_BLOCK:
|
||||
|
@ -1239,8 +1237,6 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
rv = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
}
|
||||
} else {
|
||||
if (NextChildOffset() < mContent->ChildCount()) {
|
||||
|
@ -1288,14 +1284,14 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -1321,8 +1317,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
result = frComplete;
|
||||
goto done;
|
||||
}
|
||||
|
@ -1379,8 +1373,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mLastContentIsComplete = PRBool(nsnull == kidNextInFlow);
|
||||
PushKids(aState);
|
||||
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1403,8 +1395,7 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
}
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1414,8 +1405,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
NS_ASSERTION(nsnull == kidNextInFlow, "huh?");
|
||||
#endif
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// The child that we just reflowed is complete
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1485,10 +1474,10 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
|
||||
// Get style information for the pulled up kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
ReflowStatus status;
|
||||
|
@ -1504,8 +1493,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
PushKids(aState);
|
||||
|
||||
result = PR_FALSE;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1531,8 +1518,7 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
} else {
|
||||
// The child has a next-in-flow, but it's not one of ours.
|
||||
|
@ -1543,8 +1529,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
}
|
||||
|
@ -1950,11 +1934,10 @@ void nsBlockFrame::PlaceFloater(nsIPresContext* aCX,
|
|||
// todo list and we'll handle it when we flush out the line
|
||||
if (IsLeftMostChild(aPlaceholder)) {
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
aFloater->GetStyleContext(aCX, styleContext);
|
||||
aFloater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
if (!mCurrentState->isInline) {
|
||||
// Get the current band for this line
|
||||
|
@ -2008,13 +1991,13 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
flow->LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -2039,9 +2022,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
// FALL THROUGH (and create frame)
|
||||
|
@ -2058,8 +2038,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
}
|
||||
}
|
||||
kidFrame->SetStyleContext(kidSC);
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Link child frame into the list of children
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "nsIURL.h"
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
nsHTMLContainerFrame::nsHTMLContainerFrame(nsIContent* aContent,
|
||||
|
@ -53,12 +54,12 @@ NS_METHOD nsHTMLContainerFrame::Paint(nsIPresContext& aPresContext,
|
|||
PRIntn skipSides = GetSkipSides();
|
||||
nsStyleColor* color =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* mol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* border =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *color);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *mol, skipSides);
|
||||
aDirtyRect, mRect, *border, skipSides);
|
||||
}
|
||||
|
||||
PaintChildren(aPresContext, aRenderingContext, aDirtyRect);
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
#include "nsIStyleContext.h"
|
||||
#include "nsCSSRendering.h"
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleSpacingSID, NS_STYLESPACING_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
nsLeafFrame::nsLeafFrame(nsIContent* aContent,
|
||||
|
@ -39,12 +40,12 @@ NS_METHOD nsLeafFrame::Paint(nsIPresContext& aPresContext,
|
|||
{
|
||||
nsStyleColor* myColor =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* myMol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* myBorder =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myColor);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myMol, 0);
|
||||
aDirtyRect, mRect, *myBorder, 0);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -91,10 +92,10 @@ NS_METHOD nsLeafFrame::IncrementalReflow(nsIPresContext* aPresContext,
|
|||
void nsLeafFrame::AddBordersAndPadding(nsIPresContext* aPresContext,
|
||||
nsReflowMetrics& aDesiredSize)
|
||||
{
|
||||
nsStyleMolecule* mol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
aDesiredSize.width += mol->borderPadding.left + mol->borderPadding.right;
|
||||
aDesiredSize.height += mol->borderPadding.top + mol->borderPadding.bottom;
|
||||
nsStyleSpacing* space =
|
||||
(nsStyleSpacing*)mStyleContext->GetData(kStyleSpacingSID);
|
||||
aDesiredSize.width += space->mBorderPadding.left + space->mBorderPadding.right;
|
||||
aDesiredSize.height += space->mBorderPadding.top + space->mBorderPadding.bottom;
|
||||
aDesiredSize.ascent = aDesiredSize.height;
|
||||
aDesiredSize.descent = 0;
|
||||
}
|
||||
|
@ -102,14 +103,14 @@ void nsLeafFrame::AddBordersAndPadding(nsIPresContext* aPresContext,
|
|||
void nsLeafFrame::GetInnerArea(nsIPresContext* aPresContext,
|
||||
nsRect& aInnerArea) const
|
||||
{
|
||||
nsStyleMolecule* mol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
aInnerArea.x = mol->borderPadding.left;
|
||||
aInnerArea.y = mol->borderPadding.top;
|
||||
nsStyleSpacing* space =
|
||||
(nsStyleSpacing*)mStyleContext->GetData(kStyleSpacingSID);
|
||||
aInnerArea.x = space->mBorderPadding.left;
|
||||
aInnerArea.y = space->mBorderPadding.top;
|
||||
aInnerArea.width = mRect.width -
|
||||
(mol->borderPadding.left + mol->borderPadding.right);
|
||||
(space->mBorderPadding.left + space->mBorderPadding.right);
|
||||
aInnerArea.height = mRect.height -
|
||||
(mol->borderPadding.top + mol->borderPadding.bottom);
|
||||
(space->mBorderPadding.top + space->mBorderPadding.bottom);
|
||||
}
|
||||
|
||||
NS_METHOD nsLeafFrame::CreateContinuingFrame(nsIPresContext* aPresContext,
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "nsHTMLAtoms.h"
|
||||
#include "nsHTMLValue.h"
|
||||
#include "nsIHTMLContent.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#undef NOISY
|
||||
|
@ -49,6 +50,9 @@ static NS_DEFINE_IID(kIAnchoredItemsIID, NS_IANCHOREDITEMS_IID);
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleFontSID, NS_STYLEFONT_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct BlockBandData : public nsBandData {
|
||||
nsBandTrapezoid data[5];
|
||||
|
||||
|
@ -345,11 +349,10 @@ void nsBlockFrame::PlaceBelowCurrentLineFloaters(nsIPresContext* aCX,
|
|||
GetAvailableSpaceBand(aState, aY);
|
||||
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
floater->GetStyleContext(aCX, styleContext);
|
||||
floater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
floater->GetRect(region);
|
||||
region.y = mCurrentState->currentBand->trapezoids[0].yTop;
|
||||
|
@ -853,13 +856,12 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
|
||||
// Get kid and its style
|
||||
// XXX How is this any different than what was passed in to us as aKidMol?
|
||||
nsIContent* kid;
|
||||
nsIStyleContext* kidSC;
|
||||
nsIContentPtr kid;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
aKidFrame->GetContent(kid);
|
||||
aKidFrame->GetStyleContext(aCX, kidSC);
|
||||
aKidFrame->GetContent(kid.AssignRef());
|
||||
aKidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Figure out if kid is a block element or not
|
||||
PRBool isInline = PR_TRUE;
|
||||
|
@ -899,14 +901,13 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// Get the style for the last child, and see if it wanted to clear floaters.
|
||||
// This handles the BR tag, which is the only inline element for which clear
|
||||
// applies
|
||||
nsIStyleContext* lastChildSC;
|
||||
nsIStyleContextPtr lastChildSC;
|
||||
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC);
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC.AssignRef());
|
||||
nsStyleMolecule* lastChildMol = (nsStyleMolecule*)lastChildSC->GetData(kStyleMoleculeSID);
|
||||
if (lastChildMol->clear != NS_STYLE_CLEAR_NONE) {
|
||||
ClearFloaters(aState, lastChildMol->clear);
|
||||
}
|
||||
NS_RELEASE(lastChildSC);
|
||||
}
|
||||
|
||||
// Now that we've handled force breaks (and maybe called AdvanceToNextLine()
|
||||
|
@ -1096,7 +1097,6 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// a line break before the next frame is placed.
|
||||
aState.breakAfterChild = PR_TRUE;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
aState.reflowStatus = status;
|
||||
return PLACE_FLOWED | PLACE_FIT;
|
||||
|
@ -1132,12 +1132,11 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
nsIFrame* prevKidFrame = nsnull;
|
||||
|
||||
for (kidFrame = mFirstChild; nsnull != kidFrame; ) {
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Attempt to place and reflow the child
|
||||
|
||||
|
@ -1147,7 +1146,6 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
|
||||
PRIntn placeStatus = PlaceAndReflowChild(aCX, aState, kidFrame, kidMol);
|
||||
ReflowStatus status = aState.reflowStatus;
|
||||
NS_RELEASE(kidSC);
|
||||
if (0 == (placeStatus & PLACE_FIT)) {
|
||||
// The child doesn't fit. Push it and any remaining children.
|
||||
PushKids(aState);
|
||||
|
@ -1224,10 +1222,10 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
if (IsPseudoFrame()) {
|
||||
// Get the next content object that we would like to reflow
|
||||
PRInt32 kidIndex = NextChildOffset();
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull != kid) {
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
switch (kidMol->display) {
|
||||
case NS_STYLE_DISPLAY_BLOCK:
|
||||
|
@ -1239,8 +1237,6 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
rv = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
}
|
||||
} else {
|
||||
if (NextChildOffset() < mContent->ChildCount()) {
|
||||
|
@ -1288,14 +1284,14 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -1321,8 +1317,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
result = frComplete;
|
||||
goto done;
|
||||
}
|
||||
|
@ -1379,8 +1373,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mLastContentIsComplete = PRBool(nsnull == kidNextInFlow);
|
||||
PushKids(aState);
|
||||
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1403,8 +1395,7 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
}
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1414,8 +1405,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
NS_ASSERTION(nsnull == kidNextInFlow, "huh?");
|
||||
#endif
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// The child that we just reflowed is complete
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1485,10 +1474,10 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
|
||||
// Get style information for the pulled up kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
ReflowStatus status;
|
||||
|
@ -1504,8 +1493,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
PushKids(aState);
|
||||
|
||||
result = PR_FALSE;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1531,8 +1518,7 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
} else {
|
||||
// The child has a next-in-flow, but it's not one of ours.
|
||||
|
@ -1543,8 +1529,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
}
|
||||
|
@ -1950,11 +1934,10 @@ void nsBlockFrame::PlaceFloater(nsIPresContext* aCX,
|
|||
// todo list and we'll handle it when we flush out the line
|
||||
if (IsLeftMostChild(aPlaceholder)) {
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
aFloater->GetStyleContext(aCX, styleContext);
|
||||
aFloater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
if (!mCurrentState->isInline) {
|
||||
// Get the current band for this line
|
||||
|
@ -2008,13 +1991,13 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
flow->LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -2039,9 +2022,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
// FALL THROUGH (and create frame)
|
||||
|
@ -2058,8 +2038,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
}
|
||||
}
|
||||
kidFrame->SetStyleContext(kidSC);
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Link child frame into the list of children
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "nsHTMLAtoms.h"
|
||||
#include "nsHTMLValue.h"
|
||||
#include "nsIHTMLContent.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#undef NOISY
|
||||
|
@ -49,6 +50,9 @@ static NS_DEFINE_IID(kIAnchoredItemsIID, NS_IANCHOREDITEMS_IID);
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleFontSID, NS_STYLEFONT_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct BlockBandData : public nsBandData {
|
||||
nsBandTrapezoid data[5];
|
||||
|
||||
|
@ -345,11 +349,10 @@ void nsBlockFrame::PlaceBelowCurrentLineFloaters(nsIPresContext* aCX,
|
|||
GetAvailableSpaceBand(aState, aY);
|
||||
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
floater->GetStyleContext(aCX, styleContext);
|
||||
floater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
floater->GetRect(region);
|
||||
region.y = mCurrentState->currentBand->trapezoids[0].yTop;
|
||||
|
@ -853,13 +856,12 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
|
||||
// Get kid and its style
|
||||
// XXX How is this any different than what was passed in to us as aKidMol?
|
||||
nsIContent* kid;
|
||||
nsIStyleContext* kidSC;
|
||||
nsIContentPtr kid;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
aKidFrame->GetContent(kid);
|
||||
aKidFrame->GetStyleContext(aCX, kidSC);
|
||||
aKidFrame->GetContent(kid.AssignRef());
|
||||
aKidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Figure out if kid is a block element or not
|
||||
PRBool isInline = PR_TRUE;
|
||||
|
@ -899,14 +901,13 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// Get the style for the last child, and see if it wanted to clear floaters.
|
||||
// This handles the BR tag, which is the only inline element for which clear
|
||||
// applies
|
||||
nsIStyleContext* lastChildSC;
|
||||
nsIStyleContextPtr lastChildSC;
|
||||
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC);
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC.AssignRef());
|
||||
nsStyleMolecule* lastChildMol = (nsStyleMolecule*)lastChildSC->GetData(kStyleMoleculeSID);
|
||||
if (lastChildMol->clear != NS_STYLE_CLEAR_NONE) {
|
||||
ClearFloaters(aState, lastChildMol->clear);
|
||||
}
|
||||
NS_RELEASE(lastChildSC);
|
||||
}
|
||||
|
||||
// Now that we've handled force breaks (and maybe called AdvanceToNextLine()
|
||||
|
@ -1096,7 +1097,6 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// a line break before the next frame is placed.
|
||||
aState.breakAfterChild = PR_TRUE;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
aState.reflowStatus = status;
|
||||
return PLACE_FLOWED | PLACE_FIT;
|
||||
|
@ -1132,12 +1132,11 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
nsIFrame* prevKidFrame = nsnull;
|
||||
|
||||
for (kidFrame = mFirstChild; nsnull != kidFrame; ) {
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Attempt to place and reflow the child
|
||||
|
||||
|
@ -1147,7 +1146,6 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
|
||||
PRIntn placeStatus = PlaceAndReflowChild(aCX, aState, kidFrame, kidMol);
|
||||
ReflowStatus status = aState.reflowStatus;
|
||||
NS_RELEASE(kidSC);
|
||||
if (0 == (placeStatus & PLACE_FIT)) {
|
||||
// The child doesn't fit. Push it and any remaining children.
|
||||
PushKids(aState);
|
||||
|
@ -1224,10 +1222,10 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
if (IsPseudoFrame()) {
|
||||
// Get the next content object that we would like to reflow
|
||||
PRInt32 kidIndex = NextChildOffset();
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull != kid) {
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
switch (kidMol->display) {
|
||||
case NS_STYLE_DISPLAY_BLOCK:
|
||||
|
@ -1239,8 +1237,6 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
rv = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
}
|
||||
} else {
|
||||
if (NextChildOffset() < mContent->ChildCount()) {
|
||||
|
@ -1288,14 +1284,14 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -1321,8 +1317,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
result = frComplete;
|
||||
goto done;
|
||||
}
|
||||
|
@ -1379,8 +1373,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mLastContentIsComplete = PRBool(nsnull == kidNextInFlow);
|
||||
PushKids(aState);
|
||||
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1403,8 +1395,7 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
}
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1414,8 +1405,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
NS_ASSERTION(nsnull == kidNextInFlow, "huh?");
|
||||
#endif
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// The child that we just reflowed is complete
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1485,10 +1474,10 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
|
||||
// Get style information for the pulled up kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
ReflowStatus status;
|
||||
|
@ -1504,8 +1493,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
PushKids(aState);
|
||||
|
||||
result = PR_FALSE;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1531,8 +1518,7 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
} else {
|
||||
// The child has a next-in-flow, but it's not one of ours.
|
||||
|
@ -1543,8 +1529,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
}
|
||||
|
@ -1950,11 +1934,10 @@ void nsBlockFrame::PlaceFloater(nsIPresContext* aCX,
|
|||
// todo list and we'll handle it when we flush out the line
|
||||
if (IsLeftMostChild(aPlaceholder)) {
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
aFloater->GetStyleContext(aCX, styleContext);
|
||||
aFloater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
if (!mCurrentState->isInline) {
|
||||
// Get the current band for this line
|
||||
|
@ -2008,13 +1991,13 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
flow->LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -2039,9 +2022,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
// FALL THROUGH (and create frame)
|
||||
|
@ -2058,8 +2038,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
}
|
||||
}
|
||||
kidFrame->SetStyleContext(kidSC);
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Link child frame into the list of children
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "nsHTMLAtoms.h"
|
||||
#include "nsHTMLValue.h"
|
||||
#include "nsIHTMLContent.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#undef NOISY
|
||||
|
@ -49,6 +50,9 @@ static NS_DEFINE_IID(kIAnchoredItemsIID, NS_IANCHOREDITEMS_IID);
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleFontSID, NS_STYLEFONT_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct BlockBandData : public nsBandData {
|
||||
nsBandTrapezoid data[5];
|
||||
|
||||
|
@ -345,11 +349,10 @@ void nsBlockFrame::PlaceBelowCurrentLineFloaters(nsIPresContext* aCX,
|
|||
GetAvailableSpaceBand(aState, aY);
|
||||
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
floater->GetStyleContext(aCX, styleContext);
|
||||
floater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
floater->GetRect(region);
|
||||
region.y = mCurrentState->currentBand->trapezoids[0].yTop;
|
||||
|
@ -853,13 +856,12 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
|
||||
// Get kid and its style
|
||||
// XXX How is this any different than what was passed in to us as aKidMol?
|
||||
nsIContent* kid;
|
||||
nsIStyleContext* kidSC;
|
||||
nsIContentPtr kid;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
aKidFrame->GetContent(kid);
|
||||
aKidFrame->GetStyleContext(aCX, kidSC);
|
||||
aKidFrame->GetContent(kid.AssignRef());
|
||||
aKidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Figure out if kid is a block element or not
|
||||
PRBool isInline = PR_TRUE;
|
||||
|
@ -899,14 +901,13 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// Get the style for the last child, and see if it wanted to clear floaters.
|
||||
// This handles the BR tag, which is the only inline element for which clear
|
||||
// applies
|
||||
nsIStyleContext* lastChildSC;
|
||||
nsIStyleContextPtr lastChildSC;
|
||||
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC);
|
||||
lastFrame->GetStyleContext(aCX, lastChildSC.AssignRef());
|
||||
nsStyleMolecule* lastChildMol = (nsStyleMolecule*)lastChildSC->GetData(kStyleMoleculeSID);
|
||||
if (lastChildMol->clear != NS_STYLE_CLEAR_NONE) {
|
||||
ClearFloaters(aState, lastChildMol->clear);
|
||||
}
|
||||
NS_RELEASE(lastChildSC);
|
||||
}
|
||||
|
||||
// Now that we've handled force breaks (and maybe called AdvanceToNextLine()
|
||||
|
@ -1096,7 +1097,6 @@ nsBlockFrame::PlaceAndReflowChild(nsIPresContext* aCX,
|
|||
// a line break before the next frame is placed.
|
||||
aState.breakAfterChild = PR_TRUE;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
aState.reflowStatus = status;
|
||||
return PLACE_FLOWED | PLACE_FIT;
|
||||
|
@ -1132,12 +1132,11 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
nsIFrame* prevKidFrame = nsnull;
|
||||
|
||||
for (kidFrame = mFirstChild; nsnull != kidFrame; ) {
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Attempt to place and reflow the child
|
||||
|
||||
|
@ -1147,7 +1146,6 @@ nsBlockFrame::ReflowMappedChildren(nsIPresContext* aCX,
|
|||
|
||||
PRIntn placeStatus = PlaceAndReflowChild(aCX, aState, kidFrame, kidMol);
|
||||
ReflowStatus status = aState.reflowStatus;
|
||||
NS_RELEASE(kidSC);
|
||||
if (0 == (placeStatus & PLACE_FIT)) {
|
||||
// The child doesn't fit. Push it and any remaining children.
|
||||
PushKids(aState);
|
||||
|
@ -1224,10 +1222,10 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
if (IsPseudoFrame()) {
|
||||
// Get the next content object that we would like to reflow
|
||||
PRInt32 kidIndex = NextChildOffset();
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull != kid) {
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
switch (kidMol->display) {
|
||||
case NS_STYLE_DISPLAY_BLOCK:
|
||||
|
@ -1239,8 +1237,6 @@ PRBool nsBlockFrame::MoreToReflow(nsIPresContext* aCX)
|
|||
rv = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
}
|
||||
} else {
|
||||
if (NextChildOffset() < mContent->ChildCount()) {
|
||||
|
@ -1288,14 +1284,14 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -1321,8 +1317,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
result = frComplete;
|
||||
goto done;
|
||||
}
|
||||
|
@ -1379,8 +1373,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mLastContentIsComplete = PRBool(nsnull == kidNextInFlow);
|
||||
PushKids(aState);
|
||||
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1403,8 +1395,7 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
}
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1414,8 +1405,6 @@ nsBlockFrame::ReflowAppendedChildren(nsIPresContext* aCX,
|
|||
NS_ASSERTION(nsnull == kidNextInFlow, "huh?");
|
||||
#endif
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// The child that we just reflowed is complete
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -1485,10 +1474,10 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
|
||||
// Get style information for the pulled up kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC = aCX->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
ReflowStatus status;
|
||||
|
@ -1504,8 +1493,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
PushKids(aState);
|
||||
|
||||
result = PR_FALSE;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -1531,8 +1518,7 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
mChildCount++;
|
||||
|
||||
// Switch to new kid style
|
||||
NS_RELEASE(kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC);
|
||||
kidFrame->GetStyleContext(aCX, kidSC.AssignRef());
|
||||
kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
} else {
|
||||
// The child has a next-in-flow, but it's not one of ours.
|
||||
|
@ -1543,8 +1529,6 @@ nsBlockFrame::PullUpChildren(nsIPresContext* aCX,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
}
|
||||
|
@ -1950,11 +1934,10 @@ void nsBlockFrame::PlaceFloater(nsIPresContext* aCX,
|
|||
// todo list and we'll handle it when we flush out the line
|
||||
if (IsLeftMostChild(aPlaceholder)) {
|
||||
// Get the type of floater
|
||||
nsIStyleContext* styleContext;
|
||||
nsIStyleContextPtr styleContext;
|
||||
|
||||
aFloater->GetStyleContext(aCX, styleContext);
|
||||
aFloater->GetStyleContext(aCX, styleContext.AssignRef());
|
||||
nsStyleMolecule* mol = (nsStyleMolecule*)styleContext->GetData(kStyleMoleculeSID);
|
||||
NS_RELEASE(styleContext);
|
||||
|
||||
if (!mCurrentState->isInline) {
|
||||
// Get the current band for this line
|
||||
|
@ -2008,13 +1991,13 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
flow->LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the kid
|
||||
nsIStyleContext* kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsIStyleContextPtr kidSC = aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
|
||||
// Is it a floater?
|
||||
|
@ -2039,9 +2022,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
// decided it needed a pseudo-frame when it shouldn't have.
|
||||
NS_ASSERTION(nsnull != mFirstChild, "bad body");
|
||||
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
// FALL THROUGH (and create frame)
|
||||
|
@ -2058,8 +2038,6 @@ NS_METHOD nsBlockFrame::ContentAppended(nsIPresShell* aShell,
|
|||
}
|
||||
}
|
||||
kidFrame->SetStyleContext(kidSC);
|
||||
NS_RELEASE(kidSC);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
// Link child frame into the list of children
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "nsIViewManager.h"
|
||||
#include "nsIDeviceContext.h"
|
||||
#include "nsISpaceManager.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#undef NOISY
|
||||
|
@ -39,6 +40,9 @@
|
|||
static NS_DEFINE_IID(kIRunaroundIID, NS_IRUNAROUND_IID);
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct ColumnReflowState {
|
||||
// The space manager to use
|
||||
nsISpaceManager* spaceManager;
|
||||
|
@ -240,14 +244,13 @@ PRBool ColumnFrame::ReflowMappedChildren(nsIPresContext* aPresContext,
|
|||
nsIFrame::ReflowStatus status;
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidFrame, kidMol);
|
||||
// XXX Style system should do this...
|
||||
nscoord bottomMargin = ChildIsPseudoFrame(kidFrame) ? 0 : kidMol->margin.bottom;
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Figure out the amount of available size for the child (subtract
|
||||
// off the top margin we are going to apply to it)
|
||||
|
@ -440,9 +443,9 @@ PRBool ColumnFrame::PullUpChildren(nsIPresContext* aPresContext,
|
|||
}
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidFrame, kidMol);
|
||||
// XXX Style system should do this...
|
||||
|
@ -486,7 +489,6 @@ PRBool ColumnFrame::PullUpChildren(nsIPresContext* aPresContext,
|
|||
mLastContentIsComplete = prevLastContentIsComplete;
|
||||
mChildCount--;
|
||||
result = PR_FALSE;
|
||||
NS_RELEASE(kidSC);
|
||||
goto push_done;
|
||||
}
|
||||
|
||||
|
@ -544,7 +546,6 @@ PRBool ColumnFrame::PullUpChildren(nsIPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
prevLastContentIsComplete = mLastContentIsComplete;
|
||||
|
@ -651,7 +652,7 @@ ColumnFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
|
@ -660,12 +661,11 @@ ColumnFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
// Make sure we still have room left
|
||||
if (aState.availSize.height <= 0) {
|
||||
// Note: return status was set to frNotComplete above...
|
||||
NS_RELEASE(kid);
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol =
|
||||
(nsStyleMolecule*)kidStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -786,8 +786,6 @@ ColumnFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
f->GetNextSibling(f);
|
||||
}
|
||||
mChildCount -= overflowKids;
|
||||
NS_RELEASE(kidStyleContext);
|
||||
NS_RELEASE(kid);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -833,8 +831,6 @@ ColumnFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
} while (frNotComplete == status);
|
||||
NS_RELEASE(kidStyleContext);
|
||||
NS_RELEASE(kid);
|
||||
|
||||
prevKidFrame = kidFrame;
|
||||
kidPrevInFlow = nsnull;
|
||||
|
@ -1032,14 +1028,13 @@ NS_METHOD ColumnFrame::IncrementalReflow(nsIPresContext* aPresContext,
|
|||
prevKidFrame->GetRect(startKidRect);
|
||||
|
||||
// Get style info
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
prevKidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
prevKidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol =
|
||||
(nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
// XXX Style system should do this...
|
||||
nscoord bottomMargin = ChildIsPseudoFrame(prevKidFrame) ? 0 : kidMol->margin.bottom;
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
state.y = startKidRect.YMost();
|
||||
if (bottomMargin < 0) {
|
||||
|
@ -1066,9 +1061,9 @@ NS_METHOD ColumnFrame::IncrementalReflow(nsIPresContext* aPresContext,
|
|||
|
||||
// Now ResizeReflow the appended frames
|
||||
while (nsnull != kidFrame) {
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol =
|
||||
(nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, state, kidFrame, kidMol);
|
||||
|
@ -1113,7 +1108,6 @@ NS_METHOD ColumnFrame::IncrementalReflow(nsIPresContext* aPresContext,
|
|||
} else {
|
||||
state.prevMaxPosBottomMargin = bottomMargin;
|
||||
}
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Is the child complete?
|
||||
if (frNotComplete == aStatus) {
|
||||
|
@ -1192,13 +1186,13 @@ NS_METHOD ColumnFrame::ContentAppended(nsIPresShell* aShell,
|
|||
// Create frames for each new child
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = content->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = content->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Get style context for the kid
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol =
|
||||
(nsStyleMolecule*)kidStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -1256,7 +1250,6 @@ NS_METHOD ColumnFrame::ContentAppended(nsIPresShell* aShell,
|
|||
nsBlockFrame::NewFrame(&kidFrame, mContent, mIndexInParent, this);
|
||||
|
||||
// Resolve style for the pseudo-frame (kid's style won't do)
|
||||
NS_RELEASE(kidStyleContext);
|
||||
kidStyleContext = aPresContext->ResolveStyleContextFor(mContent, this);
|
||||
kidFrame->SetStyleContext(kidStyleContext);
|
||||
|
||||
|
@ -1297,8 +1290,6 @@ NS_METHOD ColumnFrame::ContentAppended(nsIPresShell* aShell,
|
|||
kidIndex = NextChildOffset();
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidStyleContext);
|
||||
}
|
||||
SetLastContentOffset(prevKidFrame);
|
||||
// Note: Column frames *never* directly generate reflow commands
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "nsIURL.h"
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
nsHTMLContainerFrame::nsHTMLContainerFrame(nsIContent* aContent,
|
||||
|
@ -53,12 +54,12 @@ NS_METHOD nsHTMLContainerFrame::Paint(nsIPresContext& aPresContext,
|
|||
PRIntn skipSides = GetSkipSides();
|
||||
nsStyleColor* color =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* mol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* border =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *color);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *mol, skipSides);
|
||||
aDirtyRect, mRect, *border, skipSides);
|
||||
}
|
||||
|
||||
PaintChildren(aPresContext, aRenderingContext, aDirtyRect);
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
#include "nsIStyleContext.h"
|
||||
#include "nsCSSRendering.h"
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleSpacingSID, NS_STYLESPACING_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
nsLeafFrame::nsLeafFrame(nsIContent* aContent,
|
||||
|
@ -39,12 +40,12 @@ NS_METHOD nsLeafFrame::Paint(nsIPresContext& aPresContext,
|
|||
{
|
||||
nsStyleColor* myColor =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* myMol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* myBorder =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myColor);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myMol, 0);
|
||||
aDirtyRect, mRect, *myBorder, 0);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -91,10 +92,10 @@ NS_METHOD nsLeafFrame::IncrementalReflow(nsIPresContext* aPresContext,
|
|||
void nsLeafFrame::AddBordersAndPadding(nsIPresContext* aPresContext,
|
||||
nsReflowMetrics& aDesiredSize)
|
||||
{
|
||||
nsStyleMolecule* mol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
aDesiredSize.width += mol->borderPadding.left + mol->borderPadding.right;
|
||||
aDesiredSize.height += mol->borderPadding.top + mol->borderPadding.bottom;
|
||||
nsStyleSpacing* space =
|
||||
(nsStyleSpacing*)mStyleContext->GetData(kStyleSpacingSID);
|
||||
aDesiredSize.width += space->mBorderPadding.left + space->mBorderPadding.right;
|
||||
aDesiredSize.height += space->mBorderPadding.top + space->mBorderPadding.bottom;
|
||||
aDesiredSize.ascent = aDesiredSize.height;
|
||||
aDesiredSize.descent = 0;
|
||||
}
|
||||
|
@ -102,14 +103,14 @@ void nsLeafFrame::AddBordersAndPadding(nsIPresContext* aPresContext,
|
|||
void nsLeafFrame::GetInnerArea(nsIPresContext* aPresContext,
|
||||
nsRect& aInnerArea) const
|
||||
{
|
||||
nsStyleMolecule* mol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
aInnerArea.x = mol->borderPadding.left;
|
||||
aInnerArea.y = mol->borderPadding.top;
|
||||
nsStyleSpacing* space =
|
||||
(nsStyleSpacing*)mStyleContext->GetData(kStyleSpacingSID);
|
||||
aInnerArea.x = space->mBorderPadding.left;
|
||||
aInnerArea.y = space->mBorderPadding.top;
|
||||
aInnerArea.width = mRect.width -
|
||||
(mol->borderPadding.left + mol->borderPadding.right);
|
||||
(space->mBorderPadding.left + space->mBorderPadding.right);
|
||||
aInnerArea.height = mRect.height -
|
||||
(mol->borderPadding.top + mol->borderPadding.bottom);
|
||||
(space->mBorderPadding.top + space->mBorderPadding.bottom);
|
||||
}
|
||||
|
||||
NS_METHOD nsLeafFrame::CreateContinuingFrame(nsIPresContext* aPresContext,
|
||||
|
|
|
@ -21,11 +21,15 @@
|
|||
#include "nsIFrame.h"
|
||||
#include "nsTableCell.h"
|
||||
#include "nsIStyleContext.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#include <stdio.h>/* XXX */ // for printf
|
||||
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleSpacingSID, NS_STYLESPACING_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
|
||||
nsCellLayoutData::nsCellLayoutData(nsTableCellFrame *aCellFrame,
|
||||
nsReflowMetrics * aDesiredSize, nsSize * aMaxElementSize)
|
||||
|
@ -77,16 +81,16 @@ void nsCellLayoutData::SetMaxElementSize(nsSize * aMaxElementSize)
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the style molecue for this object (determined, by
|
||||
* Get the style context for this object (determined, by
|
||||
* asking for the frame
|
||||
*
|
||||
**/
|
||||
nsStyleMolecule* nsCellLayoutData::GetStyleMolecule()
|
||||
nsIStyleContext* nsCellLayoutData::GetStyleContext()
|
||||
{
|
||||
if (mCellFrame != nsnull) {
|
||||
nsStyleMolecule* styleMol;
|
||||
mCellFrame->GetStyleData(kStyleMoleculeSID, (nsStyleStruct*&)styleMol);
|
||||
return styleMol;
|
||||
nsIStyleContext* styleContext;
|
||||
mCellFrame->GetStyleContext(nsnull, styleContext);
|
||||
return styleContext;
|
||||
}
|
||||
return nsnull;
|
||||
}
|
||||
|
@ -96,51 +100,52 @@ nsStyleMolecule* nsCellLayoutData::GetStyleMolecule()
|
|||
|
||||
|
||||
/**
|
||||
* Given a list of nsCellLayoutData and a index, get the style molecule for
|
||||
* Given a list of nsCellLayoutData and a index, get the style context for
|
||||
* that element in the list
|
||||
*
|
||||
**/
|
||||
nsStyleMolecule* nsCellLayoutData::GetStyleMoleculeAt(nsVoidArray* aList, PRInt32 aIndex)
|
||||
nsIStyleContext* nsCellLayoutData::GetStyleContextAt(nsVoidArray* aList, PRInt32 aIndex)
|
||||
{
|
||||
nsStyleMolecule* result = nsnull;
|
||||
nsIStyleContext* result = nsnull;
|
||||
|
||||
if (aList != nsnull)
|
||||
{
|
||||
nsCellLayoutData* data = (nsCellLayoutData*)aList->ElementAt(aIndex);
|
||||
if (data != nsnull)
|
||||
result = data->GetStyleMolecule();
|
||||
result = data->GetStyleContext();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a style molecule and an edge, find the margin
|
||||
* Given a style context and an edge, find the margin
|
||||
*
|
||||
**/
|
||||
nscoord nsCellLayoutData::GetMargin(nsStyleMolecule* aStyle,PRUint8 aEdge)
|
||||
nscoord nsCellLayoutData::GetMargin(nsIStyleContext* aStyle,PRUint8 aEdge)
|
||||
{
|
||||
nscoord result = 0;
|
||||
|
||||
if (aStyle)
|
||||
{
|
||||
nsStyleSpacing* spacing = (nsStyleSpacing*)aStyle->GetData(kStyleSpacingSID);
|
||||
switch (aEdge)
|
||||
{
|
||||
|
||||
case NS_SIDE_TOP:
|
||||
result = aStyle->margin.top;
|
||||
result = spacing->mMargin.top;
|
||||
break;
|
||||
|
||||
case NS_SIDE_RIGHT:
|
||||
result = aStyle->margin.right;
|
||||
result = spacing->mMargin.right;
|
||||
break;
|
||||
|
||||
|
||||
case NS_SIDE_BOTTOM:
|
||||
result = aStyle->margin.bottom;
|
||||
result = spacing->mMargin.bottom;
|
||||
break;
|
||||
|
||||
case NS_SIDE_LEFT:
|
||||
result = aStyle->margin.left;
|
||||
result = spacing->mMargin.left;
|
||||
break;
|
||||
|
||||
}
|
||||
|
@ -150,32 +155,33 @@ nscoord nsCellLayoutData::GetMargin(nsStyleMolecule* aStyle,PRUint8 aEdge)
|
|||
|
||||
|
||||
/**
|
||||
* Given a style molecule and an edge, find the border width
|
||||
* Given a style context and an edge, find the border width
|
||||
*
|
||||
**/
|
||||
nscoord nsCellLayoutData::GetBorderWidth(nsStyleMolecule* aStyle,PRUint8 aEdge)
|
||||
nscoord nsCellLayoutData::GetBorderWidth(nsIStyleContext* aStyle,PRUint8 aEdge)
|
||||
{
|
||||
nscoord result = 0;
|
||||
|
||||
if (aStyle)
|
||||
{
|
||||
nsStyleSpacing* spacing = (nsStyleSpacing*)aStyle->GetData(kStyleSpacingSID);
|
||||
switch (aEdge)
|
||||
{
|
||||
case NS_SIDE_TOP:
|
||||
result = aStyle->border.top;
|
||||
result = spacing->mBorder.top;
|
||||
break;
|
||||
|
||||
case NS_SIDE_RIGHT:
|
||||
result = aStyle->border.right;
|
||||
result = spacing->mBorder.right;
|
||||
break;
|
||||
|
||||
|
||||
case NS_SIDE_BOTTOM:
|
||||
result = aStyle->border.bottom;
|
||||
result = spacing->mBorder.bottom;
|
||||
break;
|
||||
|
||||
case NS_SIDE_LEFT:
|
||||
result = aStyle->border.left;
|
||||
result = spacing->mBorder.left;
|
||||
break;
|
||||
|
||||
}
|
||||
|
@ -185,31 +191,32 @@ nscoord nsCellLayoutData::GetBorderWidth(nsStyleMolecule* aStyle,PRUint8 aEdge)
|
|||
|
||||
|
||||
/**
|
||||
* Given a style molecule and an edge, find the padding
|
||||
* Given a style context and an edge, find the padding
|
||||
*
|
||||
**/
|
||||
nscoord nsCellLayoutData::GetPadding(nsStyleMolecule* aStyle,PRUint8 aEdge)
|
||||
nscoord nsCellLayoutData::GetPadding(nsIStyleContext* aStyle,PRUint8 aEdge)
|
||||
{
|
||||
nscoord result = 0;
|
||||
|
||||
if (aStyle)
|
||||
{
|
||||
nsStyleSpacing* spacing = (nsStyleSpacing*)aStyle->GetData(kStyleSpacingSID);
|
||||
switch (aEdge)
|
||||
{
|
||||
case NS_SIDE_TOP:
|
||||
result = aStyle->padding.top;
|
||||
result = spacing->mPadding.top;
|
||||
break;
|
||||
|
||||
case NS_SIDE_RIGHT:
|
||||
result = aStyle->padding.right;
|
||||
result = spacing->mPadding.right;
|
||||
break;
|
||||
|
||||
case NS_SIDE_BOTTOM:
|
||||
result = aStyle->padding.bottom;
|
||||
result = spacing->mPadding.bottom;
|
||||
break;
|
||||
|
||||
case NS_SIDE_LEFT:
|
||||
result = aStyle->padding.left;
|
||||
result = spacing->mPadding.left;
|
||||
break;
|
||||
|
||||
}
|
||||
|
@ -275,15 +282,15 @@ PRUint8 nsCellLayoutData::GetOpposingEdge(PRUint8 aEdge)
|
|||
*/
|
||||
|
||||
|
||||
nsStyleMolecule* nsCellLayoutData::CompareCellBorders(nsStyleMolecule* aStyle1,
|
||||
nsIStyleContext* nsCellLayoutData::CompareCellBorders(nsIStyleContext* aStyle1,
|
||||
PRUint8 aEdge1,
|
||||
nsStyleMolecule* aStyle2,
|
||||
nsIStyleContext* aStyle2,
|
||||
PRUint8 aEdge2)
|
||||
{
|
||||
PRInt32 width1 = GetBorderWidth(aStyle1,aEdge1);
|
||||
PRInt32 width2 = GetBorderWidth(aStyle2,aEdge2);
|
||||
|
||||
nsStyleMolecule* result = nsnull;
|
||||
nsIStyleContext* result = nsnull;
|
||||
|
||||
if (width1 > width2)
|
||||
result = aStyle1;
|
||||
|
@ -291,7 +298,9 @@ nsStyleMolecule* nsCellLayoutData::CompareCellBorders(nsStyleMolecule* aStyle1,
|
|||
result = aStyle2;
|
||||
else // width1 == width2
|
||||
{
|
||||
if (aStyle1->borderStyle[aEdge1] >= aStyle2->borderStyle[aEdge2])
|
||||
nsStyleBorder* border1 = (nsStyleBorder*)aStyle1->GetData(kStyleBorderSID);
|
||||
nsStyleBorder* border2 = (nsStyleBorder*)aStyle2->GetData(kStyleBorderSID);
|
||||
if (border1->mStyle[aEdge1] >= border2->mStyle[aEdge2])
|
||||
result = aStyle1;
|
||||
else
|
||||
result = aStyle2;
|
||||
|
@ -306,10 +315,10 @@ nsStyleMolecule* nsCellLayoutData::CompareCellBorders(nsStyleMolecule* aStyle1,
|
|||
*
|
||||
**/
|
||||
|
||||
nsStyleMolecule* nsCellLayoutData::FindHighestPrecedentBorder(nsVoidArray* aList,
|
||||
nsIStyleContext* nsCellLayoutData::FindHighestPrecedentBorder(nsVoidArray* aList,
|
||||
PRUint8 aEdge)
|
||||
{
|
||||
nsStyleMolecule* result = nsnull;
|
||||
nsIStyleContext* result = nsnull;
|
||||
PRInt32 index = 0;
|
||||
PRInt32 count = 0;
|
||||
|
||||
|
@ -318,18 +327,19 @@ nsStyleMolecule* nsCellLayoutData::FindHighestPrecedentBorder(nsVoidArray* aList
|
|||
count = aList->Count();
|
||||
if (count)
|
||||
{
|
||||
nsStyleMolecule* style = nsnull;
|
||||
nsStyleMolecule* style2 = nsnull;
|
||||
nsIStyleContextPtr style;
|
||||
nsIStyleContextPtr style2;
|
||||
|
||||
style = GetStyleMoleculeAt(aList,index++);
|
||||
style = GetStyleContextAt(aList,index++);
|
||||
while (index < count)
|
||||
{
|
||||
style2 = GetStyleMoleculeAt(aList,index++);
|
||||
if (GetMargin(style2,aEdge) == 0)
|
||||
style = CompareCellBorders(style,aEdge, style2,aEdge);
|
||||
style2 = GetStyleContextAt(aList,index++);
|
||||
if (GetMargin(style2,aEdge) == 0) {
|
||||
style.SetAddRef(CompareCellBorders(style,aEdge, style2,aEdge));
|
||||
}
|
||||
if (style && GetMargin(style,aEdge) != 0)
|
||||
result = style;
|
||||
}
|
||||
if (style && (GetMargin(style,aEdge) != 0))
|
||||
result = style.AddRef();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -337,22 +347,22 @@ nsStyleMolecule* nsCellLayoutData::FindHighestPrecedentBorder(nsVoidArray* aList
|
|||
|
||||
|
||||
|
||||
nsStyleMolecule* nsCellLayoutData::FindInnerBorder( nsStyleMolecule* aStyle,
|
||||
nsStyleSpacing* nsCellLayoutData::FindInnerBorder( nsIStyleContext* aStyle,
|
||||
nsVoidArray* aList,
|
||||
PRUint8 aEdge)
|
||||
{
|
||||
nsStyleMolecule* result = nsnull;
|
||||
nsStyleMolecule* altStyle = nsnull;
|
||||
nsStyleSpacing* result = nsnull;
|
||||
PRUint8 opposite = GetOpposingEdge(aEdge);
|
||||
|
||||
if (GetMargin(aStyle,aEdge) == 0)
|
||||
{
|
||||
|
||||
nsStyleMolecule* altStyle = FindHighestPrecedentBorder(aList,opposite);
|
||||
nsIStyleContextPtr style;
|
||||
nsIStyleContextPtr altStyle = FindHighestPrecedentBorder(aList,opposite);
|
||||
if (altStyle != nsnull)
|
||||
result = CompareCellBorders(aStyle,aEdge,altStyle,opposite);
|
||||
style.SetAddRef(CompareCellBorders(aStyle,aEdge,altStyle,opposite));
|
||||
else
|
||||
result = aStyle;
|
||||
style.SetAddRef(aStyle);
|
||||
result = (nsStyleSpacing*)style->GetData(kStyleSpacingSID);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -379,16 +389,17 @@ nsStyleMolecule* nsCellLayoutData::FindInnerBorder( nsStyleMolecule* aStyle,
|
|||
*
|
||||
*
|
||||
*/
|
||||
nsStyleMolecule* nsCellLayoutData::FindOuterBorder( nsTableFrame* aTableFrame,
|
||||
nsStyleSpacing* nsCellLayoutData::FindOuterBorder( nsTableFrame* aTableFrame,
|
||||
nsIFrame* aFrame,
|
||||
nsStyleMolecule* aStyle,
|
||||
nsIStyleContext* aStyle,
|
||||
PRUint8 aEdge)
|
||||
{
|
||||
// By default, return the passed in style
|
||||
nsStyleMolecule* style = aStyle;
|
||||
nsIStyleContextPtr style;
|
||||
nsIFrame* frame = aFrame;
|
||||
PRBool done = PR_FALSE;
|
||||
|
||||
// By default, return the passed in style
|
||||
style.SetAddRef(aStyle);
|
||||
// The table frame is the outer most frame we test against
|
||||
while (done == PR_FALSE)
|
||||
{
|
||||
|
@ -402,15 +413,15 @@ nsStyleMolecule* nsCellLayoutData::FindOuterBorder( nsTableFrame* aTableFrame,
|
|||
if (margin == 0)
|
||||
{
|
||||
nsIFrame* parentFrame;
|
||||
nsStyleMolecule* parentStyle;
|
||||
nsIStyleContextPtr parentStyle;
|
||||
|
||||
aFrame->GetGeometricParent(parentFrame);
|
||||
aFrame->GetStyleData(kStyleMoleculeSID, (nsStyleStruct*&)parentStyle);
|
||||
aFrame->GetStyleContext(nsnull, parentStyle.AssignRef());
|
||||
|
||||
// if the padding for the parent style is zero just
|
||||
// recursively call this routine
|
||||
PRInt32 padding = GetPadding(parentStyle,aEdge);
|
||||
if (parentStyle && padding == 0)
|
||||
if (parentStyle && (padding == 0))
|
||||
{
|
||||
style = parentStyle;
|
||||
frame = parentFrame;
|
||||
|
@ -422,7 +433,8 @@ nsStyleMolecule* nsCellLayoutData::FindOuterBorder( nsTableFrame* aTableFrame,
|
|||
|
||||
}
|
||||
}
|
||||
return style;
|
||||
nsStyleSpacing* result = (nsStyleSpacing*)style->GetData(kStyleSpacingSID);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
@ -456,12 +468,12 @@ nsStyleMolecule* nsCellLayoutData::FindOuterBorder( nsTableFrame* aTableFrame,
|
|||
* @param aIsBottom -- TRUE if this is the last cell in the column
|
||||
*/
|
||||
|
||||
nsStyleMolecule* nsCellLayoutData::FindBorderStyle(nsTableFrame* aTableFrame,
|
||||
nsStyleMolecule* aCellStyle,
|
||||
nsStyleSpacing* nsCellLayoutData::FindBorderStyle(nsTableFrame* aTableFrame,
|
||||
nsIStyleContext* aCellStyle,
|
||||
nsVoidArray* aList,
|
||||
PRUint8 aEdge)
|
||||
{
|
||||
nsStyleMolecule* style = nsnull;
|
||||
nsStyleSpacing* style = nsnull;
|
||||
|
||||
if (aList && aList->Count() == 0)
|
||||
style = FindOuterBorder(aTableFrame,mCellFrame,aCellStyle,aEdge);
|
||||
|
@ -469,14 +481,14 @@ nsStyleMolecule* nsCellLayoutData::FindBorderStyle(nsTableFrame* aTableFrame,
|
|||
style = FindInnerBorder(aCellStyle,aList, aEdge);
|
||||
|
||||
if (!style)
|
||||
style = aCellStyle;
|
||||
style = (nsStyleSpacing*)aCellStyle->GetData(kStyleSpacingSID);
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
|
||||
void nsCellLayoutData::CalculateBorders(nsTableFrame* aTableFrame,
|
||||
nsStyleMolecule* aCellStyle,
|
||||
nsIStyleContext* aCellStyle,
|
||||
nsVoidArray* aBoundaryCells[4])
|
||||
{
|
||||
|
||||
|
@ -502,12 +514,12 @@ nscoord nsCellLayoutData::FindLargestMargin(nsVoidArray* aList,PRUint8 aEdge)
|
|||
count = aList->Count();
|
||||
if (count)
|
||||
{
|
||||
nsStyleMolecule* style = nsnull;
|
||||
nsIStyleContextPtr style;
|
||||
|
||||
nscoord value = 0;
|
||||
while (index < count)
|
||||
{
|
||||
style = GetStyleMoleculeAt(aList,index++);
|
||||
style = GetStyleContextAt(aList,index++);
|
||||
value = GetMargin(style,aEdge);
|
||||
if (value > result)
|
||||
result = value;
|
||||
|
@ -520,12 +532,13 @@ nscoord nsCellLayoutData::FindLargestMargin(nsVoidArray* aList,PRUint8 aEdge)
|
|||
|
||||
|
||||
void nsCellLayoutData::CalculateMargins(nsTableFrame* aTableFrame,
|
||||
nsStyleMolecule* aCellStyle,
|
||||
nsIStyleContext* aCellStyle,
|
||||
nsVoidArray* aBoundaryCells[4])
|
||||
{
|
||||
// By default the margin is just the margin found in the
|
||||
// table cells style
|
||||
mMargin = aCellStyle->margin;
|
||||
nsStyleSpacing* spacing = (nsStyleSpacing*)aCellStyle->GetData(kStyleSpacingSID);
|
||||
mMargin = spacing->mMargin;
|
||||
|
||||
// Left and Top Margins are collapsed with their neightbors
|
||||
// Right and Bottom Margins are simple left as they are
|
||||
|
@ -553,9 +566,9 @@ void nsCellLayoutData::RecalcLayoutData(nsTableFrame* aTableFrame,
|
|||
nsVoidArray* aBoundaryCells[4])
|
||||
|
||||
{
|
||||
nsStyleMolecule* cellStyle;
|
||||
nsIStyleContextPtr cellStyle;
|
||||
|
||||
mCellFrame->GetStyleData(kStyleMoleculeSID, (nsStyleStruct*&)cellStyle);
|
||||
mCellFrame->GetStyleContext(nsnull, cellStyle.AssignRef());
|
||||
|
||||
CalculateBorders(aTableFrame,cellStyle,aBoundaryCells);
|
||||
CalculateMargins(aTableFrame,cellStyle,aBoundaryCells);
|
||||
|
@ -586,10 +599,10 @@ void nsCellLayoutData::List(FILE* out, PRInt32 aIndent) const
|
|||
|
||||
nscoord top,left,bottom,right;
|
||||
|
||||
top = (mBorderStyle[NS_SIDE_TOP] ? mBorderStyle[NS_SIDE_TOP]->border.top : 0);
|
||||
left = (mBorderStyle[NS_SIDE_LEFT] ? mBorderStyle[NS_SIDE_LEFT]->border.left : 0);
|
||||
bottom = (mBorderStyle[NS_SIDE_BOTTOM] ? mBorderStyle[NS_SIDE_BOTTOM]->border.bottom : 0);
|
||||
right = (mBorderStyle[NS_SIDE_RIGHT] ? mBorderStyle[NS_SIDE_RIGHT]->border.right : 0);
|
||||
top = (mBorderStyle[NS_SIDE_TOP] ? mBorderStyle[NS_SIDE_TOP]->mBorder.top : 0);
|
||||
left = (mBorderStyle[NS_SIDE_LEFT] ? mBorderStyle[NS_SIDE_LEFT]->mBorder.left : 0);
|
||||
bottom = (mBorderStyle[NS_SIDE_BOTTOM] ? mBorderStyle[NS_SIDE_BOTTOM]->mBorder.bottom : 0);
|
||||
right = (mBorderStyle[NS_SIDE_RIGHT] ? mBorderStyle[NS_SIDE_RIGHT]->mBorder.right : 0);
|
||||
|
||||
|
||||
fprintf(out,"Border -- Top: %d Left: %d Bottom: %d Right: %d \n",
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
|
||||
class nsColLayoutData;
|
||||
class nsTableFrame;
|
||||
|
||||
class nsIStyleContext;
|
||||
struct nsStyleSpacing;
|
||||
|
||||
|
||||
/** Simple data class that represents in-process reflow information about a cell.
|
||||
|
@ -76,56 +77,56 @@ public:
|
|||
/** debug method outputs data about this cell to FILE *out */
|
||||
void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
|
||||
|
||||
/** returns the style molecule associated with this cell */
|
||||
nsStyleMolecule* GetStyleMolecule();
|
||||
/** returns the style context associated with this cell */
|
||||
nsIStyleContext* GetStyleContext();
|
||||
|
||||
private:
|
||||
|
||||
// All these methods are support methods for RecalcLayoutData
|
||||
nsStyleMolecule* GetStyleMoleculeAt(nsVoidArray* aList, PRInt32 aIndex);
|
||||
nsIStyleContext* GetStyleContextAt(nsVoidArray* aList, PRInt32 aIndex);
|
||||
|
||||
nscoord GetMargin(nsStyleMolecule* aStyle,PRUint8 aEdge);
|
||||
nscoord GetMargin(nsIStyleContext* aStyle,PRUint8 aEdge);
|
||||
|
||||
nscoord GetBorderWidth(nsStyleMolecule* aStyle,PRUint8 aEdge);
|
||||
nscoord GetBorderWidth(nsIStyleContext* aStyle,PRUint8 aEdge);
|
||||
|
||||
nscoord GetPadding(nsStyleMolecule* aStyle,PRUint8 aEdge);
|
||||
nscoord GetPadding(nsIStyleContext* aStyle,PRUint8 aEdge);
|
||||
|
||||
PRUint8 GetOpposingEdge(PRUint8 aEdge);
|
||||
|
||||
nsStyleMolecule* CompareCellBorders(nsStyleMolecule* aStyle1,
|
||||
nsIStyleContext* CompareCellBorders(nsIStyleContext* aStyle1,
|
||||
PRUint8 aEdge1,
|
||||
nsStyleMolecule* aStyle2,
|
||||
nsIStyleContext* aStyle2,
|
||||
PRUint8 aEdge2);
|
||||
|
||||
|
||||
nsStyleMolecule* FindHighestPrecedentBorder(nsVoidArray* aList,
|
||||
nsIStyleContext* FindHighestPrecedentBorder(nsVoidArray* aList,
|
||||
PRUint8 aEdge);
|
||||
|
||||
|
||||
|
||||
nsStyleMolecule* FindInnerBorder( nsStyleMolecule* aStyle,
|
||||
nsStyleSpacing* FindInnerBorder( nsIStyleContext* aStyle,
|
||||
nsVoidArray* aList,
|
||||
PRUint8 aEdge);
|
||||
|
||||
nsStyleMolecule* FindOuterBorder( nsTableFrame* aTableFrame,
|
||||
nsStyleSpacing* FindOuterBorder( nsTableFrame* aTableFrame,
|
||||
nsIFrame* aFrame,
|
||||
nsStyleMolecule* aStyle,
|
||||
nsIStyleContext* aStyle,
|
||||
PRUint8 aEdge);
|
||||
|
||||
nsStyleMolecule* FindBorderStyle(nsTableFrame* aTableFrame,
|
||||
nsStyleMolecule* aCellStyle,
|
||||
nsStyleSpacing* FindBorderStyle(nsTableFrame* aTableFrame,
|
||||
nsIStyleContext* aCellStyle,
|
||||
nsVoidArray* aCellList,
|
||||
PRUint8 aEdge);
|
||||
|
||||
void CalculateBorders(nsTableFrame* aTableFrame,
|
||||
nsStyleMolecule* aCellStyle,
|
||||
nsIStyleContext* aCellStyle,
|
||||
nsVoidArray* aBoundaryCells[4]);
|
||||
|
||||
nscoord FindLargestMargin(nsVoidArray* aList,PRUint8 aEdge);
|
||||
|
||||
|
||||
void CalculateMargins(nsTableFrame* aTableFrame,
|
||||
nsStyleMolecule* aCellStyle,
|
||||
nsIStyleContext* aCellStyle,
|
||||
nsVoidArray* aBoundaryCells[4]);
|
||||
|
||||
public:
|
||||
|
@ -148,7 +149,7 @@ private:
|
|||
nsSize mMaxElementSize;
|
||||
|
||||
nsMargin mMargin;
|
||||
nsStyleMolecule* mBorderStyle[4];
|
||||
nsStyleSpacing* mBorderStyle[4];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -34,6 +34,7 @@ static const PRBool gsDebug = PR_FALSE;
|
|||
#endif
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
/**
|
||||
|
@ -98,18 +99,18 @@ NS_METHOD nsTableCaptionFrame::Paint(nsIPresContext& aPresContext,
|
|||
nsIRenderingContext& aRenderingContext,
|
||||
const nsRect& aDirtyRect)
|
||||
{
|
||||
nsStyleMolecule* myMol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* myBorder =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
nsStyleColor* myColor =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
NS_ASSERTION(nsnull!=myColor, "bad style color");
|
||||
NS_ASSERTION(nsnull!=myMol, "bad style molecule");
|
||||
if (nsnull==myMol) return NS_OK;
|
||||
NS_ASSERTION(nsnull!=myBorder, "bad style border");
|
||||
if (nsnull==myBorder) return NS_OK;
|
||||
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myColor);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myMol, 0);
|
||||
aDirtyRect, mRect, *myBorder, 0);
|
||||
|
||||
|
||||
// for debug...
|
||||
|
|
|
@ -36,6 +36,7 @@ static const PRBool gsDebug = PR_FALSE;
|
|||
#endif
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
/**
|
||||
|
@ -57,15 +58,15 @@ NS_METHOD nsTableCellFrame::Paint(nsIPresContext& aPresContext,
|
|||
{
|
||||
nsStyleColor* myColor =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* myMol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* myBorder =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
NS_ASSERTION(nsnull!=myColor, "bad style color");
|
||||
NS_ASSERTION(nsnull!=myMol, "bad style molecule");
|
||||
NS_ASSERTION(nsnull!=myBorder, "bad style border");
|
||||
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myColor);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myMol, 0);
|
||||
aDirtyRect, mRect, *myBorder, 0);
|
||||
|
||||
|
||||
// for debug...
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "nsCellLayoutData.h"
|
||||
#include "nsVoidArray.h"
|
||||
#include "prinrval.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -56,8 +57,15 @@ static const PRBool gsDebugMBP = PR_FALSE;
|
|||
#endif
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
NS_DEF_PTR(nsTableContent);
|
||||
NS_DEF_PTR(nsTableCol);
|
||||
NS_DEF_PTR(nsTableCell);
|
||||
|
||||
/* ----------- InnerTableReflowState ---------- */
|
||||
|
||||
struct InnerTableReflowState {
|
||||
|
@ -395,16 +403,16 @@ NS_METHOD nsTableFrame::Paint(nsIPresContext& aPresContext,
|
|||
// table paint code is concerned primarily with borders and bg color
|
||||
nsStyleColor* myColor =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* myMol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* myBorder =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
NS_ASSERTION(nsnull != myColor, "null style color");
|
||||
NS_ASSERTION(nsnull != myMol, "null style molecule");
|
||||
if (nsnull!=myMol)
|
||||
NS_ASSERTION(nsnull != myBorder, "null style border");
|
||||
if (nsnull!=myBorder)
|
||||
{
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myColor);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myMol, 0);
|
||||
aDirtyRect, mRect, *myBorder, 0);
|
||||
}
|
||||
|
||||
// for debug...
|
||||
|
@ -568,7 +576,7 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
* TBody, in order
|
||||
*/
|
||||
for (;;) {
|
||||
nsIContent* kid = c->ChildAt(kidIndex); // kid: REFCNT++
|
||||
nsIContentPtr kid = c->ChildAt(kidIndex); // kid: REFCNT++
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
|
@ -576,11 +584,11 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
|
||||
mLastContentIsComplete = PR_TRUE;
|
||||
|
||||
const PRInt32 contentType = ((nsTableContent *)kid)->GetType();
|
||||
const PRInt32 contentType = ((nsTableContent *)(nsIContent*)kid)->GetType();
|
||||
if (contentType==nsITableContent::kTableRowGroupType)
|
||||
{
|
||||
// Resolve style
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
NS_ASSERTION(nsnull != kidStyleContext, "null style context for kid");
|
||||
nsStyleMolecule* kidStyle =
|
||||
|
@ -605,7 +613,6 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
NS_RELEASE(kidDel);
|
||||
kidFrame->SetStyleContext(kidStyleContext);
|
||||
}
|
||||
NS_RELEASE(kidStyleContext);
|
||||
|
||||
nsSize maxKidElementSize;
|
||||
result = ReflowChild(kidFrame, aPresContext, kidSize, availSize, pKidMaxSize);
|
||||
|
@ -653,7 +660,6 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
// If the child didn't finish layout then it means that it used
|
||||
// up all of our available space (or needs us to split).
|
||||
mLastContentIsComplete = PR_FALSE;
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -663,10 +669,8 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
// If the child didn't finish layout then it means that it used
|
||||
// up all of our available space (or needs us to split).
|
||||
mLastContentIsComplete = PR_FALSE;
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
}
|
||||
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
@ -910,19 +914,17 @@ PRBool nsTableFrame::ReflowMappedChildren( nsIPresContext* aPresContext,
|
|||
nsIFrame::ReflowStatus status;
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
if (((nsTableContent *)kid)->GetType() == nsITableContent::kTableRowGroupType)
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
if (((nsTableContent *)(nsIContent*)kid)->GetType() == nsITableContent::kTableRowGroupType)
|
||||
{ // skip children that are not row groups
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidMol);
|
||||
nscoord bottomMargin = kidMol->margin.bottom;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Figure out the amount of available size for the child (subtract
|
||||
// off the top margin we are going to apply to it)
|
||||
|
@ -1315,7 +1317,7 @@ nsTableFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
|
@ -1324,12 +1326,11 @@ nsTableFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
// Make sure we still have room left
|
||||
if (aState.availSize.height <= 0) {
|
||||
// Note: return status was set to frNotComplete above...
|
||||
NS_RELEASE(kid);
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the child
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
|
||||
// Figure out how we should treat the child
|
||||
|
@ -1347,8 +1348,6 @@ nsTableFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
} else {
|
||||
kidPrevInFlow->CreateContinuingFrame(aPresContext, this, kidFrame);
|
||||
}
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidStyleContext);
|
||||
|
||||
// Try to reflow the child into the available space. It might not
|
||||
// fit or might need continuing.
|
||||
|
@ -1551,7 +1550,7 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
nsVoidArray *columnLayoutData = GetColumnLayoutData();
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
NS_ASSERTION(nsnull != colData, "bad column data");
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
NS_ASSERTION(nsnull != col, "bad col");
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -1580,8 +1579,8 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
// SEC: TODO -- when we have a style system, set the mol for the col
|
||||
nsCellLayoutData * data = (nsCellLayoutData *)(cells->ElementAt(0));
|
||||
nsTableCellFrame *cellFrame = data->GetCellFrame();
|
||||
nsTableCell *cell;
|
||||
cellFrame->GetContent((nsIContent*&)cell); // cell: REFCNT++
|
||||
nsTableCellPtr cell;
|
||||
cellFrame->GetContent((nsIContent*&)(cell.AssignRef())); // cell: REFCNT++
|
||||
nsStyleMolecule* cellStyle = (nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
NS_ASSERTION(nsnull != cellStyle, "bad style for cell.");
|
||||
// SEC: this is the code to replace
|
||||
|
@ -1590,7 +1589,6 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
if (-1!=cellStyle->proportionalWidth)
|
||||
colStyle->proportionalWidth = cellStyle->proportionalWidth;
|
||||
// SEC: end code to replace
|
||||
NS_RELEASE(cell); // cell: REFCNT--
|
||||
}
|
||||
if (-1!=colStyle->fixedWidth)
|
||||
{ // this col has fixed width, so set the cell's width
|
||||
|
@ -1641,7 +1639,6 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
if (gsDebug==PR_TRUE)
|
||||
printf (" after this col, minTableWidth = %d and maxTableWidth = %d\n", aMinTableWidth, aMaxTableWidth);
|
||||
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
} // end Step 1 for fixed-width columns
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
@ -1722,7 +1719,7 @@ PRBool nsTableFrame::SetColumnsToMinWidth(nsIPresContext* aPresContext)
|
|||
for (PRInt32 colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsVoidArray *cells = colData->GetCells();
|
||||
|
@ -1763,7 +1760,6 @@ PRBool nsTableFrame::SetColumnsToMinWidth(nsIPresContext* aPresContext)
|
|||
printf (" 2: col %d, set to width = %d\n", colIndex, mColumnWidths[colIndex]);
|
||||
}
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1780,7 +1776,7 @@ PRBool nsTableFrame::BalanceColumnsTableFits(nsIPresContext* aPresContext,
|
|||
for (PRInt32 colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsVoidArray *cells = colData->GetCells();
|
||||
|
@ -1856,7 +1852,6 @@ PRBool nsTableFrame::BalanceColumnsTableFits(nsIPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1877,7 +1872,7 @@ PRBool nsTableFrame::BalanceColumnsHTML4Constrained(nsIPresContext* aPresContext
|
|||
for (PRInt32 colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsVoidArray *cells = colData->GetCells();
|
||||
|
@ -1957,7 +1952,6 @@ PRBool nsTableFrame::BalanceColumnsHTML4Constrained(nsIPresContext* aPresContext
|
|||
}
|
||||
}
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
|
||||
// post-process if necessary
|
||||
|
@ -2033,9 +2027,9 @@ void nsTableFrame::ShrinkWrapChildren(nsIPresContext* aPresContext,
|
|||
|
||||
ChildAt(i, kidFrame); // frames are not ref counted
|
||||
NS_ASSERTION(nsnull != kidFrame, "bad kid frame");
|
||||
nsTableContent* kid;
|
||||
nsTableContentPtr kid;
|
||||
|
||||
kidFrame->GetContent((nsIContent*&)kid); // kid: REFCNT++
|
||||
kidFrame->GetContent((nsIContent*&)(kid.AssignRef())); // kid: REFCNT++
|
||||
NS_ASSERTION(nsnull != kid, "bad kid");
|
||||
if (kid->GetType() == nsITableContent::kTableRowGroupType)
|
||||
{
|
||||
|
@ -2209,7 +2203,6 @@ void nsTableFrame::ShrinkWrapChildren(nsIPresContext* aPresContext,
|
|||
rowGroupFrame->SizeTo(rowGroupFrameSize.width, rowGroupHeight);
|
||||
tableHeight += rowGroupHeight;
|
||||
}
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
}
|
||||
if (0!=tableHeight)
|
||||
{
|
||||
|
@ -2293,7 +2286,7 @@ PRBool nsTableFrame::SetCellLayoutData(nsCellLayoutData * aData, nsTableCell *aC
|
|||
PRInt32 tableKidCount = tablePart->ChildCount();
|
||||
for (PRInt32 i=0; i<tableKidCount; i++)
|
||||
{
|
||||
nsTableContent *tableKid = (nsTableContent *)tablePart->ChildAt(i);
|
||||
nsTableContentPtr tableKid = (nsTableContent *)tablePart->ChildAt(i);
|
||||
NS_ASSERTION(nsnull != tableKid, "bad kid");
|
||||
const int contentType = tableKid->GetType();
|
||||
if (contentType == nsITableContent::kTableColGroupType)
|
||||
|
@ -2301,20 +2294,17 @@ PRBool nsTableFrame::SetCellLayoutData(nsCellLayoutData * aData, nsTableCell *aC
|
|||
PRInt32 colsInGroup = tableKid->ChildCount();
|
||||
for (PRInt32 j=0; j<colsInGroup; j++)
|
||||
{
|
||||
nsTableCol *col = (nsTableCol *)tableKid->ChildAt(j);
|
||||
nsTableColPtr col = (nsTableCol *)tableKid->ChildAt(j);
|
||||
NS_ASSERTION(nsnull != col, "bad content");
|
||||
nsColLayoutData *colData = new nsColLayoutData(col);
|
||||
mColumnLayoutData->AppendElement((void *)colData);
|
||||
NS_RELEASE(col); // col: REFCNT--
|
||||
}
|
||||
}
|
||||
// can't have col groups after row groups, so stop if you find a row group
|
||||
else if (contentType == nsITableContent::kTableRowGroupType)
|
||||
{
|
||||
NS_RELEASE(tableKid); // tableKid: REFCNT--
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(tableKid); // tableKid: REFCNT--
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2388,16 +2378,14 @@ nsCellLayoutData * nsTableFrame::GetCellLayoutData(nsTableCell *aCell)
|
|||
for (PRInt32 i=0; i<count; i++)
|
||||
{
|
||||
nsCellLayoutData * data = (nsCellLayoutData *)(cells->ElementAt(i));
|
||||
nsTableCell *cell;
|
||||
nsTableCellPtr cell;
|
||||
|
||||
data->GetCellFrame()->GetContent((nsIContent*&)cell); // cell: REFCNT++
|
||||
data->GetCellFrame()->GetContent((nsIContent*&)(cell.AssignRef())); // cell: REFCNT++
|
||||
if (cell == aCell)
|
||||
{
|
||||
result = data;
|
||||
NS_RELEASE(cell); // cell: REFCNT--
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(cell); // cell: REFCNT--
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2542,7 +2530,7 @@ nsresult nsTableFrame::NewFrame(nsIFrame** aInstancePtrResult,
|
|||
for (colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
if (PR_TRUE==IsProportionalWidth(colStyle))
|
||||
|
@ -2552,7 +2540,6 @@ nsresult nsTableFrame::NewFrame(nsIFrame** aInstancePtrResult,
|
|||
mColumnWidths[colIndex] += additionalSpace;
|
||||
additionalSpaceAdded += additionalSpace;
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
if (spaceUsed+additionalSpaceAdded < aMaxTableWidth)
|
||||
mColumnWidths[numCols-1] += (aMaxTableWidth - (spaceUsed+additionalSpaceAdded));
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "nsCSSLayout.h"
|
||||
#include "nsVoidArray.h"
|
||||
#include "nsReflowCommand.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
static PRBool gsDebug = PR_FALSE;
|
||||
|
@ -45,6 +46,9 @@ static const PRBool gsDebug = PR_FALSE;
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kITableContentIID, NS_ITABLECONTENT_IID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct OuterTableReflowState {
|
||||
|
||||
// The presentation context
|
||||
|
@ -231,13 +235,12 @@ NS_METHOD nsTableOuterFrame::ResizeReflow(nsIPresContext* aPresContext,
|
|||
&innerTableMaxElementSize, tableStyleMol);
|
||||
|
||||
#ifdef NOISY_MARGINS
|
||||
nsIContent* content = mInnerTableFrame->GetContent();
|
||||
nsIContentPtr content = mInnerTableFrame->GetContent();
|
||||
nsTablePart *table = (nsTablePart*)content;
|
||||
if (table != nsnull)
|
||||
table->DumpCellMap();
|
||||
mInnerTableFrame->ResetColumnLayoutData();
|
||||
mInnerTableFrame->ListColumnLayoutData(stdout,1);
|
||||
NS_IF_RELEASE(content);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -455,13 +458,12 @@ PRBool nsTableOuterFrame::ReflowMappedChildren( nsIPresContext* aPresContex
|
|||
kidFrame, aState.processingCaption?"caption":"inner");
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidMol);
|
||||
nscoord bottomMargin = kidMol->margin.bottom;
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Figure out the amount of available size for the child (subtract
|
||||
// off the top margin we are going to apply to it)
|
||||
|
@ -835,9 +837,9 @@ PRBool nsTableOuterFrame::PullUpChildren( nsIPresContext* aPresContext,
|
|||
*/
|
||||
void nsTableOuterFrame::SetReflowState(OuterTableReflowState& aState, nsIFrame* aKidFrame)
|
||||
{
|
||||
nsIContent *kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
aKidFrame->GetContent(kid); // kid: REFCNT++
|
||||
aKidFrame->GetContent(kid.AssignRef()); // kid: REFCNT++
|
||||
nsITableContent *tableContentInterface = nsnull;
|
||||
kid->QueryInterface(kITableContentIID, (void**)&tableContentInterface);// tableContentInterface: REFCNT++
|
||||
if (nsnull!=tableContentInterface)
|
||||
|
@ -847,7 +849,6 @@ void nsTableOuterFrame::SetReflowState(OuterTableReflowState& aState, nsIFrame*
|
|||
}
|
||||
else
|
||||
aState.processingCaption = PR_FALSE;
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -870,9 +871,9 @@ nsTableOuterFrame::ReflowChild( nsIFrame* aKidFrame,
|
|||
if (PR_TRUE==aState.processingCaption)
|
||||
{ // it's a caption, find out if it's top or bottom
|
||||
// Resolve style
|
||||
nsIStyleContext* captionStyleContext;
|
||||
nsIStyleContextPtr captionStyleContext;
|
||||
|
||||
aKidFrame->GetStyleContext(aPresContext, captionStyleContext);
|
||||
aKidFrame->GetStyleContext(aPresContext, captionStyleContext.AssignRef());
|
||||
NS_ASSERTION(nsnull != captionStyleContext, "null style context for caption");
|
||||
nsStyleMolecule* captionStyle =
|
||||
(nsStyleMolecule*)captionStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -915,7 +916,7 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
if (NS_OK!=frameCreated)
|
||||
return; // SEC: an error!!!!
|
||||
// Resolve style
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(mContent, this);
|
||||
NS_ASSERTION(nsnull!=kidStyleContext, "bad style context for kid.");
|
||||
mInnerTableFrame->SetStyleContext(kidStyleContext);
|
||||
|
@ -930,11 +931,11 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
// create caption frames as needed
|
||||
nsIFrame *lastTopCaption = nsnull;
|
||||
for (PRInt32 kidIndex=0; /* nada */ ;kidIndex++) {
|
||||
nsIContent* caption = mContent->ChildAt(kidIndex); // caption: REFCNT++
|
||||
nsIContentPtr caption = mContent->ChildAt(kidIndex); // caption: REFCNT++
|
||||
if (nsnull == caption) {
|
||||
break;
|
||||
}
|
||||
const PRInt32 contentType = ((nsTableContent *)caption)->GetType();
|
||||
const PRInt32 contentType = ((nsTableContent *)(nsIContent*)caption)->GetType();
|
||||
if (contentType==nsITableContent::kTableCaptionType)
|
||||
{
|
||||
nsIFrame *captionFrame=nsnull;
|
||||
|
@ -942,7 +943,7 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
if (NS_OK!=frameCreated)
|
||||
return; // SEC: an error!!!!
|
||||
// Resolve style
|
||||
nsIStyleContext* captionStyleContext =
|
||||
nsIStyleContextPtr captionStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(caption, this);
|
||||
NS_ASSERTION(nsnull!=captionStyleContext, "bad style context for caption.");
|
||||
nsStyleMolecule* captionStyle =
|
||||
|
@ -976,11 +977,9 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
lastTopCaption = captionFrame;
|
||||
}
|
||||
mCaptionFrames->AppendElement(captionFrame);
|
||||
NS_RELEASE(caption); // caption: REFCNT--
|
||||
}
|
||||
else
|
||||
{
|
||||
NS_RELEASE(caption); // caption: REFCNT--
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1030,9 +1029,9 @@ nsTableOuterFrame::ResizeReflowTopCaptionsPass2(nsIPresContext* aPresContext,
|
|||
nsTableCaptionFrame *captionFrame = (nsTableCaptionFrame *)mCaptionFrames->ElementAt(captionIndex);
|
||||
|
||||
// Resolve style
|
||||
nsIStyleContext* captionStyleContext;
|
||||
nsIStyleContextPtr captionStyleContext;
|
||||
|
||||
captionFrame->GetStyleContext(aPresContext, captionStyleContext);
|
||||
captionFrame->GetStyleContext(aPresContext, captionStyleContext.AssignRef());
|
||||
NS_ASSERTION(nsnull != captionStyleContext, "null style context for caption");
|
||||
nsStyleMolecule* captionStyle =
|
||||
(nsStyleMolecule*)captionStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -1099,7 +1098,7 @@ nsTableOuterFrame::ResizeReflowBottomCaptionsPass2(nsIPresContext* aPresContext
|
|||
|
||||
// Resolve style
|
||||
/*
|
||||
nsIStyleContext* captionStyleContext = captionFrame->GetStyleContext(aPresContext);
|
||||
nsIStyleContextPtr captionStyleContext = captionFrame->GetStyleContext(aPresContext);
|
||||
NS_ASSERTION(nsnull != captionStyleContext, "null style context for caption");
|
||||
nsStyleMolecule* captionStyle =
|
||||
(nsStyleMolecule*)captionStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -1216,10 +1215,9 @@ void nsTableOuterFrame::PrepareContinuingFrame(nsIPresContext* aPresContext,
|
|||
|
||||
// Resolve style for the continuing frame and set its style context.
|
||||
// XXX presumptive
|
||||
nsIStyleContext* styleContext =
|
||||
nsIStyleContextPtr styleContext =
|
||||
aPresContext->ResolveStyleContextFor(mContent, aParent);
|
||||
aContFrame->SetStyleContext(styleContext);
|
||||
NS_RELEASE(styleContext);
|
||||
}
|
||||
|
||||
NS_METHOD nsTableOuterFrame::VerifyTree() const
|
||||
|
@ -1336,10 +1334,9 @@ void nsTableOuterFrame::CreateInnerTableFrame(nsIPresContext* aPresContext)
|
|||
mChildCount++;
|
||||
|
||||
// Resolve style and set the style context
|
||||
nsIStyleContext* styleContext =
|
||||
nsIStyleContextPtr styleContext =
|
||||
aPresContext->ResolveStyleContextFor(mContent, this);
|
||||
mInnerTableFrame->SetStyleContext(styleContext);
|
||||
NS_RELEASE(styleContext);
|
||||
} else {
|
||||
nsTableOuterFrame* prevOuterTable = (nsTableOuterFrame*)mPrevInFlow;
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "nsIContent.h"
|
||||
#include "nsIContentDelegate.h"
|
||||
#include "nsIView.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
static PRBool gsDebug1 = PR_FALSE;
|
||||
|
@ -38,6 +39,9 @@ static const PRBool gsDebug2 = PR_FALSE;
|
|||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
/* ----------- RowGroupReflowState ---------- */
|
||||
|
||||
struct RowGroupReflowState {
|
||||
|
@ -264,17 +268,15 @@ PRBool nsTableRowGroupFrame::ReflowMappedChildren( nsIPresContext* aPresCon
|
|||
nsIFrame::ReflowStatus status;
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC;
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidMol);
|
||||
nscoord bottomMargin = kidMol->margin.bottom;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Figure out the amount of available size for the child (subtract
|
||||
// off the top margin we are going to apply to it)
|
||||
|
@ -698,7 +700,7 @@ nsTableRowGroupFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
|
@ -707,12 +709,11 @@ nsTableRowGroupFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
// Make sure we still have room left
|
||||
if (aState.availSize.height <= 0) {
|
||||
// Note: return status was set to frNotComplete above...
|
||||
NS_RELEASE(kid);
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol =
|
||||
(nsStyleMolecule*)kidStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -731,8 +732,6 @@ nsTableRowGroupFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
} else {
|
||||
kidPrevInFlow->CreateContinuingFrame(aPresContext, this, kidFrame);
|
||||
}
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidStyleContext);
|
||||
|
||||
// Try to reflow the child into the available space. It might not
|
||||
// fit or might need continuing.
|
||||
|
|
|
@ -36,6 +36,7 @@ static const PRBool gsDebug = PR_FALSE;
|
|||
#endif
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
/**
|
||||
|
@ -57,15 +58,15 @@ NS_METHOD nsTableCellFrame::Paint(nsIPresContext& aPresContext,
|
|||
{
|
||||
nsStyleColor* myColor =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* myMol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* myBorder =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
NS_ASSERTION(nsnull!=myColor, "bad style color");
|
||||
NS_ASSERTION(nsnull!=myMol, "bad style molecule");
|
||||
NS_ASSERTION(nsnull!=myBorder, "bad style border");
|
||||
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myColor);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myMol, 0);
|
||||
aDirtyRect, mRect, *myBorder, 0);
|
||||
|
||||
|
||||
// for debug...
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "nsCellLayoutData.h"
|
||||
#include "nsVoidArray.h"
|
||||
#include "prinrval.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
|
@ -56,8 +57,15 @@ static const PRBool gsDebugMBP = PR_FALSE;
|
|||
#endif
|
||||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kStyleBorderSID, NS_STYLEBORDER_SID);
|
||||
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
NS_DEF_PTR(nsTableContent);
|
||||
NS_DEF_PTR(nsTableCol);
|
||||
NS_DEF_PTR(nsTableCell);
|
||||
|
||||
/* ----------- InnerTableReflowState ---------- */
|
||||
|
||||
struct InnerTableReflowState {
|
||||
|
@ -395,16 +403,16 @@ NS_METHOD nsTableFrame::Paint(nsIPresContext& aPresContext,
|
|||
// table paint code is concerned primarily with borders and bg color
|
||||
nsStyleColor* myColor =
|
||||
(nsStyleColor*)mStyleContext->GetData(kStyleColorSID);
|
||||
nsStyleMolecule* myMol =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsStyleBorder* myBorder =
|
||||
(nsStyleBorder*)mStyleContext->GetData(kStyleBorderSID);
|
||||
NS_ASSERTION(nsnull != myColor, "null style color");
|
||||
NS_ASSERTION(nsnull != myMol, "null style molecule");
|
||||
if (nsnull!=myMol)
|
||||
NS_ASSERTION(nsnull != myBorder, "null style border");
|
||||
if (nsnull!=myBorder)
|
||||
{
|
||||
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myColor);
|
||||
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
|
||||
aDirtyRect, mRect, *myMol, 0);
|
||||
aDirtyRect, mRect, *myBorder, 0);
|
||||
}
|
||||
|
||||
// for debug...
|
||||
|
@ -568,7 +576,7 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
* TBody, in order
|
||||
*/
|
||||
for (;;) {
|
||||
nsIContent* kid = c->ChildAt(kidIndex); // kid: REFCNT++
|
||||
nsIContentPtr kid = c->ChildAt(kidIndex); // kid: REFCNT++
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
|
@ -576,11 +584,11 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
|
||||
mLastContentIsComplete = PR_TRUE;
|
||||
|
||||
const PRInt32 contentType = ((nsTableContent *)kid)->GetType();
|
||||
const PRInt32 contentType = ((nsTableContent *)(nsIContent*)kid)->GetType();
|
||||
if (contentType==nsITableContent::kTableRowGroupType)
|
||||
{
|
||||
// Resolve style
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
NS_ASSERTION(nsnull != kidStyleContext, "null style context for kid");
|
||||
nsStyleMolecule* kidStyle =
|
||||
|
@ -605,7 +613,6 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
NS_RELEASE(kidDel);
|
||||
kidFrame->SetStyleContext(kidStyleContext);
|
||||
}
|
||||
NS_RELEASE(kidStyleContext);
|
||||
|
||||
nsSize maxKidElementSize;
|
||||
result = ReflowChild(kidFrame, aPresContext, kidSize, availSize, pKidMaxSize);
|
||||
|
@ -653,7 +660,6 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
// If the child didn't finish layout then it means that it used
|
||||
// up all of our available space (or needs us to split).
|
||||
mLastContentIsComplete = PR_FALSE;
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -663,10 +669,8 @@ nsIFrame::ReflowStatus nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresCont
|
|||
// If the child didn't finish layout then it means that it used
|
||||
// up all of our available space (or needs us to split).
|
||||
mLastContentIsComplete = PR_FALSE;
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
}
|
||||
|
||||
if (nsnull != prevKidFrame) {
|
||||
|
@ -910,19 +914,17 @@ PRBool nsTableFrame::ReflowMappedChildren( nsIPresContext* aPresContext,
|
|||
nsIFrame::ReflowStatus status;
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
if (((nsTableContent *)kid)->GetType() == nsITableContent::kTableRowGroupType)
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
if (((nsTableContent *)(nsIContent*)kid)->GetType() == nsITableContent::kTableRowGroupType)
|
||||
{ // skip children that are not row groups
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidMol);
|
||||
nscoord bottomMargin = kidMol->margin.bottom;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Figure out the amount of available size for the child (subtract
|
||||
// off the top margin we are going to apply to it)
|
||||
|
@ -1315,7 +1317,7 @@ nsTableFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
LastChild(prevKidFrame);
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
|
@ -1324,12 +1326,11 @@ nsTableFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
// Make sure we still have room left
|
||||
if (aState.availSize.height <= 0) {
|
||||
// Note: return status was set to frNotComplete above...
|
||||
NS_RELEASE(kid);
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style for the child
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
|
||||
// Figure out how we should treat the child
|
||||
|
@ -1347,8 +1348,6 @@ nsTableFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
} else {
|
||||
kidPrevInFlow->CreateContinuingFrame(aPresContext, this, kidFrame);
|
||||
}
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidStyleContext);
|
||||
|
||||
// Try to reflow the child into the available space. It might not
|
||||
// fit or might need continuing.
|
||||
|
@ -1551,7 +1550,7 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
nsVoidArray *columnLayoutData = GetColumnLayoutData();
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
NS_ASSERTION(nsnull != colData, "bad column data");
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
NS_ASSERTION(nsnull != col, "bad col");
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -1580,8 +1579,8 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
// SEC: TODO -- when we have a style system, set the mol for the col
|
||||
nsCellLayoutData * data = (nsCellLayoutData *)(cells->ElementAt(0));
|
||||
nsTableCellFrame *cellFrame = data->GetCellFrame();
|
||||
nsTableCell *cell;
|
||||
cellFrame->GetContent((nsIContent*&)cell); // cell: REFCNT++
|
||||
nsTableCellPtr cell;
|
||||
cellFrame->GetContent((nsIContent*&)(cell.AssignRef())); // cell: REFCNT++
|
||||
nsStyleMolecule* cellStyle = (nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
NS_ASSERTION(nsnull != cellStyle, "bad style for cell.");
|
||||
// SEC: this is the code to replace
|
||||
|
@ -1590,7 +1589,6 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
if (-1!=cellStyle->proportionalWidth)
|
||||
colStyle->proportionalWidth = cellStyle->proportionalWidth;
|
||||
// SEC: end code to replace
|
||||
NS_RELEASE(cell); // cell: REFCNT--
|
||||
}
|
||||
if (-1!=colStyle->fixedWidth)
|
||||
{ // this col has fixed width, so set the cell's width
|
||||
|
@ -1641,7 +1639,6 @@ PRBool nsTableFrame::AssignFixedColumnWidths(nsIPresContext* aPresContext, PRInt
|
|||
if (gsDebug==PR_TRUE)
|
||||
printf (" after this col, minTableWidth = %d and maxTableWidth = %d\n", aMinTableWidth, aMaxTableWidth);
|
||||
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
} // end Step 1 for fixed-width columns
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
@ -1722,7 +1719,7 @@ PRBool nsTableFrame::SetColumnsToMinWidth(nsIPresContext* aPresContext)
|
|||
for (PRInt32 colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsVoidArray *cells = colData->GetCells();
|
||||
|
@ -1763,7 +1760,6 @@ PRBool nsTableFrame::SetColumnsToMinWidth(nsIPresContext* aPresContext)
|
|||
printf (" 2: col %d, set to width = %d\n", colIndex, mColumnWidths[colIndex]);
|
||||
}
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1780,7 +1776,7 @@ PRBool nsTableFrame::BalanceColumnsTableFits(nsIPresContext* aPresContext,
|
|||
for (PRInt32 colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsVoidArray *cells = colData->GetCells();
|
||||
|
@ -1856,7 +1852,6 @@ PRBool nsTableFrame::BalanceColumnsTableFits(nsIPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1877,7 +1872,7 @@ PRBool nsTableFrame::BalanceColumnsHTML4Constrained(nsIPresContext* aPresContext
|
|||
for (PRInt32 colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
nsVoidArray *cells = colData->GetCells();
|
||||
|
@ -1957,7 +1952,6 @@ PRBool nsTableFrame::BalanceColumnsHTML4Constrained(nsIPresContext* aPresContext
|
|||
}
|
||||
}
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
|
||||
// post-process if necessary
|
||||
|
@ -2033,9 +2027,9 @@ void nsTableFrame::ShrinkWrapChildren(nsIPresContext* aPresContext,
|
|||
|
||||
ChildAt(i, kidFrame); // frames are not ref counted
|
||||
NS_ASSERTION(nsnull != kidFrame, "bad kid frame");
|
||||
nsTableContent* kid;
|
||||
nsTableContentPtr kid;
|
||||
|
||||
kidFrame->GetContent((nsIContent*&)kid); // kid: REFCNT++
|
||||
kidFrame->GetContent((nsIContent*&)(kid.AssignRef())); // kid: REFCNT++
|
||||
NS_ASSERTION(nsnull != kid, "bad kid");
|
||||
if (kid->GetType() == nsITableContent::kTableRowGroupType)
|
||||
{
|
||||
|
@ -2209,7 +2203,6 @@ void nsTableFrame::ShrinkWrapChildren(nsIPresContext* aPresContext,
|
|||
rowGroupFrame->SizeTo(rowGroupFrameSize.width, rowGroupHeight);
|
||||
tableHeight += rowGroupHeight;
|
||||
}
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
}
|
||||
if (0!=tableHeight)
|
||||
{
|
||||
|
@ -2293,7 +2286,7 @@ PRBool nsTableFrame::SetCellLayoutData(nsCellLayoutData * aData, nsTableCell *aC
|
|||
PRInt32 tableKidCount = tablePart->ChildCount();
|
||||
for (PRInt32 i=0; i<tableKidCount; i++)
|
||||
{
|
||||
nsTableContent *tableKid = (nsTableContent *)tablePart->ChildAt(i);
|
||||
nsTableContentPtr tableKid = (nsTableContent *)tablePart->ChildAt(i);
|
||||
NS_ASSERTION(nsnull != tableKid, "bad kid");
|
||||
const int contentType = tableKid->GetType();
|
||||
if (contentType == nsITableContent::kTableColGroupType)
|
||||
|
@ -2301,20 +2294,17 @@ PRBool nsTableFrame::SetCellLayoutData(nsCellLayoutData * aData, nsTableCell *aC
|
|||
PRInt32 colsInGroup = tableKid->ChildCount();
|
||||
for (PRInt32 j=0; j<colsInGroup; j++)
|
||||
{
|
||||
nsTableCol *col = (nsTableCol *)tableKid->ChildAt(j);
|
||||
nsTableColPtr col = (nsTableCol *)tableKid->ChildAt(j);
|
||||
NS_ASSERTION(nsnull != col, "bad content");
|
||||
nsColLayoutData *colData = new nsColLayoutData(col);
|
||||
mColumnLayoutData->AppendElement((void *)colData);
|
||||
NS_RELEASE(col); // col: REFCNT--
|
||||
}
|
||||
}
|
||||
// can't have col groups after row groups, so stop if you find a row group
|
||||
else if (contentType == nsITableContent::kTableRowGroupType)
|
||||
{
|
||||
NS_RELEASE(tableKid); // tableKid: REFCNT--
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(tableKid); // tableKid: REFCNT--
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2388,16 +2378,14 @@ nsCellLayoutData * nsTableFrame::GetCellLayoutData(nsTableCell *aCell)
|
|||
for (PRInt32 i=0; i<count; i++)
|
||||
{
|
||||
nsCellLayoutData * data = (nsCellLayoutData *)(cells->ElementAt(i));
|
||||
nsTableCell *cell;
|
||||
nsTableCellPtr cell;
|
||||
|
||||
data->GetCellFrame()->GetContent((nsIContent*&)cell); // cell: REFCNT++
|
||||
data->GetCellFrame()->GetContent((nsIContent*&)(cell.AssignRef())); // cell: REFCNT++
|
||||
if (cell == aCell)
|
||||
{
|
||||
result = data;
|
||||
NS_RELEASE(cell); // cell: REFCNT--
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(cell); // cell: REFCNT--
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2542,7 +2530,7 @@ nsresult nsTableFrame::NewFrame(nsIFrame** aInstancePtrResult,
|
|||
for (colIndex = 0; colIndex<numCols; colIndex++)
|
||||
{
|
||||
nsColLayoutData * colData = (nsColLayoutData *)(columnLayoutData->ElementAt(colIndex));
|
||||
nsTableCol *col = colData->GetCol(); // col: ADDREF++
|
||||
nsTableColPtr col = colData->GetCol(); // col: ADDREF++
|
||||
nsStyleMolecule* colStyle =
|
||||
(nsStyleMolecule*)mStyleContext->GetData(kStyleMoleculeSID);
|
||||
if (PR_TRUE==IsProportionalWidth(colStyle))
|
||||
|
@ -2552,7 +2540,6 @@ nsresult nsTableFrame::NewFrame(nsIFrame** aInstancePtrResult,
|
|||
mColumnWidths[colIndex] += additionalSpace;
|
||||
additionalSpaceAdded += additionalSpace;
|
||||
}
|
||||
NS_IF_RELEASE(col); // col: ADDREF--
|
||||
}
|
||||
if (spaceUsed+additionalSpaceAdded < aMaxTableWidth)
|
||||
mColumnWidths[numCols-1] += (aMaxTableWidth - (spaceUsed+additionalSpaceAdded));
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "nsCSSLayout.h"
|
||||
#include "nsVoidArray.h"
|
||||
#include "nsReflowCommand.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
static PRBool gsDebug = PR_FALSE;
|
||||
|
@ -45,6 +46,9 @@ static const PRBool gsDebug = PR_FALSE;
|
|||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
static NS_DEFINE_IID(kITableContentIID, NS_ITABLECONTENT_IID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
struct OuterTableReflowState {
|
||||
|
||||
// The presentation context
|
||||
|
@ -231,13 +235,12 @@ NS_METHOD nsTableOuterFrame::ResizeReflow(nsIPresContext* aPresContext,
|
|||
&innerTableMaxElementSize, tableStyleMol);
|
||||
|
||||
#ifdef NOISY_MARGINS
|
||||
nsIContent* content = mInnerTableFrame->GetContent();
|
||||
nsIContentPtr content = mInnerTableFrame->GetContent();
|
||||
nsTablePart *table = (nsTablePart*)content;
|
||||
if (table != nsnull)
|
||||
table->DumpCellMap();
|
||||
mInnerTableFrame->ResetColumnLayoutData();
|
||||
mInnerTableFrame->ListColumnLayoutData(stdout,1);
|
||||
NS_IF_RELEASE(content);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -455,13 +458,12 @@ PRBool nsTableOuterFrame::ReflowMappedChildren( nsIPresContext* aPresContex
|
|||
kidFrame, aState.processingCaption?"caption":"inner");
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIStyleContext* kidSC;
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidMol);
|
||||
nscoord bottomMargin = kidMol->margin.bottom;
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Figure out the amount of available size for the child (subtract
|
||||
// off the top margin we are going to apply to it)
|
||||
|
@ -835,9 +837,9 @@ PRBool nsTableOuterFrame::PullUpChildren( nsIPresContext* aPresContext,
|
|||
*/
|
||||
void nsTableOuterFrame::SetReflowState(OuterTableReflowState& aState, nsIFrame* aKidFrame)
|
||||
{
|
||||
nsIContent *kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
aKidFrame->GetContent(kid); // kid: REFCNT++
|
||||
aKidFrame->GetContent(kid.AssignRef()); // kid: REFCNT++
|
||||
nsITableContent *tableContentInterface = nsnull;
|
||||
kid->QueryInterface(kITableContentIID, (void**)&tableContentInterface);// tableContentInterface: REFCNT++
|
||||
if (nsnull!=tableContentInterface)
|
||||
|
@ -847,7 +849,6 @@ void nsTableOuterFrame::SetReflowState(OuterTableReflowState& aState, nsIFrame*
|
|||
}
|
||||
else
|
||||
aState.processingCaption = PR_FALSE;
|
||||
NS_RELEASE(kid); // kid: REFCNT--
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -870,9 +871,9 @@ nsTableOuterFrame::ReflowChild( nsIFrame* aKidFrame,
|
|||
if (PR_TRUE==aState.processingCaption)
|
||||
{ // it's a caption, find out if it's top or bottom
|
||||
// Resolve style
|
||||
nsIStyleContext* captionStyleContext;
|
||||
nsIStyleContextPtr captionStyleContext;
|
||||
|
||||
aKidFrame->GetStyleContext(aPresContext, captionStyleContext);
|
||||
aKidFrame->GetStyleContext(aPresContext, captionStyleContext.AssignRef());
|
||||
NS_ASSERTION(nsnull != captionStyleContext, "null style context for caption");
|
||||
nsStyleMolecule* captionStyle =
|
||||
(nsStyleMolecule*)captionStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -915,7 +916,7 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
if (NS_OK!=frameCreated)
|
||||
return; // SEC: an error!!!!
|
||||
// Resolve style
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(mContent, this);
|
||||
NS_ASSERTION(nsnull!=kidStyleContext, "bad style context for kid.");
|
||||
mInnerTableFrame->SetStyleContext(kidStyleContext);
|
||||
|
@ -930,11 +931,11 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
// create caption frames as needed
|
||||
nsIFrame *lastTopCaption = nsnull;
|
||||
for (PRInt32 kidIndex=0; /* nada */ ;kidIndex++) {
|
||||
nsIContent* caption = mContent->ChildAt(kidIndex); // caption: REFCNT++
|
||||
nsIContentPtr caption = mContent->ChildAt(kidIndex); // caption: REFCNT++
|
||||
if (nsnull == caption) {
|
||||
break;
|
||||
}
|
||||
const PRInt32 contentType = ((nsTableContent *)caption)->GetType();
|
||||
const PRInt32 contentType = ((nsTableContent *)(nsIContent*)caption)->GetType();
|
||||
if (contentType==nsITableContent::kTableCaptionType)
|
||||
{
|
||||
nsIFrame *captionFrame=nsnull;
|
||||
|
@ -942,7 +943,7 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
if (NS_OK!=frameCreated)
|
||||
return; // SEC: an error!!!!
|
||||
// Resolve style
|
||||
nsIStyleContext* captionStyleContext =
|
||||
nsIStyleContextPtr captionStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(caption, this);
|
||||
NS_ASSERTION(nsnull!=captionStyleContext, "bad style context for caption.");
|
||||
nsStyleMolecule* captionStyle =
|
||||
|
@ -976,11 +977,9 @@ void nsTableOuterFrame::CreateChildFrames(nsIPresContext* aPresContext)
|
|||
lastTopCaption = captionFrame;
|
||||
}
|
||||
mCaptionFrames->AppendElement(captionFrame);
|
||||
NS_RELEASE(caption); // caption: REFCNT--
|
||||
}
|
||||
else
|
||||
{
|
||||
NS_RELEASE(caption); // caption: REFCNT--
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1030,9 +1029,9 @@ nsTableOuterFrame::ResizeReflowTopCaptionsPass2(nsIPresContext* aPresContext,
|
|||
nsTableCaptionFrame *captionFrame = (nsTableCaptionFrame *)mCaptionFrames->ElementAt(captionIndex);
|
||||
|
||||
// Resolve style
|
||||
nsIStyleContext* captionStyleContext;
|
||||
nsIStyleContextPtr captionStyleContext;
|
||||
|
||||
captionFrame->GetStyleContext(aPresContext, captionStyleContext);
|
||||
captionFrame->GetStyleContext(aPresContext, captionStyleContext.AssignRef());
|
||||
NS_ASSERTION(nsnull != captionStyleContext, "null style context for caption");
|
||||
nsStyleMolecule* captionStyle =
|
||||
(nsStyleMolecule*)captionStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -1099,7 +1098,7 @@ nsTableOuterFrame::ResizeReflowBottomCaptionsPass2(nsIPresContext* aPresContext
|
|||
|
||||
// Resolve style
|
||||
/*
|
||||
nsIStyleContext* captionStyleContext = captionFrame->GetStyleContext(aPresContext);
|
||||
nsIStyleContextPtr captionStyleContext = captionFrame->GetStyleContext(aPresContext);
|
||||
NS_ASSERTION(nsnull != captionStyleContext, "null style context for caption");
|
||||
nsStyleMolecule* captionStyle =
|
||||
(nsStyleMolecule*)captionStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -1216,10 +1215,9 @@ void nsTableOuterFrame::PrepareContinuingFrame(nsIPresContext* aPresContext,
|
|||
|
||||
// Resolve style for the continuing frame and set its style context.
|
||||
// XXX presumptive
|
||||
nsIStyleContext* styleContext =
|
||||
nsIStyleContextPtr styleContext =
|
||||
aPresContext->ResolveStyleContextFor(mContent, aParent);
|
||||
aContFrame->SetStyleContext(styleContext);
|
||||
NS_RELEASE(styleContext);
|
||||
}
|
||||
|
||||
NS_METHOD nsTableOuterFrame::VerifyTree() const
|
||||
|
@ -1336,10 +1334,9 @@ void nsTableOuterFrame::CreateInnerTableFrame(nsIPresContext* aPresContext)
|
|||
mChildCount++;
|
||||
|
||||
// Resolve style and set the style context
|
||||
nsIStyleContext* styleContext =
|
||||
nsIStyleContextPtr styleContext =
|
||||
aPresContext->ResolveStyleContextFor(mContent, this);
|
||||
mInnerTableFrame->SetStyleContext(styleContext);
|
||||
NS_RELEASE(styleContext);
|
||||
} else {
|
||||
nsTableOuterFrame* prevOuterTable = (nsTableOuterFrame*)mPrevInFlow;
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "nsIContent.h"
|
||||
#include "nsIContentDelegate.h"
|
||||
#include "nsIView.h"
|
||||
#include "nsIPtr.h"
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
static PRBool gsDebug1 = PR_FALSE;
|
||||
|
@ -38,6 +39,9 @@ static const PRBool gsDebug2 = PR_FALSE;
|
|||
|
||||
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
|
||||
|
||||
NS_DEF_PTR(nsIStyleContext);
|
||||
NS_DEF_PTR(nsIContent);
|
||||
|
||||
/* ----------- RowGroupReflowState ---------- */
|
||||
|
||||
struct RowGroupReflowState {
|
||||
|
@ -264,17 +268,15 @@ PRBool nsTableRowGroupFrame::ReflowMappedChildren( nsIPresContext* aPresCon
|
|||
nsIFrame::ReflowStatus status;
|
||||
|
||||
// Get top margin for this kid
|
||||
nsIContent* kid;
|
||||
nsIContentPtr kid;
|
||||
|
||||
kidFrame->GetContent(kid);
|
||||
nsIStyleContext* kidSC;
|
||||
kidFrame->GetContent(kid.AssignRef());
|
||||
nsIStyleContextPtr kidSC;
|
||||
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC);
|
||||
kidFrame->GetStyleContext(aPresContext, kidSC.AssignRef());
|
||||
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
|
||||
nscoord topMargin = GetTopMarginFor(aPresContext, aState, kidMol);
|
||||
nscoord bottomMargin = kidMol->margin.bottom;
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidSC);
|
||||
|
||||
// Figure out the amount of available size for the child (subtract
|
||||
// off the top margin we are going to apply to it)
|
||||
|
@ -698,7 +700,7 @@ nsTableRowGroupFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
|
||||
for (;;) {
|
||||
// Get the next content object
|
||||
nsIContent* kid = mContent->ChildAt(kidIndex);
|
||||
nsIContentPtr kid = mContent->ChildAt(kidIndex);
|
||||
if (nsnull == kid) {
|
||||
result = frComplete;
|
||||
break;
|
||||
|
@ -707,12 +709,11 @@ nsTableRowGroupFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
// Make sure we still have room left
|
||||
if (aState.availSize.height <= 0) {
|
||||
// Note: return status was set to frNotComplete above...
|
||||
NS_RELEASE(kid);
|
||||
break;
|
||||
}
|
||||
|
||||
// Resolve style
|
||||
nsIStyleContext* kidStyleContext =
|
||||
nsIStyleContextPtr kidStyleContext =
|
||||
aPresContext->ResolveStyleContextFor(kid, this);
|
||||
nsStyleMolecule* kidMol =
|
||||
(nsStyleMolecule*)kidStyleContext->GetData(kStyleMoleculeSID);
|
||||
|
@ -731,8 +732,6 @@ nsTableRowGroupFrame::ReflowUnmappedChildren(nsIPresContext* aPresContext,
|
|||
} else {
|
||||
kidPrevInFlow->CreateContinuingFrame(aPresContext, this, kidFrame);
|
||||
}
|
||||
NS_RELEASE(kid);
|
||||
NS_RELEASE(kidStyleContext);
|
||||
|
||||
// Try to reflow the child into the available space. It might not
|
||||
// fit or might need continuing.
|
||||
|
|
Загрузка…
Ссылка в новой задаче