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

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

Issue 2201853002: Blink handle selection handle visibility (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: try running even rebaseline tests Created 4 years, 2 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
Index: third_party/WebKit/Source/core/editing/FrameSelection.cpp
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
index e2f9e1d904e428580b1c1f20f4ac2cafd6c01577..74f9d5053a58328a25c8b9be8818152f40ceed91 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
@@ -158,7 +158,9 @@ void FrameSelection::moveTo(const VisiblePosition& pos,
EUserTriggered userTriggered,
CursorAlignOnScroll align) {
SetSelectionOptions options = CloseTyping | ClearTypingStyle | userTriggered;
- setSelection(createVisibleSelection(pos, pos, selection().isDirectional()),
+ bool isHandleVisible = userTriggered == UserTriggered;
+ setSelection(createVisibleSelection(pos, pos, selection().isDirectional(),
+ isHandleVisible),
options, align);
}
@@ -815,19 +817,13 @@ void FrameSelection::paintCaret(GraphicsContext& context,
m_frameCaret->paintCaret(context, paintOffset);
}
-bool FrameSelection::contains(const LayoutPoint& point) {
- if (document().layoutViewItem().isNull())
- return false;
-
+bool FrameSelection::contains(const HitTestResult& result) {
// Treat a collapsed selection like no selection.
const VisibleSelectionInFlatTree& visibleSelection =
this->visibleSelection<EditingInFlatTreeStrategy>();
if (!visibleSelection.isRange())
return false;
- HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active);
- HitTestResult result(request, point);
- document().layoutViewItem().hitTest(result);
Node* innerNode = result.innerNode();
if (!innerNode || !innerNode->layoutObject())
return false;
@@ -850,6 +846,17 @@ bool FrameSelection::contains(const LayoutPoint& point) {
return start.compareTo(pos) <= 0 && pos.compareTo(end) <= 0;
}
+bool FrameSelection::contains(const LayoutPoint& point) {
+ if (document().layoutViewItem().isNull())
+ return false;
+
+ HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active);
+ HitTestResult result(request, point);
+ document().layoutViewItem().hitTest(result);
+
+ return contains(result);
+}
+
// Workaround for the fact that it's hard to delete a frame.
// Call this after doing user-triggered selections to make it easy to delete the
// frame you entirely selected. Can't do this implicitly as part of every
@@ -1001,7 +1008,8 @@ bool FrameSelection::setSelectedRange(const EphemeralRange& range,
Range* logicalRange = createRange(range);
VisibleSelection newSelection = createVisibleSelection(
range.startPosition(), range.endPosition(), affinity,
- directional == SelectionDirectionalMode::Directional);
+ directional == SelectionDirectionalMode::Directional,
+ selection().isHandleVisible());
setSelection(newSelection, options);
m_selectionEditor->setLogicalRange(logicalRange);
return true;
@@ -1399,7 +1407,9 @@ bool FrameSelection::selectWordAroundPosition(const VisiblePosition& position) {
String text =
plainText(EphemeralRange(start.deepEquivalent(), end.deepEquivalent()));
if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) {
- setSelection(createVisibleSelection(start, end), WordGranularity);
+ VisibleSelection newSelection = createVisibleSelection(start, end);
+ newSelection.setIsHandleVisible(selection().isHandleVisible());
+ setSelection(newSelection, WordGranularity);
return true;
}
}
@@ -1432,6 +1442,8 @@ void FrameSelection::moveRangeSelectionExtent(const IntPoint& contentsPoint) {
VisibleSelection newSelection =
granularityStrategy()->updateExtent(contentsPoint, m_frame);
+ newSelection.setIsHandleVisible(
+ m_selectionEditor->visibleSelection<EditingStrategy>().isHandleVisible());
setSelection(newSelection,
FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle |
FrameSelection::DoNotClearStrategy | UserTriggered,
@@ -1443,6 +1455,8 @@ void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition,
TextGranularity granularity) {
VisibleSelection newSelection =
createVisibleSelection(basePosition, extentPosition);
+ newSelection.setIsHandleVisible(
+ m_selectionEditor->visibleSelection<EditingStrategy>().isHandleVisible());
newSelection.expandUsingGranularity(granularity);
if (newSelection.isNone())

Powered by Google App Engine
This is Rietveld 408576698