Changeset 154221 in webkit


Ignore:
Timestamp:
Aug 17, 2013 5:31:39 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

<https://webkit.org/b/119795> Propagate writing-mode from the first region to the flow thread

Patch by Morten Stenshorne <mstensho@opera.com> on 2013-08-17
Reviewed by Darin Adler.

Source/WebCore:

Since the flow thread is a direct child of RenderView, it doesn't inherit
proper writing-mode automatically. It should be mentioned that if the thread's
contents' writing-mode differs from that of the first region, things are
typically going to look useless (although perhaps that's how it should be),
but as long as writing-mode is only specified on a common parent of the
thread's contents and the regions, things look fine, and also, we're now
following what the spec has to say on the matter:

http://www.w3.org/TR/2013/WD-css3-regions-20130528/#the-flow-into-property

"The first region defines the principal writing mode for the entire flow.

The writing mode on subsequent regions is ignored."

This is a back-port of the fix for Blink bug 257965.
Reviewed by esprehn and mihnea there.
Blink review URL: https://chromiumcodereview.appspot.com/18374008

Tests: fast/regions/changing-writing-mode-2.html

fast/regions/changing-writing-mode-3.html
fast/regions/changing-writing-mode-4.html
fast/regions/changing-writing-mode-5.html
fast/regions/changing-writing-mode.html
fast/regions/invalid-first-region-with-writing-mode-2.html
fast/regions/invalid-first-region-with-writing-mode.html
fast/regions/subtree-with-horiz-bt.html
fast/regions/subtree-with-horiz-tb.html
fast/regions/subtree-with-vert-lr.html
fast/regions/subtree-with-vert-rl.html

  • rendering/RenderFlowThread.cpp:

(WebCore::RenderFlowThread::styleDidChange):

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

(WebCore::RenderNamedFlowThread::updateWritingMode):
(WebCore::RenderNamedFlowThread::addRegionToNamedFlowThread):
(WebCore::RenderNamedFlowThread::removeRegionFromThread):
(WebCore::RenderNamedFlowThread::regionChangedWritingMode):

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

(WebCore::RenderRegion::styleDidChange):

LayoutTests:

  • fast/regions/changing-writing-mode-2-expected.html: Added.
  • fast/regions/changing-writing-mode-2.html: Added.
  • fast/regions/changing-writing-mode-3-expected.html: Added.
  • fast/regions/changing-writing-mode-3.html: Added.
  • fast/regions/changing-writing-mode-4-expected.html: Added.
  • fast/regions/changing-writing-mode-4.html: Added.
  • fast/regions/changing-writing-mode-5-expected.html: Added.
  • fast/regions/changing-writing-mode-5.html: Added.
  • fast/regions/changing-writing-mode-expected.html: Added.
  • fast/regions/changing-writing-mode.html: Added.
  • fast/regions/invalid-first-region-with-writing-mode-2-expected.html: Added.
  • fast/regions/invalid-first-region-with-writing-mode-2.html: Added.
  • fast/regions/invalid-first-region-with-writing-mode-expected.html: Added.
  • fast/regions/invalid-first-region-with-writing-mode.html: Added.
  • fast/regions/subtree-with-horiz-bt-expected.html: Added.
  • fast/regions/subtree-with-horiz-bt.html: Added.
  • fast/regions/subtree-with-horiz-tb-expected.html: Added.
  • fast/regions/subtree-with-horiz-tb.html: Added.
  • fast/regions/subtree-with-vert-lr-expected.html: Added.
  • fast/regions/subtree-with-vert-lr.html: Added.
  • fast/regions/subtree-with-vert-rl-expected.html: Added.
  • fast/regions/subtree-with-vert-rl.html: Added.
Location:
trunk
Files:
22 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r154220 r154221  
     12013-08-17  Morten Stenshorne  <mstensho@opera.com>
     2
     3        <https://webkit.org/b/119795> Propagate writing-mode from the first region to the flow thread
     4
     5        Reviewed by Darin Adler.
     6
     7        * fast/regions/changing-writing-mode-2-expected.html: Added.
     8        * fast/regions/changing-writing-mode-2.html: Added.
     9        * fast/regions/changing-writing-mode-3-expected.html: Added.
     10        * fast/regions/changing-writing-mode-3.html: Added.
     11        * fast/regions/changing-writing-mode-4-expected.html: Added.
     12        * fast/regions/changing-writing-mode-4.html: Added.
     13        * fast/regions/changing-writing-mode-5-expected.html: Added.
     14        * fast/regions/changing-writing-mode-5.html: Added.
     15        * fast/regions/changing-writing-mode-expected.html: Added.
     16        * fast/regions/changing-writing-mode.html: Added.
     17        * fast/regions/invalid-first-region-with-writing-mode-2-expected.html: Added.
     18        * fast/regions/invalid-first-region-with-writing-mode-2.html: Added.
     19        * fast/regions/invalid-first-region-with-writing-mode-expected.html: Added.
     20        * fast/regions/invalid-first-region-with-writing-mode.html: Added.
     21        * fast/regions/subtree-with-horiz-bt-expected.html: Added.
     22        * fast/regions/subtree-with-horiz-bt.html: Added.
     23        * fast/regions/subtree-with-horiz-tb-expected.html: Added.
     24        * fast/regions/subtree-with-horiz-tb.html: Added.
     25        * fast/regions/subtree-with-vert-lr-expected.html: Added.
     26        * fast/regions/subtree-with-vert-lr.html: Added.
     27        * fast/regions/subtree-with-vert-rl-expected.html: Added.
     28        * fast/regions/subtree-with-vert-rl.html: Added.
     29
    1302013-08-17  Zan Dobersek  <zdobersek@igalia.com>
    231
  • trunk/Source/WebCore/ChangeLog

    r154219 r154221  
     12013-08-17  Morten Stenshorne  <mstensho@opera.com>
     2
     3        <https://webkit.org/b/119795> Propagate writing-mode from the first region to the flow thread
     4
     5        Reviewed by Darin Adler.
     6
     7        Since the flow thread is a direct child of RenderView, it doesn't inherit
     8        proper writing-mode automatically. It should be mentioned that if the thread's
     9        contents' writing-mode differs from that of the first region, things are
     10        typically going to look useless (although perhaps that's how it should be),
     11        but as long as writing-mode is only specified on a common parent of the
     12        thread's contents and the regions, things look fine, and also, we're now
     13        following what the spec has to say on the matter:
     14
     15        http://www.w3.org/TR/2013/WD-css3-regions-20130528/#the-flow-into-property
     16
     17            "The first region defines the principal writing mode for the entire flow.
     18             The writing mode on subsequent regions is ignored."
     19
     20        This is a back-port of the fix for Blink bug 257965.
     21        Reviewed by esprehn and mihnea there.
     22        Blink review URL: https://chromiumcodereview.appspot.com/18374008
     23
     24        Tests: fast/regions/changing-writing-mode-2.html
     25               fast/regions/changing-writing-mode-3.html
     26               fast/regions/changing-writing-mode-4.html
     27               fast/regions/changing-writing-mode-5.html
     28               fast/regions/changing-writing-mode.html
     29               fast/regions/invalid-first-region-with-writing-mode-2.html
     30               fast/regions/invalid-first-region-with-writing-mode.html
     31               fast/regions/subtree-with-horiz-bt.html
     32               fast/regions/subtree-with-horiz-tb.html
     33               fast/regions/subtree-with-vert-lr.html
     34               fast/regions/subtree-with-vert-rl.html
     35
     36        * rendering/RenderFlowThread.cpp:
     37        (WebCore::RenderFlowThread::styleDidChange):
     38        * rendering/RenderFlowThread.h:
     39        * rendering/RenderNamedFlowThread.cpp:
     40        (WebCore::RenderNamedFlowThread::updateWritingMode):
     41        (WebCore::RenderNamedFlowThread::addRegionToNamedFlowThread):
     42        (WebCore::RenderNamedFlowThread::removeRegionFromThread):
     43        (WebCore::RenderNamedFlowThread::regionChangedWritingMode):
     44        * rendering/RenderNamedFlowThread.h:
     45        * rendering/RenderRegion.cpp:
     46        (WebCore::RenderRegion::styleDidChange):
     47
    1482013-08-16  Andreas Kling  <akling@apple.com>
    249
  • trunk/Source/WebCore/rendering/RenderFlowThread.cpp

    r154072 r154221  
    9191
    9292    if (oldStyle && oldStyle->writingMode() != style()->writingMode())
    93         m_regionsInvalidated = true;
     93        invalidateRegions();
    9494}
    9595
  • trunk/Source/WebCore/rendering/RenderFlowThread.h

    r154072 r154221  
    8989    bool hasRegionsWithStyling() const { return m_hasRegionsWithStyling; }
    9090    void checkRegionsWithStyling();
     91    virtual void regionChangedWritingMode(RenderRegion*) { }
    9192
    9293    void validateRegions();
  • trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp

    r151843 r154221  
    9090}
    9191
     92void RenderNamedFlowThread::updateWritingMode()
     93{
     94    RenderRegion* firstRegion = m_regionList.first();
     95    if (!firstRegion)
     96        return;
     97    if (style()->writingMode() == firstRegion->style()->writingMode())
     98        return;
     99
     100    // The first region defines the principal writing mode for the entire flow.
     101    RefPtr<RenderStyle> newStyle = RenderStyle::clone(style());
     102    newStyle->setWritingMode(firstRegion->style()->writingMode());
     103    setStyle(newStyle.release());
     104}
     105
    92106RenderObject* RenderNamedFlowThread::nextRendererForNode(Node* node) const
    93107{
     
    244258    renderRegion->setIsValid(true);
    245259    addRegionToList(m_regionList, renderRegion);
     260
     261    if (m_regionList.first() == renderRegion)
     262        updateWritingMode();
    246263}
    247264
     
    283300
    284301    ASSERT(m_regionList.contains(renderRegion));
     302    bool wasFirst = m_regionList.first() == renderRegion;
    285303    m_regionList.remove(renderRegion);
    286304
     
    291309    if (m_regionList.isEmpty())
    292310        setDispatchRegionLayoutUpdateEvent(true);
     311    else if (wasFirst)
     312        updateWritingMode();
    293313
    294314    invalidateRegions();
     315}
     316
     317void RenderNamedFlowThread::regionChangedWritingMode(RenderRegion* region)
     318{
     319    if (m_regionList.first() == region)
     320        updateWritingMode();
    295321}
    296322
  • trunk/Source/WebCore/rendering/RenderNamedFlowThread.h

    r153380 r154221  
    6969    virtual void removeRegionFromThread(RenderRegion*) OVERRIDE;
    7070
     71    virtual void regionChangedWritingMode(RenderRegion*) OVERRIDE;
     72
    7173    bool overset() const { return m_overset; }
    7274    void computeOversetStateForRegions(LayoutUnit oldClientAfterEdge);
     
    105107    void regionOversetChangeEventTimerFired(Timer<RenderNamedFlowThread>*);
    106108    void clearContentNodes();
     109    void updateWritingMode();
    107110
    108111private:
  • trunk/Source/WebCore/rendering/RenderRegion.cpp

    r154072 r154221  
    294294    checkRegionStyle();
    295295    updateRegionHasAutoLogicalHeightFlag();
     296
     297    if (oldStyle && oldStyle->writingMode() != style()->writingMode())
     298        m_flowThread->regionChangedWritingMode(this);
    296299}
    297300
Note: See TracChangeset for help on using the changeset viewer.