Title: [157517] trunk/Source/WebCore
Revision
157517
Author
[email protected]
Date
2013-10-16 07:33:31 -0700 (Wed, 16 Oct 2013)

Log Message

Move code for finding rendered character offset to RenderTextLineBoxes
https://bugs.webkit.org/show_bug.cgi?id=122892

Reviewed by Andreas Kling.

* rendering/RenderText.cpp:
(WebCore::RenderText::countRenderedCharacterOffsets):
(WebCore::RenderText::containsRenderedCharacterOffset):
        
    Renamed for consistency.

* rendering/RenderTextLineBoxes.cpp:
(WebCore::RenderTextLineBoxes::countCharacterOffsets):
        
    This used to be Position::renderedPosition.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (157516 => 157517)


--- trunk/Source/WebCore/ChangeLog	2013-10-16 13:03:32 UTC (rev 157516)
+++ trunk/Source/WebCore/ChangeLog	2013-10-16 14:33:31 UTC (rev 157517)
@@ -1,3 +1,21 @@
+2013-10-16  Antti Koivisto  <[email protected]>
+
+        Move code for finding rendered character offset to RenderTextLineBoxes
+        https://bugs.webkit.org/show_bug.cgi?id=122892
+
+        Reviewed by Andreas Kling.
+
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::countRenderedCharacterOffsets):
+        (WebCore::RenderText::containsRenderedCharacterOffset):
+        
+            Renamed for consistency.
+
+        * rendering/RenderTextLineBoxes.cpp:
+        (WebCore::RenderTextLineBoxes::countCharacterOffsets):
+        
+            This used to be Position::renderedPosition.
+
 2013-10-16  Andreas Kling  <[email protected]>
 
         RenderElement::removeChild() should take child as a reference.

Modified: trunk/Source/WebCore/dom/Position.cpp (157516 => 157517)


--- trunk/Source/WebCore/dom/Position.cpp	2013-10-16 13:03:32 UTC (rev 157516)
+++ trunk/Source/WebCore/dom/Position.cpp	2013-10-16 14:33:31 UTC (rev 157517)
@@ -479,30 +479,6 @@
     return !findParent(deprecatedNode()) && m_offset >= lastOffsetForEditing(deprecatedNode());
 }
 
-int Position::renderedOffset() const
-{
-    if (!deprecatedNode()->isTextNode())
-        return m_offset;
-   
-    if (!deprecatedNode()->renderer())
-        return m_offset;
-                    
-    int result = 0;
-    RenderText* textRenderer = toText(deprecatedNode())->renderer();
-    for (InlineTextBox *box = textRenderer->firstTextBox(); box; box = box->nextTextBox()) {
-        int start = box->start();
-        int end = box->start() + box->len();
-        if (m_offset < start)
-            return result;
-        if (m_offset <= end) {
-            result += m_offset - start;
-            return result;
-        }
-        result += box->len();
-    }
-    return result;
-}
-
 // return first preceding DOM position rendered at a different location, or "this"
 Position Position::previousCharacterPosition(EAffinity affinity) const
 {
@@ -975,7 +951,7 @@
     if (!renderer)
         return false;
     
-    return renderer->containsCharacterOffset(m_offset);
+    return renderer->containsRenderedCharacterOffset(m_offset);
 }
 
 static bool inSameEnclosingBlockFlowElement(Node* a, Node* b)
@@ -1028,8 +1004,8 @@
     if (posRenderer->isText() && !toRenderText(posRenderer)->containsCaretOffset(pos.m_offset))
         return false;
 
-    int thisRenderedOffset = renderedOffset();
-    int posRenderedOffset = pos.renderedOffset();
+    int thisRenderedOffset = renderer->isText() ? toRenderText(renderer)->countRenderedCharacterOffsetsUntil(m_offset) : m_offset;
+    int posRenderedOffset = posRenderer->isText() ? toRenderText(posRenderer)->countRenderedCharacterOffsetsUntil(pos.m_offset) : pos.m_offset;
 
     if (renderer == posRenderer && thisRenderedOffset == posRenderedOffset)
         return false;

Modified: trunk/Source/WebCore/dom/Position.h (157516 => 157517)


--- trunk/Source/WebCore/dom/Position.h	2013-10-16 13:03:32 UTC (rev 157516)
+++ trunk/Source/WebCore/dom/Position.h	2013-10-16 14:33:31 UTC (rev 157517)
@@ -207,9 +207,6 @@
     
 private:
     int offsetForPositionAfterAnchor() const;
-
-    int renderedOffset() const;
-
     
     Position previousCharacterPosition(EAffinity) const;
     Position nextCharacterPosition(EAffinity) const;

Modified: trunk/Source/WebCore/rendering/RenderText.cpp (157516 => 157517)


--- trunk/Source/WebCore/rendering/RenderText.cpp	2013-10-16 13:03:32 UTC (rev 157516)
+++ trunk/Source/WebCore/rendering/RenderText.cpp	2013-10-16 14:33:31 UTC (rev 157517)
@@ -1151,8 +1151,13 @@
     return m_lineBoxes.caretMaxOffset(*this);
 }
 
-bool RenderText::containsCharacterOffset(unsigned offset) const
+unsigned RenderText::countRenderedCharacterOffsetsUntil(unsigned offset) const
 {
+    return m_lineBoxes.countCharacterOffsetsUntil(offset);
+}
+
+bool RenderText::containsRenderedCharacterOffset(unsigned offset) const
+{
     return m_lineBoxes.containsOffset(*this, offset, RenderTextLineBoxes::CharacterOffset);
 }
 

Modified: trunk/Source/WebCore/rendering/RenderText.h (157516 => 157517)


--- trunk/Source/WebCore/rendering/RenderText.h	2013-10-16 13:03:32 UTC (rev 157516)
+++ trunk/Source/WebCore/rendering/RenderText.h	2013-10-16 14:33:31 UTC (rev 157517)
@@ -120,7 +120,8 @@
 
     virtual int caretMinOffset() const OVERRIDE;
     virtual int caretMaxOffset() const OVERRIDE;
-    bool containsCharacterOffset(unsigned) const;
+    unsigned countRenderedCharacterOffsetsUntil(unsigned) const;
+    bool containsRenderedCharacterOffset(unsigned) const;
     bool containsCaretOffset(unsigned) const;
     bool hasRenderedText() const;
 

Modified: trunk/Source/WebCore/rendering/RenderTextLineBoxes.cpp (157516 => 157517)


--- trunk/Source/WebCore/rendering/RenderTextLineBoxes.cpp	2013-10-16 13:03:32 UTC (rev 157516)
+++ trunk/Source/WebCore/rendering/RenderTextLineBoxes.cpp	2013-10-16 14:33:31 UTC (rev 157517)
@@ -243,6 +243,21 @@
     return false;
 }
 
+unsigned RenderTextLineBoxes::countCharacterOffsetsUntil(unsigned offset) const
+{
+    unsigned result = 0;
+    for (auto box = m_first; box; box = box->nextTextBox()) {
+        if (offset < box->start())
+            return result;
+        if (offset <= box->start() + box->len()) {
+            result += offset - box->start();
+            return result;
+        }
+        result += box->len();
+    }
+    return result;
+}
+
 enum ShouldAffinityBeDownstream { AlwaysDownstream, AlwaysUpstream, UpstreamIfPositionIsNotAtStart };
 
 static bool lineDirectionPointFitsInBox(int pointLineDirection, const InlineTextBox& box, ShouldAffinityBeDownstream& shouldAffinityBeDownstream)

Modified: trunk/Source/WebCore/rendering/RenderTextLineBoxes.h (157516 => 157517)


--- trunk/Source/WebCore/rendering/RenderTextLineBoxes.h	2013-10-16 13:03:32 UTC (rev 157516)
+++ trunk/Source/WebCore/rendering/RenderTextLineBoxes.h	2013-10-16 14:33:31 UTC (rev 157517)
@@ -62,6 +62,7 @@
     int caretMaxOffset(const RenderText&) const;
     enum OffsetType { CaretOffset, CharacterOffset };
     bool containsOffset(const RenderText&, unsigned, OffsetType) const;
+    unsigned countCharacterOffsetsUntil(unsigned) const;
 
     VisiblePosition positionForPoint(const RenderText&, const LayoutPoint&) const;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to