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

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

Issue 1326563002: Introduce visiblePositionOf() with PositionWithAffinity as replacement of VisiblePosition constructo (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-09-01T10:55:04 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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } 306 }
307 307
308 void SelectionController::selectClosestWordFromHitTestResult(const HitTestResult & result, AppendTrailingWhitespace appendTrailingWhitespace) 308 void SelectionController::selectClosestWordFromHitTestResult(const HitTestResult & result, AppendTrailingWhitespace appendTrailingWhitespace)
309 { 309 {
310 Node* innerNode = result.innerNode(); 310 Node* innerNode = result.innerNode();
311 VisibleSelection newSelection; 311 VisibleSelection newSelection;
312 312
313 if (!innerNode || !innerNode->layoutObject()) 313 if (!innerNode || !innerNode->layoutObject())
314 return; 314 return;
315 315
316 VisiblePosition pos(innerNode->layoutObject()->positionForPoint(result.local Point())); 316 VisiblePosition pos = visiblePositionOf(innerNode->layoutObject()->positionF orPoint(result.localPoint()));
317 if (pos.isNotNull()) { 317 if (pos.isNotNull()) {
318 newSelection = VisibleSelection(pos); 318 newSelection = VisibleSelection(pos);
319 expandSelectionUsingGranularity(newSelection, WordGranularity); 319 expandSelectionUsingGranularity(newSelection, WordGranularity);
320 } 320 }
321 321
322 #if OS(ANDROID) 322 #if OS(ANDROID)
323 // If node is not editable and doesn't have text except space, tab or 323 // If node is not editable and doesn't have text except space, tab or
324 // line break, do not select that 'empty' area. 324 // line break, do not select that 'empty' area.
325 if (!innerNode->hasEditableStyle()) { 325 if (!innerNode->hasEditableStyle()) {
326 EphemeralRangeTemplate<EditingInComposedTreeStrategy> range = VisibleSel ection::InComposedTree::asRange(newSelection); 326 EphemeralRangeTemplate<EditingInComposedTreeStrategy> range = VisibleSel ection::InComposedTree::asRange(newSelection);
(...skipping 10 matching lines...) Expand all
337 } 337 }
338 338
339 void SelectionController::selectClosestMisspellingFromHitTestResult(const HitTes tResult& result, AppendTrailingWhitespace appendTrailingWhitespace) 339 void SelectionController::selectClosestMisspellingFromHitTestResult(const HitTes tResult& result, AppendTrailingWhitespace appendTrailingWhitespace)
340 { 340 {
341 Node* innerNode = result.innerNode(); 341 Node* innerNode = result.innerNode();
342 VisibleSelection newSelection; 342 VisibleSelection newSelection;
343 343
344 if (!innerNode || !innerNode->layoutObject()) 344 if (!innerNode || !innerNode->layoutObject())
345 return; 345 return;
346 346
347 VisiblePosition pos(innerNode->layoutObject()->positionForPoint(result.local Point())); 347 VisiblePosition pos = visiblePositionOf(innerNode->layoutObject()->positionF orPoint(result.localPoint()));
348 if (pos.isNotNull()) { 348 if (pos.isNotNull()) {
349 const Position markerPosition = pos.deepEquivalent().parentAnchoredEquiv alent(); 349 const Position markerPosition = pos.deepEquivalent().parentAnchoredEquiv alent();
350 DocumentMarkerVector markers = innerNode->document().markers().markersIn Range(EphemeralRange(markerPosition), DocumentMarker::MisspellingMarkers()); 350 DocumentMarkerVector markers = innerNode->document().markers().markersIn Range(EphemeralRange(markerPosition), DocumentMarker::MisspellingMarkers());
351 if (markers.size() == 1) { 351 if (markers.size() == 1) {
352 Node* containerNode = markerPosition.computeContainerNode(); 352 Node* containerNode = markerPosition.computeContainerNode();
353 const Position start(containerNode, markers[0]->startOffset()); 353 const Position start(containerNode, markers[0]->startOffset());
354 const Position end(containerNode, markers[0]->endOffset()); 354 const Position end(containerNode, markers[0]->endOffset());
355 newSelection = VisibleSelection(start, end); 355 newSelection = VisibleSelection(start, end);
356 } 356 }
357 } 357 }
(...skipping 28 matching lines...) Expand all
386 if (!result.hitTestResult().isLiveLink()) 386 if (!result.hitTestResult().isLiveLink())
387 return selectClosestWordFromMouseEvent(result); 387 return selectClosestWordFromMouseEvent(result);
388 388
389 Node* innerNode = result.innerNode(); 389 Node* innerNode = result.innerNode();
390 390
391 if (!innerNode || !innerNode->layoutObject() || !m_mouseDownMayStartSelect) 391 if (!innerNode || !innerNode->layoutObject() || !m_mouseDownMayStartSelect)
392 return; 392 return;
393 393
394 VisibleSelection newSelection; 394 VisibleSelection newSelection;
395 Element* URLElement = result.hitTestResult().URLElement(); 395 Element* URLElement = result.hitTestResult().URLElement();
396 VisiblePosition pos(innerNode->layoutObject()->positionForPoint(result.local Point())); 396 VisiblePosition pos = visiblePositionOf(innerNode->layoutObject()->positionF orPoint(result.localPoint()));
397 if (pos.isNotNull() && pos.deepEquivalent().anchorNode()->isDescendantOf(URL Element)) 397 if (pos.isNotNull() && pos.deepEquivalent().anchorNode()->isDescendantOf(URL Element))
398 newSelection = VisibleSelection::selectionFromContentsOfNode(URLElement) ; 398 newSelection = VisibleSelection::selectionFromContentsOfNode(URLElement) ;
399 399
400 updateSelectionForMouseDownDispatchingSelectStart(innerNode, expandSelection ToRespectUserSelectAll(innerNode, newSelection), WordGranularity); 400 updateSelectionForMouseDownDispatchingSelectStart(innerNode, expandSelection ToRespectUserSelectAll(innerNode, newSelection), WordGranularity);
401 } 401 }
402 402
403 bool SelectionController::handleMousePressEventDoubleClick(const MouseEventWithH itTestResults& event) 403 bool SelectionController::handleMousePressEventDoubleClick(const MouseEventWithH itTestResults& event)
404 { 404 {
405 TRACE_EVENT0("blink", "SelectionController::handleMousePressEventDoubleClick "); 405 TRACE_EVENT0("blink", "SelectionController::handleMousePressEventDoubleClick ");
406 406
(...skipping 18 matching lines...) Expand all
425 TRACE_EVENT0("blink", "SelectionController::handleMousePressEventTripleClick "); 425 TRACE_EVENT0("blink", "SelectionController::handleMousePressEventTripleClick ");
426 426
427 if (event.event().button() != LeftButton) 427 if (event.event().button() != LeftButton)
428 return false; 428 return false;
429 429
430 Node* innerNode = event.innerNode(); 430 Node* innerNode = event.innerNode();
431 if (!(innerNode && innerNode->layoutObject() && m_mouseDownMayStartSelect)) 431 if (!(innerNode && innerNode->layoutObject() && m_mouseDownMayStartSelect))
432 return false; 432 return false;
433 433
434 VisibleSelection newSelection; 434 VisibleSelection newSelection;
435 VisiblePosition pos(innerNode->layoutObject()->positionForPoint(event.localP oint())); 435 VisiblePosition pos = visiblePositionOf(innerNode->layoutObject()->positionF orPoint(event.localPoint()));
436 if (pos.isNotNull()) { 436 if (pos.isNotNull()) {
437 newSelection = VisibleSelection(pos); 437 newSelection = VisibleSelection(pos);
438 expandSelectionUsingGranularity(newSelection, ParagraphGranularity); 438 expandSelectionUsingGranularity(newSelection, ParagraphGranularity);
439 } 439 }
440 440
441 return updateSelectionForMouseDownDispatchingSelectStart(innerNode, expandSe lectionToRespectUserSelectAll(innerNode, newSelection), ParagraphGranularity); 441 return updateSelectionForMouseDownDispatchingSelectStart(innerNode, expandSe lectionToRespectUserSelectAll(innerNode, newSelection), ParagraphGranularity);
442 } 442 }
443 443
444 bool SelectionController::handleMousePressEventSingleClick(const MouseEventWithH itTestResults& event) 444 bool SelectionController::handleMousePressEventSingleClick(const MouseEventWithH itTestResults& event)
445 { 445 {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 // on the selection, the selection goes away. However, if we are 499 // on the selection, the selection goes away. However, if we are
500 // editing, place the caret. 500 // editing, place the caret.
501 if (m_mouseDownWasSingleClickInSelection && m_selectionState != SelectionSta te::ExtendedSelection 501 if (m_mouseDownWasSingleClickInSelection && m_selectionState != SelectionSta te::ExtendedSelection
502 && dragStartPos == event.event().position() 502 && dragStartPos == event.event().position()
503 && selection().isRange() 503 && selection().isRange()
504 && event.event().button() != RightButton) { 504 && event.event().button() != RightButton) {
505 VisibleSelection newSelection; 505 VisibleSelection newSelection;
506 Node* node = event.innerNode(); 506 Node* node = event.innerNode();
507 bool caretBrowsing = m_frame->settings() && m_frame->settings()->caretBr owsingEnabled(); 507 bool caretBrowsing = m_frame->settings() && m_frame->settings()->caretBr owsingEnabled();
508 if (node && node->layoutObject() && (caretBrowsing || node->hasEditableS tyle())) { 508 if (node && node->layoutObject() && (caretBrowsing || node->hasEditableS tyle())) {
509 VisiblePosition pos = VisiblePosition(node->layoutObject()->position ForPoint(event.localPoint())); 509 VisiblePosition pos = visiblePositionOf(node->layoutObject()->positi onForPoint(event.localPoint()));
510 newSelection = VisibleSelection(pos); 510 newSelection = VisibleSelection(pos);
511 } 511 }
512 512
513 setSelectionIfNeeded(selection(), newSelection); 513 setSelectionIfNeeded(selection(), newSelection);
514 514
515 handled = true; 515 handled = true;
516 } 516 }
517 517
518 selection().notifyLayoutObjectOfSelectionChange(UserTriggered); 518 selection().notifyLayoutObjectOfSelectionChange(UserTriggered);
519 519
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 void SelectionController::passMousePressEventToSubframe(const MouseEventWithHitT estResults& mev) 608 void SelectionController::passMousePressEventToSubframe(const MouseEventWithHitT estResults& mev)
609 { 609 {
610 // If we're clicking into a frame that is selected, the frame will appear 610 // If we're clicking into a frame that is selected, the frame will appear
611 // greyed out even though we're clicking on the selection. This looks 611 // greyed out even though we're clicking on the selection. This looks
612 // really strange (having the whole frame be greyed out), so we deselect the 612 // really strange (having the whole frame be greyed out), so we deselect the
613 // selection. 613 // selection.
614 IntPoint p = m_frame->view()->rootFrameToContents(mev.event().position()); 614 IntPoint p = m_frame->view()->rootFrameToContents(mev.event().position());
615 if (!selection().contains(p)) 615 if (!selection().contains(p))
616 return; 616 return;
617 617
618 VisiblePosition visiblePos( 618 VisiblePosition visiblePos = visiblePositionOf(
619 mev.innerNode()->layoutObject()->positionForPoint(mev.localPoint())); 619 mev.innerNode()->layoutObject()->positionForPoint(mev.localPoint()));
620 VisibleSelection newSelection(visiblePos); 620 VisibleSelection newSelection(visiblePos);
621 selection().setSelection(newSelection); 621 selection().setSelection(newSelection);
622 } 622 }
623 623
624 void SelectionController::initializeSelectionState() 624 void SelectionController::initializeSelectionState()
625 { 625 {
626 m_selectionState = SelectionState::HaveNotStartedSelection; 626 m_selectionState = SelectionState::HaveNotStartedSelection;
627 } 627 }
628 628
(...skipping 21 matching lines...) Expand all
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