Commit 5d6701da authored by yosin@chromium.org's avatar yosin@chromium.org

Introduce LayoutObject::createPositionWithAffinity(int offset)

This patch introduces |LayoutObject::createPositionWithAffinity()| which
takes |int offset| and pass |DOWNSTREAM| to two parameters version to simplify
call sites like like |PositionWithAffinity| constructor which defaults to
|DOWNSTREAM|, for improving code health

This patch is a preparation of introducing enum class |TextAffinity| as
replacement of |EAffinity| for reducing usage of |EAffinity::DOWNSTREAM|.

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

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

git-svn-id: svn://svn.chromium.org/blink/trunk@200802 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent e6de234d
......@@ -67,7 +67,7 @@ int LayoutBR::caretMaxOffset() const
PositionWithAffinity LayoutBR::positionForPoint(const LayoutPoint&)
{
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
}
} // namespace blink
......@@ -1822,7 +1822,7 @@ static PositionWithAffinity positionForPointRespectingEditingBoundaries(LayoutBl
LayoutUnit childMiddle = parent->logicalWidthForChild(*child) / 2;
LayoutUnit logicalLeft = parent->isHorizontalWritingMode() ? pointInChildCoordinates.x() : pointInChildCoordinates.y();
if (logicalLeft < childMiddle)
return ancestor->createPositionWithAffinity(childNode->nodeIndex(), DOWNSTREAM);
return ancestor->createPositionWithAffinity(childNode->nodeIndex());
return ancestor->createPositionWithAffinity(childNode->nodeIndex() + 1, UPSTREAM);
}
......@@ -1831,7 +1831,7 @@ PositionWithAffinity LayoutBlock::positionForPointWithInlineChildren(const Layou
ASSERT(childrenInline());
if (!firstRootBox())
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
bool linesAreFlipped = style()->isFlippedLinesWritingMode();
bool blocksAreFlipped = style()->isFlippedBlocksWritingMode();
......@@ -1911,7 +1911,7 @@ PositionWithAffinity LayoutBlock::positionForPointWithInlineChildren(const Layou
// Can't reach this. We have a root line box, but it has no kids.
// FIXME: This should ASSERT_NOT_REACHED(), but clicking on placeholder text
// seems to hit this code path.
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
}
static inline bool isChildHitTestCandidate(LayoutBox* box)
......@@ -1930,13 +1930,13 @@ PositionWithAffinity LayoutBlock::positionForPoint(const LayoutPoint& point)
LayoutUnit pointLogicalTop = isHorizontalWritingMode() ? point.y() : point.x();
if (pointLogicalLeft < 0)
return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM);
return createPositionWithAffinity(caretMinOffset());
if (pointLogicalLeft >= logicalWidth())
return createPositionWithAffinity(caretMaxOffset(), DOWNSTREAM);
return createPositionWithAffinity(caretMaxOffset());
if (pointLogicalTop < 0)
return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM);
return createPositionWithAffinity(caretMinOffset());
if (pointLogicalTop >= logicalHeight())
return createPositionWithAffinity(caretMaxOffset(), DOWNSTREAM);
return createPositionWithAffinity(caretMaxOffset());
}
LayoutPoint pointInContents = point;
......
......@@ -2594,7 +2594,7 @@ void LayoutObject::removeShapeImageClient(ShapeValue* shapeValue)
PositionWithAffinity LayoutObject::positionForPoint(const LayoutPoint&)
{
return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM);
return createPositionWithAffinity(caretMinOffset());
}
void LayoutObject::updateDragState(bool dragOn)
......@@ -3036,13 +3036,18 @@ PositionWithAffinity LayoutObject::createPositionWithAffinity(int offset, EAffin
return PositionWithAffinity();
}
PositionWithAffinity LayoutObject::createPositionWithAffinity(int offset)
{
return createPositionWithAffinity(offset, DOWNSTREAM);
}
PositionWithAffinity LayoutObject::createPositionWithAffinity(const Position& position)
{
if (position.isNotNull())
return PositionWithAffinity(position);
ASSERT(!node());
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
}
CursorDirective LayoutObject::getCursor(const LayoutPoint&, Cursor&) const
......
......@@ -717,6 +717,7 @@ public:
virtual PositionWithAffinity positionForPoint(const LayoutPoint&);
PositionWithAffinity createPositionWithAffinity(int offset, EAffinity);
PositionWithAffinity createPositionWithAffinity(int offset);
PositionWithAffinity createPositionWithAffinity(const Position&);
virtual void dirtyLinesFromChangedChild(LayoutObject*);
......
......@@ -420,15 +420,15 @@ PositionWithAffinity LayoutReplaced::positionForPoint(const LayoutPoint& point)
LayoutUnit lineDirectionPosition = isHorizontalWritingMode() ? point.x() + location().x() : point.y() + location().y();
if (blockDirectionPosition < top)
return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM); // coordinates are above
return createPositionWithAffinity(caretMinOffset()); // coordinates are above
if (blockDirectionPosition >= bottom)
return createPositionWithAffinity(caretMaxOffset(), DOWNSTREAM); // coordinates are below
return createPositionWithAffinity(caretMaxOffset()); // coordinates are below
if (node()) {
if (lineDirectionPosition <= logicalLeft() + (logicalWidth() / 2))
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(1, DOWNSTREAM);
return createPositionWithAffinity(0);
return createPositionWithAffinity(1);
}
return LayoutBox::positionForPoint(point);
......
......@@ -595,7 +595,7 @@ static PositionWithAffinity createPositionWithAffinityForBoxAfterAdjustingOffset
PositionWithAffinity LayoutText::positionForPoint(const LayoutPoint& point)
{
if (!firstTextBox() || textLength() == 0)
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
LayoutUnit pointLineDirection = firstTextBox()->isHorizontal() ? point.x() : point.y();
LayoutUnit pointBlockDirection = firstTextBox()->isHorizontal() ? point.y() : point.x();
......@@ -627,7 +627,7 @@ PositionWithAffinity LayoutText::positionForPoint(const LayoutPoint& point)
lineDirectionPointFitsInBox(pointLineDirection, lastBox, shouldAffinityBeDownstream);
return createPositionWithAffinityForBoxAfterAdjustingOffsetForBiDi(lastBox, lastBox->offsetForPosition(pointLineDirection.toFloat()) + lastBox->start(), shouldAffinityBeDownstream);
}
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
}
LayoutRect LayoutText::localCaretRect(InlineBox* inlineBox, int caretOffset, LayoutUnit* extraWidthToEndOfLine)
......
......@@ -161,7 +161,7 @@ bool LayoutSVGInlineText::characterStartsNewTextChunk(int position) const
PositionWithAffinity LayoutSVGInlineText::positionForPoint(const LayoutPoint& point)
{
if (!firstTextBox() || !textLength())
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
ASSERT(m_scalingFactor);
float baseline = m_scaledFont.fontMetrics().floatAscent() / m_scalingFactor;
......@@ -208,7 +208,7 @@ PositionWithAffinity LayoutSVGInlineText::positionForPoint(const LayoutPoint& po
}
if (!closestDistanceFragment)
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
int offset = closestDistanceBox->offsetForPositionInFragment(*closestDistanceFragment, absolutePoint.x() - closestDistancePosition, true);
return createPositionWithAffinity(offset + closestDistanceBox->start(), offset > 0 ? VP_UPSTREAM_IF_POSSIBLE : DOWNSTREAM);
......
......@@ -446,14 +446,14 @@ PositionWithAffinity LayoutSVGText::positionForPoint(const LayoutPoint& pointInC
{
RootInlineBox* rootBox = firstRootBox();
if (!rootBox)
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
ASSERT(!rootBox->nextRootBox());
ASSERT(childrenInline());
InlineBox* closestBox = toSVGRootInlineBox(rootBox)->closestLeafChildForPosition(pointInContents);
if (!closestBox)
return createPositionWithAffinity(0, DOWNSTREAM);
return createPositionWithAffinity(0);
return closestBox->layoutObject().positionForPoint(LayoutPoint(pointInContents.x(), closestBox->y()));
}
......
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