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.
Originally, this reftest only failed on Windows (see bug 585684).
However, upon making standards mode compliant with CSS2.1, the bug
described in 585684 spread to all platforms, indicating it was actually
a layout bug and not d2d per se. This patch makes the anonymous div
inside textareas and text inputs inline-blocks so that they ignore
decorations defined on ancestors.
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.
Font tags cause NS_STYLE_TEXT_DECORATION_LINE_OVERRIDE_ALL in quirks
mode only, so that standards mode (in which font tags don't cause the
override) can use the same codepath in the near future.
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).
This is in preparation for enabling d2d by default. A bunch of these will be
changed from random-if to fuzzy-if when bug 580786 lands. Some of them should
also be fixed or investigated more thoroughly before final.