diff --git a/layout/generic/nsHTMLReflowState.cpp b/layout/generic/nsHTMLReflowState.cpp index 67505ff08ee1..89c6bc38ef20 100644 --- a/layout/generic/nsHTMLReflowState.cpp +++ b/layout/generic/nsHTMLReflowState.cpp @@ -83,23 +83,17 @@ nsHTMLReflowState::GetContainingBlockContentWidth(const nsReflowState* aParentRS return width; } -// XXX there is no CLEAN way to detect the "replaced" attribute (yet) -void -nsHTMLReflowState::DetermineFrameType(nsIPresContext& aPresContext) +nsCSSFrameType +nsHTMLReflowState::DetermineFrameType(nsIFrame* aFrame) { - nsIAtom* tag = nsnull; - nsIContent* content; - if (NS_SUCCEEDED(frame->GetContent(&content)) && (nsnull != content)) { - content->GetTag(tag); - NS_RELEASE(content); - } + nsCSSFrameType frameType; - // Section 9.7 indicates that absolute position takes precedence - // over float which takes precedence over display. + // Section 9.7 of the CSS2 spec indicates that absolute position + // takes precedence over float which takes precedence over display. const nsStyleDisplay* display; - frame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display); + aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display); const nsStylePosition* pos; - frame->GetStyleData(eStyleStruct_Position, (const nsStyleStruct*&)pos); + aFrame->GetStyleData(eStyleStruct_Position, (const nsStyleStruct*&)pos); if (pos->IsAbsolutelyPositioned()) { frameType = NS_CSS_FRAME_TYPE_ABSOLUTE; } @@ -146,11 +140,12 @@ nsHTMLReflowState::DetermineFrameType(nsIPresContext& aPresContext) // See if the frame is replaced nsFrameState frameState; - frame->GetFrameState(&frameState); + aFrame->GetFrameState(&frameState); if (frameState & NS_FRAME_REPLACED_ELEMENT) { frameType = NS_FRAME_REPLACED(frameType); } - NS_IF_RELEASE(tag); + + return frameType; } // Helper function that re-calculates the left and right margin based on @@ -601,6 +596,9 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext, } } +// XXX refactor this code to have methods for each set of properties +// we are computing: width,height,line-height; margin; offsets + void nsHTMLReflowState::InitConstraints(nsIPresContext& aPresContext) { @@ -616,6 +614,7 @@ nsHTMLReflowState::InitConstraints(nsIPresContext& aPresContext) computedMargin.SizeTo(0, 0, 0, 0); computedOffsets.SizeTo(0, 0, 0, 0); + // XXX what about other properties... } else { // Get the containing block reflow state const nsHTMLReflowState* cbrs = @@ -632,22 +631,10 @@ nsHTMLReflowState::InitConstraints(nsIPresContext& aPresContext) // Compute margins from the specified margin style information. These // become the default computed values, and may be adjusted below + + // XXX fix to provide 0,0 for the top&bottom marings for + // inline-non-replaced elements ComputeMarginFor(frame, parentReflowState, computedMargin); - - // Calculate the line height. - // XXX Do we need to do this for all elements or just inline non-replaced - // elements? - mLineHeight = CalcLineHeight(aPresContext, frame); - - // See if it's an inline non-replaced element - if (NS_CSS_FRAME_TYPE_INLINE == frameType) { - // 'width' property doesn't apply to inline non-replaced elements. The - // 'height' is given by the element's 'line-height' value - if (mLineHeight >= 0) { - computedHeight = mLineHeight; - } - return; // nothing else to compute - } // Get the containing block width and height. We'll need them when // calculating the computed width and height. For all elements other diff --git a/layout/html/base/src/nsHTMLReflowState.cpp b/layout/html/base/src/nsHTMLReflowState.cpp index 67505ff08ee1..89c6bc38ef20 100644 --- a/layout/html/base/src/nsHTMLReflowState.cpp +++ b/layout/html/base/src/nsHTMLReflowState.cpp @@ -83,23 +83,17 @@ nsHTMLReflowState::GetContainingBlockContentWidth(const nsReflowState* aParentRS return width; } -// XXX there is no CLEAN way to detect the "replaced" attribute (yet) -void -nsHTMLReflowState::DetermineFrameType(nsIPresContext& aPresContext) +nsCSSFrameType +nsHTMLReflowState::DetermineFrameType(nsIFrame* aFrame) { - nsIAtom* tag = nsnull; - nsIContent* content; - if (NS_SUCCEEDED(frame->GetContent(&content)) && (nsnull != content)) { - content->GetTag(tag); - NS_RELEASE(content); - } + nsCSSFrameType frameType; - // Section 9.7 indicates that absolute position takes precedence - // over float which takes precedence over display. + // Section 9.7 of the CSS2 spec indicates that absolute position + // takes precedence over float which takes precedence over display. const nsStyleDisplay* display; - frame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display); + aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display); const nsStylePosition* pos; - frame->GetStyleData(eStyleStruct_Position, (const nsStyleStruct*&)pos); + aFrame->GetStyleData(eStyleStruct_Position, (const nsStyleStruct*&)pos); if (pos->IsAbsolutelyPositioned()) { frameType = NS_CSS_FRAME_TYPE_ABSOLUTE; } @@ -146,11 +140,12 @@ nsHTMLReflowState::DetermineFrameType(nsIPresContext& aPresContext) // See if the frame is replaced nsFrameState frameState; - frame->GetFrameState(&frameState); + aFrame->GetFrameState(&frameState); if (frameState & NS_FRAME_REPLACED_ELEMENT) { frameType = NS_FRAME_REPLACED(frameType); } - NS_IF_RELEASE(tag); + + return frameType; } // Helper function that re-calculates the left and right margin based on @@ -601,6 +596,9 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext, } } +// XXX refactor this code to have methods for each set of properties +// we are computing: width,height,line-height; margin; offsets + void nsHTMLReflowState::InitConstraints(nsIPresContext& aPresContext) { @@ -616,6 +614,7 @@ nsHTMLReflowState::InitConstraints(nsIPresContext& aPresContext) computedMargin.SizeTo(0, 0, 0, 0); computedOffsets.SizeTo(0, 0, 0, 0); + // XXX what about other properties... } else { // Get the containing block reflow state const nsHTMLReflowState* cbrs = @@ -632,22 +631,10 @@ nsHTMLReflowState::InitConstraints(nsIPresContext& aPresContext) // Compute margins from the specified margin style information. These // become the default computed values, and may be adjusted below + + // XXX fix to provide 0,0 for the top&bottom marings for + // inline-non-replaced elements ComputeMarginFor(frame, parentReflowState, computedMargin); - - // Calculate the line height. - // XXX Do we need to do this for all elements or just inline non-replaced - // elements? - mLineHeight = CalcLineHeight(aPresContext, frame); - - // See if it's an inline non-replaced element - if (NS_CSS_FRAME_TYPE_INLINE == frameType) { - // 'width' property doesn't apply to inline non-replaced elements. The - // 'height' is given by the element's 'line-height' value - if (mLineHeight >= 0) { - computedHeight = mLineHeight; - } - return; // nothing else to compute - } // Get the containing block width and height. We'll need them when // calculating the computed width and height. For all elements other