Changeset 180944 in webkit


Ignore:
Timestamp:
Mar 3, 2015 11:13:13 AM (9 years ago)
Author:
mmaxfield@apple.com
Message:

BreakingContext cleanup
https://bugs.webkit.org/show_bug.cgi?id=142146

Reviewed by Dean Jackson.

  1. Use commitLineBreakAtCurrentWidth() instead of directly

updating m_width and m_lineBreak, because the name makes the
intent clearer.

  1. Remove duplicate function LineBreaker::nextSegmentBreak().
  2. lineStyle() takes care of inspecting RenderText's parent's

style.

  1. Add FIXME to BreakingContext::initializeForCurrentObject()

because it seems like we are ignoring first-line style for
some properties.

No new tests because there is no behavior change.

  • rendering/line/BreakingContextInlineHeaders.h:

(WebCore::BreakingContext::BreakingContext):
(WebCore::BreakingContext::initializeForCurrentObject):
(WebCore::BreakingContext::handleReplaced):
(WebCore::BreakingContext::handleText):
(WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
(WebCore::BreakingContext::handleEndOfLine):

  • rendering/line/LineBreaker.cpp:

(WebCore::LineBreaker::nextLineBreak): Deleted.
(WebCore::LineBreaker::nextSegmentBreak): Deleted.

  • rendering/line/LineBreaker.h:
  • rendering/line/LineInlineHeaders.h:

(WebCore::lineStyle):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r180934 r180944  
     12015-03-03  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        BreakingContext cleanup
     4        https://bugs.webkit.org/show_bug.cgi?id=142146
     5
     6        Reviewed by Dean Jackson.
     7
     8        1. Use commitLineBreakAtCurrentWidth() instead of directly
     9        updating m_width and m_lineBreak, because the name makes the
     10        intent clearer.
     11        2. Remove duplicate function LineBreaker::nextSegmentBreak().
     12        3. lineStyle() takes care of inspecting RenderText's parent's
     13        style.
     14        4. Add FIXME to BreakingContext::initializeForCurrentObject()
     15        because it seems like we are ignoring first-line style for
     16        some properties.
     17
     18        No new tests because there is no behavior change.
     19
     20        * rendering/line/BreakingContextInlineHeaders.h:
     21        (WebCore::BreakingContext::BreakingContext):
     22        (WebCore::BreakingContext::initializeForCurrentObject):
     23        (WebCore::BreakingContext::handleReplaced):
     24        (WebCore::BreakingContext::handleText):
     25        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
     26        (WebCore::BreakingContext::handleEndOfLine):
     27        * rendering/line/LineBreaker.cpp:
     28        (WebCore::LineBreaker::nextLineBreak): Deleted.
     29        (WebCore::LineBreaker::nextSegmentBreak): Deleted.
     30        * rendering/line/LineBreaker.h:
     31        * rendering/line/LineInlineHeaders.h:
     32        (WebCore::lineStyle):
     33
    1342015-03-03  Chris Dumez  <cdumez@apple.com>
    235
  • trunk/Source/WebCore/rendering/line/BreakingContextInlineHeaders.h

    r179366 r180944  
    7272        , m_block(block)
    7373        , m_lastObject(m_current.renderer())
    74         , m_nextObject(0)
    75         , m_currentStyle(0)
     74        , m_nextObject(nullptr)
     75        , m_currentStyle(nullptr)
    7676        , m_blockStyle(block.style())
    7777        , m_lineInfo(inLineInfo)
     
    145145    RenderObject* m_nextObject;
    146146
    147     RenderStyle* m_currentStyle;
     147    const RenderStyle* m_currentStyle;
    148148
    149149    // Firefox and Opera will allow a table cell to grow to fit an image inside it under
     
    195195    m_hadUncommittedWidthBeforeCurrent = !!m_width.uncommittedWidth();
    196196
    197     m_currentStyle = &m_current.renderer()->style();
     197    m_currentStyle = &m_current.renderer()->style(); // FIXME: Should this be &lineStyle(*m_current.renderer(), m_lineInfo); ?
    198198
    199199    ASSERT(m_currentStyle);
     
    425425    if ((m_autoWrap || RenderStyle::autoWrap(m_lastWS)) && (!m_current.renderer()->isImage() || m_allowImagesToBreak)
    426426        && (!m_current.renderer()->isRubyRun() || downcast<RenderRubyRun>(m_current.renderer())->canBreakBefore(m_renderTextInfo.m_lineBreakIterator))) {
    427         m_width.commit();
    428         m_lineBreak.moveToStartOf(m_current.renderer());
     427        commitLineBreakAtCurrentWidth(*m_current.renderer());
    429428    }
    430429
     
    619618    }
    620619
    621     const RenderStyle& style = lineStyle(*renderText.parent(), m_lineInfo);
     620    const RenderStyle& style = lineStyle(renderText, m_lineInfo);
    622621    const FontCascade& font = style.fontCascade();
    623622    bool isFixedPitch = font.isFixedPitch();
     
    808807                if (!stoppedIgnoringSpaces && m_current.offset())
    809808                    ensureCharacterGetsLineBox(m_lineMidpointState, m_current);
    810                 m_lineBreak.moveTo(m_current.renderer(), m_current.offset(), m_current.nextBreakablePosition());
     809                commitLineBreakAtCurrentWidth(*m_current.renderer(), m_current.offset(), m_current.nextBreakablePosition());
    811810                m_lineBreak.increment();
    812811                m_lineInfo.setPreviousLineBrokeCleanly(true);
     
    815814
    816815            if (m_autoWrap && betweenWords) {
    817                 m_width.commit();
     816                commitLineBreakAtCurrentWidth(*m_current.renderer(), m_current.offset(), m_current.nextBreakablePosition());
    818817                wrapW = 0;
    819                 m_lineBreak.moveTo(m_current.renderer(), m_current.offset(), m_current.nextBreakablePosition());
    820818                // Auto-wrapping text should not wrap in the middle of a word once it has had an
    821819                // opportunity to break after a word.
     
    10121010        m_lastObject = m_current.renderer();
    10131011        if (m_lastObject->isReplaced() && m_autoWrap && !m_lastObject->isRubyRun() && (!m_lastObject->isImage() || m_allowImagesToBreak) && (!is<RenderListMarker>(*m_lastObject) || downcast<RenderListMarker>(*m_lastObject).isInside())) {
    1014             m_width.commit();
    1015             m_lineBreak.moveToStartOf(m_nextObject);
     1012            commitLineBreakAtCurrentWidth(*m_nextObject);
    10161013        }
    10171014    }
     
    10471044        if (!m_lineBreak.renderer() || !m_lineBreak.renderer()->isBR()) {
    10481045            // we just add as much as possible
    1049             if (m_blockStyle.whiteSpace() == PRE && !m_current.offset()) {
    1050                 m_lineBreak.moveTo(m_lastObject, m_lastObject->isText() ? m_lastObject->length() : 0);
    1051             } else if (m_lineBreak.renderer()) {
     1046            if (m_blockStyle.whiteSpace() == PRE && !m_current.offset())
     1047                commitLineBreakAtCurrentWidth(*m_lastObject, m_lastObject->isText() ? m_lastObject->length() : 0);
     1048            else if (m_lineBreak.renderer()) {
    10521049                // Don't ever break in the middle of a word if we can help it.
    10531050                // There's no room at all. We just have to be on this line,
    10541051                // even though we'll spill out.
    1055                 m_lineBreak.moveTo(m_current.renderer(), m_current.offset());
     1052                commitLineBreakAtCurrentWidth(*m_current.renderer(), m_current.offset());
    10561053            }
    10571054        }
  • trunk/Source/WebCore/rendering/line/LineBreaker.cpp

    r174875 r180944  
    8080InlineIterator LineBreaker::nextLineBreak(InlineBidiResolver& resolver, LineInfo& lineInfo, RenderTextInfo& renderTextInfo, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements& wordMeasurements)
    8181{
    82     return nextSegmentBreak(resolver, lineInfo, renderTextInfo, lastFloatFromPreviousLine, consecutiveHyphenatedLines, wordMeasurements);
    83 }
    84 
    85 InlineIterator LineBreaker::nextSegmentBreak(InlineBidiResolver& resolver, LineInfo& lineInfo, RenderTextInfo& renderTextInfo, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements& wordMeasurements)
    86 {
    8782    reset();
    8883
  • trunk/Source/WebCore/rendering/line/LineBreaker.h

    r178510 r180944  
    6565    void reset();
    6666
    67     InlineIterator nextSegmentBreak(InlineBidiResolver&, LineInfo&, RenderTextInfo&, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements&);
    6867    void skipTrailingWhitespace(InlineIterator&, const LineInfo&);
    6968    void skipLeadingWhitespace(InlineBidiResolver&, LineInfo&, FloatingObject* lastFloatFromPreviousLine, LineWidth&);
  • trunk/Source/WebCore/rendering/line/LineInlineHeaders.h

    r178510 r180944  
    4444}
    4545
    46 inline const RenderStyle& lineStyle(const RenderElement& renderer, const LineInfo& lineInfo)
     46inline const RenderStyle& lineStyle(const RenderObject& renderer, const LineInfo& lineInfo)
    4747{
    4848    return lineInfo.isFirstLine() ? renderer.firstLineStyle() : renderer.style();
Note: See TracChangeset for help on using the changeset viewer.