Closed Bug 154741 Opened 22 years ago Closed 22 years ago

Multiple line text isn't displayed if it's in an inline element with an floating image

Categories

(Core :: Layout, defect, P2)

x86
Windows 2000
defect

Tracking

()

RESOLVED FIXED
mozilla1.0.1

People

(Reporter: kazhik, Assigned: karnaze)

Details

(Keywords: dataloss, regression, Whiteboard: [PATCH])

Attachments

(2 files)

if there are an floating image and multiple line text in an inline element,
and the height of the image is smaller than that of the text,
the text in the second line and after isn't displayed.

<span>
<img>Line1<br>Line2
</span>
Dump Frames is showing that the text frame for the second line has an empty
string inside it.  It doesn't seem like something of this type would be messed
up during frame construction, particularly since it depends on the size of the
float, so it seems like the problem has something to do with the code that's
breaking lines during reflow.
Severity: normal → major
The br and "Line 2" frames never get reflowed.

While reflowing the "Line 1" text frame, nsTextFrame::Reflow() sets the
NS_FRAME_TRUNCATED bit in the passed in aStatus, which triggers the following
code in nsInlineFrame::ReflowFrames() which bails without reflowing any frames
after the "Line 1" text frame:


528 karnaze  3.179 if (NS_FRAME_COMPLETE != aStatus) {
529 kipp     3.121   if (!reflowingFirstLetter || NS_INLINE_IS_BREAK(aStatus)) {
530                    done = PR_TRUE;
531                    break;
532                  }
533                }


I verified that jumping over this code in the debugger allows everything to
reflow and render.

In case anyone is wondering, here are the aReflowState and aMetrics fields that
are causing the NS_FRAME_TRUNCATED bits to be set in nsTextFrame::Reflow():


  aReflowState.mFlags.mIsTopOfPage == PR_FALSE
  aReflowState.availableHeight == 120
  aMetrics.height == 285

If I modify the html file so that it uses a non-floated image, or no image at
all, aReflowState.availableHeight is unconstrained.

According to cvs blame the NS_FRAME_SET_TRUNCATION() macro call in
nsTextFrame::Reflow() was added when the fix for floater splitting was checked
in on the TRUNK back in May:

5485 karnaze      1.369 NS_FRAME_SET_TRUNCATION(aStatus, aReflowState, aMetrics);

This bug doesn't exist on the MOZILLA_1_0_BRANCH.

Keywords: regression
taking the bug.
Assignee: attinasi → karnaze
Priority: -- → P2
Target Milestone: --- → mozilla1.0.1
Status: NEW → ASSIGNED
Whiteboard: [PATCH]
The patch uses reflow status macros instead of checking against
NS_FRAME_COMPLETE. The patch in bug 145305 made a feeble attempt at this, since
it added a new bit to check for truncation in the reflow status.
Comment on attachment 90688 [details] [diff] [review]
patch to use reflow status macros rather than NS_FRAME_COMPLETE

r= alexsavulov
Attachment #90688 - Flags: review+
Comment on attachment 90688 [details] [diff] [review]
patch to use reflow status macros rather than NS_FRAME_COMPLETE

sr=kin@netscape.com
Attachment #90688 - Flags: superreview+
Keywords: approval, dataloss
Comment on attachment 90688 [details] [diff] [review]
patch to use reflow status macros rather than NS_FRAME_COMPLETE

a=asa (on behalf of drivers) for checkin to the 1.1 trunk.
Attachment #90688 - Flags: approval+
the patch is in.
Status: ASSIGNED → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: