- Revision
- 93199
- Author
- [email protected]
- Date
- 2011-08-17 03:52:01 -0700 (Wed, 17 Aug 2011)
Log Message
Get rid of calls to deprecatedNode and deprecatedEditingOffset in
AccessibilityRenderObject.cpp and InsertTextCommand.cpp
https://bugs.webkit.org/show_bug.cgi?id=66014
Reviewed by Hajime Morita.
Removed calls to deprecatedNode and deprecatedEditingOffsets in the following files.
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::indexForVisiblePosition): Calls Position::rootEditableElement
and Range::setEnd(const Position&, ExceptionCode) instead of manually pulling deprecatedNode
and deprecatedEditingOffset.
(WebCore::AccessibilityRenderObject::index): Abstracted the logic to loop through render objects
from deprecatedNodes' renderer to m_renderer as renderObjectContainsPosition.
* dom/Position.h:
(WebCore::Position::rootEditableElement): Added.
* dom/Range.cpp:
(WebCore::Range::setStart): Added.
(WebCore::Range::setEnd): Added.
* dom/Range.h:
* editing/InsertTextCommand.cpp:
(WebCore::InsertTextCommand::insertTab):
* editing/RenderedPosition.cpp:
(WebCore::renderObjectContainsPosition): Extracted from AccessibilityRenderObject::index.
* editing/RenderedPosition.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (93198 => 93199)
--- trunk/Source/WebCore/ChangeLog 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/ChangeLog 2011-08-17 10:52:01 UTC (rev 93199)
@@ -1,3 +1,31 @@
+2011-08-17 Ryosuke Niwa <[email protected]>
+
+ Get rid of calls to deprecatedNode and deprecatedEditingOffset in
+ AccessibilityRenderObject.cpp and InsertTextCommand.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=66014
+
+ Reviewed by Hajime Morita.
+
+ Removed calls to deprecatedNode and deprecatedEditingOffsets in the following files.
+
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::indexForVisiblePosition): Calls Position::rootEditableElement
+ and Range::setEnd(const Position&, ExceptionCode) instead of manually pulling deprecatedNode
+ and deprecatedEditingOffset.
+ (WebCore::AccessibilityRenderObject::index): Abstracted the logic to loop through render objects
+ from deprecatedNodes' renderer to m_renderer as renderObjectContainsPosition.
+ * dom/Position.h:
+ (WebCore::Position::rootEditableElement): Added.
+ * dom/Range.cpp:
+ (WebCore::Range::setStart): Added.
+ (WebCore::Range::setEnd): Added.
+ * dom/Range.h:
+ * editing/InsertTextCommand.cpp:
+ (WebCore::InsertTextCommand::insertTab):
+ * editing/RenderedPosition.cpp:
+ (WebCore::renderObjectContainsPosition): Extracted from AccessibilityRenderObject::index.
+ * editing/RenderedPosition.h:
+
2011-08-17 Sailesh Agrawal <[email protected]>
Chromium Mac: Fix issue where scrollbar wouldn't be drawn until page finished loading
Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (93198 => 93199)
--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2011-08-17 10:52:01 UTC (rev 93199)
@@ -73,6 +73,7 @@
#include "RenderTheme.h"
#include "RenderView.h"
#include "RenderWidget.h"
+#include "RenderedPosition.h"
#include "SelectElement.h"
#include "Text.h"
#include "TextIterator.h"
@@ -2517,13 +2518,13 @@
return 0;
Position indexPosition = pos.deepEquivalent();
- if (!indexPosition.anchorNode() || indexPosition.anchorNode()->rootEditableElement() != node)
+ if (indexPosition.isNull() || pos.rootEditableElement() != node)
return 0;
ExceptionCode ec = 0;
RefPtr<Range> range = Range::create(m_renderer->document());
range->setStart(node, 0, ec);
- range->setEnd(indexPosition.anchorNode(), indexPosition.deprecatedEditingOffset(), ec);
+ range->setEnd(indexPosition, ec);
#if PLATFORM(GTK)
// We need to consider replaced elements for GTK, as they will be
@@ -2672,16 +2673,10 @@
{
if (!isTextControl())
return -1;
+
+ if (renderObjectContainsPosition(m_renderer, position.deepEquivalent()))
+ return indexForVisiblePosition(position);
- Node* node = position.deepEquivalent().deprecatedNode();
- if (!node)
- return -1;
-
- for (RenderObject* renderer = node->renderer(); renderer && renderer->node(); renderer = renderer->parent()) {
- if (renderer == m_renderer)
- return indexForVisiblePosition(position);
- }
-
return -1;
}
Modified: trunk/Source/WebCore/dom/Position.h (93198 => 93199)
--- trunk/Source/WebCore/dom/Position.h 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/dom/Position.h 2011-08-17 10:52:01 UTC (rev 93199)
@@ -128,6 +128,11 @@
Node* deprecatedNode() const { return m_anchorNode.get(); }
Document* document() const { return m_anchorNode ? m_anchorNode->document() : 0; }
+ Element* rootEditableElement() const
+ {
+ Node* container = containerNode();
+ return container ? container->rootEditableElement() : 0;
+ }
// These should only be used for PositionIsOffsetInAnchor positions, unless
// the position is a legacy editing position.
Modified: trunk/Source/WebCore/dom/Range.cpp (93198 => 93199)
--- trunk/Source/WebCore/dom/Range.cpp 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/dom/Range.cpp 2011-08-17 10:52:01 UTC (rev 93199)
@@ -274,6 +274,18 @@
}
}
+void Range::setStart(const Position& start, ExceptionCode& ec)
+{
+ Position parentAnchored = start.parentAnchoredEquivalent();
+ setStart(parentAnchored.containerNode(), parentAnchored.offsetInContainerNode(), ec);
+}
+
+void Range::setEnd(const Position& end, ExceptionCode& ec)
+{
+ Position parentAnchored = end.parentAnchoredEquivalent();
+ setStart(parentAnchored.containerNode(), parentAnchored.offsetInContainerNode(), ec);
+}
+
void Range::collapse(bool toStart, ExceptionCode& ec)
{
if (!m_start.container()) {
Modified: trunk/Source/WebCore/dom/Range.h (93198 => 93199)
--- trunk/Source/WebCore/dom/Range.h 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/dom/Range.h 2011-08-17 10:52:01 UTC (rev 93199)
@@ -103,6 +103,8 @@
const Position startPosition() const { return m_start.toPosition(); }
const Position endPosition() const { return m_end.toPosition(); }
+ void setStart(const Position&, ExceptionCode&);
+ void setEnd(const Position&, ExceptionCode&);
Node* firstNode() const;
Node* pastLastNode() const;
Modified: trunk/Source/WebCore/editing/InsertTextCommand.cpp (93198 => 93199)
--- trunk/Source/WebCore/editing/InsertTextCommand.cpp 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/editing/InsertTextCommand.cpp 2011-08-17 10:52:01 UTC (rev 93199)
@@ -198,10 +198,10 @@
Position InsertTextCommand::insertTab(const Position& pos)
{
Position insertPos = VisiblePosition(pos, DOWNSTREAM).deepEquivalent();
-
- Node* node = insertPos.deprecatedNode();
- unsigned int offset = insertPos.deprecatedEditingOffset();
+ Node* node = insertPos.containerNode();
+ unsigned int offset = node->isTextNode() ? insertPos.offsetInContainerNode() : 0;
+
// keep tabs coalesced in tab span
if (isTabSpanTextNode(node)) {
RefPtr<Text> textNode = static_cast<Text*>(node);
Modified: trunk/Source/WebCore/editing/RenderedPosition.cpp (93198 => 93199)
--- trunk/Source/WebCore/editing/RenderedPosition.cpp 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/editing/RenderedPosition.cpp 2011-08-17 10:52:01 UTC (rev 93199)
@@ -101,4 +101,13 @@
return localRect == LayoutRect() ? LayoutRect() : m_renderer->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoundingBox();
}
+bool renderObjectContainsPosition(RenderObject* target, const Position& position)
+{
+ for (RenderObject* renderer = rendererFromPosition(position); renderer && renderer->node(); renderer = renderer->parent()) {
+ if (renderer == target)
+ return true;
+ }
+ return false;
+}
+
};
Modified: trunk/Source/WebCore/editing/RenderedPosition.h (93198 => 93199)
--- trunk/Source/WebCore/editing/RenderedPosition.h 2011-08-17 10:49:25 UTC (rev 93198)
+++ trunk/Source/WebCore/editing/RenderedPosition.h 2011-08-17 10:52:01 UTC (rev 93199)
@@ -68,6 +68,8 @@
{
}
+bool renderObjectContainsPosition(RenderObject*, const Position&);
+
};
#endif // RenderedPosition_h