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