Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(787)

Unified Diff: Source/core/editing/FrameSelection.cpp

Issue 1301423005: Move lineDirectionPointForBlockDirectionNavigationOf() to FrameSelection.cpp (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-09-01T12:40:26 Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/core/editing/VisiblePosition.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/FrameSelection.cpp
diff --git a/Source/core/editing/FrameSelection.cpp b/Source/core/editing/FrameSelection.cpp
index 7ec1edf67b601b83597f1cda6c78d0a412076d1c..74042571fa006b4096e13791eaf7629890203c2f 100644
--- a/Source/core/editing/FrameSelection.cpp
+++ b/Source/core/editing/FrameSelection.cpp
@@ -1180,6 +1180,28 @@ bool FrameSelection::modify(EAlteration alter, unsigned verticalDistance, Vertic
return true;
}
+// Abs x/y position of the caret ignoring transforms.
+// TODO(yosin) navigation with transforms should be smarter.
+static int lineDirectionPointForBlockDirectionNavigationOf(const VisiblePosition& visiblePosition)
+{
+ if (visiblePosition.isNull())
+ return 0;
+
+ LayoutObject* layoutObject;
+ LayoutRect localRect = localCaretRectOfPosition(visiblePosition.toPositionWithAffinity(), layoutObject);
+ if (localRect.isEmpty() || !layoutObject)
+ return 0;
+
+ // This ignores transforms on purpose, for now. Vertical navigation is done
+ // without consulting transforms, so that 'up' in transformed text is 'up'
+ // relative to the text, not absolute 'up'.
+ FloatPoint caretPoint = layoutObject->localToAbsolute(FloatPoint(localRect.location()));
+ LayoutObject* containingBlock = layoutObject->containingBlock();
+ if (!containingBlock)
+ containingBlock = layoutObject; // Just use ourselves to determine the writing mode if we have no containing block.
+ return containingBlock->isHorizontalWritingMode() ? caretPoint.x() : caretPoint.y();
+}
+
LayoutUnit FrameSelection::lineDirectionPointForBlockDirectionNavigation(EPositionType type)
{
LayoutUnit x = 0;
« no previous file with comments | « no previous file | Source/core/editing/VisiblePosition.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698