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 876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 bool isSpace = false; | 887 bool isSpace = false; |
888 bool firstWord = true; | 888 bool firstWord = true; |
889 bool firstLine = true; | 889 bool firstLine = true; |
890 int nextBreakable = -1; | 890 int nextBreakable = -1; |
891 int lastWordBoundary = 0; | 891 int lastWordBoundary = 0; |
892 float cachedWordTrailingSpaceWidth[2] = { 0, 0 }; // LTR, RTL | 892 float cachedWordTrailingSpaceWidth[2] = { 0, 0 }; // LTR, RTL |
893 | 893 |
894 int firstGlyphLeftOverflow = -1; | 894 int firstGlyphLeftOverflow = -1; |
895 | 895 |
896 bool breakAll = (styleToUse.wordBreak() == BreakAllWordBreak || styleToUse.w
ordBreak() == BreakWordBreak) && styleToUse.autoWrap(); | 896 bool breakAll = (styleToUse.wordBreak() == BreakAllWordBreak || styleToUse.w
ordBreak() == BreakWordBreak) && styleToUse.autoWrap(); |
| 897 bool keepAll = styleToUse.wordBreak() == KeepAllWordBreak && styleToUse.auto
Wrap(); |
897 | 898 |
898 BidiResolver<TextRunIterator, BidiCharacterRun> bidiResolver; | 899 BidiResolver<TextRunIterator, BidiCharacterRun> bidiResolver; |
899 BidiCharacterRun* run; | 900 BidiCharacterRun* run; |
900 TextDirection textDirection = styleToUse.direction(); | 901 TextDirection textDirection = styleToUse.direction(); |
901 if (is8Bit() || isOverride(styleToUse.unicodeBidi())) { | 902 if (is8Bit() || isOverride(styleToUse.unicodeBidi())) { |
902 run = 0; | 903 run = 0; |
903 } else { | 904 } else { |
904 TextRun textRun(text()); | 905 TextRun textRun(text()); |
905 BidiStatus status(textDirection, false); | 906 BidiStatus status(textDirection, false); |
906 bidiResolver.setStatus(status); | 907 bidiResolver.setStatus(status); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 continue; | 970 continue; |
970 } | 971 } |
971 if (c == softHyphen) { | 972 if (c == softHyphen) { |
972 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); |
973 if (firstGlyphLeftOverflow < 0) | 974 if (firstGlyphLeftOverflow < 0) |
974 firstGlyphLeftOverflow = glyphOverflow.left; | 975 firstGlyphLeftOverflow = glyphOverflow.left; |
975 lastWordBoundary = i + 1; | 976 lastWordBoundary = i + 1; |
976 continue; | 977 continue; |
977 } | 978 } |
978 | 979 |
979 bool hasBreak = breakIterator.isBreakable(i, nextBreakable, breakAll ? L
ineBreakType::BreakAll : LineBreakType::Normal); | 980 bool hasBreak = breakIterator.isBreakable(i, nextBreakable, breakAll ? L
ineBreakType::BreakAll : keepAll ? LineBreakType::KeepAll : LineBreakType::Norma
l); |
980 bool betweenWords = true; | 981 bool betweenWords = true; |
981 int j = i; | 982 int j = i; |
982 while (c != newlineCharacter && c != space && c != characterTabulation &
& (c != softHyphen)) { | 983 while (c != newlineCharacter && c != space && c != characterTabulation &
& (c != softHyphen)) { |
983 j++; | 984 j++; |
984 if (j == len) | 985 if (j == len) |
985 break; | 986 break; |
986 c = uncheckedCharacterAt(j); | 987 c = uncheckedCharacterAt(j); |
987 if (breakIterator.isBreakable(j, nextBreakable) && characterAt(j - 1
) != softHyphen) | 988 if (breakIterator.isBreakable(j, nextBreakable) && characterAt(j - 1
) != softHyphen) |
988 break; | 989 break; |
989 if (breakAll) { | 990 if (breakAll) { |
(...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1854 } | 1855 } |
1855 | 1856 |
1856 void LayoutText::invalidateDisplayItemClients(const LayoutBoxModelObject& paintI
nvalidationContainer) const | 1857 void LayoutText::invalidateDisplayItemClients(const LayoutBoxModelObject& paintI
nvalidationContainer) const |
1857 { | 1858 { |
1858 LayoutObject::invalidateDisplayItemClients(paintInvalidationContainer); | 1859 LayoutObject::invalidateDisplayItemClients(paintInvalidationContainer); |
1859 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) | 1860 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) |
1860 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); | 1861 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); |
1861 } | 1862 } |
1862 | 1863 |
1863 } // namespace blink | 1864 } // namespace blink |
OLD | NEW |