bug 32471 - incremental reflow considers edge cellspacing when setting desired height

bug 37508 - get the row grp frame when there is a scrolling row grp


git-svn-id: svn://10.0.0.236/trunk@68719 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
karnaze%netscape.com
2000-05-08 21:39:35 +00:00
parent 132a6cb39a
commit 8b7fd0b7f0
2 changed files with 44 additions and 36 deletions

View File

@@ -2621,6 +2621,7 @@ nsTableFrame::RecoverState(InnerTableReflowState& aReflowState,
nsIFrame* aKidFrame,
nsSize* aMaxElementSize)
{
nscoord cellSpacingY = GetCellSpacingY();
// Walk the list of children looking for aKidFrame
for (nsIFrame* childFrame = mFrames.FirstChild(); childFrame; childFrame->GetNextSibling(&childFrame)) {
nsTableRowGroupFrame* rgFrame = GetRowGroupFrame(childFrame);
@@ -2636,9 +2637,13 @@ nsTableFrame::RecoverState(InnerTableReflowState& aReflowState,
!aReflowState.footerFrame && !aReflowState.firstBodySection) {
aReflowState.footerFrame = childFrame;
} else if ((NS_STYLE_DISPLAY_TABLE_ROW_GROUP == display->mDisplay) &&
!aReflowState.firstBodySection) {
aReflowState.firstBodySection = childFrame;
}
else {
if ((NS_STYLE_DISPLAY_TABLE_ROW_GROUP == display->mDisplay) &&
!aReflowState.firstBodySection) {
aReflowState.firstBodySection = childFrame;
}
aReflowState.y += cellSpacingY;
}
// See if this is the frame we're looking for
@@ -2720,7 +2725,7 @@ NS_METHOD nsTableFrame::IR_TargetIsChild(nsIPresContext* aPresContext,
FinishReflowChild(aNextFrame, aPresContext, desiredSize, x, y, 0);
// Adjust the running y-offset
aReflowState.y += desiredSize.height;
aReflowState.y += desiredSize.height + GetCellSpacingY();
// If our height is constrained, then update the available height
if (PR_FALSE == aReflowState.unconstrainedHeight) {
@@ -3457,11 +3462,10 @@ nscoord nsTableFrame::ComputeDesiredHeight(nsIPresContext* aPresContext
nsIFrame* childFrame = mFrames.FirstChild();
nsIFrame* firstRowGroupFrame = nsnull;
while (nsnull != childFrame) {
const nsStyleDisplay* childDisplay;
childFrame->GetStyleData(eStyleStruct_Display, ((const nsStyleStruct *&)childDisplay));
if (IsRowGroup(childDisplay->mDisplay)) {
if (((nsTableRowGroupFrame*)childFrame)->RowGroupReceivesExcessSpace()) {
((nsTableRowGroupFrame*)childFrame)->GetHeightOfRows(aPresContext, sumOfRowHeights);
nsTableRowGroupFrame* rgFrame = GetRowGroupFrame(childFrame);
if (rgFrame) {
if (((nsTableRowGroupFrame*)rgFrame)->RowGroupReceivesExcessSpace()) {
((nsTableRowGroupFrame*)rgFrame)->GetHeightOfRows(aPresContext, sumOfRowHeights);
}
if (!firstRowGroupFrame) {
nsMargin borderPadding = aReflowState.mComputedBorderPadding;
@@ -3474,28 +3478,28 @@ nscoord nsTableFrame::ComputeDesiredHeight(nsIPresContext* aPresContext
childFrame = mFrames.FirstChild();
while (childFrame) {
const nsStyleDisplay* childDisplay;
childFrame->GetStyleData(eStyleStruct_Display, ((const nsStyleStruct *&)childDisplay));
if (IsRowGroup(childDisplay->mDisplay)) {
if (((nsTableRowGroupFrame*)childFrame)->RowGroupReceivesExcessSpace()) {
nsTableRowGroupFrame* rgFrame = GetRowGroupFrame(childFrame);
if (rgFrame) {
if (((nsTableRowGroupFrame*)rgFrame)->RowGroupReceivesExcessSpace()) {
nscoord excessForGroup = 0;
const nsStyleTable* tableStyle;
GetStyleData(eStyleStruct_Table, (const nsStyleStruct *&)tableStyle);
DistributeSpaceToRows(aPresContext, aReflowState, childFrame, sumOfRowHeights,
DistributeSpaceToRows(aPresContext, aReflowState, rgFrame, sumOfRowHeights,
excess, excessForGroup, rowGroupYPos);
// Make sure child views are properly positioned
// XXX what happens if childFrame is a scroll frame and this gets skipped?
nsIView* view;
childFrame->GetView(aPresContext, &view);
rgFrame->GetView(aPresContext, &view);
if (view) {
nsContainerFrame::PositionFrameView(aPresContext, childFrame, view);
nsContainerFrame::PositionFrameView(aPresContext, rgFrame, view);
} else {
nsContainerFrame::PositionChildViews(aPresContext, childFrame);
nsContainerFrame::PositionChildViews(aPresContext, rgFrame);
}
}
else {
nsRect rowGroupRect;
childFrame->GetRect(rowGroupRect);
rgFrame->GetRect(rowGroupRect);
rowGroupYPos += rowGroupRect.height;
}
}