Changeset 226221 in webkit
- Timestamp:
- Dec 21, 2017 7:13:26 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 1 added
- 5 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r226220 r226221 1 2017-12-21 Zalan Bujtas <zalan@apple.com> 2 3 [RenderTreeBuilder] Move ruby mutation code to a dedicated class. 4 https://bugs.webkit.org/show_bug.cgi?id=181066 5 <rdar://problem/36167692> 6 7 Reviewed by Antti Koivisto. 8 9 This is in preparation for moving all ruby mutation code here. 10 11 No change in functionality. 12 13 * Sources.txt: 14 * WebCore.xcodeproj/project.pbxproj: 15 * rendering/updating/RenderTreeBuilder.cpp: 16 (WebCore::RenderTreeBuilder::insertChild): 17 (WebCore::RenderTreeBuilder::rubyRunInsertChild): Deleted. 18 * rendering/updating/RenderTreeBuilder.h: 19 (WebCore::RenderTreeBuilder::rubyBuilder): 20 * rendering/updating/RenderTreeBuilderRuby.cpp: Added. 21 (WebCore::RenderTreeBuilder::Ruby::Ruby): 22 (WebCore::RenderTreeBuilder::Ruby::insertChild): 23 * rendering/updating/RenderTreeBuilderRuby.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h. 24 1 25 2017-12-21 Ms2ger <Ms2ger@igalia.com> 2 26 -
trunk/Source/WebCore/Sources.txt
r226179 r226221 1984 1984 rendering/updating/RenderTreeBuilderList.cpp 1985 1985 rendering/updating/RenderTreeBuilderMultiColumn.cpp 1986 rendering/updating/RenderTreeBuilderRuby.cpp 1986 1987 rendering/updating/RenderTreeBuilderTable.cpp 1987 1988 rendering/updating/RenderTreePosition.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r226189 r226221 392 392 113D0B521F9FDD2B00F611BB /* LayoutContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 113D0B501F9FDD2B00F611BB /* LayoutContext.h */; settings = {ATTRIBUTES = (Private, ); }; }; 393 393 119340791FE8B92300935F1E /* RenderTreeBuilderTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */; }; 394 1193408A1FEB355D00935F1E /* RenderTreeBuilderRuby.h in Headers */ = {isa = PBXBuildFile; fileRef = 119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */; }; 394 395 11E067EE1E6246E500162D16 /* SimpleLineLayoutCoverage.h in Headers */ = {isa = PBXBuildFile; fileRef = 11E067ED1E6246E500162D16 /* SimpleLineLayoutCoverage.h */; settings = {ATTRIBUTES = (Private, ); }; }; 395 396 1400D7A817136EA70077CE05 /* ScriptWrappableInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 1400D7A717136EA70077CE05 /* ScriptWrappableInlines.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 5568 5569 119340761FE8B92300935F1E /* RenderTreeBuilderTable.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderTable.cpp; sourceTree = "<group>"; }; 5569 5570 119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderTable.h; sourceTree = "<group>"; }; 5571 119340871FEB355D00935F1E /* RenderTreeBuilderRuby.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderRuby.cpp; sourceTree = "<group>"; }; 5572 119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderRuby.h; sourceTree = "<group>"; }; 5570 5573 11E067EB1E62461300162D16 /* SimpleLineLayoutCoverage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleLineLayoutCoverage.cpp; sourceTree = "<group>"; }; 5571 5574 11E067ED1E6246E500162D16 /* SimpleLineLayoutCoverage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayoutCoverage.h; sourceTree = "<group>"; }; … … 24506 24509 E47C39231FE6E0DA00BBBC6B /* RenderTreeBuilderMultiColumn.cpp */, 24507 24510 E47C39271FE6E0DC00BBBC6B /* RenderTreeBuilderMultiColumn.h */, 24511 119340871FEB355D00935F1E /* RenderTreeBuilderRuby.cpp */, 24512 119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */, 24508 24513 119340761FE8B92300935F1E /* RenderTreeBuilderTable.cpp */, 24509 24514 119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */, … … 27227 27232 0707568C142262D600414161 /* HTMLTrackElement.h in Headers */, 27228 27233 977B37261228721700B81FF8 /* HTMLTreeBuilder.h in Headers */, 27229 E47C39301FE6E0FD00BBBC6B /* RenderTreeBuilderFirstLetter.h in Headers */,27230 27234 A8EA79F20A1916DF00A8EF5F /* HTMLUListElement.h in Headers */, 27231 27235 AD49914318F0815100BF0092 /* HTMLUnknownElement.h in Headers */, … … 28915 28919 93F1998C08245E59001E9ABC /* RenderTreeAsText.h in Headers */, 28916 28920 E47C392D1FE6E0F300BBBC6B /* RenderTreeBuilder.h in Headers */, 28921 E47C39301FE6E0FD00BBBC6B /* RenderTreeBuilderFirstLetter.h in Headers */, 28922 E47C39321FE6E10500BBBC6B /* RenderTreeBuilderList.h in Headers */, 28923 E47C39331FE6E10800BBBC6B /* RenderTreeBuilderMultiColumn.h in Headers */, 28924 1193408A1FEB355D00935F1E /* RenderTreeBuilderRuby.h in Headers */, 28917 28925 119340791FE8B92300935F1E /* RenderTreeBuilderTable.h in Headers */, 28918 28926 E47C392E1FE6E0F700BBBC6B /* RenderTreePosition.h in Headers */, 28919 28927 E47C392F1FE6E0F900BBBC6B /* RenderTreeUpdater.h in Headers */, 28920 28928 E47C39311FE6E10200BBBC6B /* RenderTreeUpdaterGeneratedContent.h in Headers */, 28921 E47C39321FE6E10500BBBC6B /* RenderTreeBuilderList.h in Headers */,28922 E47C39331FE6E10800BBBC6B /* RenderTreeBuilderMultiColumn.h in Headers */,28923 28929 E44614520CD68A3500FADA75 /* RenderVideo.h in Headers */, 28924 28930 BCEA4868097D93020094C9E4 /* RenderView.h in Headers */, -
trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp
r226181 r226221 36 36 #include "RenderTreeBuilderList.h" 37 37 #include "RenderTreeBuilderMultiColumn.h" 38 #include "RenderTreeBuilderRuby.h" 38 39 #include "RenderTreeBuilderTable.h" 39 40 … … 48 49 , m_multiColumnBuilder(std::make_unique<MultiColumn>(*this)) 49 50 , m_tableBuilder(std::make_unique<Table>(*this)) 51 , m_rubyBuilder(std::make_unique<Ruby>(*this)) 50 52 { 51 53 RELEASE_ASSERT(!s_current || &m_view != &s_current->m_view); … … 99 101 100 102 if (is<RenderRubyRun>(parent)) { 101 ruby RunInsertChild(downcast<RenderRubyRun>(parent), WTFMove(child), beforeChild);103 rubyBuilder().insertChild(downcast<RenderRubyRun>(parent), WTFMove(child), beforeChild); 102 104 return; 103 105 } … … 121 123 } 122 124 123 void RenderTreeBuilder::rubyRunInsertChild(RenderRubyRun& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)124 {125 if (child->isRubyText()) {126 if (!beforeChild) {127 // RenderRuby has already ascertained that we can add the child here.128 ASSERT(!parent.hasRubyText());129 // prepend ruby texts as first child130 parent.addChild(*this, WTFMove(child), parent.firstChild());131 return;132 }133 if (beforeChild->isRubyText()) {134 // New text is inserted just before another.135 // In this case the new text takes the place of the old one, and136 // the old text goes into a new run that is inserted as next sibling.137 ASSERT(beforeChild->parent() == &parent);138 RenderElement* ruby = parent.parent();139 ASSERT(isRuby(ruby));140 auto newRun = RenderRubyRun::staticCreateRubyRun(ruby);141 insertChild(*ruby, WTFMove(newRun), parent.nextSibling());142 // Add the new ruby text and move the old one to the new run143 // Note: Doing it in this order and not using RenderRubyRun's methods,144 // in order to avoid automatic removal of the ruby run in case there is no145 // other child besides the old ruby text.146 parent.addChild(*this, WTFMove(child), beforeChild);147 auto takenBeforeChild = parent.RenderBlockFlow::takeChild(*beforeChild);148 insertChild(*newRun, WTFMove(takenBeforeChild));149 return;150 }151 if (parent.hasRubyBase()) {152 // Insertion before a ruby base object.153 // In this case we need insert a new run before the current one and split the base.154 RenderElement* ruby = parent.parent();155 auto newRun = RenderRubyRun::staticCreateRubyRun(ruby);156 auto& run = *newRun;157 insertChild(*ruby, WTFMove(newRun), &parent);158 insertChild(run, WTFMove(child));159 parent.rubyBaseSafe()->moveChildren(run.rubyBaseSafe(), beforeChild);160 }161 return;162 }163 // child is not a text -> insert it into the base164 // (append it instead if beforeChild is the ruby text)165 if (beforeChild && beforeChild->isRubyText())166 beforeChild = nullptr;167 insertChild(*parent.rubyBaseSafe(), WTFMove(child), beforeChild);168 125 } 169 170 } -
trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h
r226179 r226221 52 52 class MultiColumn; 53 53 class Table; 54 55 void rubyRunInsertChild(RenderRubyRun&, RenderPtr<RenderObject> child, RenderObject* beforeChild); 54 class Ruby; 56 55 57 56 FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; } … … 59 58 MultiColumn& multiColumnBuilder() { return *m_multiColumnBuilder; } 60 59 Table& tableBuilder() { return *m_tableBuilder; } 60 Ruby& rubyBuilder() { return *m_rubyBuilder; } 61 61 62 62 RenderView& m_view; … … 69 69 std::unique_ptr<MultiColumn> m_multiColumnBuilder; 70 70 std::unique_ptr<Table> m_tableBuilder; 71 std::unique_ptr<Ruby> m_rubyBuilder; 71 72 }; 72 73 73 74 } 75 -
trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.h
r226220 r226221 26 26 #pragma once 27 27 28 #include "RenderTree Position.h"28 #include "RenderTreeUpdater.h" 29 29 30 30 namespace WebCore { 31 31 32 class RenderObject; 32 33 class RenderRubyRun; 33 class RenderTree Updater;34 class RenderTreeBuilder; 34 35 35 class RenderTreeBuilder {36 class RenderTreeBuilder::Ruby { 36 37 public: 37 RenderTreeBuilder(RenderView&); 38 ~RenderTreeBuilder(); 38 Ruby(RenderTreeBuilder&); 39 39 40 void insertChild(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr); 41 void insertChild(RenderTreePosition&, RenderPtr<RenderObject>); 42 43 void updateAfterDescendants(RenderElement&); 44 45 // This avoids having to convert all sites that need RenderTreeBuilder in one go. 46 // FIXME: Remove. 47 static RenderTreeBuilder* current() { return s_current; } 40 void insertChild(RenderRubyRun& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild); 48 41 49 42 private: 50 class FirstLetter; 51 class List; 52 class MultiColumn; 53 class Table; 54 55 void rubyRunInsertChild(RenderRubyRun&, RenderPtr<RenderObject> child, RenderObject* beforeChild); 56 57 FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; } 58 List& listBuilder() { return *m_listBuilder; } 59 MultiColumn& multiColumnBuilder() { return *m_multiColumnBuilder; } 60 Table& tableBuilder() { return *m_tableBuilder; } 61 62 RenderView& m_view; 63 64 RenderTreeBuilder* m_previous { nullptr }; 65 static RenderTreeBuilder* s_current; 66 67 std::unique_ptr<FirstLetter> m_firstLetterBuilder; 68 std::unique_ptr<List> m_listBuilder; 69 std::unique_ptr<MultiColumn> m_multiColumnBuilder; 70 std::unique_ptr<Table> m_tableBuilder; 43 RenderTreeBuilder& m_builder; 71 44 }; 72 45 73 46 } 47
Note: See TracChangeset
for help on using the changeset viewer.