Ignore:
Timestamp:
Sep 17, 2013, 8:13:37 AM (12 years ago)
Author:
Antti Koivisto
Message:

RenderBR should not be RenderText
https://bugs.webkit.org/show_bug.cgi?id=121221

Reviewed by Darin Adler.

Source/WebCore:

Stop inheriting RenderBR from RenderText and make it be a RenderBoxModelObject instead. RenderBR was one
of the few cases where Element renderer was a RenderText. This will enable future cleanups.

RenderBR used little of RenderText mechanisms and was already heavily specialized everywhere. Layout code
didn't care about its text content at all. The new RenderText is also significatly more lightweight
than the old. As a line box it uses plain InlineBox instead of InlineTextBox.

The patch tries to avoid changing test results though there are a few changed render tree dumps without
visual effect. There are also two rendering progressions.

  • accessibility/AccessibilityRenderObject.cpp:

(WebCore::AccessibilityRenderObject::textUnderElement):
(WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):

  • dom/ContainerNode.cpp:

(WebCore::ContainerNode::getUpperLeftCorner):

  • dom/Document.cpp:

(WebCore::Document::updateHoverActiveState):

  • dom/Position.cpp:

(WebCore::hasInlineBoxWrapper):
(WebCore::nextRenderedEditable):
(WebCore::previousRenderedEditable):
(WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
(WebCore::Position::getInlineBoxAndOffset):

  • dom/Range.cpp:

(WebCore::Range::textRects):
(WebCore::Range::textQuads):

  • editing/ApplyStyleCommand.cpp:

(WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):

  • editing/Editor.cpp:

(WebCore::findFirstMarkable):

  • editing/TextIterator.cpp:

(WebCore::ignoresContainerClip):

  • editing/VisibleUnits.cpp:

(WebCore::CachedLogicallyOrderedLeafBoxes::previousTextOrLineBreakBox):
(WebCore::CachedLogicallyOrderedLeafBoxes::nextTextOrLineBreakBox):
(WebCore::logicallyPreviousBox):
(WebCore::logicallyNextBox):
(WebCore::wordBreakIteratorForMinOffsetBoundary):
(WebCore::wordBreakIteratorForMaxOffsetBoundary):

  • rendering/InlineBox.cpp:

(WebCore::InlineBox::logicalHeight):
(WebCore::InlineBox::baselinePosition):
(WebCore::InlineBox::lineHeight):
(WebCore::InlineBox::deleteLine):
(WebCore::InlineBox::extractLine):
(WebCore::InlineBox::attachLine):
(WebCore::InlineBox::paint):

  • rendering/InlineBox.h:

(WebCore::InlineBox::isLineBreak):

  • rendering/InlineFlowBox.cpp:

(WebCore::InlineFlowBox::computeOverflow):

  • rendering/InlineIterator.h:

(WebCore::isIteratorTarget):

  • rendering/InlineTextBox.cpp:

(WebCore::InlineTextBox::lineHeight):
(WebCore::InlineTextBox::isLineBreak):

  • rendering/RenderBR.cpp:

(WebCore::RenderBR::RenderBR):
(WebCore::RenderBR::~RenderBR):
(WebCore::RenderBR::createAnonymous):
(WebCore::RenderBR::lineHeight):
(WebCore::RenderBR::baselinePosition):
(WebCore::RenderBR::createInlineBox):
(WebCore::RenderBR::setInlineBoxWrapper):
(WebCore::RenderBR::replaceInlineBoxWrapper):
(WebCore::RenderBR::deleteInlineBoxWrapper):
(WebCore::RenderBR::dirtyLineBoxes):
(WebCore::RenderBR::caretMinOffset):
(WebCore::RenderBR::caretMaxOffset):
(WebCore::RenderBR::canBeSelectionLeaf):
(WebCore::RenderBR::setSelectionState):
(WebCore::RenderBR::localCaretRect):
(WebCore::RenderBR::linesBoundingBox):
(WebCore::RenderBR::absoluteRects):
(WebCore::RenderBR::absoluteQuads):
(WebCore::RenderBR::updateFromStyle):
(WebCore::RenderBR::borderBoundingBox):

  • rendering/RenderBR.h:

(WebCore::toRenderBR):

  • rendering/RenderBlock.cpp:

(WebCore::InlineMinMaxIterator::next):
(WebCore::RenderBlock::updateFirstLetter):

  • rendering/RenderBlockLineLayout.cpp:

(WebCore::createInlineBoxForRenderer):
(WebCore::dirtyLineBoxesForRenderer):
(WebCore::reachedEndOfTextRenderer):
(WebCore::RenderBlock::computeBlockDirectionPositionsForLine):
(WebCore::RenderBlockFlow::layoutInlineChildren):
(WebCore::requiresLineBox):
(WebCore::shouldSkipWhitespaceAfterStartObject):
(WebCore::canBreakAtThisPosition):

  • rendering/RenderInline.cpp:

(WebCore::RenderInline::generateCulledLineBoxRects):
(WebCore::RenderInline::culledInlineFirstLineBox):
(WebCore::RenderInline::culledInlineLastLineBox):
(WebCore::RenderInline::dirtyLineBoxes):

  • rendering/RenderLineBoxList.cpp:

(WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

  • rendering/RenderMenuList.cpp:

(WebCore::RenderMenuList::RenderMenuList):
(WebCore::RenderMenuList::styleDidChange):
(WebCore::RenderMenuList::setText):
(WebCore::RenderMenuList::text):

  • rendering/RenderMenuList.h:
  • rendering/RenderObject.h:

(WebCore::RenderObject::isBeforeContent):
(WebCore::RenderObject::isAfterContent):

  • rendering/RenderObjectChildList.cpp:

(WebCore::RenderObjectChildList::removeChildNode):

  • rendering/RenderText.cpp:

(WebCore::RenderText::removeAndDestroyTextBoxes):
(WebCore::RenderText::computePreferredLogicalWidths):
(WebCore::RenderText::setTextInternal):

  • rendering/RenderTreeAsText.cpp:

(WebCore::RenderTreeAsText::writeRenderObject):

  • rendering/RootInlineBox.cpp:

(WebCore::RootInlineBox::ascentAndDescentForBox):
(WebCore::RootInlineBox::verticalPositionForBox):

LayoutTests:

  • editing/selection/move-by-word-visually-mac-expected.txt:


This is a progression. A previously failing subtest passes.

  • platform/mac/css3/selectors3/html/css3-modsel-179a-expected.txt:
  • platform/mac/css3/selectors3/xhtml/css3-modsel-179a-expected.txt:
  • platform/mac/css3/selectors3/xml/css3-modsel-179a-expected.txt:


Changes in render tree dump that don't affect rendering.

  • platform/mac/fast/css/pseudo-first-line-border-width-expected.txt:


This is a progression. The new rendering matches Firefox.

  • platform/mac/fast/css/word-space-extra-expected.txt:
  • platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.txt:


Changes in render tree dump that don't affect rendering.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/editing/ApplyStyleCommand.cpp

    r155211 r155957  
    10211021    if (node->renderer()->isText() && static_cast<RenderText*>(node->renderer())->isAllCollapsibleWhitespace())
    10221022        return;
     1023    if (node->renderer()->isBR() && !node->renderer()->style()->preserveNewline())
     1024        return;
    10231025
    10241026    // We can't wrap node with the styled element here because new styled element will never be removed if we did.
Note: See TracChangeset for help on using the changeset viewer.