From f65b5deffa4548266a6e4fbe190cbb63cd666b45 Mon Sep 17 00:00:00 2001 From: adele Date: Thu, 2 Nov 2006 21:37:46 +0000 Subject: [PATCH] LayoutTests: Reviewed by Mitz and Geoff. Test for REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105) * fast/forms/textarea-scrollbar-expected.checksum: Added. * fast/forms/textarea-scrollbar-expected.png: Added. * fast/forms/textarea-scrollbar-expected.txt: Added. * fast/forms/textarea-scrollbar.html: Added. WebCore: Reviewed by Mitz and Geoff. - Fix for: REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105) REGRESSION(tiger-leopard): typing in a textarea in Safari is extremely slow (sample shows focus ring drawing) REGRESSION: Text selection is weird in textareas in Trac wiki editing pages Test: fast/forms/textarea-scrollbar.html To avoid some of our flexbox bugs for textareas, we're moving the text controls back to RenderBlock. This should make them a lot more stable. In the future, when we've worked out more of the flexbox kinks, we may want to consider moving them back. * rendering/RenderTextControl.h: Convert text controls back to RenderBlock instead of RenderFlexibleBox. * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::RenderTextControl): (WebCore::RenderTextControl::setStyle): (WebCore::RenderTextControl::createDivStyle): (WebCore::RenderTextControl::updateFromElement): (WebCore::RenderTextControl::calcHeight): (WebCore::RenderTextControl::baselinePosition): (WebCore::RenderTextControl::nodeAtPoint): (WebCore::RenderTextControl::layout): Set the inner div's height explicitly before doing a normal layout. (WebCore::RenderTextControl::scrollWidth): (WebCore::RenderTextControl::scrollHeight): (WebCore::RenderTextControl::scrollLeft): (WebCore::RenderTextControl::scrollTop): * rendering/RenderObject.cpp: (WebCore::RenderObject::markContainingBlocksForLayout): Make subtree layout optimization work for textareas. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@17543 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 11 +++ .../textarea-scrollbar-expected.checksum | 1 + .../forms/textarea-scrollbar-expected.png | Bin 0 -> 12006 bytes .../forms/textarea-scrollbar-expected.txt | 68 ++++++++++++++++++ .../fast/forms/textarea-scrollbar.html | 27 +++++++ WebCore/ChangeLog | 31 ++++++++ WebCore/rendering/RenderObject.cpp | 2 +- WebCore/rendering/RenderTextControl.cpp | 34 ++++++--- WebCore/rendering/RenderTextControl.h | 8 ++- 9 files changed, 167 insertions(+), 15 deletions(-) create mode 100644 LayoutTests/fast/forms/textarea-scrollbar-expected.checksum create mode 100644 LayoutTests/fast/forms/textarea-scrollbar-expected.png create mode 100644 LayoutTests/fast/forms/textarea-scrollbar-expected.txt create mode 100644 LayoutTests/fast/forms/textarea-scrollbar.html diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index 325c2ac6ec74..c09ce3f5373f 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,14 @@ +2006-11-02 Adele Peterson + + Reviewed by Mitz and Geoff. + + Test for REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105) + + * fast/forms/textarea-scrollbar-expected.checksum: Added. + * fast/forms/textarea-scrollbar-expected.png: Added. + * fast/forms/textarea-scrollbar-expected.txt: Added. + * fast/forms/textarea-scrollbar.html: Added. + 2006-11-02 Kevin McCullough Reviewed by Maciej. diff --git a/LayoutTests/fast/forms/textarea-scrollbar-expected.checksum b/LayoutTests/fast/forms/textarea-scrollbar-expected.checksum new file mode 100644 index 000000000000..fb6eaf1523bb --- /dev/null +++ b/LayoutTests/fast/forms/textarea-scrollbar-expected.checksum @@ -0,0 +1 @@ +ad6b3b39864cef0d8b7b99bdc44e43b1 \ No newline at end of file diff --git a/LayoutTests/fast/forms/textarea-scrollbar-expected.png b/LayoutTests/fast/forms/textarea-scrollbar-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3646a783f27b9af9cb4ce9cd460daa50b6a1fa GIT binary patch literal 12006 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
s(uPAM=6P4dw4el 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 DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > DIV to 1 of #text > DIV toDOMRange:range from 1 of #text > DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > DIV to 1 of #text > DIV toDOMRange:range from 1 of #text > DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > DIV to 1 of #text > DIV toDOMRange:range from 1 of #text > DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > DIV to 1 of #text > DIV toDOMRange:range from 1 of #text > DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > DIV to 1 of #text > DIV toDOMRange:range from 1 of #text > DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > DIV to 1 of #text > DIV toDOMRange:range from 1 of #text > DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > DIV to 1 of #text > DIV toDOMRange:range from 1 of #text > DIV to 1 of #text > DIV affinity:NSSelectionAffinityDownstream stillSelecting:FALSE +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification +EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification +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 + RenderText {#text} at (0,0) size 442x18 + text run at (0,0) width 442: "This tests that a scrollbar will appear when text overflows the textarea " + RenderBR {BR} at (442,14) size 0x0 + RenderTextField {TEXTAREA} at (2,20) size 163x80 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + RenderText {#text} at (0,0) size 0x0 + RenderText {#text} at (0,0) size 0x0 + RenderText {#text} at (0,0) size 0x0 +layer at (11,29) size 161x78 clip at (11,29) size 146x78 scrollHeight 117 + RenderBlock {DIV} at (1,1) size 161x78 + RenderText {#text} at (3,0) size 7x52 + text run at (3,0) width 7: "1" + text run at (10,0) width 0: " " + text run at (3,13) width 7: "2" + text run at (10,13) width 0: " " + text run at (3,26) width 7: "3" + text run at (10,26) width 0: " " + text run at (3,39) width 7: "4" + text run at (10,39) width 0: " " + RenderText {#text} at (3,52) size 7x13 + text run at (3,52) width 7: "5" + RenderText {#text} at (10,52) size 0x13 + text run at (10,52) width 0: " " + RenderText {#text} at (3,65) size 7x13 + text run at (3,65) width 7: "6" + RenderText {#text} at (10,65) size 0x13 + text run at (10,65) width 0: " " + RenderText {#text} at (3,78) size 7x13 + text run at (3,78) width 7: "7" + RenderText {#text} at (10,78) size 0x13 + text run at (10,78) width 0: " " + RenderText {#text} at (3,91) size 7x13 + text run at (3,91) width 7: "8" + RenderText {#text} at (10,91) size 0x13 + text run at (10,91) width 0: " " + RenderText {#text} at (3,104) size 0x13 + text run at (3,104) width 0: " " +caret: position 0 of child 9 {#text} of child 0 {DIV} of child 3 {TEXTAREA} of child 1 {BODY} of child 0 {HTML} of document diff --git a/LayoutTests/fast/forms/textarea-scrollbar.html b/LayoutTests/fast/forms/textarea-scrollbar.html new file mode 100644 index 000000000000..4fd41abee599 --- /dev/null +++ b/LayoutTests/fast/forms/textarea-scrollbar.html @@ -0,0 +1,27 @@ + + + + + +This tests that a scrollbar will appear when text overflows the textarea +
+ + + diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index 2b3f6ad03739..8bd468f8bd7e 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,34 @@ +2006-11-02 Adele Peterson + + Reviewed by Mitz and Geoff. + + - Fix for: + REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105) + REGRESSION(tiger-leopard): typing in a textarea in Safari is extremely slow (sample shows focus ring drawing) + REGRESSION: Text selection is weird in textareas in Trac wiki editing pages + + Test: fast/forms/textarea-scrollbar.html + + To avoid some of our flexbox bugs for textareas, we're moving the text controls back to RenderBlock. This should make them + a lot more stable. In the future, when we've worked out more of the flexbox kinks, we may want to consider moving them back. + + * rendering/RenderTextControl.h: Convert text controls back to RenderBlock instead of RenderFlexibleBox. + * rendering/RenderTextControl.cpp: + (WebCore::RenderTextControl::RenderTextControl): + (WebCore::RenderTextControl::setStyle): + (WebCore::RenderTextControl::createDivStyle): + (WebCore::RenderTextControl::updateFromElement): + (WebCore::RenderTextControl::calcHeight): + (WebCore::RenderTextControl::baselinePosition): + (WebCore::RenderTextControl::nodeAtPoint): + (WebCore::RenderTextControl::layout): Set the inner div's height explicitly before doing a normal layout. + (WebCore::RenderTextControl::scrollWidth): + (WebCore::RenderTextControl::scrollHeight): + (WebCore::RenderTextControl::scrollLeft): + (WebCore::RenderTextControl::scrollTop): + + * rendering/RenderObject.cpp: (WebCore::RenderObject::markContainingBlocksForLayout): Make subtree layout optimization work for textareas. + 2006-11-02 John Sullivan Reviewed by Geoff Garen diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp index f04aa87cefdf..17867dcb812c 100644 --- a/WebCore/rendering/RenderObject.cpp +++ b/WebCore/rendering/RenderObject.cpp @@ -758,7 +758,7 @@ void RenderObject::markContainingBlocksForLayout(bool scheduleRelayout) } last = o; - if (scheduleRelayout && last->isTextField()) + if (scheduleRelayout && (last->isTextField() || last->isTextArea())) break; o = o->container(); } diff --git a/WebCore/rendering/RenderTextControl.cpp b/WebCore/rendering/RenderTextControl.cpp index c7b4e4be7006..a43b1ef3ffa7 100644 --- a/WebCore/rendering/RenderTextControl.cpp +++ b/WebCore/rendering/RenderTextControl.cpp @@ -46,7 +46,7 @@ using namespace HTMLNames; using namespace std; RenderTextControl::RenderTextControl(Node* node, bool multiLine) - : RenderFlexibleBox(node), m_dirty(false), m_multiLine(multiLine) + : RenderBlock(node), m_dirty(false), m_multiLine(multiLine) { } @@ -61,7 +61,7 @@ RenderTextControl::~RenderTextControl() void RenderTextControl::setStyle(RenderStyle* style) { - RenderFlexibleBox::setStyle(style); + RenderBlock::setStyle(style); if (m_div) { RenderBlock* divRenderer = static_cast(m_div->renderer()); RenderStyle* divStyle = createDivStyle(style); @@ -81,7 +81,6 @@ RenderStyle* RenderTextControl::createDivStyle(RenderStyle* startStyle) divStyle->inheritFrom(startStyle); divStyle->setDisplay(BLOCK); - divStyle->setBoxFlex(1.0f); divStyle->setUserModify(element->isReadOnlyControl() || element->disabled() ? READ_ONLY : READ_WRITE_PLAINTEXT_ONLY); if (m_multiLine) { @@ -141,7 +140,7 @@ void RenderTextControl::updateFromElement() divRenderer->setStyle(divStyle); // Add div to Render tree - RenderFlexibleBox::addChild(divRenderer); + RenderBlock::addChild(divRenderer); } HTMLGenericFormElement* element = static_cast(node()); @@ -335,27 +334,40 @@ void RenderTextControl::calcHeight() m_height = line * rows + toAdd + scrollbarSize; - RenderFlexibleBox::calcHeight(); + RenderBlock::calcHeight(); } short RenderTextControl::baselinePosition(bool b, bool isRootLineBox) const { if (m_multiLine) return height() + marginTop() + marginBottom(); - return RenderFlexibleBox::baselinePosition(b, isRootLineBox); + return RenderBlock::baselinePosition(b, isRootLineBox); } bool RenderTextControl::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, int x, int y, int tx, int ty, HitTestAction hitTestAction) { // If we're within the text control, we want to act as if we've hit the inner div, incase the point // was on the control but not on the div (see Radar 4617841). - if (RenderFlexibleBox::nodeAtPoint(request, result, x, y, tx, ty, hitTestAction)) { + if (RenderBlock::nodeAtPoint(request, result, x, y, tx, ty, hitTestAction)) { result.setInnerNode(m_div.get()); return true; } return false; } +void RenderTextControl::layout() +{ + int oldHeight = m_height; + calcHeight(); + bool relayoutChildren = oldHeight != m_height; + + // Set the div's height + int divHeight = m_height - paddingTop() - paddingBottom() - borderTop() - borderBottom(); + m_div->renderer()->style()->setHeight(Length(divHeight, Fixed)); + + RenderBlock::layoutBlock(relayoutChildren); +} + void RenderTextControl::calcMinMaxWidth() { m_minWidth = 0; @@ -433,28 +445,28 @@ int RenderTextControl::scrollWidth() const { if (m_div) return m_div->scrollWidth(); - return RenderFlexibleBox::scrollWidth(); + return RenderBlock::scrollWidth(); } int RenderTextControl::scrollHeight() const { if (m_div) return m_div->scrollHeight(); - return RenderFlexibleBox::scrollHeight(); + return RenderBlock::scrollHeight(); } int RenderTextControl::scrollLeft() const { if (m_div) return m_div->scrollLeft(); - return RenderFlexibleBox::scrollLeft(); + return RenderBlock::scrollLeft(); } int RenderTextControl::scrollTop() const { if (m_div) return m_div->scrollTop(); - return RenderFlexibleBox::scrollTop(); + return RenderBlock::scrollTop(); } void RenderTextControl::setScrollLeft(int newLeft) diff --git a/WebCore/rendering/RenderTextControl.h b/WebCore/rendering/RenderTextControl.h index c0a0c528e488..bb93b9501b26 100644 --- a/WebCore/rendering/RenderTextControl.h +++ b/WebCore/rendering/RenderTextControl.h @@ -21,13 +21,13 @@ #ifndef RenderTextField_H #define RenderTextField_H -#include "RenderFlexibleBox.h" +#include "RenderBlock.h" namespace WebCore { class HTMLTextFieldInnerElement; -class RenderTextControl : public RenderFlexibleBox { +class RenderTextControl : public RenderBlock { public: RenderTextControl(Node*, bool multiLine); virtual ~RenderTextControl(); @@ -41,7 +41,9 @@ public: virtual bool canHaveChildren() const { return false; } virtual short baselinePosition( bool, bool ) const; virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); - + virtual void layout(); + virtual bool avoidsFloats() const { return true; } + RenderStyle* createDivStyle(RenderStyle* startStyle); bool isEdited() const { return m_dirty; }; -- 2.36.0