Changeset 226168 in webkit
- Timestamp:
- Dec 19, 2017 5:44:37 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r226162 r226168 1 2017-12-19 Antti Koivisto <antti@apple.com> 2 3 Move first-letter building code to RenderTreeBuilder 4 https://bugs.webkit.org/show_bug.cgi?id=180992 5 6 Reviewed by Zalan Bujtas. 7 8 All special case tree building logic should go to RenderTreeBuilder. 9 10 - RenderTreeUpdater::FirstLetter -> RenderTreeBuilder::FirstLetter 11 - Make the builder non-static and stop using RenderTreeBuilder::current() there. 12 13 * Sources.txt: 14 * WebCore.xcodeproj/project.pbxproj: 15 * rendering/TextAutoSizing.cpp: 16 (WebCore::TextAutoSizingValue::adjustTextNodeSizes): 17 * rendering/updating/RenderTreeBuilder.cpp: 18 (WebCore::RenderTreeBuilder::RenderTreeBuilder): 19 (WebCore::RenderTreeBuilder::insertChild): 20 (WebCore::RenderTreeBuilder::updateAfterDescendants): 21 * rendering/updating/RenderTreeBuilder.h: 22 (WebCore::RenderTreeBuilder::firstLetterBuilder): 23 (WebCore::RenderTreeBuilder::tableBuilder): 24 * rendering/updating/RenderTreeBuilderFirstLetter.cpp: Copied from rendering/updating/RenderTreeUpdaterFirstLetter.cpp. 25 (WebCore::supportsFirstLetter): 26 (WebCore::RenderTreeBuilder::FirstLetter::FirstLetter): 27 (WebCore::RenderTreeBuilder::FirstLetter::updateAfterDescendants): 28 (WebCore::RenderTreeBuilder::FirstLetter::updateStyle): 29 (WebCore::RenderTreeBuilder::FirstLetter::createRenderers): 30 (WebCore::updateFirstLetterStyle): Deleted. 31 (WebCore::createFirstLetterRenderer): Deleted. 32 (WebCore::RenderTreeUpdater::FirstLetter::update): Deleted. 33 * rendering/updating/RenderTreeBuilderFirstLetter.h: Copied from rendering/updating/RenderTreeUpdaterFirstLetter.h. 34 * rendering/updating/RenderTreeUpdater.cpp: 35 (WebCore::RenderTreeUpdater::updateAfterDescendants): 36 * rendering/updating/RenderTreeUpdater.h: 37 * rendering/updating/RenderTreeUpdaterFirstLetter.cpp: Removed. 38 * rendering/updating/RenderTreeUpdaterFirstLetter.h: Removed. 39 1 40 2017-12-19 Chris Dumez <cdumez@apple.com> 2 41 -
trunk/Source/WebCore/Sources.txt
r226127 r226168 1981 1981 1982 1982 rendering/updating/RenderTreeBuilder.cpp 1983 rendering/updating/RenderTreeBuilderFirstLetter.cpp 1983 1984 rendering/updating/RenderTreeBuilderTable.cpp 1984 1985 rendering/updating/RenderTreePosition.cpp 1985 1986 rendering/updating/RenderTreeUpdater.cpp 1986 rendering/updating/RenderTreeUpdaterFirstLetter.cpp1987 1987 rendering/updating/RenderTreeUpdaterGeneratedContent.cpp 1988 1988 rendering/updating/RenderTreeUpdaterListItem.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r226160 r226168 4580 4580 E47C392E1FE6E0F700BBBC6B /* RenderTreePosition.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C39241FE6E0DB00BBBC6B /* RenderTreePosition.h */; }; 4581 4581 E47C392F1FE6E0F900BBBC6B /* RenderTreeUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C392C1FE6E0DF00BBBC6B /* RenderTreeUpdater.h */; }; 4582 E47C39301FE6E0FD00BBBC6B /* RenderTree UpdaterFirstLetter.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C39261FE6E0DC00BBBC6B /* RenderTreeUpdaterFirstLetter.h */; };4582 E47C39301FE6E0FD00BBBC6B /* RenderTreeBuilderFirstLetter.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C39261FE6E0DC00BBBC6B /* RenderTreeBuilderFirstLetter.h */; }; 4583 4583 E47C39311FE6E10200BBBC6B /* RenderTreeUpdaterGeneratedContent.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C39251FE6E0DB00BBBC6B /* RenderTreeUpdaterGeneratedContent.h */; }; 4584 4584 E47C39321FE6E10500BBBC6B /* RenderTreeUpdaterListItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C39281FE6E0DD00BBBC6B /* RenderTreeUpdaterListItem.h */; }; … … 13909 13909 E47C391F1FE6E0D800BBBC6B /* RenderTreeUpdater.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeUpdater.cpp; sourceTree = "<group>"; }; 13910 13910 E47C39201FE6E0D900BBBC6B /* RenderTreeBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilder.cpp; sourceTree = "<group>"; }; 13911 E47C39211FE6E0DA00BBBC6B /* RenderTree UpdaterFirstLetter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeUpdaterFirstLetter.cpp; sourceTree = "<group>"; };13911 E47C39211FE6E0DA00BBBC6B /* RenderTreeBuilderFirstLetter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderFirstLetter.cpp; sourceTree = "<group>"; }; 13912 13912 E47C39221FE6E0DA00BBBC6B /* RenderTreeUpdaterGeneratedContent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeUpdaterGeneratedContent.cpp; sourceTree = "<group>"; }; 13913 13913 E47C39231FE6E0DA00BBBC6B /* RenderTreeUpdaterMultiColumn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeUpdaterMultiColumn.cpp; sourceTree = "<group>"; }; 13914 13914 E47C39241FE6E0DB00BBBC6B /* RenderTreePosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTreePosition.h; sourceTree = "<group>"; }; 13915 13915 E47C39251FE6E0DB00BBBC6B /* RenderTreeUpdaterGeneratedContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTreeUpdaterGeneratedContent.h; sourceTree = "<group>"; }; 13916 E47C39261FE6E0DC00BBBC6B /* RenderTree UpdaterFirstLetter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTreeUpdaterFirstLetter.h; sourceTree = "<group>"; };13916 E47C39261FE6E0DC00BBBC6B /* RenderTreeBuilderFirstLetter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderFirstLetter.h; sourceTree = "<group>"; }; 13917 13917 E47C39271FE6E0DC00BBBC6B /* RenderTreeUpdaterMultiColumn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTreeUpdaterMultiColumn.h; sourceTree = "<group>"; }; 13918 13918 E47C39281FE6E0DD00BBBC6B /* RenderTreeUpdaterListItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTreeUpdaterListItem.h; sourceTree = "<group>"; }; … … 24517 24517 E47C39201FE6E0D900BBBC6B /* RenderTreeBuilder.cpp */, 24518 24518 E47C392A1FE6E0DE00BBBC6B /* RenderTreeBuilder.h */, 24519 E47C39211FE6E0DA00BBBC6B /* RenderTreeBuilderFirstLetter.cpp */, 24520 E47C39261FE6E0DC00BBBC6B /* RenderTreeBuilderFirstLetter.h */, 24519 24521 119340761FE8B92300935F1E /* RenderTreeBuilderTable.cpp */, 24520 24522 119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */, … … 24523 24525 E47C391F1FE6E0D800BBBC6B /* RenderTreeUpdater.cpp */, 24524 24526 E47C392C1FE6E0DF00BBBC6B /* RenderTreeUpdater.h */, 24525 E47C39211FE6E0DA00BBBC6B /* RenderTreeUpdaterFirstLetter.cpp */,24526 E47C39261FE6E0DC00BBBC6B /* RenderTreeUpdaterFirstLetter.h */,24527 24527 E47C39221FE6E0DA00BBBC6B /* RenderTreeUpdaterGeneratedContent.cpp */, 24528 24528 E47C39251FE6E0DB00BBBC6B /* RenderTreeUpdaterGeneratedContent.h */, … … 27243 27243 0707568C142262D600414161 /* HTMLTrackElement.h in Headers */, 27244 27244 977B37261228721700B81FF8 /* HTMLTreeBuilder.h in Headers */, 27245 E47C39301FE6E0FD00BBBC6B /* RenderTreeBuilderFirstLetter.h in Headers */, 27245 27246 A8EA79F20A1916DF00A8EF5F /* HTMLUListElement.h in Headers */, 27246 27247 AD49914318F0815100BF0092 /* HTMLUnknownElement.h in Headers */, … … 28933 28934 E47C392E1FE6E0F700BBBC6B /* RenderTreePosition.h in Headers */, 28934 28935 E47C392F1FE6E0F900BBBC6B /* RenderTreeUpdater.h in Headers */, 28935 E47C39301FE6E0FD00BBBC6B /* RenderTreeUpdaterFirstLetter.h in Headers */,28936 28936 E47C39311FE6E10200BBBC6B /* RenderTreeUpdaterGeneratedContent.h in Headers */, 28937 28937 E47C39321FE6E10500BBBC6B /* RenderTreeUpdaterListItem.h in Headers */, -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj.orig
r226160 r226168 170 170 078E094717D16E1C00420AA1 /* RTCVoidRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BB017CF0AD400848E51 /* RTCVoidRequest.h */; settings = {ATTRIBUTES = (Private, ); }; }; 171 171 078E094C17D1709600420AA1 /* MediaStreamAudioDestinationNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E094917D1709600420AA1 /* MediaStreamAudioDestinationNode.h */; }; 172 078E3CC01FE1C73C00483C1D /* MediaStreamRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E3CBE1FE19F3000483C1D /* MediaStreamRequest.h */; settings = {ATTRIBUTES = (Private, ); }; }; 172 173 078E43DA1ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E43D81ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h */; settings = {ATTRIBUTES = (Private, ); }; }; 173 174 078E43DD1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E43DB1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 5175 5176 078E094917D1709600420AA1 /* MediaStreamAudioDestinationNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamAudioDestinationNode.h; sourceTree = "<group>"; }; 5176 5177 078E094A17D1709600420AA1 /* MediaStreamAudioDestinationNode.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaStreamAudioDestinationNode.idl; sourceTree = "<group>"; }; 5178 078E3CBE1FE19F3000483C1D /* MediaStreamRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamRequest.h; sourceTree = "<group>"; }; 5177 5179 078E43D71ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlaybackTargetPicker.cpp; sourceTree = "<group>"; }; 5178 5180 078E43D81ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlaybackTargetPicker.h; sourceTree = "<group>"; }; … … 14718 14720 0711588F17DF633700EDFE2B /* MediaStreamPrivate.cpp */, 14719 14721 07221B9D17CF0AD400848E51 /* MediaStreamPrivate.h */, 14722 078E3CBE1FE19F3000483C1D /* MediaStreamRequest.h */, 14720 14723 07FFDE66181AED420072D409 /* MediaStreamTrackPrivate.cpp */, 14721 14724 07FFDE67181AED420072D409 /* MediaStreamTrackPrivate.h */, … … 26929 26932 4129C9971F59B963009D7403 /* FetchBodySource.h in Headers */, 26930 26933 41D129DB1F3D143800D15E47 /* FetchHeaders.h in Headers */, 26934 4161E2D51FE48DC500EC2E96 /* FetchLoader.h in Headers */, 26931 26935 517A53581F5889E800DCDC0A /* FetchLoaderClient.h in Headers */, 26932 26936 41AD753A1CEF6BD100A31486 /* FetchOptions.h in Headers */, … … 27390 27394 A5B81CAE1FAA44620037D1E6 /* InspectorIndexedDBAgent.h in Headers */, 27391 27395 20D629271253690B00081543 /* InspectorInstrumentation.h in Headers */, 27392 4161E2D51FE48DC500EC2E96 /* FetchLoader.h in Headers */,27393 27396 A5840E1D187B74D500843B10 /* InspectorInstrumentationCookie.h in Headers */, 27394 27397 A5B81CAF1FAA44620037D1E6 /* InspectorLayerTreeAgent.h in Headers */, … … 28421 28424 078E093717D16B2C00420AA1 /* MediaStreamPrivate.h in Headers */, 28422 28425 078E091717D14D1C00420AA1 /* MediaStreamRegistry.h in Headers */, 28426 078E3CC01FE1C73C00483C1D /* MediaStreamRequest.h in Headers */, 28423 28427 078E091817D14D1C00420AA1 /* MediaStreamTrack.h in Headers */, 28424 28428 078E091917D14D1C00420AA1 /* MediaStreamTrackEvent.h in Headers */, -
trunk/Source/WebCore/rendering/TextAutoSizing.cpp
r226007 r226168 38 38 #include "RenderTextFragment.h" 39 39 #include "RenderTreeBuilder.h" 40 #include "RenderTree UpdaterFirstLetter.h"40 #include "RenderTreeBuilderFirstLetter.h" 41 41 #include "RenderTreeUpdaterListItem.h" 42 42 #include "StyleResolver.h" … … 174 174 if (!block) 175 175 continue; 176 // FIXME: All render tree mutations should be done by RenderTreeUpdater commit. 177 RenderTreeUpdater::FirstLetter::update(*block); 176 builder.updateAfterDescendants(*block); 178 177 } 179 178 -
trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp
r226140 r226168 33 33 #include "RenderTableRow.h" 34 34 #include "RenderText.h" 35 #include "RenderTreeBuilderFirstLetter.h" 35 36 #include "RenderTreeBuilderTable.h" 36 #include "RenderTreeUpdater.h"37 37 38 38 namespace WebCore { … … 42 42 RenderTreeBuilder::RenderTreeBuilder(RenderView& view) 43 43 : m_view(view) 44 , m_firstLetterBuilder(std::make_unique<FirstLetter>(*this)) 44 45 , m_tableBuilder(std::make_unique<Table>(*this)) 45 46 { … … 64 65 65 66 if (is<RenderTableRow>(parent)) { 66 m_tableBuilder->findOrCreateParentForChild(downcast<RenderTableRow>(parent), *child, beforeChild).addChild(*this, WTFMove(child), beforeChild);67 tableBuilder().findOrCreateParentForChild(downcast<RenderTableRow>(parent), *child, beforeChild).addChild(*this, WTFMove(child), beforeChild); 67 68 return; 68 69 } 69 70 70 71 if (is<RenderTableSection>(parent)) { 71 auto& parentCandidate = m_tableBuilder->findOrCreateParentForChild(downcast<RenderTableSection>(parent), *child, beforeChild);72 auto& parentCandidate = tableBuilder().findOrCreateParentForChild(downcast<RenderTableSection>(parent), *child, beforeChild); 72 73 if (&parent != &parentCandidate) { 73 74 insertChild(parentCandidate, WTFMove(child), beforeChild); … … 89 90 { 90 91 insertChild(position.parent(), WTFMove(child), position.nextSibling()); 92 } 93 94 void RenderTreeBuilder::updateAfterDescendants(RenderElement& renderer) 95 { 96 if (is<RenderBlock>(renderer)) 97 firstLetterBuilder().updateAfterDescendants(downcast<RenderBlock>(renderer)); 91 98 } 92 99 -
trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h
r226127 r226168 41 41 void insertChild(RenderTreePosition&, RenderPtr<RenderObject>); 42 42 43 void updateAfterDescendants(RenderElement&); 44 43 45 // This avoids having to convert all sites that need RenderTreeBuilder in one go. 44 46 // FIXME: Remove. … … 46 48 47 49 private: 50 class FirstLetter; 48 51 class Table; 49 52 50 53 void rubyRunInsertChild(RenderRubyRun&, RenderPtr<RenderObject> child, RenderObject* beforeChild); 51 54 55 FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; } 56 Table& tableBuilder() { return *m_tableBuilder; } 57 52 58 RenderView& m_view; 53 59 54 60 RenderTreeBuilder* m_previous { nullptr }; 61 static RenderTreeBuilder* s_current; 62 63 std::unique_ptr<FirstLetter> m_firstLetterBuilder; 55 64 std::unique_ptr<Table> m_tableBuilder; 56 static RenderTreeBuilder* s_current;57 65 }; 58 66 -
trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.cpp
r226165 r226168 23 23 24 24 #include "config.h" 25 #include "RenderTree UpdaterFirstLetter.h"25 #include "RenderTreeBuilderFirstLetter.h" 26 26 27 27 #include "FontCascade.h" … … 102 102 } 103 103 104 static void updateFirstLetterStyle(RenderBlock& firstLetterBlock, RenderObject& currentChild) 104 static bool supportsFirstLetter(RenderBlock& block) 105 { 106 if (is<RenderButton>(block)) 107 return true; 108 if (!is<RenderBlockFlow>(block)) 109 return false; 110 if (is<RenderSVGText>(block)) 111 return false; 112 if (is<RenderRubyRun>(block)) 113 return false; 114 return block.canHaveGeneratedChildren(); 115 } 116 117 RenderTreeBuilder::FirstLetter::FirstLetter(RenderTreeBuilder& builder) 118 : m_builder(builder) 119 { 120 } 121 122 void RenderTreeBuilder::FirstLetter::updateAfterDescendants(RenderBlock& block) 123 { 124 if (!block.style().hasPseudoStyle(FIRST_LETTER)) 125 return; 126 if (!supportsFirstLetter(block)) 127 return; 128 129 // FIXME: This should be refactored, firstLetterContainer is not needed. 130 RenderObject* firstLetterRenderer; 131 RenderElement* firstLetterContainer; 132 block.getFirstLetter(firstLetterRenderer, firstLetterContainer); 133 134 if (!firstLetterRenderer) 135 return; 136 137 // Other containers are handled when updating their renderers. 138 if (&block != firstLetterContainer) 139 return; 140 141 // If the child already has style, then it has already been created, so we just want 142 // to update it. 143 if (firstLetterRenderer->parent()->style().styleType() == FIRST_LETTER) { 144 updateStyle(block, *firstLetterRenderer); 145 return; 146 } 147 148 if (!is<RenderText>(firstLetterRenderer)) 149 return; 150 151 createRenderers(block, downcast<RenderText>(*firstLetterRenderer)); 152 } 153 154 void RenderTreeBuilder::FirstLetter::updateStyle(RenderBlock& firstLetterBlock, RenderObject& currentChild) 105 155 { 106 156 RenderElement* firstLetter = currentChild.parent(); … … 126 176 downcast<RenderText>(*child).removeAndDestroyTextBoxes(); 127 177 auto toMove = firstLetter->takeChild(*child); 128 RenderTreeBuilder::current()->insertChild(*newFirstLetter, WTFMove(toMove));178 m_builder.insertChild(*newFirstLetter, WTFMove(toMove)); 129 179 } 130 180 … … 137 187 } 138 188 firstLetterContainer->removeAndDestroyChild(*firstLetter); 139 RenderTreeBuilder::current()->insertChild(*firstLetterContainer, WTFMove(newFirstLetter), nextSibling); 140 } else 141 firstLetter->setStyle(WTFMove(pseudoStyle)); 142 } 143 144 static void createFirstLetterRenderer(RenderBlock& firstLetterBlock, RenderText& currentTextChild) 189 m_builder.insertChild(*firstLetterContainer, WTFMove(newFirstLetter), nextSibling); 190 return; 191 } 192 193 firstLetter->setStyle(WTFMove(pseudoStyle)); 194 } 195 196 void RenderTreeBuilder::FirstLetter::createRenderers(RenderBlock& firstLetterBlock, RenderText& currentTextChild) 145 197 { 146 198 RenderElement* firstLetterContainer = currentTextChild.parent(); … … 155 207 156 208 auto& firstLetter = *newFirstLetter; 157 RenderTreeBuilder::current()->insertChild(*firstLetterContainer, WTFMove(newFirstLetter), ¤tTextChild);209 m_builder.insertChild(*firstLetterContainer, WTFMove(newFirstLetter), ¤tTextChild); 158 210 159 211 // The original string is going to be either a generated content string or a DOM node's … … 199 251 200 252 RenderTextFragment& remainingText = *newRemainingText; 201 RenderTreeBuilder::current()->insertChild(*firstLetterContainer, WTFMove(newRemainingText), beforeChild);253 m_builder.insertChild(*firstLetterContainer, WTFMove(newRemainingText), beforeChild); 202 254 remainingText.setFirstLetter(firstLetter); 203 255 firstLetter.setFirstLetterRemainingText(remainingText); … … 206 258 auto letter = createRenderer<RenderTextFragment>(firstLetterBlock.document(), oldText, 0, length); 207 259 208 RenderTreeBuilder::current()->insertChild(firstLetter, WTFMove(letter)); 209 } 210 } 211 212 static bool supportsFirstLetter(RenderBlock& block) 213 { 214 if (is<RenderButton>(block)) 215 return true; 216 if (!is<RenderBlockFlow>(block)) 217 return false; 218 if (is<RenderSVGText>(block)) 219 return false; 220 if (is<RenderRubyRun>(block)) 221 return false; 222 return block.canHaveGeneratedChildren(); 223 } 224 225 void RenderTreeUpdater::FirstLetter::update(RenderBlock& block) 226 { 227 if (!block.style().hasPseudoStyle(FIRST_LETTER)) 228 return; 229 if (!supportsFirstLetter(block)) 230 return; 231 232 // FIXME: This should be refactored, firstLetterContainer is not needed. 233 RenderObject* firstLetterRenderer; 234 RenderElement* firstLetterContainer; 235 block.getFirstLetter(firstLetterRenderer, firstLetterContainer); 236 237 if (!firstLetterRenderer) 238 return; 239 240 // Other containers are handled when updating their renderers. 241 if (&block != firstLetterContainer) 242 return; 243 244 // If the child already has style, then it has already been created, so we just want 245 // to update it. 246 if (firstLetterRenderer->parent()->style().styleType() == FIRST_LETTER) { 247 updateFirstLetterStyle(block, *firstLetterRenderer); 248 return; 249 } 250 251 if (!is<RenderText>(firstLetterRenderer)) 252 return; 253 254 createFirstLetterRenderer(block, downcast<RenderText>(*firstLetterRenderer)); 260 m_builder.insertChild(firstLetter, WTFMove(letter)); 261 } 255 262 } 256 263 -
trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.h
r226165 r226168 26 26 #pragma once 27 27 28 #include "RenderTree Updater.h"28 #include "RenderTreeBuilder.h" 29 29 30 30 namespace WebCore { 31 31 32 class Render Block;32 class RenderElement; 33 33 34 class RenderTree Updater::FirstLetter {34 class RenderTreeBuilder::FirstLetter { 35 35 public: 36 static void update(RenderBlock&); 36 FirstLetter(RenderTreeBuilder&); 37 38 void updateAfterDescendants(RenderBlock&); 39 40 private: 41 void updateStyle(RenderBlock& firstLetterBlock, RenderObject& currentChild); 42 void createRenderers(RenderBlock& firstLetterBlock, RenderText& currentTextChild); 43 44 RenderTreeBuilder& m_builder; 37 45 }; 38 46 -
trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
r226013 r226168 42 42 #include "RenderInline.h" 43 43 #include "RenderListItem.h" 44 #include "RenderTree UpdaterFirstLetter.h"44 #include "RenderTreeBuilderFirstLetter.h" 45 45 #include "RenderTreeUpdaterGeneratedContent.h" 46 46 #include "RenderTreeUpdaterListItem.h" … … 272 272 return; 273 273 274 m_builder.updateAfterDescendants(*renderer); 275 274 276 // These functions do render tree mutations that require descendant renderers. 275 if (is<RenderBlock>(*renderer))276 FirstLetter::update(downcast<RenderBlock>(*renderer));277 277 if (is<RenderListItem>(*renderer)) 278 278 ListItem::updateMarker(m_builder, downcast<RenderListItem>(*renderer)); -
trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.h
r226013 r226168 52 52 static void tearDownRenderer(Text&); 53 53 54 class FirstLetter;55 54 class ListItem; 56 55
Note: See TracChangeset
for help on using the changeset viewer.