OLD | NEW |
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 Loading... |
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   with a real space since ICU no longer treats   as a
word separator. | 113 // Replace   with a real space since ICU no longer treats   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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |