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

Side by Side Diff: third_party/WebKit/Source/core/editing/FrameSelection.cpp

Issue 2437873008: Get rid of flat tree version of createVisibleSelection() taking two VisiblePosition (Closed)
Patch Set: 2016-10-21T16:03:11 Created 4 years, 1 month 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 return; 938 return;
939 939
940 // Create compute positions before and after the element. 940 // Create compute positions before and after the element.
941 unsigned ownerElementNodeIndex = ownerElement->nodeIndex(); 941 unsigned ownerElementNodeIndex = ownerElement->nodeIndex();
942 VisiblePosition beforeOwnerElement = createVisiblePosition( 942 VisiblePosition beforeOwnerElement = createVisiblePosition(
943 Position(ownerElementParent, ownerElementNodeIndex)); 943 Position(ownerElementParent, ownerElementNodeIndex));
944 VisiblePosition afterOwnerElement = createVisiblePosition( 944 VisiblePosition afterOwnerElement = createVisiblePosition(
945 Position(ownerElementParent, ownerElementNodeIndex + 1), 945 Position(ownerElementParent, ownerElementNodeIndex + 1),
946 VP_UPSTREAM_IF_POSSIBLE); 946 VP_UPSTREAM_IF_POSSIBLE);
947 947
948 SelectionInDOMTree::Builder builder;
Xiaocheng 2016/10/21 11:18:36 Let's use setBaseAndExtentDeprecated, since having
yosin_UTC9 2016/10/24 06:19:44 Done
949 if (beforeOwnerElement.isNotNull() && afterOwnerElement.isNotNull()) {
950 builder.collapse(beforeOwnerElement.toPositionWithAffinity())
951 .extend(afterOwnerElement.deepEquivalent());
952 } else if (beforeOwnerElement.isNotNull()) {
953 builder.collapse(beforeOwnerElement.toPositionWithAffinity());
954 } else if (afterOwnerElement.isNotNull()) {
955 builder.collapse(afterOwnerElement.toPositionWithAffinity());
956 }
957
948 // Focus on the parent frame, and then select from before this element to 958 // Focus on the parent frame, and then select from before this element to
949 // after. 959 // after.
950 VisibleSelection newSelection = 960 VisibleSelection newSelection = createVisibleSelection(builder.build());
951 createVisibleSelection(beforeOwnerElement, afterOwnerElement);
952 page->focusController().setFocusedFrame(parent); 961 page->focusController().setFocusedFrame(parent);
953 // setFocusedFrame can dispatch synchronous focus/blur events. The document 962 // setFocusedFrame can dispatch synchronous focus/blur events. The document
954 // tree might be modified. 963 // tree might be modified.
955 if (newSelection.isNonOrphanedCaretOrRange()) 964 if (newSelection.isNonOrphanedCaretOrRange())
956 toLocalFrame(parent)->selection().setSelection(newSelection); 965 toLocalFrame(parent)->selection().setSelection(newSelection);
957 } 966 }
958 967
959 // Returns a shadow tree node for legacy shadow trees, a child of the 968 // Returns a shadow tree node for legacy shadow trees, a child of the
960 // ShadowRoot node for new shadow trees, or 0 for non-shadow trees. 969 // ShadowRoot node for new shadow trees, or 0 for non-shadow trees.
961 static Node* nonBoundaryShadowTreeRootNode(const Position& position) { 970 static Node* nonBoundaryShadowTreeRootNode(const Position& position) {
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 1389
1381 bool FrameSelection::selectWordAroundPosition(const VisiblePosition& position) { 1390 bool FrameSelection::selectWordAroundPosition(const VisiblePosition& position) {
1382 static const EWordSide wordSideList[2] = {RightWordIfOnBoundary, 1391 static const EWordSide wordSideList[2] = {RightWordIfOnBoundary,
1383 LeftWordIfOnBoundary}; 1392 LeftWordIfOnBoundary};
1384 for (EWordSide wordSide : wordSideList) { 1393 for (EWordSide wordSide : wordSideList) {
1385 VisiblePosition start = startOfWord(position, wordSide); 1394 VisiblePosition start = startOfWord(position, wordSide);
1386 VisiblePosition end = endOfWord(position, wordSide); 1395 VisiblePosition end = endOfWord(position, wordSide);
1387 String text = 1396 String text =
1388 plainText(EphemeralRange(start.deepEquivalent(), end.deepEquivalent())); 1397 plainText(EphemeralRange(start.deepEquivalent(), end.deepEquivalent()));
1389 if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) { 1398 if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) {
1390 setSelection(createVisibleSelection(start, end), 1399 setSelection(
1391 CloseTyping | ClearTypingStyle, 1400 createVisibleSelection(SelectionInDOMTree::Builder()
1392 CursorAlignOnScroll::IfNeeded, WordGranularity); 1401 .collapse(start.toPositionWithAffinity())
1402 .extend(end.deepEquivalent())
1403 .build()),
1404 CloseTyping | ClearTypingStyle, CursorAlignOnScroll::IfNeeded,
1405 WordGranularity);
1393 return true; 1406 return true;
1394 } 1407 }
1395 } 1408 }
1396 1409
1397 return false; 1410 return false;
1398 } 1411 }
1399 1412
1400 GranularityStrategy* FrameSelection::granularityStrategy() { 1413 GranularityStrategy* FrameSelection::granularityStrategy() {
1401 // We do lazy initalization for m_granularityStrategy, because if we 1414 // We do lazy initalization for m_granularityStrategy, because if we
1402 // initialize it right in the constructor - the correct settings may not be 1415 // initialize it right in the constructor - the correct settings may not be
(...skipping 21 matching lines...) Expand all
1424 granularityStrategy()->updateExtent(contentsPoint, m_frame); 1437 granularityStrategy()->updateExtent(contentsPoint, m_frame);
1425 setSelection(newSelection, 1438 setSelection(newSelection,
1426 FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle | 1439 FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle |
1427 FrameSelection::DoNotClearStrategy | UserTriggered, 1440 FrameSelection::DoNotClearStrategy | UserTriggered,
1428 CursorAlignOnScroll::IfNeeded, CharacterGranularity); 1441 CursorAlignOnScroll::IfNeeded, CharacterGranularity);
1429 } 1442 }
1430 1443
1431 void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition, 1444 void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition,
1432 const VisiblePosition& extentPosition, 1445 const VisiblePosition& extentPosition,
1433 TextGranularity granularity) { 1446 TextGranularity granularity) {
1434 VisibleSelection newSelection = 1447 SelectionInDOMTree::Builder builder;
1435 createVisibleSelection(basePosition, extentPosition); 1448 if (basePosition.isNotNull() && extentPosition.isNotNull()) {
Xiaocheng 2016/10/21 11:18:36 Let's use setBaseAndExtentDeprecated, since having
yosin_UTC9 2016/10/24 06:19:44 Done
1449 builder.collapse(basePosition.toPositionWithAffinity())
1450 .extend(extentPosition.deepEquivalent());
1451 } else if (basePosition.isNotNull()) {
1452 builder.collapse(basePosition.toPositionWithAffinity());
1453 } else if (extentPosition.isNotNull()) {
1454 builder.collapse(extentPosition.toPositionWithAffinity());
1455 }
1456
1457 VisibleSelection newSelection = createVisibleSelection(builder.build());
1436 newSelection.expandUsingGranularity(granularity); 1458 newSelection.expandUsingGranularity(granularity);
1437 1459
1438 if (newSelection.isNone()) 1460 if (newSelection.isNone())
1439 return; 1461 return;
1440 1462
1441 setSelection(newSelection, CloseTyping | ClearTypingStyle, 1463 setSelection(newSelection, CloseTyping | ClearTypingStyle,
1442 CursorAlignOnScroll::IfNeeded, granularity); 1464 CursorAlignOnScroll::IfNeeded, granularity);
1443 } 1465 }
1444 1466
1445 void FrameSelection::updateIfNeeded() { 1467 void FrameSelection::updateIfNeeded() {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 } 1507 }
1486 1508
1487 void showTree(const blink::FrameSelection* sel) { 1509 void showTree(const blink::FrameSelection* sel) {
1488 if (sel) 1510 if (sel)
1489 sel->showTreeForThis(); 1511 sel->showTreeForThis();
1490 else 1512 else
1491 LOG(INFO) << "Cannot showTree for <null> FrameSelection."; 1513 LOG(INFO) << "Cannot showTree for <null> FrameSelection.";
1492 } 1514 }
1493 1515
1494 #endif 1516 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698