Commit 297900a7 authored by yosin@chromium.org's avatar yosin@chromium.org

Move inRenderedText() to VisibleUnits.cpp from Position.cpp

This patch moves |inRenderedText()| to "VisibleUnits.cpp" from "Position.cpp"
to simplify "Position.cpp" for improving code health since it is used only in
"VisibleUnits.cpp"

BUG=518738
TEST=n/a; no behavior changes

Review URL: https://codereview.chromium.org/1309673002

git-svn-id: svn://svn.chromium.org/blink/trunk@200981 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent ba077571
...@@ -28,13 +28,9 @@ ...@@ -28,13 +28,9 @@
#include "core/dom/shadow/ElementShadow.h" #include "core/dom/shadow/ElementShadow.h"
#include "core/editing/EditingUtilities.h" #include "core/editing/EditingUtilities.h"
#include "core/editing/PositionIterator.h"
#include "core/editing/TextAffinity.h" #include "core/editing/TextAffinity.h"
#include "core/editing/VisibleUnits.h" #include "core/editing/VisibleUnits.h"
#include "core/layout/LayoutBlock.h" #include "core/layout/LayoutObject.h"
#include "core/layout/LayoutInline.h"
#include "core/layout/LayoutText.h"
#include "core/layout/line/InlineTextBox.h"
#include "wtf/text/CString.h" #include "wtf/text/CString.h"
#include <stdio.h> #include <stdio.h>
...@@ -458,45 +454,6 @@ PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::downstream(EditingBound ...@@ -458,45 +454,6 @@ PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::downstream(EditingBound
return mostForwardCaretPosition(*this, rule); return mostForwardCaretPosition(*this, rule);
} }
template <typename Strategy>
static bool inRenderedTextAlgorithm(const PositionAlgorithm<Strategy>& position)
{
Node* const anchorNode = position.anchorNode();
if (!anchorNode || !anchorNode->isTextNode())
return false;
LayoutObject* layoutObject = anchorNode->layoutObject();
if (!layoutObject)
return false;
const int offsetInNode = position.computeEditingOffset();
LayoutText* textLayoutObject = toLayoutText(layoutObject);
for (InlineTextBox *box = textLayoutObject->firstTextBox(); box; box = box->nextTextBox()) {
if (offsetInNode < static_cast<int>(box->start()) && !textLayoutObject->containsReversedText()) {
// The offset we're looking for is before this node
// this means the offset must be in content that is
// not laid out. Return false.
return false;
}
if (box->containsCaretOffset(offsetInNode)) {
// Return false for offsets inside composed characters.
return offsetInNode == 0 || offsetInNode == textLayoutObject->nextOffset(textLayoutObject->previousOffset(offsetInNode));
}
}
return false;
}
bool inRenderedText(const Position& position)
{
return inRenderedTextAlgorithm<EditingStrategy>(position);
}
bool inRenderedText(const PositionInComposedTree& position)
{
return inRenderedTextAlgorithm<EditingInComposedTreeStrategy>(position);
}
template <typename Strategy> template <typename Strategy>
void PositionAlgorithm<Strategy>::debugPosition(const char* msg) const void PositionAlgorithm<Strategy>::debugPosition(const char* msg) const
{ {
......
...@@ -407,11 +407,6 @@ inline PositionInComposedTree fromPositionInDOMTree<EditingInComposedTreeStrateg ...@@ -407,11 +407,6 @@ inline PositionInComposedTree fromPositionInDOMTree<EditingInComposedTreeStrateg
return toPositionInComposedTree(position); return toPositionInComposedTree(position);
} }
// TODO(yosin) We should move |inRenderedText()| to "VisibleUnits.h" for
// reduce dependency of |LayoutObject| in |Position| class.
CORE_EXPORT bool inRenderedText(const Position&);
CORE_EXPORT bool inRenderedText(const PositionInComposedTree&);
CORE_EXPORT int uncheckedPreviousOffset(const Node*, int current); CORE_EXPORT int uncheckedPreviousOffset(const Node*, int current);
CORE_EXPORT int uncheckedNextOffset(const Node*, int current); CORE_EXPORT int uncheckedNextOffset(const Node*, int current);
......
...@@ -1763,6 +1763,35 @@ VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, L ...@@ -1763,6 +1763,35 @@ VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, L
return VisiblePosition(); return VisiblePosition();
} }
template <typename Strategy>
static bool inRenderedText(const PositionAlgorithm<Strategy>& position)
{
Node* const anchorNode = position.anchorNode();
if (!anchorNode || !anchorNode->isTextNode())
return false;
LayoutObject* layoutObject = anchorNode->layoutObject();
if (!layoutObject)
return false;
const int offsetInNode = position.computeEditingOffset();
LayoutText* textLayoutObject = toLayoutText(layoutObject);
for (InlineTextBox *box = textLayoutObject->firstTextBox(); box; box = box->nextTextBox()) {
if (offsetInNode < static_cast<int>(box->start()) && !textLayoutObject->containsReversedText()) {
// The offset we're looking for is before this node
// this means the offset must be in content that is
// not laid out. Return false.
return false;
}
if (box->containsCaretOffset(offsetInNode)) {
// Return false for offsets inside composed characters.
return offsetInNode == 0 || offsetInNode == textLayoutObject->nextOffset(textLayoutObject->previousOffset(offsetInNode));
}
}
return false;
}
static Node* nextRenderedEditable(Node* node) static Node* nextRenderedEditable(Node* node)
{ {
for (node = nextAtomicLeafNode(*node); node; node = nextAtomicLeafNode(*node)) { for (node = nextAtomicLeafNode(*node); node; node = nextAtomicLeafNode(*node)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment