Changeset 228345 in webkit


Ignore:
Timestamp:
Feb 9, 2018 4:45:25 PM (6 years ago)
Author:
Alan Bujtas
Message:

[RenderTreeBuilder] Move RenderRubyRun::takeChild mutation to a RenderTreeBuilder
https://bugs.webkit.org/show_bug.cgi?id=182655
<rdar://problem/37406801>

Reviewed by Simon Fraser.

No change in functionality.

  • rendering/RenderRubyRun.cpp:

(WebCore::RenderRubyRun::takeChild):

  • rendering/updating/RenderTreeBuilder.cpp:

(WebCore::RenderTreeBuilder::takeChildFromRenderRubyRun):

  • rendering/updating/RenderTreeBuilder.h:
  • rendering/updating/RenderTreeBuilderRuby.cpp:

(WebCore::RenderTreeBuilder::Ruby::takeChild):

  • rendering/updating/RenderTreeBuilderRuby.h:
Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r228342 r228345  
     12018-02-09  Zalan Bujtas  <zalan@apple.com>
     2
     3        [RenderTreeBuilder] Move RenderRubyRun::takeChild mutation to a RenderTreeBuilder
     4        https://bugs.webkit.org/show_bug.cgi?id=182655
     5        <rdar://problem/37406801>
     6
     7        Reviewed by Simon Fraser.
     8
     9        No change in functionality.
     10
     11        * rendering/RenderRubyRun.cpp:
     12        (WebCore::RenderRubyRun::takeChild):
     13        * rendering/updating/RenderTreeBuilder.cpp:
     14        (WebCore::RenderTreeBuilder::takeChildFromRenderRubyRun):
     15        * rendering/updating/RenderTreeBuilder.h:
     16        * rendering/updating/RenderTreeBuilderRuby.cpp:
     17        (WebCore::RenderTreeBuilder::Ruby::takeChild):
     18        * rendering/updating/RenderTreeBuilderRuby.h:
     19
    1202018-02-09  Andy Estes  <aestes@apple.com>
    221
  • trunk/Source/WebCore/rendering/RenderRubyRun.cpp

    r228289 r228345  
    100100RenderPtr<RenderObject> RenderRubyRun::takeChild(RenderTreeBuilder& builder, RenderObject& child)
    101101{
    102     // If the child is a ruby text, then merge the ruby base with the base of
    103     // the right sibling run, if possible.
    104     if (!beingDestroyed() && !renderTreeBeingDestroyed() && child.isRubyText()) {
    105         RenderRubyBase* base = rubyBase();
    106         RenderObject* rightNeighbour = nextSibling();
    107         if (base && is<RenderRubyRun>(rightNeighbour)) {
    108             // Ruby run without a base can happen only at the first run.
    109             RenderRubyRun& rightRun = downcast<RenderRubyRun>(*rightNeighbour);
    110             if (rightRun.hasRubyBase()) {
    111                 RenderRubyBase* rightBase = rightRun.rubyBase();
    112                 // Collect all children in a single base, then swap the bases.
    113                 builder.moveRubyChildren(*rightBase, *base);
    114                 moveChildTo(builder, &rightRun, base, RenderBoxModelObject::NormalizeAfterInsertion::No);
    115                 rightRun.moveChildTo(builder, this, rightBase, RenderBoxModelObject::NormalizeAfterInsertion::No);
    116                 // The now empty ruby base will be removed below.
    117                 ASSERT(!rubyBase()->firstChild());
    118             }
    119         }
    120     }
    121 
    122     auto takenChild = RenderBlockFlow::takeChild(builder, child);
    123 
    124     if (!beingDestroyed() && !renderTreeBeingDestroyed()) {
    125         // Check if our base (if any) is now empty. If so, destroy it.
    126         RenderBlock* base = rubyBase();
    127         if (base && !base->firstChild()) {
    128             auto takenBase = RenderBlockFlow::takeChild(builder, *base);
    129             base->deleteLines();
    130         }
    131     }
    132 
    133     return takenChild;
     102    return builder.takeChildFromRenderRubyRun(*this, child);
    134103}
    135104
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp

    r228339 r228345  
    481481}
    482482
     483RenderPtr<RenderObject> RenderTreeBuilder::takeChildFromRenderRubyRun(RenderRubyRun& parent, RenderObject& child)
     484{
     485    return rubyBuilder().takeChild(parent, child);
     486}
     487
    483488void RenderTreeBuilder::updateAfterDescendants(RenderElement& renderer)
    484489{
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h

    r228339 r228345  
    7676    RenderPtr<RenderObject> takeChildFromRenderRubyAsInline(RenderRubyAsInline& parent, RenderObject& child);
    7777    RenderPtr<RenderObject> takeChildFromRenderRubyAsBlock(RenderRubyAsBlock& parent, RenderObject& child);
     78    RenderPtr<RenderObject> takeChildFromRenderRubyRun(RenderRubyRun& parent, RenderObject& child);
    7879
    7980    bool childRequiresTable(const RenderElement& parent, const RenderObject& child);
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp

    r228339 r228345  
    421421}
    422422
    423 }
     423RenderPtr<RenderObject> RenderTreeBuilder::Ruby::takeChild(RenderRubyRun& parent, RenderObject& child)
     424{
     425    // If the child is a ruby text, then merge the ruby base with the base of
     426    // the right sibling run, if possible.
     427    if (!parent.beingDestroyed() && !parent.renderTreeBeingDestroyed() && child.isRubyText()) {
     428        RenderRubyBase* base = parent.rubyBase();
     429        RenderObject* rightNeighbour = parent.nextSibling();
     430        if (base && is<RenderRubyRun>(rightNeighbour)) {
     431            // Ruby run without a base can happen only at the first run.
     432            RenderRubyRun& rightRun = downcast<RenderRubyRun>(*rightNeighbour);
     433            if (rightRun.hasRubyBase()) {
     434                RenderRubyBase* rightBase = rightRun.rubyBase();
     435                // Collect all children in a single base, then swap the bases.
     436                m_builder.moveRubyChildren(*rightBase, *base);
     437                parent.moveChildTo(m_builder, &rightRun, base, RenderBoxModelObject::NormalizeAfterInsertion::No);
     438                rightRun.moveChildTo(m_builder, &parent, rightBase, RenderBoxModelObject::NormalizeAfterInsertion::No);
     439                // The now empty ruby base will be removed below.
     440                ASSERT(!parent.rubyBase()->firstChild());
     441            }
     442        }
     443    }
     444
     445    auto takenChild = parent.RenderBlockFlow::takeChild(m_builder, child);
     446
     447    if (!parent.beingDestroyed() && !parent.renderTreeBeingDestroyed()) {
     448        // Check if our base (if any) is now empty. If so, destroy it.
     449        RenderBlock* base = parent.rubyBase();
     450        if (base && !base->firstChild()) {
     451            auto takenBase = parent.RenderBlockFlow::takeChild(m_builder, *base);
     452            base->deleteLines();
     453        }
     454    }
     455    return takenChild;
     456}
     457
     458}
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.h

    r228339 r228345  
    4545    RenderPtr<RenderObject> takeChild(RenderRubyAsInline& parent, RenderObject& child);
    4646    RenderPtr<RenderObject> takeChild(RenderRubyAsBlock& parent, RenderObject& child);
     47    RenderPtr<RenderObject> takeChild(RenderRubyRun& parent, RenderObject& child);
     48
     49    void moveChildren(RenderRubyBase& from, RenderRubyBase& to);
    4750
    4851    RenderElement& findOrCreateParentForChild(RenderRubyAsBlock& parent, const RenderObject& child, RenderObject*& beforeChild);
    4952    RenderElement& findOrCreateParentForChild(RenderRubyAsInline& parent, const RenderObject& child, RenderObject*& beforeChild);
    50 
    51     void moveChildren(RenderRubyBase& from, RenderRubyBase& to);
    5253
    5354private:
Note: See TracChangeset for help on using the changeset viewer.