Fix for 3673381, huge directory listing so slow it seems like a hang. Rework painti...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Nov 2004 05:08:20 +0000 (05:08 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Nov 2004 05:08:20 +0000 (05:08 +0000)
commit5615c7e1abf5a8e65b9910dd582bad7d7005e819
treea32e2cea42bc56af38c2ff07063d40b8e01dc6cf
parentb38baccf2a1088e670277341d2d95e97d11514bb
Fix for 3673381, huge directory listing so slow it seems like a hang.  Rework painting and hit testing so that
it crawls the line box tree instead of the render tree.  This allows more precise intersection/containment testing
that lets us short circuit earlier when painting and hit testing.

        Reviewed by mjs

        * khtml/khtml_part.cpp:
        (KHTMLPart::isPointInsideSelection):
        * khtml/rendering/render_block.cpp:
        (khtml::RenderBlock::paint):
        (khtml::RenderBlock::paintChildren):
        (khtml::RenderBlock::paintObject):
        (khtml::RenderBlock::paintFloats):
        (khtml::RenderBlock::nodeAtPoint):
        * khtml/rendering/render_block.h:
        * khtml/rendering/render_box.cpp:
        (RenderBox::nodeAtPoint):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_br.h:
        * khtml/rendering/render_canvas.cpp:
        (RenderCanvas::paint):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::paintLines):
        (RenderFlow::hitTestLines):
        (RenderFlow::caretRect):
        (RenderFlow::addFocusRingRects):
        (RenderFlow::paintFocusRing):
        (RenderFlow::paintOutlines):
        (RenderFlow::paintOutlineForLine):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_frames.cpp:
        (RenderFrameSet::nodeAtPoint):
        * khtml/rendering/render_frames.h:
        * khtml/rendering/render_image.cpp:
        (RenderImage::nodeAtPoint):
        * khtml/rendering/render_image.h:
        * khtml/rendering/render_inline.cpp:
        (RenderInline::paint):
        (RenderInline::nodeAtPoint):
        * khtml/rendering/render_inline.h:
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::paintLayer):
        (RenderLayer::hitTest):
        (RenderLayer::hitTestLayer):
        * khtml/rendering/render_layer.h:
        * khtml/rendering/render_line.cpp:
        (khtml::InlineBox::paint):
        (khtml::InlineBox::nodeAtPoint):
        (khtml::InlineFlowBox::flowObject):
        (khtml::InlineFlowBox::nodeAtPoint):
        (khtml::InlineFlowBox::paint):
        (khtml::InlineFlowBox::paintBackgrounds):
        (khtml::InlineFlowBox::paintBackground):
        (khtml::InlineFlowBox::paintBackgroundAndBorder):
        (khtml::InlineFlowBox::paintDecorations):
        (khtml::EllipsisBox::paint):
        (khtml::EllipsisBox::nodeAtPoint):
        (khtml::RootInlineBox::paintEllipsisBox):
        (khtml::RootInlineBox::paint):
        (khtml::RootInlineBox::nodeAtPoint):
        * khtml/rendering/render_line.h:
        (khtml::InlineRunBox::paintBackgroundAndBorder):
        * khtml/rendering/render_object.cpp:
        (RenderObject::hitTest):
        (RenderObject::setInnerNode):
        (RenderObject::nodeAtPoint):
        * khtml/rendering/render_object.h:
        (khtml::RenderObject::PaintInfo::PaintInfo):
        (khtml::RenderObject::PaintInfo::~PaintInfo):
        (khtml::RenderObject::paintingRootForChildren):
        (khtml::RenderObject::shouldPaintWithinRoot):
        * khtml/rendering/render_table.cpp:
        (RenderTable::layout):
        (RenderTable::paint):
        * khtml/rendering/render_text.cpp:
        (simpleDifferenceBetweenColors):
        (correctedTextColor):
        (InlineTextBox::nodeAtPoint):
        (InlineTextBox::paint):
        (InlineTextBox::selectionStartEnd):
        (InlineTextBox::paintSelection):
        (InlineTextBox::paintMarkedTextBackground):
        (InlineTextBox::paintDecoration):
        (RenderText::posOfChar):
        * khtml/rendering/render_text.h:
        (khtml::RenderText::paint):
        (khtml::RenderText::layout):
        (khtml::RenderText::nodeAtPoint):
        * khtml/xml/dom2_eventsimpl.cpp:
        (MouseEventImpl::computeLayerPos):
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::prepareMouseEvent):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject accessibilityHitTest:]):
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::scrollOverflowWithScrollWheelEvent):
        (KWQKHTMLPart::eventMayStartDrag):
        (KWQKHTMLPart::khtmlMouseMoveEvent):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]):
        (-[WebCoreBridge _positionForPoint:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8070 268f45cc-cd09-0410-ab3c-d52691b4dbfc
30 files changed:
WebCore/ChangeLog-2005-08-23
WebCore/khtml/khtml_part.cpp
WebCore/khtml/rendering/render_block.cpp
WebCore/khtml/rendering/render_block.h
WebCore/khtml/rendering/render_box.cpp
WebCore/khtml/rendering/render_box.h
WebCore/khtml/rendering/render_br.h
WebCore/khtml/rendering/render_canvas.cpp
WebCore/khtml/rendering/render_flow.cpp
WebCore/khtml/rendering/render_flow.h
WebCore/khtml/rendering/render_frames.cpp
WebCore/khtml/rendering/render_frames.h
WebCore/khtml/rendering/render_image.cpp
WebCore/khtml/rendering/render_image.h
WebCore/khtml/rendering/render_inline.cpp
WebCore/khtml/rendering/render_inline.h
WebCore/khtml/rendering/render_layer.cpp
WebCore/khtml/rendering/render_layer.h
WebCore/khtml/rendering/render_line.cpp
WebCore/khtml/rendering/render_line.h
WebCore/khtml/rendering/render_object.cpp
WebCore/khtml/rendering/render_object.h
WebCore/khtml/rendering/render_table.cpp
WebCore/khtml/rendering/render_text.cpp
WebCore/khtml/rendering/render_text.h
WebCore/khtml/xml/dom2_eventsimpl.cpp
WebCore/khtml/xml/dom_docimpl.cpp
WebCore/kwq/KWQAccObject.mm
WebCore/kwq/KWQKHTMLPart.mm
WebCore/kwq/WebCoreBridge.mm