Commit 6f34bcf3 authored by yosin@chromium.org's avatar yosin@chromium.org

Introduce composed tree version of localCaretRectOfPosition()

This patch introduces composed tree version of |localCaretRectOfPosition()|
by templatizing function to share algorithm.

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

BUG=513568
TEST=webkit_unit_tests --gtest_filter=VisibleUnitsTest.localCaretRectOfPosition

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

git-svn-id: svn://svn.chromium.org/blink/trunk@201124 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 2b369942
......@@ -1713,7 +1713,8 @@ InlineBoxPosition computeInlineBoxPosition(const PositionInComposedTree& positio
return computeInlineBoxPositionAlgorithm<EditingInComposedTreeStrategy>(position, affinity, primaryDirection);
}
LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, LayoutObject*& layoutObject)
template <typename Strategy>
LayoutRect localCaretRectOfPositionAlgorithm(const PositionWithAffinityTemplate<Strategy>& position, LayoutObject*& layoutObject)
{
if (position.position().isNull()) {
layoutObject = nullptr;
......@@ -1733,6 +1734,16 @@ LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, Layout
return layoutObject->localCaretRect(boxPosition.inlineBox, boxPosition.offsetInBox);
}
LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, LayoutObject*& layoutObject)
{
return localCaretRectOfPositionAlgorithm<EditingStrategy>(position, layoutObject);
}
LayoutRect localCaretRectOfPosition(const PositionInComposedTreeWithAffinity& position, LayoutObject*& layoutObject)
{
return localCaretRectOfPositionAlgorithm<EditingInComposedTreeStrategy>(position, layoutObject);
}
static int boundingBoxLogicalHeight(LayoutObject *o, const IntRect &rect)
{
return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width();
......
......@@ -152,7 +152,8 @@ CORE_EXPORT InlineBoxPosition computeInlineBoxPosition(const PositionInComposedT
CORE_EXPORT InlineBoxPosition computeInlineBoxPosition(const VisiblePosition&);
// Rect is local to the returned layoutObject
LayoutRect localCaretRectOfPosition(const PositionWithAffinity&, LayoutObject*&);
CORE_EXPORT LayoutRect localCaretRectOfPosition(const PositionWithAffinity&, LayoutObject*&);
CORE_EXPORT LayoutRect localCaretRectOfPosition(const PositionInComposedTreeWithAffinity&, LayoutObject*&);
bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject*);
// Returns a hit-tested VisiblePosition for the given point in contents-space
......
......@@ -52,6 +52,26 @@ TEST_F(VisibleUnitsTest, inSameLine)
EXPECT_TRUE(inSameLine(positionWithAffinityInComposedTree(*two->firstChild(), 0), positionWithAffinityInComposedTree(*four->firstChild(), 0)));
}
TEST_F(VisibleUnitsTest, localCaretRectOfPosition)
{
const char* bodyContent = "<p id='host'><b id='one'>1</b></p><b id='two'>22</b>";
const char* shadowContent = "<b id='two'>22</b><content select=#one></content><b id='three'>333</b>";
setBodyContent(bodyContent);
setShadowContent(shadowContent);
updateLayoutAndStyleForPainting();
RefPtrWillBeRawPtr<Element> one = document().getElementById("one");
LayoutObject* layoutObjectFromDOMTree;
LayoutRect layoutRectFromDOMTree = localCaretRectOfPosition(Position(one, 0), layoutObjectFromDOMTree);
LayoutObject* layoutObjectFromComposedTree;
LayoutRect layoutRectFromComposedTree = localCaretRectOfPosition(PositionInComposedTree(one, 0), layoutObjectFromComposedTree);
EXPECT_EQ(layoutObjectFromDOMTree, layoutObjectFromComposedTree);
EXPECT_EQ(layoutRectFromDOMTree, layoutRectFromComposedTree);
}
TEST_F(VisibleUnitsTest, mostBackwardCaretPositionAfterAnchor)
{
const char* bodyContent = "<p id='host'><b id='one'>1</b></p><b id='two'>22</b>";
......
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