The FrameProperty representing baseline is set when a block defines
text-decorations and has vertically-aligned children, but we were
retrieving it whether the block or the vertically-aligned frame itself
defined the decorations. As a result, we "undo" the frame offset to get
the baseline from the child in that case.
We add a baseline field to nsInlineFrame and modify
nsLineLayout::BeginSpan to take a pointer to a baseline to update. This
also means that nsFirstLetterFrame no longer needs to update its own
baseline, and instead should just pass its own field along.
Make the quirks mode text-decoration + text-shadow code draw the
decorations for shadows that do not have a specified color using
the same color used for the un-shadowed decorations, which matches
standards mode behavior. (The color of unspecified-color shadows
is explicitly undefined in the specification.)
This code will (in a later patch on this bug) be used for both
quirks and standards modes.
Quirks-mode code draws text, and then all decorations. We need to instead draw
underlines, then overlines, -then- text, then line-throughs, as per CSS 2.1.
This involves refactoring nsTextFrame::PaintTextDecorations and
nsTextFrame::DrawText by merging them together, and also updating some
of their callers.
Rendering text decorations far away from the frame's baseline seems to
sometimes introduce rounding issues. This patch addresses that by
avoiding snapped-baseline weirdness and using a different argument to
nsTextFrame::PaintTextDecorations in some computations that didn't
really need to use the snapped baseline anyway.
Change the quirks mode text-decoration code (soon to be used for all
modes) to follow CSS 2.1's rules for positioning of decoration lines.
Decorations are now drawn at a constant vertical position established by
the element creating the decoration, and more than one of the same type
(underline, overline, line-through) of decoration are supported on the
same piece of text.
This means that text-decorations can now significantly overflow a text
frame, since the vertical-alignment of the element with text-decoration
may be substantially different from the vertical alignment of the text.
Set overflow areas for text frames with text decorations in
nsLineLayout::RelativePositionFrames since it must happen *after*
vertical alignment is done, and when relative positioning data are
consistent (nsIFrame::GetRelativeOffset matches the offset that has been
applied).
Change the "hypothetical box" calculations that we do for 'auto'-offset
absolutely positioned elements take its inline codepath (using
horizontal position of placeholder, and placing even with the top of the
placeholder's line) rather than its block codepath (using the horizontal
edge of the containing block, and placing below the placeholder's line)
when display types are display-outside:inline types other than
display:inline.
Specifically:
1) Only rotate print output for PostScript, not PDF.
2) Rotate in the correct direction for PostScript.
3) Set the %%Orientation comment correctly.