- roll out the last change, it appears to cause a performance regression
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Sep 2004 01:02:20 +0000 (01:02 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Sep 2004 01:02:20 +0000 (01:02 +0000)
        * khtml/rendering/render_box.cpp:
        (RenderBox::caretRect):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_br.cpp:
        (RenderBR::caretRect):
        * khtml/rendering/render_br.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::caretRect):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::caretRect):
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_text.cpp:
        (RenderText::caretRect):
        * khtml/rendering/render_text.h:
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7503 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_box.cpp
WebCore/khtml/rendering/render_box.h
WebCore/khtml/rendering/render_br.cpp
WebCore/khtml/rendering/render_br.h
WebCore/khtml/rendering/render_flow.cpp
WebCore/khtml/rendering/render_flow.h
WebCore/khtml/rendering/render_object.cpp
WebCore/khtml/rendering/render_object.h
WebCore/khtml/rendering/render_text.cpp
WebCore/khtml/rendering/render_text.h
WebCore/kwq/WebCoreBridge.h
WebCore/kwq/WebCoreBridge.mm

index af9a4aff5ad06f6136228f84e15a40d792166d97..4917e5076b565ca63987538eeaa4c66681e621bd 100644 (file)
@@ -1,3 +1,25 @@
+2004-09-09  Maciej Stachowiak  <mjs@apple.com>
+
+        - roll out the last change, it appears to cause a performance regression
+
+        * khtml/rendering/render_box.cpp:
+        (RenderBox::caretRect):
+        * khtml/rendering/render_box.h:
+        * khtml/rendering/render_br.cpp:
+        (RenderBR::caretRect):
+        * khtml/rendering/render_br.h:
+        * khtml/rendering/render_flow.cpp:
+        (RenderFlow::caretRect):
+        * khtml/rendering/render_flow.h:
+        * khtml/rendering/render_object.cpp:
+        (RenderObject::caretRect):
+        * khtml/rendering/render_object.h:
+        * khtml/rendering/render_text.cpp:
+        (RenderText::caretRect):
+        * khtml/rendering/render_text.h:
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreBridge.mm:
+
 2004-09-08  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Dave.
index fd78cfa08f7b49b0d9456cdf8cdf4d31246b5e43..260c80bf98434b7f412d64f93af32ca01a86b22e 100644 (file)
@@ -1480,7 +1480,7 @@ void RenderBox::calcAbsoluteVertical()
 
 }
 
-QRect RenderBox::caretRect(int offset, bool override, int *extraWidthToEndOfLine)
+QRect RenderBox::caretRect(int offset, bool override)
 {
     // FIXME: Is it OK to check only first child instead of picking
     // right child based on offset? Is it OK to pass the same offset
@@ -1489,7 +1489,7 @@ QRect RenderBox::caretRect(int offset, bool override, int *extraWidthToEndOfLine
     // propagate it downwards to its children, someone will feel responsible
     RenderObject *child = firstChild();
     if (child) {
-        QRect result = child->caretRect(offset, override, extraWidthToEndOfLine);
+        QRect result = child->caretRect(offset, override);
         // FIXME: in-band signalling!
         if (result.x() != -1)
             return result;
@@ -1534,9 +1534,6 @@ QRect RenderBox::caretRect(int offset, bool override, int *extraWidthToEndOfLine
         _x = _y = -1;
     }
 
-    if (extraWidthToEndOfLine)
-        *extraWidthToEndOfLine = m_width - width;
-
     return QRect(_x, _y, width, height);
 }
 
index 4a35c5a11bd8dcf3f2723babde4b553be8826239..bb84ff24cdf638074c2651ffb5d563cf6f51e538 100644 (file)
@@ -130,7 +130,7 @@ public:
 
     virtual RenderLayer* layer() const { return m_layer; }
     
-    virtual QRect caretRect(int offset, bool override, int *extraWidthToEndOfLine = 0);
+    virtual QRect caretRect(int offset, bool override);
 
     virtual void paintBackgroundExtended(QPainter *p, const QColor &c, CachedImage *bg, int clipy, int cliph,
                                          int _tx, int _ty, int w, int height,
index b1d3fa16a04f24d2730a071c1c91e154655002b7..ceed12782671e2dfeac997b8b03cf2883412c8c4 100644 (file)
@@ -112,14 +112,11 @@ Position RenderBR::positionForCoordinates(int _x, int _y)
     return Position(element(), 0);
 }
 
-QRect RenderBR::caretRect(int offset, bool override, int *extraWidthToEndOfLine)
+QRect RenderBR::caretRect(int offset, bool override)
 {
     // EDIT FIXME: This does not work yet. Some other changes are need before
     // an accurate position can be determined.
 
-    if (extraWidthToEndOfLine)
-        *extraWidthToEndOfLine = containingBlockWidth();
-
     int absx, absy;
     absolutePosition(absx,absy);
 
index cf7290787582dca0b510342c3c0517b18fae7927..30b22ea077c0934263ce1f63c8d686b3d3a5ba0f 100644 (file)
@@ -69,7 +69,7 @@ public:
     virtual unsigned long caretMaxRenderedOffset() const;
     
     virtual DOM::Position positionForCoordinates(int _x, int _y);
-    virtual QRect caretRect(int offset, bool override, int *extraWidthToEndOfLine = 0);
+    virtual QRect caretRect(int offset, bool override);
 
     virtual InlineBox *inlineBox(long offset);
     
index 331699e757bb86092514c8c044a227ee5bc17590..bebbf652acc55d617e446fb1fd67d3b9601f2048 100644 (file)
@@ -483,11 +483,11 @@ int RenderFlow::leftmostPosition(bool includeOverflowInterior, bool includeSelf)
     return left;
 }
 
-QRect RenderFlow::caretRect(int offset, bool override, int *extraWidthToEndOfLine)
+QRect RenderFlow::caretRect(int offset, bool override)
 {
     if (firstChild() || style()->display() == INLINE) {
         // Do the normal calculation
-        return RenderContainer::caretRect(offset, override, extraWidthToEndOfLine);
+        return RenderContainer::caretRect(offset, override);
     }
 
     // This is a special case:
@@ -527,21 +527,6 @@ QRect RenderFlow::caretRect(int offset, bool override, int *extraWidthToEndOfLin
     }
     
     _y = 0;
-
-    if (extraWidthToEndOfLine) {
-        if (isRenderBlock()) {
-            *extraWidthToEndOfLine = this->width() - (_x + width);
-        } else {
-            int myRight = _x + width;
-            int ignore;
-            absolutePosition(myRight, ignore);
-
-            int containerRight = containingBlock()->xPos() + containingBlockWidth();
-            absolutePosition(containerRight, ignore);
-
-            *extraWidthToEndOfLine = containerRight - myRight;
-        }
-    }
     
     int absx, absy;
     absolutePosition(absx, absy, false);
index 157154a7f2484a5d4dbde90609e520e9720adafd..98152415ac4aa704e17c2527ed651624ff85f8cc 100644 (file)
@@ -81,7 +81,7 @@ public:
     virtual int rightmostPosition(bool includeOverflowInterior=true, bool includeSelf=true) const;
     virtual int leftmostPosition(bool includeOverflowInterior=true, bool includeSelf=true) const;
     
-    virtual QRect caretRect(int offset, bool override, int *extraWidthToEndOfLine = 0);
+    virtual QRect caretRect(int offset, bool override);
 
 protected:
     // An inline can be split with blocks occurring in between the inline content.
index 2cbeec58134f12cf87b105394db37eb844a9b2bf..bb8015f1fc9e15563b237e59385f4921465bc2d7 100644 (file)
@@ -1590,11 +1590,8 @@ bool RenderObject::absolutePosition(int &xPos, int &yPos, bool f)
     }
 }
 
-QRect RenderObject::caretRect(int /*offset*/, bool /*override*/, int *extraWidthToEndOfLine)
+QRect RenderObject::caretRect(int /*offset*/, bool /*override*/)
 {
-    if (extraWidthToEndOfLine)
-        *extraWidthToEndOfLine = 0;
-
     // the caret has a default width of one pixel. If you want
     // to check for validity, only test the x-coordinate for >= 0.
     return QRect(-1, -1, 1, -1);
index e9c53b3f769ab3d1bddfc2eae04fe255087d6eaf..11d1e284d6c804cae64b988902abeb892610fd9b 100644 (file)
@@ -708,10 +708,8 @@ public:
      * @param offset zero-based offset determining position within the render object.
      * @param override @p true if input overrides existing characters,
      * @p false if it inserts them. The width of the caret depends on this one.
-     * @param extraWidthToEndOfLine optional out arg to give extra width to end of line -
-     * useful for character range rect computations
      */
-    virtual QRect caretRect(int offset, bool override, int *extraWidthToEndOfLine = 0);
+    virtual QRect caretRect(int offset, bool override);
 
     virtual int lowestPosition(bool includeOverflowInterior=true, bool includeSelf=true) const { return 0; }
     virtual int rightmostPosition(bool includeOverflowInterior=true, bool includeSelf=true) const { return 0; }
index 4d9a34a5dcede1c1b1b6e51ec713d70c84b73ba2..a978f691ac7e8563e6d02a7c42ed5d269a033d1f 100644 (file)
@@ -650,7 +650,7 @@ Position RenderText::positionForCoordinates(int _x, int _y)
     return Position(element(), 0);
 }
 
-QRect RenderText::caretRect(int offset, bool override, int *extraWidthToEndOfLine)
+QRect RenderText::caretRect(int offset, bool override)
 {
     if (!firstTextBox() || stringLength() == 0) {
         return QRect(-1, -1, 1, -1);
@@ -683,11 +683,6 @@ QRect RenderText::caretRect(int offset, bool override, int *extraWidthToEndOfLin
         _x += fm.rightBearing(*(str->s + box->m_start + offset));
 #endif
 
-    // FIXME: should we use the width of the root inline box or the
-    // width of the containing block for this?
-    if (extraWidthToEndOfLine)
-        *extraWidthToEndOfLine = (box->root()->width() + box->root()->xPos()) - (_x + 1);
-
     int absx, absy;
     absolutePosition(absx,absy);
     _x += absx;
index a53509ca7379abfc409a141500ff20873d4f0a22..ced325258e0cb1aefbf9a837d3c810633182ab20 100644 (file)
@@ -212,7 +212,7 @@ public:
 
     virtual SelectionState selectionState() const {return m_selectionState;}
     virtual void setSelectionState(SelectionState s) {m_selectionState = s; }
-    virtual QRect caretRect(int offset, bool override, int *extraWidthToEndOfLine = 0);
+    virtual QRect caretRect(int offset, bool override);
     void posOfChar(int ch, int &x, int &y);
 
     virtual short marginLeft() const { return style()->marginLeft().minWidth(0); }
index 80ac7f2585856481a5915dbd5cec5f4548323f6b..2109b3ab935d00503ea396ee3ed6d376c79993c8 100644 (file)
@@ -257,7 +257,6 @@ typedef enum {
 - (NSRect)visibleSelectionRect;
 - (NSImage *)selectionImage;
 - (NSRect)caretRectAtNode:(DOMNode *)node offset:(int)offset;
-- (NSRect)firstRectForDOMRange:(DOMRange *)range;
 
 - (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)selectionAffinity;
 - (DOMRange *)selectedDOMRange;
index 9515ce3d2a175d5751694a5285627d2c37d9b991..1c972e7495035b6966cfb6165cdeb26d525edaa1 100644 (file)
@@ -1178,28 +1178,6 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
     return [node _nodeImpl]->renderer()->caretRect(offset, true);
 }
 
-- (NSRect)firstRectForDOMRange:(DOMRange *)range
-{
-    int extraWidthToEndOfLine = 0;
-    QRect startCaretRect = [[range startContainer] _nodeImpl]->renderer()->caretRect([range startOffset], true, &extraWidthToEndOfLine);
-    QRect endCaretRect = [[range startContainer] _nodeImpl]->renderer()->caretRect([range endOffset], true);
-
-    if (startCaretRect.y() == endCaretRect.y()) {
-        // start and end are on the same line
-        return QRect(MIN(startCaretRect.x(), endCaretRect.x()), 
-                     startCaretRect.y(), 
-                     abs(endCaretRect.x() - startCaretRect.x()),
-                     MAX(startCaretRect.height(), endCaretRect.height()));
-    }
-
-    // start and end aren't on the same line, so go from start to the end of its line
-    return QRect(startCaretRect.x(), 
-                 startCaretRect.y(),
-                 startCaretRect.width() + extraWidthToEndOfLine,
-                 startCaretRect.height());
-}
-
-
 - (NSImage *)selectionImage
 {
     return _part->selectionImage();