From c533364fb899f93f583f189d87b7f2648a092735 Mon Sep 17 00:00:00 2001 From: gdennis Date: Sat, 11 Nov 2006 12:04:50 +0000 Subject: [PATCH] WebCore: Reviewed by mitz. REGRESSION (r16122): min/max widths incorrectly calculated for contentEditable text http://bugs.webkit.org/show_bug.cgi?id=11570 * rendering/RenderStyle.h: (WebCore::RenderStyle::isSpace): Added. * rendering/RenderText.cpp: (WebCore::RenderText::calcMinMaxWidth): For the purposes of calculating the line widths, treat non-breaking spaces the same as normal spaces if -webkit-nbsp-mode is 'space' LayoutTests: Reviewed by mitz. REGRESSION (r16122): min/max widths incorrectly calculated for contentEditable text http://bugs.webkit.org/show_bug.cgi?id=11570 * fast/text/whitespace/nbsp-mode-and-linewraps-expected.checksum: Added. * fast/text/whitespace/nbsp-mode-and-linewraps-expected.png: Added. * fast/text/whitespace/nbsp-mode-and-linewraps-expected.txt: Added. * fast/text/whitespace/nbsp-mode-and-linewraps.html: Added. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@17724 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 12 +++++++++++ .../nbsp-mode-and-linewraps-expected.checksum | 1 + .../nbsp-mode-and-linewraps-expected.png | Bin 0 -> 39765 bytes .../nbsp-mode-and-linewraps-expected.txt | 14 ++++++++++++ .../whitespace/nbsp-mode-and-linewraps.html | 20 ++++++++++++++++++ WebCore/ChangeLog | 13 ++++++++++++ WebCore/rendering/RenderStyle.h | 2 ++ WebCore/rendering/RenderText.cpp | 11 ++++++---- 8 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.checksum create mode 100644 LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.png create mode 100644 LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.txt create mode 100644 LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps.html diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index d23ccab4a60b..fd598769e9ad 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,15 @@ +2006-11-11 Graham Dennis + + Reviewed by mitz. + + REGRESSION (r16122): min/max widths incorrectly calculated for contentEditable text + http://bugs.webkit.org/show_bug.cgi?id=11570 + + * fast/text/whitespace/nbsp-mode-and-linewraps-expected.checksum: Added. + * fast/text/whitespace/nbsp-mode-and-linewraps-expected.png: Added. + * fast/text/whitespace/nbsp-mode-and-linewraps-expected.txt: Added. + * fast/text/whitespace/nbsp-mode-and-linewraps.html: Added. + 2006-11-10 Justin Garcia Reviewed by harrison diff --git a/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.checksum b/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.checksum new file mode 100644 index 000000000000..7c3565c24b21 --- /dev/null +++ b/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.checksum @@ -0,0 +1 @@ +ab6fa35f9017684e764e580c22a79f4b \ No newline at end of file diff --git a/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.png b/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e1a797fceba63b2c85efaed167d7b124a4cc9f GIT binary patch literal 39765 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 KaybW%o&8^tQ-37@ literal 0 HcmV?d00001 diff --git a/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.txt b/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.txt new file mode 100644 index 000000000000..f04ec5c7fefe --- /dev/null +++ b/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps-expected.txt @@ -0,0 +1,14 @@ +layer at (0,0) size 800x600 + RenderView at (0,0) size 800x600 +layer at (0,0) size 800x600 + RenderBlock {HTML} at (0,0) size 800x600 + RenderBody {BODY} at (8,8) size 784x584 +layer at (100,8) size 700x196 + RenderBlock (positioned) {DIV} at (100,8) size 700x196 [border: (2px solid #FF0000)] + RenderText {#text} at (14,14) size 666x168 + text run at (14,14) width 666: "This div is absolutely positioned to the left. All the spaces in this div" + text run at (14,42) width 643: "are replaced with non-breaking spaces, and the nbsp-mode for this" + text run at (14,70) width 615: "div is 'space', so when calculating line breaks, the non-breaking" + text run at (14,98) width 657: "spaces should be treated as normal spaces. If this isn't the case, then" + text run at (14,126) width 629: "all the text for this paragraph will be rendered in two lines, and a" + text run at (14,154) width 488: "horizontal scroll bar will appear along the bottom." diff --git a/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps.html b/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps.html new file mode 100644 index 000000000000..07dd6db60796 --- /dev/null +++ b/LayoutTests/fast/text/whitespace/nbsp-mode-and-linewraps.html @@ -0,0 +1,20 @@ + + + + + +-webkit-nbsp-mode and linewraps + + +

+This div is absolutely positioned to the left. All the spaces in this div are replaced with non-breaking spaces, and the nbsp-mode for this div is 'space', so when calculating line breaks, the non-breaking spaces should be treated as normal spaces. If this isn't the case, then all the text for this paragraph will be rendered in two lines, and a horizontal scroll bar will appear along the bottom. +
+ + + diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index 0330eb1bbbfa..e94debe5f2f8 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,16 @@ +2006-11-11 Graham Dennis + + Reviewed by mitz. + + REGRESSION (r16122): min/max widths incorrectly calculated for contentEditable text + http://bugs.webkit.org/show_bug.cgi?id=11570 + + * rendering/RenderStyle.h: + (WebCore::RenderStyle::isSpace): Added. + * rendering/RenderText.cpp: + (WebCore::RenderText::calcMinMaxWidth): For the purposes of calculating the line widths, + treat non-breaking spaces the same as normal spaces if -webkit-nbsp-mode is 'space' + 2006-11-10 Zalan Bujtas Reviewed by Maciej. diff --git a/WebCore/rendering/RenderStyle.h b/WebCore/rendering/RenderStyle.h index cc6567687d58..26f8ce6f3bb8 100644 --- a/WebCore/rendering/RenderStyle.h +++ b/WebCore/rendering/RenderStyle.h @@ -5,6 +5,7 @@ * (C) 2000 Antti Koivisto (koivisto@kde.org) * (C) 2000 Dirk Mueller (mueller@kde.org) * Copyright (C) 2003, 2005, 2006 Apple Computer, Inc. + * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -1327,6 +1328,7 @@ public: } return false; } + bool isSpace(UChar c) const { return c == ' ' || (c == 0xa0 && nbspMode() == SPACE); } bool breakOnlyAfterWhiteSpace() const { return whiteSpace() == PRE_WRAP || khtmlLineBreak() == AFTER_WHITE_SPACE; } diff --git a/WebCore/rendering/RenderText.cpp b/WebCore/rendering/RenderText.cpp index 1eb402816f48..94f5a1bd6f8f 100644 --- a/WebCore/rendering/RenderText.cpp +++ b/WebCore/rendering/RenderText.cpp @@ -5,6 +5,7 @@ * (C) 2000 Dirk Mueller (mueller@kde.org) * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) + * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -621,6 +622,8 @@ void RenderText::calcMinMaxWidth(int leadWidth) bool firstWord = true; bool firstLine = true; int nextBreakable = -1; + bool breakNBSP = style()->autoWrap() && style()->nbspMode() == SPACE; + for (int i = 0; i < len; i++) { UChar c = txt[i]; @@ -660,14 +663,14 @@ void RenderText::calcMinMaxWidth(int leadWidth) continue; } - bool hasBreak = isBreakable(txt, i, len, nextBreakable); + bool hasBreak = isBreakable(txt, i, len, nextBreakable, breakNBSP); int j = i; - while (c != '\n' && c != ' ' && c != '\t' && c != SOFT_HYPHEN) { + while (c != '\n' && !style()->isSpace(c) && c != '\t' && c != SOFT_HYPHEN) { j++; if (j == len) break; c = txt[j]; - if (isBreakable(txt, j, len, nextBreakable)) + if (isBreakable(txt, j, len, nextBreakable, breakNBSP)) break; } @@ -677,7 +680,7 @@ void RenderText::calcMinMaxWidth(int leadWidth) currMinWidth += w; currMaxWidth += w; - bool isSpace = (j < len) && c == ' '; + bool isSpace = (j < len) && style()->isSpace(c); bool isCollapsibleWhiteSpace = (j < len) && style()->isCollapsibleWhiteSpace(c); if (j < len && style()->autoWrap()) m_hasBreakableChar = true; -- 2.36.0