Changeset 160259 in webkit
- Timestamp:
- Dec 6, 2013, 4:33:42 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r160258 r160259 1 2013-12-06 Antti Koivisto <antti@apple.com> 2 3 Save original text for RenderText to a map 4 https://bugs.webkit.org/show_bug.cgi?id=125278 5 6 Reviewed by Darin Adler. 7 8 Currently the original text is fetched from the Text node. This is one of the few things 9 where we use the RenderText node pointer and is stopping Text nodes from being anonymous. 10 11 It is very rare of original text to differ from the actual text so we can just squirrel the 12 original to a map when it differs. This is also simplifies the code. 13 14 * rendering/RenderQuote.cpp: 15 (WebCore::RenderQuote::styleDidChange): 16 (WebCore::RenderQuote::updateDepth): 17 * rendering/RenderText.cpp: 18 (WebCore::originalTextMap): 19 (WebCore::RenderText::RenderText): 20 (WebCore::RenderText::~RenderText): 21 (WebCore::RenderText::styleDidChange): 22 (WebCore::RenderText::originalText): 23 (WebCore::RenderText::setTextInternal): 24 (WebCore::RenderText::setText): 25 * rendering/RenderText.h: 26 * rendering/RenderTextFragment.cpp: 27 * rendering/RenderTextFragment.h: 28 1 29 2013-12-04 Jer Noble <jer.noble@apple.com> 2 30 -
trunk/Source/WebCore/rendering/RenderQuote.cpp
r158163 r160259 63 63 { 64 64 RenderText::styleDidChange(diff, oldStyle); 65 setText(originalText() );65 setText(originalText(), true); 66 66 } 67 67 … … 453 453 return; 454 454 m_depth = depth; 455 setText(originalText() );455 setText(originalText(), true); 456 456 } 457 457 -
trunk/Source/WebCore/rendering/RenderText.cpp
r160236 r160259 105 105 }; 106 106 107 108 typedef HashMap<const RenderText*, String> OriginalTextMap; 109 110 static OriginalTextMap& originalTextMap() 111 { 112 DEFINE_STATIC_LOCAL(OriginalTextMap, map, ()); 113 return map; 114 } 115 107 116 static void makeCapitalized(String* string, UChar previous) 108 117 { … … 155 164 , m_knownToHaveNoOverflowAndNoFallbackFonts(false) 156 165 , m_useBackslashAsYenSymbol(false) 166 , m_originalTextDiffersFromRendered(false) 157 167 #if ENABLE(IOS_TEXT_AUTOSIZING) 158 168 , m_candidateComputedTextSize(0) … … 178 188 , m_knownToHaveNoOverflowAndNoFallbackFonts(false) 179 189 , m_useBackslashAsYenSymbol(false) 190 , m_originalTextDiffersFromRendered(false) 180 191 #if ENABLE(IOS_TEXT_AUTOSIZING) 181 192 , m_candidateComputedTextSize(0) … … 193 204 } 194 205 195 #ifndef NDEBUG196 197 206 RenderText::~RenderText() 198 207 { 199 } 200 201 #endif 208 if (m_originalTextDiffersFromRendered) 209 originalTextMap().remove(this); 210 } 202 211 203 212 const char* RenderText::renderName() const … … 254 263 ETextSecurity oldSecurity = oldStyle ? oldStyle->textSecurity() : TSNONE; 255 264 if (needsResetText || oldTransform != newStyle.textTransform() || oldSecurity != newStyle.textSecurity()) 256 transformText();265 RenderText::setText(originalText(), true); 257 266 } 258 267 … … 280 289 String RenderText::originalText() const 281 290 { 282 return textNode() ? textNode()->data() : String();291 return m_originalTextDiffersFromRendered ? originalTextMap().get(this) : m_text; 283 292 } 284 293 … … 971 980 } 972 981 973 void RenderText::transformText()974 {975 String textToTransform = originalText();976 if (!textToTransform.isNull())977 setText(textToTransform, true);978 }979 980 982 static inline bool isInlineFlowOrEmptyText(const RenderObject* o) 981 983 { … … 1024 1026 { 1025 1027 ASSERT(!text.isNull()); 1028 1029 if (m_originalTextDiffersFromRendered) { 1030 originalTextMap().remove(this); 1031 m_originalTextDiffersFromRendered = false; 1032 } 1033 String originalText = text; 1034 1026 1035 m_text = text; 1027 1036 … … 1064 1073 m_isAllASCII = m_text.containsOnlyASCII(); 1065 1074 m_canUseSimpleFontCodePath = computeCanUseSimpleFontCodePath(); 1075 1076 if (m_text != originalText) { 1077 originalTextMap().add(this, originalText); 1078 m_originalTextDiffersFromRendered = true; 1079 } 1066 1080 } 1067 1081 … … 1092 1106 ASSERT(!text.isNull()); 1093 1107 1094 if (!force && m_text == text)1108 if (!force && text == originalText()) 1095 1109 return; 1096 1110 -
trunk/Source/WebCore/rendering/RenderText.h
r160236 r160259 38 38 RenderText(Text&, const String&); 39 39 RenderText(Document&, const String&); 40 #ifndef NDEBUG 40 41 41 virtual ~RenderText(); 42 #endif43 42 44 43 virtual const char* renderName() const OVERRIDE; … … 107 106 virtual void setText(const String&, bool force = false); 108 107 void setTextWithOffset(const String&, unsigned offset, unsigned len, bool force = false); 109 110 virtual void transformText();111 108 112 109 virtual bool canBeSelectionLeaf() const OVERRIDE { return true; } … … 205 202 mutable bool m_knownToHaveNoOverflowAndNoFallbackFonts : 1; 206 203 bool m_useBackslashAsYenSymbol : 1; 204 bool m_originalTextDiffersFromRendered : 1; 207 205 208 206 #if ENABLE(IOS_TEXT_AUTOSIZING) -
trunk/Source/WebCore/rendering/RenderTextFragment.cpp
r158561 r160259 59 59 } 60 60 61 String RenderTextFragment::originalText() const62 {63 String result = textNode() ? textNode()->data() : contentString();64 return result.substring(start(), end());65 }66 67 61 bool RenderTextFragment::canBeSelectionLeaf() const 68 62 { … … 104 98 } 105 99 106 void RenderTextFragment::transformText()107 {108 // Don't reset first-letter here because we are only transforming the truncated fragment.109 String textToTransform = originalText();110 if (!textToTransform.isNull())111 RenderText::setText(textToTransform, true);112 }113 114 100 UChar RenderTextFragment::previousCharacter() const 115 101 { -
trunk/Source/WebCore/rendering/RenderTextFragment.h
r159591 r160259 51 51 52 52 StringImpl* contentString() const { return m_contentString.impl(); } 53 virtual String originalText() const OVERRIDE;54 53 55 54 virtual void setText(const String&, bool force = false) OVERRIDE; 56 57 virtual void transformText() OVERRIDE;58 55 59 56 const String& altText() const { return m_altText; } -
trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
r158998 r160259 39 39 #include "StyleFontSizeFunctions.h" 40 40 #include "StyleResolver.h" 41 #include "Text.h" 41 42 #include "VisiblePosition.h" 42 43 … … 75 76 } 76 77 78 String RenderSVGInlineText::originalText() const 79 { 80 return textNode().data(); 81 } 82 77 83 void RenderSVGInlineText::setTextInternal(const String& text) 78 84 { -
trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h
r158718 r160259 53 53 virtual const char* renderName() const OVERRIDE { return "RenderSVGInlineText"; } 54 54 55 virtual String originalText() const OVERRIDE; 55 56 virtual void setTextInternal(const String&) OVERRIDE; 56 57 virtual void styleDidChange(StyleDifference, const RenderStyle*) OVERRIDE;
Note:
See TracChangeset
for help on using the changeset viewer.