Changeset 17543 in webkit


Ignore:
Timestamp:
Nov 2, 2006 1:37:46 PM (17 years ago)
Author:
adele
Message:

LayoutTests:

Reviewed by Mitz and Geoff.

Test for <rdar://problem/4650271> 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: <rdar://problem/4650271> REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105) <rdar://problem/4650813> REGRESSION(tiger-leopard): typing in a textarea in Safari is extremely slow (sample shows focus ring drawing) <rdar://problem/4658779> 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.
Location:
trunk
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r17538 r17543  
     12006-11-02  Adele Peterson  <adele@apple.com>
     2
     3        Reviewed by Mitz and Geoff.
     4
     5        Test for <rdar://problem/4650271> REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105)
     6
     7        * fast/forms/textarea-scrollbar-expected.checksum: Added.
     8        * fast/forms/textarea-scrollbar-expected.png: Added.
     9        * fast/forms/textarea-scrollbar-expected.txt: Added.
     10        * fast/forms/textarea-scrollbar.html: Added.
     11
    1122006-11-02  Kevin McCullough  <KMcCullough@apple.com>
    213
  • trunk/WebCore/ChangeLog

    r17539 r17543  
     12006-11-02  Adele Peterson  <adele@apple.com>
     2
     3        Reviewed by Mitz and Geoff.
     4
     5        - Fix for:
     6        <rdar://problem/4650271> REGRESSION(NativeTextArea): Textareas don't get scrollbars when text gets too big for content area (10105)
     7        <rdar://problem/4650813> REGRESSION(tiger-leopard): typing in a textarea in Safari is extremely slow (sample shows focus ring drawing)
     8        <rdar://problem/4658779> REGRESSION: Text selection is weird in textareas in Trac wiki editing pages
     9
     10        Test: fast/forms/textarea-scrollbar.html
     11
     12        To avoid some of our flexbox bugs for textareas, we're moving the text controls back to RenderBlock.  This should make them
     13        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.
     14
     15        * rendering/RenderTextControl.h: Convert text controls back to RenderBlock instead of RenderFlexibleBox.
     16        * rendering/RenderTextControl.cpp:
     17        (WebCore::RenderTextControl::RenderTextControl):
     18        (WebCore::RenderTextControl::setStyle):
     19        (WebCore::RenderTextControl::createDivStyle):
     20        (WebCore::RenderTextControl::updateFromElement):
     21        (WebCore::RenderTextControl::calcHeight):
     22        (WebCore::RenderTextControl::baselinePosition):
     23        (WebCore::RenderTextControl::nodeAtPoint):
     24        (WebCore::RenderTextControl::layout): Set the inner div's height explicitly before doing a normal layout.
     25        (WebCore::RenderTextControl::scrollWidth):
     26        (WebCore::RenderTextControl::scrollHeight):
     27        (WebCore::RenderTextControl::scrollLeft):
     28        (WebCore::RenderTextControl::scrollTop):
     29
     30        * rendering/RenderObject.cpp: (WebCore::RenderObject::markContainingBlocksForLayout): Make subtree layout optimization work for textareas.
     31
    1322006-11-02  John Sullivan  <sullivan@apple.com>
    233
  • trunk/WebCore/rendering/RenderObject.cpp

    r17521 r17543  
    759759
    760760        last = o;
    761         if (scheduleRelayout && last->isTextField())
     761        if (scheduleRelayout && (last->isTextField() || last->isTextArea()))
    762762            break;
    763763        o = o->container();
  • trunk/WebCore/rendering/RenderTextControl.cpp

    r17494 r17543  
    4747
    4848RenderTextControl::RenderTextControl(Node* node, bool multiLine)
    49     : RenderFlexibleBox(node), m_dirty(false), m_multiLine(multiLine)
     49    : RenderBlock(node), m_dirty(false), m_multiLine(multiLine)
    5050{
    5151}
     
    6262void RenderTextControl::setStyle(RenderStyle* style)
    6363{
    64     RenderFlexibleBox::setStyle(style);
     64    RenderBlock::setStyle(style);
    6565    if (m_div) {
    6666        RenderBlock* divRenderer = static_cast<RenderBlock*>(m_div->renderer());
     
    8282    divStyle->inheritFrom(startStyle);
    8383    divStyle->setDisplay(BLOCK);
    84     divStyle->setBoxFlex(1.0f);
    8584    divStyle->setUserModify(element->isReadOnlyControl() || element->disabled() ? READ_ONLY : READ_WRITE_PLAINTEXT_ONLY);
    8685
     
    142141       
    143142        // Add div to Render tree
    144         RenderFlexibleBox::addChild(divRenderer);
     143        RenderBlock::addChild(divRenderer);
    145144    }
    146145
     
    336335    m_height = line * rows + toAdd + scrollbarSize;
    337336   
    338     RenderFlexibleBox::calcHeight();
     337    RenderBlock::calcHeight();
    339338}
    340339
     
    343342    if (m_multiLine)
    344343        return height() + marginTop() + marginBottom();
    345     return RenderFlexibleBox::baselinePosition(b, isRootLineBox);
     344    return RenderBlock::baselinePosition(b, isRootLineBox);
    346345}
    347346
     
    350349    // If we're within the text control, we want to act as if we've hit the inner div, incase the point
    351350    // was on the control but not on the div (see Radar 4617841).
    352     if (RenderFlexibleBox::nodeAtPoint(request, result, x, y, tx, ty, hitTestAction)) {
     351    if (RenderBlock::nodeAtPoint(request, result, x, y, tx, ty, hitTestAction)) {
    353352        result.setInnerNode(m_div.get());
    354353        return true;
    355354    } 
    356355    return false;
     356}
     357
     358void RenderTextControl::layout()
     359{   
     360    int oldHeight = m_height;
     361    calcHeight();
     362    bool relayoutChildren = oldHeight != m_height;
     363   
     364    // Set the div's height
     365    int divHeight = m_height - paddingTop() - paddingBottom() - borderTop() - borderBottom();
     366    m_div->renderer()->style()->setHeight(Length(divHeight, Fixed));
     367
     368    RenderBlock::layoutBlock(relayoutChildren);
    357369}
    358370
     
    434446    if (m_div)
    435447        return m_div->scrollWidth();
    436     return RenderFlexibleBox::scrollWidth();
     448    return RenderBlock::scrollWidth();
    437449}
    438450
     
    441453    if (m_div)
    442454        return m_div->scrollHeight();
    443     return RenderFlexibleBox::scrollHeight();
     455    return RenderBlock::scrollHeight();
    444456}
    445457
     
    448460    if (m_div)
    449461        return m_div->scrollLeft();
    450     return RenderFlexibleBox::scrollLeft();
     462    return RenderBlock::scrollLeft();
    451463}
    452464
     
    455467    if (m_div)
    456468        return m_div->scrollTop();
    457     return RenderFlexibleBox::scrollTop();
     469    return RenderBlock::scrollTop();
    458470}
    459471
  • trunk/WebCore/rendering/RenderTextControl.h

    r17494 r17543  
    2222#define RenderTextField_H
    2323
    24 #include "RenderFlexibleBox.h"
     24#include "RenderBlock.h"
    2525
    2626namespace WebCore {
     
    2828class HTMLTextFieldInnerElement;
    2929
    30 class RenderTextControl : public RenderFlexibleBox {
     30class RenderTextControl : public RenderBlock {
    3131public:
    3232    RenderTextControl(Node*, bool multiLine);
     
    4242    virtual short baselinePosition( bool, bool ) const;
    4343    virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction);
    44                              
     44    virtual void layout();
     45    virtual bool avoidsFloats() const { return true; }
     46
    4547    RenderStyle* createDivStyle(RenderStyle* startStyle);
    4648
Note: See TracChangeset for help on using the changeset viewer.