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

Side by Side Diff: Source/core/editing/SelectionController.cpp

Issue 1319753004: Introduce composed tree version of VisiblePosition (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-09-07T14:06:02 Rebase for VisibleSelectionChangeObserver and PendingSelection::commit Created 5 years, 3 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 unified diff | Download patch
« no previous file with comments | « Source/core/editing/FrameSelection.cpp ('k') | Source/core/editing/VisiblePosition.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies)
5 * Copyright (C) 2015 Google Inc. All rights reserved. 5 * Copyright (C) 2015 Google Inc. All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 // existing selection so we can allow for text dragging. 148 // existing selection so we can allow for text dragging.
149 if (FrameView* view = m_frame->view()) { 149 if (FrameView* view = m_frame->view()) {
150 LayoutPoint vPoint = view->rootFrameToContents(event.event().position()) ; 150 LayoutPoint vPoint = view->rootFrameToContents(event.event().position()) ;
151 if (!extendSelection && selection().contains(vPoint)) { 151 if (!extendSelection && selection().contains(vPoint)) {
152 m_mouseDownWasSingleClickInSelection = true; 152 m_mouseDownWasSingleClickInSelection = true;
153 return false; 153 return false;
154 } 154 }
155 } 155 }
156 156
157 PositionWithAffinity eventPos = innerNode->layoutObject()->positionForPoint( event.localPoint()); 157 PositionWithAffinity eventPos = innerNode->layoutObject()->positionForPoint( event.localPoint());
158 VisiblePosition visiblePos = createVisiblePosition(Strategy::toPositionType( eventPos.position()), eventPos.affinity()); 158 VisiblePosition visiblePos = createVisiblePositionInDOMTree(Strategy::toPosi tionType(eventPos.position()), eventPos.affinity());
159 if (visiblePos.isNull()) 159 if (visiblePos.isNull())
160 visiblePos = createVisiblePosition(firstPositionInOrBeforeNode(innerNode )); 160 visiblePos = createVisiblePosition(firstPositionInOrBeforeNode(innerNode ));
161 PositionType pos = Strategy::toPositionType(visiblePos.deepEquivalent()); 161 PositionType pos = Strategy::toPositionType(visiblePos.deepEquivalent());
162 162
163 VisibleSelection newSelection = selection().selection(); 163 VisibleSelection newSelection = selection().selection();
164 TextGranularity granularity = CharacterGranularity; 164 TextGranularity granularity = CharacterGranularity;
165 165
166 if (extendSelection && newSelection.isCaretOrRange()) { 166 if (extendSelection && newSelection.isCaretOrRange()) {
167 VisibleSelection selectionInUserSelectAll(expandSelectionToRespectUserSe lectAll(innerNode, VisibleSelection(createVisiblePosition(pos)))); 167 VisibleSelection selectionInUserSelectAll(expandSelectionToRespectUserSe lectAll(innerNode, VisibleSelection(createVisiblePositionInDOMTree(pos))));
168 if (selectionInUserSelectAll.isRange()) { 168 if (selectionInUserSelectAll.isRange()) {
169 if (Strategy::selectionStart(selectionInUserSelectAll).compareTo(Str ategy::selectionStart(newSelection)) < 0) 169 if (Strategy::selectionStart(selectionInUserSelectAll).compareTo(Str ategy::selectionStart(newSelection)) < 0)
170 pos = Strategy::selectionStart(selectionInUserSelectAll); 170 pos = Strategy::selectionStart(selectionInUserSelectAll);
171 else if (Strategy::selectionEnd(newSelection).compareTo(Strategy::se lectionEnd(selectionInUserSelectAll)) < 0) 171 else if (Strategy::selectionEnd(newSelection).compareTo(Strategy::se lectionEnd(selectionInUserSelectAll)) < 0)
172 pos = Strategy::selectionEnd(selectionInUserSelectAll); 172 pos = Strategy::selectionEnd(selectionInUserSelectAll);
173 } 173 }
174 174
175 if (!m_frame->editor().behavior().shouldConsiderSelectionAsDirectional() ) { 175 if (!m_frame->editor().behavior().shouldConsiderSelectionAsDirectional() ) {
176 if (pos.isNotNull()) { 176 if (pos.isNotNull()) {
177 // See <rdar://problem/3668157> REGRESSION (Mail): shift-click d eselects when selection 177 // See <rdar://problem/3668157> REGRESSION (Mail): shift-click d eselects when selection
(...skipping 30 matching lines...) Expand all
208 using PositionType = typename Strategy::PositionType; 208 using PositionType = typename Strategy::PositionType;
209 209
210 if (!m_mouseDownMayStartSelect) 210 if (!m_mouseDownMayStartSelect)
211 return; 211 return;
212 212
213 Node* target = hitTestResult.innerNode(); 213 Node* target = hitTestResult.innerNode();
214 if (!target) 214 if (!target)
215 return; 215 return;
216 216
217 PositionWithAffinity rawTargetPosition = selection().selection().positionRes pectingEditingBoundary(hitTestResult.localPoint(), target); 217 PositionWithAffinity rawTargetPosition = selection().selection().positionRes pectingEditingBoundary(hitTestResult.localPoint(), target);
218 VisiblePosition targetPosition = createVisiblePosition(Strategy::toPositionT ype(rawTargetPosition.position()), rawTargetPosition.affinity()); 218 VisiblePosition targetPosition = createVisiblePositionInDOMTree(Strategy::to PositionType(rawTargetPosition.position()), rawTargetPosition.affinity());
219 // Don't modify the selection if we're not on a node. 219 // Don't modify the selection if we're not on a node.
220 if (targetPosition.isNull()) 220 if (targetPosition.isNull())
221 return; 221 return;
222 222
223 // Restart the selection if this is the first mouse move. This work is usual ly 223 // Restart the selection if this is the first mouse move. This work is usual ly
224 // done in handleMousePressEvent, but not if the mouse press was on an exist ing selection. 224 // done in handleMousePressEvent, but not if the mouse press was on an exist ing selection.
225 VisibleSelection newSelection = selection().selection(); 225 VisibleSelection newSelection = selection().selection();
226 226
227 // Special case to limit selection to the containing block for SVG text. 227 // Special case to limit selection to the containing block for SVG text.
228 // FIXME: Isn't there a better non-SVG-specific way to do this? 228 // FIXME: Isn't there a better non-SVG-specific way to do this?
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 else 650 else
651 m_selectionState = SelectionState::HaveNotStartedSelection; 651 m_selectionState = SelectionState::HaveNotStartedSelection;
652 } 652 }
653 653
654 FrameSelection& SelectionController::selection() const 654 FrameSelection& SelectionController::selection() const
655 { 655 {
656 return m_frame->selection(); 656 return m_frame->selection();
657 } 657 }
658 658
659 } // namespace blink 659 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/editing/FrameSelection.cpp ('k') | Source/core/editing/VisiblePosition.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698