static bool lineDirectionPointFitsInBox(int pointLineDirection, const InlineTextBox& box, ShouldAffinityBeDownstream& shouldAffinityBeDownstream) { shouldAffinityBeDownstream = AlwaysDownstream; // the x coordinate is equal to the left edge of this box // the affinity must be downstream so the position doesn't jump back to the previous line // except when box is the first box in the line if (pointLineDirection <= box.logicalLeft()) { shouldAffinityBeDownstream = !box.prevLeafChild() ? UpstreamIfPositionIsNotAtStart : AlwaysDownstream; return true; } #if !PLATFORM(IOS) // and the x coordinate is to the left of the right edge of this box // check to see if position goes in this box if (pointLineDirection < box.logicalRight()) { shouldAffinityBeDownstream = UpstreamIfPositionIsNotAtStart; return true; } #endif // box is first on line // and the x coordinate is to the left of the first text box left edge if (!box.prevLeafChildIgnoringLineBreak() && pointLineDirection < box.logicalLeft()) return true; if (!box.nextLeafChildIgnoringLineBreak()) { // box is last on line // and the x coordinate is to the right of the last text box right edge // generate VisiblePosition, use UPSTREAM affinity if possible shouldAffinityBeDownstream = UpstreamIfPositionIsNotAtStart; return true; } return false; }