Ignore:
Timestamp:
Sep 28, 2013, 11:30:16 AM (12 years ago)
Author:
Antti Koivisto
Message:

Clean up code for getting first line style
https://bugs.webkit.org/show_bug.cgi?id=122037

Reviewed by Andreas Kling.

We have confusing RenderObject::style(bool firstLine). Get rid of it in favour of
just using RenderObject::firstLineStyle() where appropriate.

Also switch to RenderStyle references in many places and move first line style caching
code down to RenderElement.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/rendering/RenderInline.cpp

    r156527 r156608  
    225225    if (!alwaysCreateLineBoxes && checkFonts && document().styleSheetCollection().usesFirstLineRules()) {
    226226        // Have to check the first line style as well.
    227         parentStyle = parent()->style(true);
    228         RenderStyle* childStyle = style(true);
     227        parentStyle = parent()->firstLineStyle();
     228        RenderStyle* childStyle = firstLineStyle();
    229229        alwaysCreateLineBoxes = !parentStyle->font().fontMetrics().hasIdenticalAscentDescentAndLineGap(childStyle->font().fontMetrics())
    230         || childStyle->verticalAlign() != BASELINE
    231         || parentStyle->lineHeight() != childStyle->lineHeight();
     230            || childStyle->verticalAlign() != BASELINE
     231            || parentStyle->lineHeight() != childStyle->lineHeight();
    232232    }
    233233
     
    571571            if (currBox->inlineBoxWrapper()) {
    572572                const RootInlineBox& rootBox = currBox->inlineBoxWrapper()->root();
    573                 int logicalTop = rootBox.logicalTop() + (rootBox.renderer().style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent());
    574                 int logicalHeight = container->style(rootBox.isFirstLineStyle())->font().fontMetrics().height();
     573                const RenderStyle& containerStyle = rootBox.isFirstLine() ? *container->firstLineStyle() : *container->style();
     574                int logicalTop = rootBox.logicalTop() + (rootBox.lineStyle().font().fontMetrics().ascent() - containerStyle.font().fontMetrics().ascent());
     575                int logicalHeight = containerStyle.font().fontMetrics().height();
    575576                if (isHorizontal)
    576577                    yield(FloatRect(currBox->inlineBoxWrapper()->x() - currBox->marginLeft(), logicalTop, currBox->width() + currBox->marginWidth(), logicalHeight));
     
    586587                for (InlineFlowBox* childLine = currInline->firstLineBox(); childLine; childLine = childLine->nextLineBox()) {
    587588                    const RootInlineBox& rootBox = childLine->root();
    588                     int logicalTop = rootBox.logicalTop() + (rootBox.renderer().style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent());
    589                     int logicalHeight = container->style(rootBox.isFirstLineStyle())->font().fontMetrics().height();
     589                    const RenderStyle& containerStyle = rootBox.isFirstLine() ? *container->firstLineStyle() : *container->style();
     590                    int logicalTop = rootBox.logicalTop() + (rootBox.lineStyle().font().fontMetrics().ascent() - containerStyle.font().fontMetrics().ascent());
     591                    int logicalHeight = containerStyle.fontMetrics().height();
    590592                    if (isHorizontal)
    591593                        yield(FloatRect(childLine->x() - childLine->marginLogicalLeft(),
     
    604606            for (InlineTextBox* childText = currText->firstTextBox(); childText; childText = childText->nextTextBox()) {
    605607                const RootInlineBox& rootBox = childText->root();
    606                 int logicalTop = rootBox.logicalTop() + (rootBox.renderer().style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent());
    607                 int logicalHeight = container->style(rootBox.isFirstLineStyle())->font().fontMetrics().height();
     608                const RenderStyle& containerStyle = rootBox.isFirstLine() ? *container->firstLineStyle() : *container->style();
     609                int logicalTop = rootBox.logicalTop() + (rootBox.lineStyle().font().fontMetrics().ascent() - containerStyle.font().fontMetrics().ascent());
     610                int logicalHeight = containerStyle.font().fontMetrics().height();
    608611                if (isHorizontal)
    609612                    yield(FloatRect(childText->x(), logicalTop, childText->logicalWidth(), logicalHeight));
     
    615618                // FIXME: This could use a helper to share these with text path.
    616619                const RootInlineBox& rootBox = inlineBox->root();
    617                 int logicalTop = rootBox.logicalTop() + (rootBox.renderer().style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(rootBox.isFirstLineStyle())->font().fontMetrics().ascent());
    618                 int logicalHeight = container->style(rootBox.isFirstLineStyle())->font().fontMetrics().height();
     620                const RenderStyle& containerStyle = rootBox.isFirstLine() ? *container->firstLineStyle() : *container->style();
     621                int logicalTop = rootBox.logicalTop() + (rootBox.lineStyle().font().fontMetrics().ascent() - containerStyle.font().fontMetrics().ascent());
     622                int logicalHeight = containerStyle.fontMetrics().height();
    619623                if (isHorizontal)
    620624                    yield(FloatRect(inlineBox->x(), logicalTop, inlineBox->logicalWidth(), logicalHeight));
     
    13531357{
    13541358    if (firstLine && document().styleSheetCollection().usesFirstLineRules()) {
    1355         RenderStyle* s = style(firstLine);
    1356         if (s != style())
    1357             return s->computedLineHeight(&view());
     1359        const RenderStyle& firstLineStyle = *this->firstLineStyle();
     1360        if (&firstLineStyle != style())
     1361            return firstLineStyle.computedLineHeight(&view());
    13581362    }
    13591363
     
    13631367int RenderInline::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
    13641368{
    1365     const FontMetrics& fontMetrics = style(firstLine)->fontMetrics();
     1369    const RenderStyle& style = firstLine ? *firstLineStyle() : *this->style();
     1370    const FontMetrics& fontMetrics = style.fontMetrics();
    13661371    return fontMetrics.ascent(baselineType) + (lineHeight(firstLine, direction, linePositionMode) - fontMetrics.height()) / 2;
    13671372}
Note: See TracChangeset for help on using the changeset viewer.