Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: Source/core/layout/LayoutText.cpp

Issue 1119663002: Making Unicode character names consistent (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase patch Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/layout/LayoutListMarker.cpp ('k') | Source/core/layout/LayoutTreeAsText.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * (C) 1999 Lars Knoll (knoll@kde.org) 2 * (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Dirk Mueller (mueller@kde.org) 3 * (C) 2000 Dirk Mueller (mueller@kde.org)
4 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net)
6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) 6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 if (string->isNull()) 101 if (string->isNull())
102 return; 102 return;
103 103
104 unsigned length = string->length(); 104 unsigned length = string->length();
105 const StringImpl& input = *string->impl(); 105 const StringImpl& input = *string->impl();
106 106
107 if (length >= std::numeric_limits<unsigned>::max()) 107 if (length >= std::numeric_limits<unsigned>::max())
108 CRASH(); 108 CRASH();
109 109
110 StringBuffer<UChar> stringWithPrevious(length + 1); 110 StringBuffer<UChar> stringWithPrevious(length + 1);
111 stringWithPrevious[0] = previous == noBreakSpace ? space : previous; 111 stringWithPrevious[0] = previous == noBreakSpaceCharacter ? spaceCharacter : previous;
112 for (unsigned i = 1; i < length + 1; i++) { 112 for (unsigned i = 1; i < length + 1; i++) {
113 // Replace &nbsp with a real space since ICU no longer treats &nbsp as a word separator. 113 // Replace &nbsp with a real space since ICU no longer treats &nbsp as a word separator.
114 if (input[i - 1] == noBreakSpace) 114 if (input[i - 1] == noBreakSpaceCharacter)
115 stringWithPrevious[i] = space; 115 stringWithPrevious[i] = spaceCharacter;
116 else 116 else
117 stringWithPrevious[i] = input[i - 1]; 117 stringWithPrevious[i] = input[i - 1];
118 } 118 }
119 119
120 TextBreakIterator* boundary = wordBreakIterator(stringWithPrevious.character s(), length + 1); 120 TextBreakIterator* boundary = wordBreakIterator(stringWithPrevious.character s(), length + 1);
121 if (!boundary) 121 if (!boundary)
122 return; 122 return;
123 123
124 StringBuilder result; 124 StringBuilder result;
125 result.reserveCapacity(length); 125 result.reserveCapacity(length);
126 126
127 int32_t endOfWord; 127 int32_t endOfWord;
128 int32_t startOfWord = boundary->first(); 128 int32_t startOfWord = boundary->first();
129 for (endOfWord = boundary->next(); endOfWord != TextBreakDone; startOfWord = endOfWord, endOfWord = boundary->next()) { 129 for (endOfWord = boundary->next(); endOfWord != TextBreakDone; startOfWord = endOfWord, endOfWord = boundary->next()) {
130 if (startOfWord) // Ignore first char of previous string 130 if (startOfWord) // Ignore first char of previous string
131 result.append(input[startOfWord - 1] == noBreakSpace ? noBreakSpace : toTitleCase(stringWithPrevious[startOfWord])); 131 result.append(input[startOfWord - 1] == noBreakSpaceCharacter ? noBr eakSpaceCharacter : toTitleCase(stringWithPrevious[startOfWord]));
132 for (int i = startOfWord + 1; i < endOfWord; i++) 132 for (int i = startOfWord + 1; i < endOfWord; i++)
133 result.append(input[i - 1]); 133 result.append(input[i - 1]);
134 } 134 }
135 135
136 *string = result.toString(); 136 *string = result.toString();
137 } 137 }
138 138
139 LayoutText::LayoutText(Node* node, PassRefPtr<StringImpl> str) 139 LayoutText::LayoutText(Node* node, PassRefPtr<StringImpl> str)
140 : LayoutObject(!node || node->isDocumentNode() ? 0 : node) 140 : LayoutObject(!node || node->isDocumentNode() ? 0 : node)
141 , m_hasTab(false) 141 , m_hasTab(false)
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 { 307 {
308 if (node()) 308 if (node())
309 return blink::plainText(rangeOfContents(node()).get()); 309 return blink::plainText(rangeOfContents(node()).get());
310 310
311 // FIXME: this is just a stopgap until TextIterator is adapted to support ge nerated text. 311 // FIXME: this is just a stopgap until TextIterator is adapted to support ge nerated text.
312 StringBuilder plainTextBuilder; 312 StringBuilder plainTextBuilder;
313 for (InlineTextBox* textBox = firstTextBox(); textBox; textBox = textBox->ne xtTextBox()) { 313 for (InlineTextBox* textBox = firstTextBox(); textBox; textBox = textBox->ne xtTextBox()) {
314 String text = m_text.substring(textBox->start(), textBox->len()).simplif yWhiteSpace(WTF::DoNotStripWhiteSpace); 314 String text = m_text.substring(textBox->start(), textBox->len()).simplif yWhiteSpace(WTF::DoNotStripWhiteSpace);
315 plainTextBuilder.append(text); 315 plainTextBuilder.append(text);
316 if (textBox->nextTextBox() && textBox->nextTextBox()->start() > textBox- >end() && text.length() && !text.right(1).containsOnlyWhitespace()) 316 if (textBox->nextTextBox() && textBox->nextTextBox()->start() > textBox- >end() && text.length() && !text.right(1).containsOnlyWhitespace())
317 plainTextBuilder.append(space); 317 plainTextBuilder.append(spaceCharacter);
318 } 318 }
319 return plainTextBuilder.toString(); 319 return plainTextBuilder.toString();
320 } 320 }
321 321
322 void LayoutText::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumu latedOffset) const 322 void LayoutText::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumu latedOffset) const
323 { 323 {
324 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) 324 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox())
325 rects.append(enclosingIntRect(FloatRect(FloatPoint(accumulatedOffset) + box->topLeft().toFloatPoint(), box->size().toFloatSize()))); 325 rects.append(enclosingIntRect(FloatRect(FloatPoint(accumulatedOffset) + box->topLeft().toFloatPoint(), box->size().toFloatSize())));
326 } 326 }
327 327
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 floatMaxWidth = m_maxWidth; 761 floatMaxWidth = m_maxWidth;
762 762
763 firstLineMinWidth = m_firstLineMinWidth; 763 firstLineMinWidth = m_firstLineMinWidth;
764 lastLineMinWidth = m_lastLineLineMinWidth; 764 lastLineMinWidth = m_lastLineLineMinWidth;
765 765
766 hasBreakableChar = m_hasBreakableChar; 766 hasBreakableChar = m_hasBreakableChar;
767 hasBreak = m_hasBreak; 767 hasBreak = m_hasBreak;
768 768
769 ASSERT(m_text); 769 ASSERT(m_text);
770 StringImpl& text = *m_text.impl(); 770 StringImpl& text = *m_text.impl();
771 if (text[0] == space || (text[0] == newlineCharacter && !style()->preserveNe wline()) || text[0] == characterTabulation) { 771 if (text[0] == spaceCharacter || (text[0] == newlineCharacter && !style()->p reserveNewline()) || text[0] == tabulationCharacter) {
772 const Font& font = style()->font(); // FIXME: This ignores first-line. 772 const Font& font = style()->font(); // FIXME: This ignores first-line.
773 if (stripFrontSpaces) { 773 if (stripFrontSpaces) {
774 const UChar spaceChar = space; 774 const UChar spaceChar = spaceCharacter;
775 TextRun run = constructTextRun(this, font, &spaceChar, 1, styleRef() , direction); 775 TextRun run = constructTextRun(this, font, &spaceChar, 1, styleRef() , direction);
776 run.setCodePath(canUseSimpleFontCodePath() ? TextRun::ForceSimple : TextRun::ForceComplex); 776 run.setCodePath(canUseSimpleFontCodePath() ? TextRun::ForceSimple : TextRun::ForceComplex);
777 float spaceWidth = font.width(run); 777 float spaceWidth = font.width(run);
778 floatMaxWidth -= spaceWidth; 778 floatMaxWidth -= spaceWidth;
779 } else { 779 } else {
780 floatMaxWidth += font.fontDescription().wordSpacing(); 780 floatMaxWidth += font.fontDescription().wordSpacing();
781 } 781 }
782 } 782 }
783 783
784 stripFrontSpaces = collapseWhiteSpace && m_hasEndWhiteSpace; 784 stripFrontSpaces = collapseWhiteSpace && m_hasEndWhiteSpace;
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 bool previousCharacterIsSpace = isSpace; 931 bool previousCharacterIsSpace = isSpace;
932 bool isNewline = false; 932 bool isNewline = false;
933 if (c == newlineCharacter) { 933 if (c == newlineCharacter) {
934 if (styleToUse.preserveNewline()) { 934 if (styleToUse.preserveNewline()) {
935 m_hasBreak = true; 935 m_hasBreak = true;
936 isNewline = true; 936 isNewline = true;
937 isSpace = false; 937 isSpace = false;
938 } else { 938 } else {
939 isSpace = true; 939 isSpace = true;
940 } 940 }
941 } else if (c == characterTabulation) { 941 } else if (c == tabulationCharacter) {
942 if (!styleToUse.collapseWhiteSpace()) { 942 if (!styleToUse.collapseWhiteSpace()) {
943 m_hasTab = true; 943 m_hasTab = true;
944 isSpace = false; 944 isSpace = false;
945 } else { 945 } else {
946 isSpace = true; 946 isSpace = true;
947 } 947 }
948 } else { 948 } else {
949 isSpace = c == space; 949 isSpace = c == spaceCharacter;
950 } 950 }
951 951
952 bool isBreakableLocation = isNewline || (isSpace && styleToUse.autoWrap( )); 952 bool isBreakableLocation = isNewline || (isSpace && styleToUse.autoWrap( ));
953 if (!i) 953 if (!i)
954 m_hasBreakableStart = isBreakableLocation; 954 m_hasBreakableStart = isBreakableLocation;
955 if (i == len - 1) { 955 if (i == len - 1) {
956 m_hasBreakableEnd = isBreakableLocation; 956 m_hasBreakableEnd = isBreakableLocation;
957 m_hasEndWhiteSpace = isNewline || isSpace; 957 m_hasEndWhiteSpace = isNewline || isSpace;
958 } 958 }
959 959
960 if (!ignoringSpaces && styleToUse.collapseWhiteSpace() && previousCharac terIsSpace && isSpace) 960 if (!ignoringSpaces && styleToUse.collapseWhiteSpace() && previousCharac terIsSpace && isSpace)
961 ignoringSpaces = true; 961 ignoringSpaces = true;
962 962
963 if (ignoringSpaces && !isSpace) 963 if (ignoringSpaces && !isSpace)
964 ignoringSpaces = false; 964 ignoringSpaces = false;
965 965
966 // Ignore spaces and soft hyphens 966 // Ignore spaces and soft hyphens
967 if (ignoringSpaces) { 967 if (ignoringSpaces) {
968 ASSERT(lastWordBoundary == i); 968 ASSERT(lastWordBoundary == i);
969 lastWordBoundary++; 969 lastWordBoundary++;
970 continue; 970 continue;
971 } 971 }
972 if (c == softHyphen) { 972 if (c == softHyphenCharacter) {
973 currMaxWidth += widthFromCache(f, lastWordBoundary, i - lastWordBoun dary, leadWidth + currMaxWidth, textDirection, &fallbackFonts, &glyphOverflow); 973 currMaxWidth += widthFromCache(f, lastWordBoundary, i - lastWordBoun dary, leadWidth + currMaxWidth, textDirection, &fallbackFonts, &glyphOverflow);
974 if (firstGlyphLeftOverflow < 0) 974 if (firstGlyphLeftOverflow < 0)
975 firstGlyphLeftOverflow = glyphOverflow.left; 975 firstGlyphLeftOverflow = glyphOverflow.left;
976 lastWordBoundary = i + 1; 976 lastWordBoundary = i + 1;
977 continue; 977 continue;
978 } 978 }
979 979
980 bool hasBreak = breakIterator.isBreakable(i, nextBreakable, breakAll ? L ineBreakType::BreakAll : keepAll ? LineBreakType::KeepAll : LineBreakType::Norma l); 980 bool hasBreak = breakIterator.isBreakable(i, nextBreakable, breakAll ? L ineBreakType::BreakAll : keepAll ? LineBreakType::KeepAll : LineBreakType::Norma l);
981 bool betweenWords = true; 981 bool betweenWords = true;
982 int j = i; 982 int j = i;
983 while (c != newlineCharacter && c != space && c != characterTabulation & & (c != softHyphen)) { 983 while (c != newlineCharacter && c != spaceCharacter && c != tabulationCh aracter && (c != softHyphenCharacter)) {
984 j++; 984 j++;
985 if (j == len) 985 if (j == len)
986 break; 986 break;
987 c = uncheckedCharacterAt(j); 987 c = uncheckedCharacterAt(j);
988 if (breakIterator.isBreakable(j, nextBreakable) && characterAt(j - 1 ) != softHyphen) 988 if (breakIterator.isBreakable(j, nextBreakable) && characterAt(j - 1 ) != softHyphenCharacter)
989 break; 989 break;
990 if (breakAll) { 990 if (breakAll) {
991 betweenWords = false; 991 betweenWords = false;
992 break; 992 break;
993 } 993 }
994 } 994 }
995 995
996 // Terminate word boundary at bidi run boundary. 996 // Terminate word boundary at bidi run boundary.
997 if (run) 997 if (run)
998 j = std::min(j, run->stop() + 1); 998 j = std::min(j, run->stop() + 1);
999 int wordLen = j - i; 999 int wordLen = j - i;
1000 if (wordLen) { 1000 if (wordLen) {
1001 bool isSpace = (j < len) && c == space; 1001 bool isSpace = (j < len) && c == spaceCharacter;
1002 1002
1003 // Non-zero only when kerning is enabled, in which case we measure w ords with their trailing 1003 // Non-zero only when kerning is enabled, in which case we measure w ords with their trailing
1004 // space, then subtract its width. 1004 // space, then subtract its width.
1005 float wordTrailingSpaceWidth = 0; 1005 float wordTrailingSpaceWidth = 0;
1006 if (isSpace && (f.fontDescription().typesettingFeatures() & Kerning) ) { 1006 if (isSpace && (f.fontDescription().typesettingFeatures() & Kerning) ) {
1007 ASSERT(textDirection >=0 && textDirection <= 1); 1007 ASSERT(textDirection >=0 && textDirection <= 1);
1008 if (!cachedWordTrailingSpaceWidth[textDirection]) 1008 if (!cachedWordTrailingSpaceWidth[textDirection])
1009 cachedWordTrailingSpaceWidth[textDirection] = f.width(constr uctTextRun(this, f, &space, 1, styleToUse, textDirection)) + wordSpacing; 1009 cachedWordTrailingSpaceWidth[textDirection] = f.width(constr uctTextRun(this, f, &spaceCharacter, 1, styleToUse, textDirection)) + wordSpacin g;
1010 wordTrailingSpaceWidth = cachedWordTrailingSpaceWidth[textDirect ion]; 1010 wordTrailingSpaceWidth = cachedWordTrailingSpaceWidth[textDirect ion];
1011 } 1011 }
1012 1012
1013 float w; 1013 float w;
1014 if (wordTrailingSpaceWidth && isSpace) { 1014 if (wordTrailingSpaceWidth && isSpace) {
1015 w = widthFromCache(f, i, wordLen + 1, leadWidth + currMaxWidth, textDirection, &fallbackFonts, &glyphOverflow) - wordTrailingSpaceWidth; 1015 w = widthFromCache(f, i, wordLen + 1, leadWidth + currMaxWidth, textDirection, &fallbackFonts, &glyphOverflow) - wordTrailingSpaceWidth;
1016 } else { 1016 } else {
1017 w = widthFromCache(f, i, wordLen, leadWidth + currMaxWidth, text Direction, &fallbackFonts, &glyphOverflow); 1017 w = widthFromCache(f, i, wordLen, leadWidth + currMaxWidth, text Direction, &fallbackFonts, &glyphOverflow);
1018 if (c == softHyphen) 1018 if (c == softHyphenCharacter)
1019 currMinWidth += hyphenWidth(this, f, textDirection); 1019 currMinWidth += hyphenWidth(this, f, textDirection);
1020 } 1020 }
1021 1021
1022 if (firstGlyphLeftOverflow < 0) 1022 if (firstGlyphLeftOverflow < 0)
1023 firstGlyphLeftOverflow = glyphOverflow.left; 1023 firstGlyphLeftOverflow = glyphOverflow.left;
1024 currMinWidth += w; 1024 currMinWidth += w;
1025 if (betweenWords) { 1025 if (betweenWords) {
1026 if (lastWordBoundary == i) 1026 if (lastWordBoundary == i)
1027 currMaxWidth += w; 1027 currMaxWidth += w;
1028 else 1028 else
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 } 1132 }
1133 return true; 1133 return true;
1134 } 1134 }
1135 1135
1136 bool LayoutText::containsOnlyWhitespace(unsigned from, unsigned len) const 1136 bool LayoutText::containsOnlyWhitespace(unsigned from, unsigned len) const
1137 { 1137 {
1138 ASSERT(m_text); 1138 ASSERT(m_text);
1139 StringImpl& text = *m_text.impl(); 1139 StringImpl& text = *m_text.impl();
1140 unsigned currPos; 1140 unsigned currPos;
1141 for (currPos = from; 1141 for (currPos = from;
1142 currPos < from + len && (text[currPos] == newlineCharacter || text[currPos] == space || text[currPos] == characterTabulation); 1142 currPos < from + len && (text[currPos] == newlineCharacter || text[currPos] == spaceCharacter || text[currPos] == tabulationCharacter);
1143 currPos++) { } 1143 currPos++) { }
1144 return currPos >= (from + len); 1144 return currPos >= (from + len);
1145 } 1145 }
1146 1146
1147 FloatPoint LayoutText::firstRunOrigin() const 1147 FloatPoint LayoutText::firstRunOrigin() const
1148 { 1148 {
1149 return IntPoint(firstRunX(), firstRunY()); 1149 return IntPoint(firstRunX(), firstRunY());
1150 } 1150 }
1151 1151
1152 float LayoutText::firstRunX() const 1152 float LayoutText::firstRunX() const
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1289 } 1289 }
1290 1290
1291 UChar LayoutText::previousCharacter() const 1291 UChar LayoutText::previousCharacter() const
1292 { 1292 {
1293 // find previous text layoutObject if one exists 1293 // find previous text layoutObject if one exists
1294 const LayoutObject* previousText = previousInPreOrder(); 1294 const LayoutObject* previousText = previousInPreOrder();
1295 for (; previousText; previousText = previousText->previousInPreOrder()) { 1295 for (; previousText; previousText = previousText->previousInPreOrder()) {
1296 if (!isInlineFlowOrEmptyText(previousText)) 1296 if (!isInlineFlowOrEmptyText(previousText))
1297 break; 1297 break;
1298 } 1298 }
1299 UChar prev = space; 1299 UChar prev = spaceCharacter;
1300 if (previousText && previousText->isText()) { 1300 if (previousText && previousText->isText()) {
1301 if (StringImpl* previousString = toLayoutText(previousText)->text().impl ()) 1301 if (StringImpl* previousString = toLayoutText(previousText)->text().impl ())
1302 prev = (*previousString)[previousString->length() - 1]; 1302 prev = (*previousString)[previousString->length() - 1];
1303 } 1303 }
1304 return prev; 1304 return prev;
1305 } 1305 }
1306 1306
1307 void LayoutText::addLayerHitTestRects(LayerHitTestRects&, const DeprecatedPaintL ayer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& containerR ect) const 1307 void LayoutText::addLayerHitTestRects(LayerHitTestRects&, const DeprecatedPaintL ayer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& containerR ect) const
1308 { 1308 {
1309 // Text nodes aren't event targets, so don't descend any further. 1309 // Text nodes aren't event targets, so don't descend any further.
(...skipping 26 matching lines...) Expand all
1336 1336
1337 if (style()) { 1337 if (style()) {
1338 applyTextTransform(style(), m_text, previousCharacter()); 1338 applyTextTransform(style(), m_text, previousCharacter());
1339 1339
1340 // We use the same characters here as for list markers. 1340 // We use the same characters here as for list markers.
1341 // See the listMarkerText function in LayoutListMarker.cpp. 1341 // See the listMarkerText function in LayoutListMarker.cpp.
1342 switch (style()->textSecurity()) { 1342 switch (style()->textSecurity()) {
1343 case TSNONE: 1343 case TSNONE:
1344 break; 1344 break;
1345 case TSCIRCLE: 1345 case TSCIRCLE:
1346 secureText(whiteBullet); 1346 secureText(whiteBulletCharacter);
1347 break; 1347 break;
1348 case TSDISC: 1348 case TSDISC:
1349 secureText(bullet); 1349 secureText(bulletCharacter);
1350 break; 1350 break;
1351 case TSSQUARE: 1351 case TSSQUARE:
1352 secureText(blackSquare); 1352 secureText(blackSquareCharacter);
1353 } 1353 }
1354 } 1354 }
1355 1355
1356 ASSERT(m_text); 1356 ASSERT(m_text);
1357 ASSERT(!isBR() || (textLength() == 1 && m_text[0] == newlineCharacter)); 1357 ASSERT(!isBR() || (textLength() == 1 && m_text[0] == newlineCharacter));
1358 1358
1359 m_canUseSimpleFontCodePath = computeCanUseSimpleFontCodePath(); 1359 m_canUseSimpleFontCodePath = computeCanUseSimpleFontCodePath();
1360 } 1360 }
1361 1361
1362 void LayoutText::secureText(UChar mask) 1362 void LayoutText::secureText(UChar mask)
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
1855 } 1855 }
1856 1856
1857 void LayoutText::invalidateDisplayItemClients(const LayoutBoxModelObject& paintI nvalidationContainer) const 1857 void LayoutText::invalidateDisplayItemClients(const LayoutBoxModelObject& paintI nvalidationContainer) const
1858 { 1858 {
1859 LayoutObject::invalidateDisplayItemClients(paintInvalidationContainer); 1859 LayoutObject::invalidateDisplayItemClients(paintInvalidationContainer);
1860 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) 1860 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox())
1861 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); 1861 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box);
1862 } 1862 }
1863 1863
1864 } // namespace blink 1864 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutListMarker.cpp ('k') | Source/core/layout/LayoutTreeAsText.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698