Reviewed by John
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Dec 2004 18:57:29 +0000 (18:57 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Dec 2004 18:57:29 +0000 (18:57 +0000)
        Did some clean up in the Position class as a result of trying to write some new layout
        tests and discovering a bug along the way.

        I removed these three functions from the Position class:

        1. bool isFirstRenderedPositionOnLine() const;
        2. bool isLastRenderedPositionOnLine() const;
        3. static bool renderersOnDifferentLine(RenderObject *r1, long o1, RenderObject *r2, long o2);
        4. bool inFirstEditableInRootEditableElement() const;

        The first two have replacements in the VisiblePosition class, and some code has been
        moved to use these new variants. The third function was a helper used only by these
        first two function, and can be removed as well. The fourth function was not used by anyone.

        * khtml/editing/htmlediting.cpp:
        (khtml::InsertTextCommand::input): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
        * khtml/editing/visible_position.cpp:
        (khtml::visiblePositionsOnDifferentLines): Added an additional check for blocks to this function.
        Incorrect results were being returned when asking about positions at the starts of blocks.
        * khtml/xml/dom_position.cpp:
        (DOM::Position::previousCharacterPosition): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
        (DOM::Position::nextCharacterPosition): Change over to use VisiblePosition isLastVisiblePositionOnLine().
        (DOM::Position::rendersInDifferentPosition): Removed use of #3 helper in a log message. We can live without it.
        * khtml/xml/dom_position.h: Update header for deletions.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/htmlediting.cpp
WebCore/khtml/editing/visible_position.cpp
WebCore/khtml/xml/dom_position.cpp
WebCore/khtml/xml/dom_position.h

index 1a119a875a6f5400511830260e809cf0b4538d38..dede100ffac4b841df0d71310733bd1b30e4ed12 100644 (file)
@@ -1,3 +1,32 @@
+2004-12-03  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        Did some clean up in the Position class as a result of trying to write some new layout
+        tests and discovering a bug along the way.
+
+        I removed these three functions from the Position class:
+        
+        1. bool isFirstRenderedPositionOnLine() const;
+        2. bool isLastRenderedPositionOnLine() const;
+        3. static bool renderersOnDifferentLine(RenderObject *r1, long o1, RenderObject *r2, long o2);
+        4. bool inFirstEditableInRootEditableElement() const;
+
+        The first two have replacements in the VisiblePosition class, and some code has been
+        moved to use these new variants. The third function was a helper used only by these
+        first two function, and can be removed as well. The fourth function was not used by anyone.
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::InsertTextCommand::input): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
+        * khtml/editing/visible_position.cpp:
+        (khtml::visiblePositionsOnDifferentLines): Added an additional check for blocks to this function.
+        Incorrect results were being returned when asking about positions at the starts of blocks.
+        * khtml/xml/dom_position.cpp:
+        (DOM::Position::previousCharacterPosition): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
+        (DOM::Position::nextCharacterPosition): Change over to use VisiblePosition isLastVisiblePositionOnLine().
+        (DOM::Position::rendersInDifferentPosition): Removed use of #3 helper in a log message. We can live without it.
+        * khtml/xml/dom_position.h: Update header for deletions.
+
 2004-12-03  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by John
index f5833495566185f2e1ee189683a9252454342adb..e38dbf8059c92111a3acfb8f7af11ae171dc28bc 100644 (file)
@@ -2497,7 +2497,7 @@ Position InsertTextCommand::prepareForTextInsertion(bool adjustDownstream)
 void InsertTextCommand::input(const DOMString &text, bool selectInsertedText)
 {
     Selection selection = endingSelection();
-    bool adjustDownstream = selection.start().downstream(StayInBlock).isFirstRenderedPositionOnLine();
+    bool adjustDownstream = isFirstVisiblePositionOnLine(VisiblePosition(selection.start().downstream(StayInBlock)));
 
     // Delete the current selection, or collapse whitespace, as needed
     if (selection.isRange())
index 015484a10123959dced11d25a2f09f2fa0f8175c..54604555747107e2a81c887b2d5e6d333d045dd0 100644 (file)
@@ -466,6 +466,8 @@ bool visiblePositionsOnDifferentLines(const VisiblePosition &pos1, const Visible
     Position p2 = pos2.deepEquivalent();
     RenderObject *r1 = p1.node()->renderer();
     RenderObject *r2 = p2.node()->renderer();
+    if (r1->isBlockFlow() || r2->isBlockFlow())
+        return r1 == r2 ? false : true;
     InlineBox *b1 = r1 ? r1->inlineBox(p1.offset()) : 0;
     InlineBox *b2 = r2 ? r2->inlineBox(p2.offset()) : 0;
     return (b1 && b2 && b1->root() != b2->root());
index d9659e7f71e66b0299b72c1c30530b6309bd7007..358b4d3faff9606fc45438afdda3225d333a7929 100644 (file)
@@ -37,6 +37,7 @@
 #include "helper.h"
 #include "htmltags.h"
 #include "text_affinity.h"
+#include "visible_position.h"
 #include "rendering/render_block.h"
 #include "rendering/render_flow.h"
 #include "rendering/render_line.h"
@@ -60,16 +61,10 @@ using khtml::RenderObject;
 using khtml::RenderText;
 using khtml::RootInlineBox;
 using khtml::VISIBLE;
+using khtml::VisiblePosition;
 
 namespace DOM {
 
-static bool renderersOnDifferentLine(RenderObject *r1, long o1, RenderObject *r2, long o2)
-{
-    InlineBox *b1 = r1 ? r1->inlineBox(o1) : 0;
-    InlineBox *b2 = r2 ? r2->inlineBox(o2) : 0;
-    return (b1 && b2 && b1->root() != b2->root());
-}
-
 static NodeImpl *nextRenderedEditable(NodeImpl *node)
 {
     while (1) {
@@ -194,7 +189,7 @@ Position Position::previousCharacterPosition() const
     NodeImpl *fromRootEditableElement = node()->rootEditableElement();
     PositionIterator it(*this);
 
-    bool atStartOfLine = isFirstRenderedPositionOnLine();
+    bool atStartOfLine = isFirstVisiblePositionOnLine(VisiblePosition(*this));
     bool rendered = inRenderedContent();
     
     while (!it.atStart()) {
@@ -222,7 +217,7 @@ Position Position::nextCharacterPosition() const
     NodeImpl *fromRootEditableElement = node()->rootEditableElement();
     PositionIterator it(*this);
 
-    bool atEndOfLine = isLastRenderedPositionOnLine();
+    bool atEndOfLine = isLastVisiblePositionOnLine(VisiblePosition(*this));
     bool rendered = inRenderedContent();
     
     while (!it.atEnd()) {
@@ -689,7 +684,6 @@ bool Position::rendersInDifferentPosition(const Position &pos) const
     if (renderer == posRenderer && thisRenderedOffset == posRenderedOffset)
         return false;
 
-    LOG(Editing, "onDifferentLine:        %s\n", renderersOnDifferentLine(renderer, offset(), posRenderer, pos.offset()) ? "YES" : "NO");
     LOG(Editing, "renderer:               %p [%p]\n", renderer, renderer ? renderer->inlineBox(offset()) : 0);
     LOG(Editing, "thisRenderedOffset:         %d\n", thisRenderedOffset);
     LOG(Editing, "posRenderer:            %p [%p]\n", posRenderer, posRenderer ? posRenderer->inlineBox(offset()) : 0);
@@ -722,86 +716,6 @@ bool Position::rendersInDifferentPosition(const Position &pos) const
     return true;
 }
 
-bool Position::isFirstRenderedPositionOnLine() const
-{
-    if (isNull())
-        return false;
-
-    RenderObject *renderer = node()->renderer();
-    if (!renderer)
-        return false;
-
-    if (renderer->style()->visibility() != VISIBLE)
-        return false;
-    
-    if (!inRenderedContent())
-        return false;
-
-    PositionIterator it(*this);
-    while (!it.atStart()) {
-        it.previous();
-        RenderObject *currentRenderer = it.current().node()->renderer();
-        if (!currentRenderer || currentRenderer->firstChild())
-            // we want a leaf for this check
-            continue;
-        if (it.current().inRenderedContent())
-            return renderersOnDifferentLine(renderer, offset(), currentRenderer, it.current().offset());
-    }
-    
-    return true;
-}
-
-bool Position::isLastRenderedPositionOnLine() const
-{
-    if (isNull())
-        return false;
-
-    RenderObject *renderer = node()->renderer();
-    if (!renderer)
-        return false;
-
-    if (renderer->style()->visibility() != VISIBLE)
-        return false;
-    
-    if (!inRenderedContent())
-        return false;
-    
-    if (node()->id() == ID_BR)
-        return true;
-    
-    PositionIterator it(*this);
-    while (!it.atEnd()) {
-        it.next();
-        RenderObject *currentRenderer = it.current().node()->renderer();
-        if (!currentRenderer || currentRenderer->firstChild())
-            // we want a leaf for this check
-            continue;
-        if (it.current().inRenderedContent())
-            return renderersOnDifferentLine(renderer, offset(), currentRenderer, it.current().offset());
-    }
-    
-    return true;
-}
-
-bool Position::inFirstEditableInRootEditableElement() const
-{
-    if (isNull() || !inRenderedContent())
-        return false;
-
-    PositionIterator it(*this);
-    while (!it.atStart()) {
-        it.previous();
-        RenderObject *currentRenderer = it.current().node()->renderer();
-        if (!currentRenderer || currentRenderer->firstChild())
-            // we want a leaf for this check
-            continue;
-        if (it.current().inRenderedContent())
-            return false;
-    }
-
-    return true;
-}
-
 static inline bool isWS(const QChar &c)
 {
     const char nonBreakingSpace = 0xA0;
index bdce392cf20b1989e5bd282aa9d00a8855e85dfe..fedcb287436960fd9e60547b33da8d6acf975469 100644 (file)
@@ -83,9 +83,6 @@ public:
     bool inRenderedContent() const;
     bool isRenderedCharacter() const;
     bool rendersInDifferentPosition(const Position &pos) const;
-    bool isFirstRenderedPositionOnLine() const;
-    bool isLastRenderedPositionOnLine() const;
-    bool inFirstEditableInRootEditableElement() const;
     
     void debugPosition(const char *msg="") const;