| 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 |