Changeset 83076 in webkit


Ignore:
Timestamp:
Apr 6, 2011 11:34:11 AM (13 years ago)
Author:
rniwa@webkit.org
Message:

2011-04-06 Ryosuke Niwa <rniwa@webkit.org>

Reviewed by Dimitri Glazkov.

Bundle lineLeftOffset and lineRightOffset as a class
https://bugs.webkit.org/show_bug.cgi?id=57851

Added a new class LineOffsets that encapsulates lineLeftOffset and lineRightOffset.
The patch makes clear that lineLeftOffset and lineRightOffset are never read individually
and only the difference is used to compute the width.

  • rendering/RenderBlock.h:
  • rendering/RenderBlockLineLayout.cpp: (WebCore::RenderBlock::skipLeadingWhitespace): Takes LineOffsets instead of two integers. (WebCore::LineOffsets::LineOffsets): Added. (WebCore::LineOffsets::width): Added. (WebCore::LineOffsets::setLeft): Added. (WebCore::LineOffsets::setRight): Added. (WebCore::RenderBlock::findNextLineBreak): Calls skipLeadingWhitespace and positionNewFloatOnLine. (WebCore::RenderBlock::positionNewFloatOnLine): Takes LineOffsets instead of two integers.
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r83075 r83076  
     12011-04-06  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Bundle lineLeftOffset and lineRightOffset as a class
     6        https://bugs.webkit.org/show_bug.cgi?id=57851
     7
     8        Added a new class LineOffsets that encapsulates lineLeftOffset and lineRightOffset.
     9        The patch makes clear that lineLeftOffset and lineRightOffset are never read individually
     10        and only the difference is used to compute the width.
     11
     12        * rendering/RenderBlock.h:
     13        * rendering/RenderBlockLineLayout.cpp:
     14        (WebCore::RenderBlock::skipLeadingWhitespace): Takes LineOffsets instead of two integers.
     15        (WebCore::LineOffsets::LineOffsets): Added.
     16        (WebCore::LineOffsets::width): Added.
     17        (WebCore::LineOffsets::setLeft): Added.
     18        (WebCore::LineOffsets::setRight): Added.
     19        (WebCore::RenderBlock::findNextLineBreak): Calls skipLeadingWhitespace and positionNewFloatOnLine.
     20        (WebCore::RenderBlock::positionNewFloatOnLine): Takes LineOffsets instead of two integers.
     21
    1222011-04-06  David Hyatt  <hyatt@apple.com>
    223
  • trunk/Source/WebCore/rendering/RenderBlock.h

    r83052 r83076  
    3737class LayoutStateMaintainer;
    3838class LazyLineBreakIterator;
     39class LineOffsets;
    3940class RenderInline;
    4041
     
    494495
    495496    void skipTrailingWhitespace(InlineIterator&, bool isLineEmpty, bool previousLineBrokeCleanly);
    496     void skipLeadingWhitespace(InlineBidiResolver&, bool firstLine, bool isLineEmpty, bool previousLineBrokeCleanly, FloatingObject* lastFloatFromPreviousLine, int& lineLeftOffset, int& lineRightOffset);
     497    void skipLeadingWhitespace(InlineBidiResolver&, bool firstLine, bool isLineEmpty, bool previousLineBrokeCleanly, FloatingObject* lastFloatFromPreviousLine, LineOffsets&);
    497498    void fitBelowFloats(float widthToFit, float totalOverhangWidth, bool firstLine, float& availableWidth);
    498499    typedef std::pair<RenderText*, LazyLineBreakIterator> LineBreakIteratorInfo;
     
    509510    // Positions new floats and also adjust all floats encountered on the line if any of them
    510511    // have to move to the next page/column.
    511     bool positionNewFloatOnLine(FloatingObject* newFloat, FloatingObject* lastFloatFromPreviousLine, bool firstLine, int& lineLeftOffset, int& lineRightOffset);
     512    bool positionNewFloatOnLine(FloatingObject* newFloat, FloatingObject* lastFloatFromPreviousLine, bool firstLine, LineOffsets&);
    512513
    513514    // End of functions defined in RenderBlockLineLayout.cpp.
  • trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp

    r83075 r83076  
    14571457
    14581458void RenderBlock::skipLeadingWhitespace(InlineBidiResolver& resolver, bool firstLine, bool isLineEmpty, bool previousLineBrokeCleanly,
    1459                                        FloatingObject* lastFloatFromPreviousLine, int& lineLeftOffset, int& lineRightOffset)
     1459    FloatingObject* lastFloatFromPreviousLine, LineOffsets& lineOffsets)
    14601460{
    14611461    while (!resolver.position().atEnd() && !requiresLineBox(resolver.position(), isLineEmpty, previousLineBrokeCleanly)) {
    14621462        RenderObject* object = resolver.position().m_obj;
    14631463        if (object->isFloating())
    1464             positionNewFloatOnLine(insertFloatingObject(toRenderBox(object)), lastFloatFromPreviousLine, firstLine, lineLeftOffset, lineRightOffset);
     1464            positionNewFloatOnLine(insertFloatingObject(toRenderBox(object)), lastFloatFromPreviousLine, firstLine, lineOffsets);
    14651465        else if (object->isPositioned())
    14661466            setStaticPositions(this, toRenderBox(object));
     
    15631563}
    15641564
     1565class LineOffsets {
     1566public:
     1567    LineOffsets(int leftOffset, int rightOffset)
     1568    : m_left(leftOffset)
     1569    , m_right(rightOffset)
     1570    {
     1571    }
     1572    int width() const { return max(0, m_right - m_left); }
     1573    void setLeft(int left) { m_left = left; }
     1574    void setRight(int right) { m_right = right; }
     1575private:
     1576    int m_left;
     1577    int m_right;
     1578};
     1579
    15651580InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool firstLine, bool& isLineEmpty, LineBreakIteratorInfo& lineBreakIteratorInfo, bool& previousLineBrokeCleanly,
    15661581                                              bool& hyphenated, EClear* clear, FloatingObject* lastFloatFromPreviousLine, Vector<RenderBox*>& positionedBoxes)
     
    15721587   
    15731588    int blockOffset = logicalHeight();
    1574     int lineLeftOffset = logicalLeftOffsetForLine(blockOffset, firstLine);
    1575     int lineRightOffset = logicalRightOffsetForLine(blockOffset, firstLine);
    1576    
    1577     skipLeadingWhitespace(resolver, firstLine, isLineEmpty, previousLineBrokeCleanly, lastFloatFromPreviousLine, lineLeftOffset, lineRightOffset);
    1578 
    1579     float width = max(0, lineRightOffset - lineLeftOffset);
     1589    LineOffsets lineOffsets(logicalLeftOffsetForLine(blockOffset, firstLine), logicalRightOffsetForLine(blockOffset, firstLine));
     1590
     1591    skipLeadingWhitespace(resolver, firstLine, isLineEmpty, previousLineBrokeCleanly, lastFloatFromPreviousLine, lineOffsets);
     1592
     1593    float width = lineOffsets.width();
    15801594    float w = 0;
    15811595    float tmpW = 0;
     
    16711685                // it after moving to next line (in newLine() func)
    16721686                if (floatsFitOnLine && logicalWidthForFloat(f) + w + tmpW <= width) {
    1673                     positionNewFloatOnLine(f, lastFloatFromPreviousLine, firstLine, lineLeftOffset, lineRightOffset);
    1674                     width = max(0, lineRightOffset - lineLeftOffset) + totalOverhangWidth;
     1687                    positionNewFloatOnLine(f, lastFloatFromPreviousLine, firstLine, lineOffsets);
     1688                    width = lineOffsets.width() + totalOverhangWidth;
    16751689                    if (lBreak.m_obj == o) {
    16761690                        ASSERT(!lBreak.m_pos);
     
    22582272}
    22592273
    2260 bool RenderBlock::positionNewFloatOnLine(FloatingObject* newFloat, FloatingObject* lastFloatFromPreviousLine, bool firstLine, int& lineLeftOffset, int& lineRightOffset)
     2274bool RenderBlock::positionNewFloatOnLine(FloatingObject* newFloat, FloatingObject* lastFloatFromPreviousLine, bool firstLine, LineOffsets& lineOffsets)
    22612275{
    22622276    bool didPosition = positionNewFloats();
     
    22672281    if (blockOffset >= logicalTopForFloat(newFloat) && blockOffset < logicalBottomForFloat(newFloat)) {
    22682282        if (newFloat->type() == FloatingObject::FloatLeft)
    2269             lineLeftOffset = logicalRightForFloat(newFloat);
     2283            lineOffsets.setLeft(logicalRightForFloat(newFloat));
    22702284        else
    2271             lineRightOffset = logicalLeftForFloat(newFloat);
     2285            lineOffsets.setRight(logicalLeftForFloat(newFloat));
    22722286    }
    22732287
     
    23052319
    23062320    setLogicalHeight(blockOffset + paginationStrut);
    2307     lineLeftOffset = logicalLeftOffsetForLine(logicalHeight(), firstLine);
    2308     lineRightOffset = logicalRightOffsetForLine(logicalHeight(), firstLine);
     2321    lineOffsets.setLeft(logicalLeftOffsetForLine(logicalHeight(), firstLine));
     2322    lineOffsets.setRight(logicalRightOffsetForLine(logicalHeight(), firstLine));
    23092323
    23102324    return didPosition;
Note: See TracChangeset for help on using the changeset viewer.