Commit c35dc14d authored by yosin@chromium.org's avatar yosin@chromium.org

Introduce composed tree version of absoluteCaretBoundsOf()

This patch introduces composed tree version of |absoluteCaretBoundsOf()|
by templatizing original |absoluteCaretBoundsOf()| to work both DOM tree
position and composed tree position version for introducing composed tree
version of |VisibleSelection| class.

This patch is a preparation of making selection to handle granularity for web
component, http://crrev.com/1277863002

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

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

git-svn-id: svn://svn.chromium.org/blink/trunk@201865 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 65b1df2b
......@@ -2500,7 +2500,8 @@ bool isVisuallyEquivalentCandidate(const PositionInComposedTree& position)
return isVisuallyEquivalentCandidateAlgorithm<EditingInComposedTreeStrategy>(position);
}
IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition)
template <typename Strategy>
static IntRect absoluteCaretBoundsOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
LayoutObject* layoutObject;
LayoutRect localRect = localCaretRectOfPosition(visiblePosition.toPositionWithAffinity(), layoutObject);
......@@ -2510,6 +2511,16 @@ IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition)
return layoutObject->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoundingBox();
}
IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition)
{
return absoluteCaretBoundsOfAlgorithm<EditingStrategy>(visiblePosition);
}
IntRect absoluteCaretBoundsOf(const VisiblePositionInComposedTree& visiblePosition)
{
return absoluteCaretBoundsOfAlgorithm<EditingInComposedTreeStrategy>(visiblePosition);
}
static VisiblePosition skipToEndOfEditingBoundary(const VisiblePosition& pos, const Position& anchor)
{
if (pos.isNull())
......
......@@ -90,6 +90,7 @@ CORE_EXPORT PositionInComposedTree canonicalPositionOf(const PositionInComposedT
// Bounds of (possibly transformed) caret in absolute coords
CORE_EXPORT IntRect absoluteCaretBoundsOf(const VisiblePosition&);
CORE_EXPORT IntRect absoluteCaretBoundsOf(const VisiblePositionInComposedTree&);
UChar32 characterAfter(const VisiblePosition&);
UChar32 characterBefore(const VisiblePosition&);
......
......@@ -27,6 +27,24 @@ PositionInComposedTreeWithAffinity positionWithAffinityInComposedTree(Node& anch
class VisibleUnitsTest : public EditingTestBase {
};
TEST_F(VisibleUnitsTest, absoluteCaretBoundsOf)
{
const char* bodyContent = "<p id='host'><b id='one'>11</b><b id='two'>22</b></p>";
const char* shadowContent = "<div><content select=#two></content><content select=#one></content></div>";
setBodyContent(bodyContent);
RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent, "host");
updateLayoutAndStyleForPainting();
RefPtrWillBeRawPtr<Element> body = document().body();
RefPtrWillBeRawPtr<Element> one = body->querySelector("#one", ASSERT_NO_EXCEPTION);
IntRect boundsInDOMTree = absoluteCaretBoundsOf(createVisiblePosition(Position(one.get(), 0)));
IntRect boundsInComposedTree = absoluteCaretBoundsOf(createVisiblePosition(PositionInComposedTree(one.get(), 0)));
EXPECT_FALSE(boundsInDOMTree.isEmpty());
EXPECT_EQ(boundsInDOMTree, boundsInComposedTree);
}
TEST_F(VisibleUnitsTest, inSameLine)
{
const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</b>33</p>";
......
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