Changeset 147082 in webkit


Ignore:
Timestamp:
Mar 28, 2013 1:26:28 AM (11 years ago)
Author:
mihnea@adobe.com
Message:

[CSSRegions] Consolidate use of RenderRegion::isValid
https://bugs.webkit.org/show_bug.cgi?id=113154

Reviewed by David Hyatt.

After https://bugs.webkit.org/show_bug.cgi?id=98752, the list of invalid regions is kept separately than the list of valid regions.
A valid region has always a valid flow thread attached. We can use isValid() throughout the RenderRegion code
instead of testing for both isValid() and m_flowThread.

No new tests since there is no change is functionality, just code refactoring.

  • rendering/RenderNamedFlowThread.cpp:

(WebCore::RenderNamedFlowThread::addRegionToNamedFlowThread): Added a new function to keep the code
used in addRegionToThread and checkInvalidRegions.
(WebCore::RenderNamedFlowThread::addRegionToThread):
(WebCore::RenderNamedFlowThread::checkInvalidRegions):

  • rendering/RenderNamedFlowThread.h:
  • rendering/RenderRegion.cpp:

(WebCore::RenderRegion::overflowRectForFlowThreadPortion):
(WebCore::RenderRegion::isFirstRegion):
(WebCore::RenderRegion::isLastRegion):
(WebCore::RenderRegion::paintObject):
(WebCore::RenderRegion::nodeAtPoint):
(WebCore::RenderRegion::incrementAutoLogicalHeightCount):
(WebCore::RenderRegion::decrementAutoLogicalHeightCount):
(WebCore::RenderRegion::layoutBlock):
(WebCore::RenderRegion::repaintFlowThreadContentRectangle):
(WebCore::RenderRegion::attachRegion):
(WebCore::RenderRegion::renderBoxRegionInfo):
(WebCore::RenderRegion::setRenderBoxRegionInfo):
(WebCore::RenderRegion::logicalTopOfFlowThreadContentRect):
(WebCore::RenderRegion::logicalBottomOfFlowThreadContentRect):
(WebCore::RenderRegion::computePreferredLogicalWidths):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r147076 r147082  
     12013-03-28  Mihnea Ovidenie  <mihnea@adobe.com>
     2
     3        [CSSRegions] Consolidate use of RenderRegion::isValid
     4        https://bugs.webkit.org/show_bug.cgi?id=113154
     5
     6        Reviewed by David Hyatt.
     7
     8        After https://bugs.webkit.org/show_bug.cgi?id=98752, the list of invalid regions is kept separately than the list of valid regions.
     9        A valid region has always a valid flow thread attached. We can use isValid() throughout the RenderRegion code
     10        instead of testing for both isValid() and m_flowThread.
     11
     12        No new tests since there is no change is functionality, just code refactoring.
     13
     14        * rendering/RenderNamedFlowThread.cpp:
     15        (WebCore::RenderNamedFlowThread::addRegionToNamedFlowThread): Added a new function to keep the code
     16        used in addRegionToThread and checkInvalidRegions.
     17        (WebCore::RenderNamedFlowThread::addRegionToThread):
     18        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
     19        * rendering/RenderNamedFlowThread.h:
     20        * rendering/RenderRegion.cpp:
     21        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
     22        (WebCore::RenderRegion::isFirstRegion):
     23        (WebCore::RenderRegion::isLastRegion):
     24        (WebCore::RenderRegion::paintObject):
     25        (WebCore::RenderRegion::nodeAtPoint):
     26        (WebCore::RenderRegion::incrementAutoLogicalHeightCount):
     27        (WebCore::RenderRegion::decrementAutoLogicalHeightCount):
     28        (WebCore::RenderRegion::layoutBlock):
     29        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
     30        (WebCore::RenderRegion::attachRegion):
     31        (WebCore::RenderRegion::renderBoxRegionInfo):
     32        (WebCore::RenderRegion::setRenderBoxRegionInfo):
     33        (WebCore::RenderRegion::logicalTopOfFlowThreadContentRect):
     34        (WebCore::RenderRegion::logicalBottomOfFlowThreadContentRect):
     35        (WebCore::RenderRegion::computePreferredLogicalWidths):
     36
    1372013-03-27  Ilya Tikhonovsky  <loislo@chromium.org>
    238
  • trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp

    r143322 r147082  
    223223}
    224224
    225 void RenderNamedFlowThread::addRegionToThread(RenderRegion* renderRegion)
     225void RenderNamedFlowThread::addRegionToNamedFlowThread(RenderRegion* renderRegion)
    226226{
    227227    ASSERT(renderRegion);
    228 
    229     resetMarkForDestruction();
    230 
    231228    ASSERT(!renderRegion->isValid());
    232     if (renderRegion->parentNamedFlowThread()) {
    233         if (renderRegion->parentNamedFlowThread()->dependsOn(this)) {
    234             // The order of invalid regions is irrelevant.
    235             m_invalidRegionList.add(renderRegion);
    236             // Register ourself to get a notification when the state changes.
    237             renderRegion->parentNamedFlowThread()->m_observerThreadsSet.add(this);
    238             return;
    239         }
    240 
     229
     230    if (renderRegion->parentNamedFlowThread())
    241231        addDependencyOnFlowThread(renderRegion->parentNamedFlowThread());
    242     }
    243232
    244233    renderRegion->setIsValid(true);
    245234    addRegionToList(m_regionList, renderRegion);
     235}
     236
     237void RenderNamedFlowThread::addRegionToThread(RenderRegion* renderRegion)
     238{
     239    ASSERT(renderRegion);
     240    ASSERT(!renderRegion->isValid());
     241
     242    resetMarkForDestruction();
     243
     244    if (renderRegion->parentNamedFlowThread() && renderRegion->parentNamedFlowThread()->dependsOn(this)) {
     245        // The order of invalid regions is irrelevant.
     246        m_invalidRegionList.add(renderRegion);
     247        // Register ourself to get a notification when the state changes.
     248        renderRegion->parentNamedFlowThread()->m_observerThreadsSet.add(this);
     249        return;
     250    }
     251
     252    addRegionToNamedFlowThread(renderRegion);
    246253
    247254    invalidateRegions();
     
    294301        m_invalidRegionList.remove(region);
    295302        region->parentNamedFlowThread()->m_observerThreadsSet.remove(this);
    296         region->setIsValid(true);
    297         addDependencyOnFlowThread(region->parentNamedFlowThread());
    298         addRegionToList(m_regionList, region);
     303        addRegionToNamedFlowThread(region);
    299304    }
    300305
  • trunk/Source/WebCore/rendering/RenderNamedFlowThread.h

    r140640 r147082  
    8888    void addDependencyOnFlowThread(RenderNamedFlowThread*);
    8989    void removeDependencyOnFlowThread(RenderNamedFlowThread*);
     90
     91    void addRegionToNamedFlowThread(RenderRegion*);
     92
    9093    void checkInvalidRegions();
     94
    9195    bool canBeDestroyed() const { return m_invalidRegionList.isEmpty() && m_regionList.isEmpty() && m_contentNodes.isEmpty(); }
    9296    void regionLayoutUpdateEventTimerFired(Timer<RenderNamedFlowThread>*);
  • trunk/Source/WebCore/rendering/RenderRegion.cpp

    r145596 r147082  
    9292LayoutRect RenderRegion::overflowRectForFlowThreadPortion(LayoutRect flowThreadPortionRect, bool isFirstPortion, bool isLastPortion) const
    9393{
     94    ASSERT(isValid());
     95
    9496    // FIXME: Would like to just use hasOverflowClip() but we aren't a block yet. When RenderRegion is eliminated and
    9597    // folded into RenderBlock, switch to hasOverflowClip().
     
    9799    bool clipY = style()->overflowY() != OVISIBLE;
    98100    bool isLastRegionWithRegionOverflowBreak = (isLastPortion && (style()->regionOverflow() == BreakRegionOverflow));
    99     if ((clipX && clipY) || !isValid() || !m_flowThread || isLastRegionWithRegionOverflowBreak)
     101    if ((clipX && clipY) || isLastRegionWithRegionOverflowBreak)
    100102        return flowThreadPortionRect;
    101103
     
    129131bool RenderRegion::isFirstRegion() const
    130132{
    131     ASSERT(isValid() && m_flowThread);
     133    ASSERT(isValid());
     134
    132135    return m_flowThread->firstRegion() == this;
    133136}
     
    135138bool RenderRegion::isLastRegion() const
    136139{
    137     ASSERT(isValid() && m_flowThread);
     140    ASSERT(isValid());
     141
    138142    return m_flowThread->lastRegion() == this;
    139143}
     
    150154    // Since we do not want to paint the flow thread content multiple times (for each painting phase of the region object),
    151155    // we allow the flow thread painting only for the selection and the foreground phase.
    152     if (!m_flowThread || !isValid() || (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhaseSelection))
     156    if (!isValid() || (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhaseSelection))
    153157        return;
    154158
     
    173177    if (visibleToHitTesting() && action == HitTestForeground && locationInContainer.intersects(boundsRect)) {
    174178        // Check the contents of the RenderFlowThread.
    175         if (m_flowThread && m_flowThread->hitTestFlowThreadPortionInRegion(this, flowThreadPortionRect(), flowThreadPortionOverflowRect(), request, result, locationInContainer, LayoutPoint(adjustedLocation.x() + borderLeft() + paddingLeft(), adjustedLocation.y() + borderTop() + paddingTop())))
     179        if (m_flowThread->hitTestFlowThreadPortionInRegion(this, flowThreadPortionRect(), flowThreadPortionOverflowRect(), request, result, locationInContainer, LayoutPoint(adjustedLocation.x() + borderLeft() + paddingLeft(), adjustedLocation.y() + borderTop() + paddingTop())))
    176180            return true;
    177181        updateHitTestResult(result, locationInContainer.point() - toLayoutSize(adjustedLocation));
     
    199203void RenderRegion::incrementAutoLogicalHeightCount()
    200204{
    201     ASSERT(m_flowThread);
    202205    ASSERT(isValid());
    203206    ASSERT(m_hasAutoLogicalHeight);
     
    208211void RenderRegion::decrementAutoLogicalHeightCount()
    209212{
    210     ASSERT(m_flowThread);
    211213    ASSERT(isValid());
    212214
     
    261263    RenderBlock::layoutBlock(relayoutChildren);
    262264
    263     if (m_flowThread && isValid()) {
     265    if (isValid()) {
    264266        LayoutRect oldRegionRect(flowThreadPortionRect());
    265267        if (!isHorizontalWritingMode())
     
    295297void RenderRegion::repaintFlowThreadContentRectangle(const LayoutRect& repaintRect, bool immediate, const LayoutRect& flowThreadPortionRect, const LayoutRect& flowThreadPortionOverflowRect, const LayoutPoint& regionLocation) const
    296298{
     299    ASSERT(isValid());
     300
    297301    // We only have to issue a repaint in this region if the region rect intersects the repaint rect.
    298302    LayoutRect flippedFlowThreadPortionRect(flowThreadPortionRect);
     
    355359        return;
    356360
     361    // Only after adding the region to the thread, the region is marked to be valid.
    357362    m_flowThread->addRegionToThread(this);
    358363
     
    381386RenderBoxRegionInfo* RenderRegion::renderBoxRegionInfo(const RenderBox* box) const
    382387{
    383     if (!m_isValid || !m_flowThread)
    384         return 0;
     388    ASSERT(isValid());
    385389    return m_renderBoxRegionInfo.get(box);
    386390}
     
    389393    bool containingBlockChainIsInset)
    390394{
    391     ASSERT(m_isValid && m_flowThread);
    392     if (!m_isValid || !m_flowThread)
    393         return 0;
     395    ASSERT(isValid());
    394396
    395397    OwnPtr<RenderBoxRegionInfo>& boxInfo = m_renderBoxRegionInfo.add(box, nullptr).iterator->value;
     
    419421LayoutUnit RenderRegion::logicalTopOfFlowThreadContentRect(const LayoutRect& rect) const
    420422{
    421     if (!m_isValid || !flowThread())
    422         return 0;
     423    ASSERT(isValid());
    423424    return flowThread()->isHorizontalWritingMode() ? rect.y() : rect.x();
    424425}
     
    426427LayoutUnit RenderRegion::logicalBottomOfFlowThreadContentRect(const LayoutRect& rect) const
    427428{
    428     if (!m_isValid || !flowThread())
    429         return 0;
     429    ASSERT(isValid());
    430430    return flowThread()->isHorizontalWritingMode() ? rect.maxY() : rect.maxX();
    431431}
     
    591591{
    592592    ASSERT(preferredLogicalWidthsDirty());
    593     if (!m_flowThread || !m_isValid) {
     593
     594    if (!isValid()) {
    594595        RenderBlock::computePreferredLogicalWidths();
    595596        return;
Note: See TracChangeset for help on using the changeset viewer.