| OLD | NEW |
| 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 template <typename SelectionType> | 84 template <typename SelectionType> |
| 85 VisibleSelection expandSelectionToRespectUserSelectAllAlgorithm(Node* targetNode
, const VisibleSelection& selection) | 85 VisibleSelection expandSelectionToRespectUserSelectAllAlgorithm(Node* targetNode
, const VisibleSelection& selection) |
| 86 { | 86 { |
| 87 using PositionType = typename SelectionType::PositionType; | 87 using PositionType = typename SelectionType::PositionType; |
| 88 | 88 |
| 89 Node* rootUserSelectAll = SelectionType::Strategy::rootUserSelectAllForNode(
targetNode); | 89 Node* rootUserSelectAll = SelectionType::Strategy::rootUserSelectAllForNode(
targetNode); |
| 90 if (!rootUserSelectAll) | 90 if (!rootUserSelectAll) |
| 91 return selection; | 91 return selection; |
| 92 | 92 |
| 93 VisibleSelection newSelection(selection); | 93 VisibleSelection newSelection(selection); |
| 94 newSelection.setBase(PositionType::beforeNode(rootUserSelectAll).upstream(Ca
nCrossEditingBoundary)); | 94 newSelection.setBase(mostBackwardCaretPosition(PositionType::beforeNode(root
UserSelectAll), CanCrossEditingBoundary)); |
| 95 newSelection.setExtent(PositionType::afterNode(rootUserSelectAll).downstream
(CanCrossEditingBoundary)); | 95 newSelection.setExtent(mostForwardCaretPosition(PositionType::afterNode(root
UserSelectAll), CanCrossEditingBoundary)); |
| 96 | 96 |
| 97 return newSelection; | 97 return newSelection; |
| 98 } | 98 } |
| 99 | 99 |
| 100 VisibleSelection expandSelectionToRespectUserSelectAll(Node* targetNode, const V
isibleSelection& selection) | 100 VisibleSelection expandSelectionToRespectUserSelectAll(Node* targetNode, const V
isibleSelection& selection) |
| 101 { | 101 { |
| 102 if (RuntimeEnabledFeatures::selectionForComposedTreeEnabled()) | 102 if (RuntimeEnabledFeatures::selectionForComposedTreeEnabled()) |
| 103 return expandSelectionToRespectUserSelectAllAlgorithm<VisibleSelection::
InComposedTree>(targetNode, selection); | 103 return expandSelectionToRespectUserSelectAllAlgorithm<VisibleSelection::
InComposedTree>(targetNode, selection); |
| 104 return expandSelectionToRespectUserSelectAllAlgorithm<VisibleSelection::InDO
MTree>(targetNode, selection); | 104 return expandSelectionToRespectUserSelectAllAlgorithm<VisibleSelection::InDO
MTree>(targetNode, selection); |
| 105 } | 105 } |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 if (m_selectionState != SelectionState::ExtendedSelection) { | 245 if (m_selectionState != SelectionState::ExtendedSelection) { |
| 246 // Always extend selection here because it's caused by a mouse drag | 246 // Always extend selection here because it's caused by a mouse drag |
| 247 m_selectionState = SelectionState::ExtendedSelection; | 247 m_selectionState = SelectionState::ExtendedSelection; |
| 248 newSelection = VisibleSelection(targetPosition); | 248 newSelection = VisibleSelection(targetPosition); |
| 249 } | 249 } |
| 250 | 250 |
| 251 if (RuntimeEnabledFeatures::userSelectAllEnabled()) { | 251 if (RuntimeEnabledFeatures::userSelectAllEnabled()) { |
| 252 // TODO(yosin) Should we use |Strategy::rootUserSelectAllForNode()|? | 252 // TODO(yosin) Should we use |Strategy::rootUserSelectAllForNode()|? |
| 253 Node* rootUserSelectAllForMousePressNode = EditingStrategy::rootUserSele
ctAllForNode(mousePressNode); | 253 Node* rootUserSelectAllForMousePressNode = EditingStrategy::rootUserSele
ctAllForNode(mousePressNode); |
| 254 if (rootUserSelectAllForMousePressNode && rootUserSelectAllForMousePress
Node == EditingStrategy::rootUserSelectAllForNode(target)) { | 254 if (rootUserSelectAllForMousePressNode && rootUserSelectAllForMousePress
Node == EditingStrategy::rootUserSelectAllForNode(target)) { |
| 255 newSelection.setBase(PositionType::beforeNode(rootUserSelectAllForMo
usePressNode).upstream(CanCrossEditingBoundary)); | 255 newSelection.setBase(mostBackwardCaretPosition(PositionType::beforeN
ode(rootUserSelectAllForMousePressNode), CanCrossEditingBoundary)); |
| 256 newSelection.setExtent(PositionType::afterNode(rootUserSelectAllForM
ousePressNode).downstream(CanCrossEditingBoundary)); | 256 newSelection.setExtent(mostForwardCaretPosition(PositionType::afterN
ode(rootUserSelectAllForMousePressNode), CanCrossEditingBoundary)); |
| 257 } else { | 257 } else { |
| 258 // Reset base for user select all when base is inside user-select-al
l area and extent < base. | 258 // Reset base for user select all when base is inside user-select-al
l area and extent < base. |
| 259 if (rootUserSelectAllForMousePressNode) { | 259 if (rootUserSelectAllForMousePressNode) { |
| 260 PositionType eventPosition = Strategy::toPositionType(target->la
youtObject()->positionForPoint(hitTestResult.localPoint()).position()); | 260 PositionType eventPosition = Strategy::toPositionType(target->la
youtObject()->positionForPoint(hitTestResult.localPoint()).position()); |
| 261 PositionType dragStartPosition = Strategy::toPositionType(mouseP
ressNode->layoutObject()->positionForPoint(dragStartPos).position()); | 261 PositionType dragStartPosition = Strategy::toPositionType(mouseP
ressNode->layoutObject()->positionForPoint(dragStartPos).position()); |
| 262 if (eventPosition.compareTo(dragStartPosition) < 0) | 262 if (eventPosition.compareTo(dragStartPosition) < 0) |
| 263 newSelection.setBase(PositionType::afterNode(rootUserSelectA
llForMousePressNode).downstream(CanCrossEditingBoundary)); | 263 newSelection.setBase(mostForwardCaretPosition(PositionType::
afterNode(rootUserSelectAllForMousePressNode), CanCrossEditingBoundary)); |
| 264 } | 264 } |
| 265 | 265 |
| 266 Node* rootUserSelectAllForTarget = EditingStrategy::rootUserSelectAl
lForNode(target); | 266 Node* rootUserSelectAllForTarget = EditingStrategy::rootUserSelectAl
lForNode(target); |
| 267 if (rootUserSelectAllForTarget && mousePressNode->layoutObject() &&
Strategy::toPositionType(target->layoutObject()->positionForPoint(hitTestResult.
localPoint()).position()).compareTo(Strategy::toPositionType(mousePressNode->lay
outObject()->positionForPoint(dragStartPos).position())) < 0) | 267 if (rootUserSelectAllForTarget && mousePressNode->layoutObject() &&
Strategy::toPositionType(target->layoutObject()->positionForPoint(hitTestResult.
localPoint()).position()).compareTo(Strategy::toPositionType(mousePressNode->lay
outObject()->positionForPoint(dragStartPos).position())) < 0) |
| 268 newSelection.setExtent(PositionType::beforeNode(rootUserSelectAl
lForTarget).upstream(CanCrossEditingBoundary)); | 268 newSelection.setExtent(mostBackwardCaretPosition(PositionType::b
eforeNode(rootUserSelectAllForTarget), CanCrossEditingBoundary)); |
| 269 else if (rootUserSelectAllForTarget && mousePressNode->layoutObject(
)) | 269 else if (rootUserSelectAllForTarget && mousePressNode->layoutObject(
)) |
| 270 newSelection.setExtent(PositionType::afterNode(rootUserSelectAll
ForTarget).downstream(CanCrossEditingBoundary)); | 270 newSelection.setExtent(mostForwardCaretPosition(PositionType::af
terNode(rootUserSelectAllForTarget), CanCrossEditingBoundary)); |
| 271 else | 271 else |
| 272 newSelection.setExtent(targetPosition); | 272 newSelection.setExtent(targetPosition); |
| 273 } | 273 } |
| 274 } else { | 274 } else { |
| 275 newSelection.setExtent(targetPosition); | 275 newSelection.setExtent(targetPosition); |
| 276 } | 276 } |
| 277 | 277 |
| 278 if (selection().granularity() != CharacterGranularity) | 278 if (selection().granularity() != CharacterGranularity) |
| 279 expandSelectionUsingGranularity(newSelection, selection().granularity())
; | 279 expandSelectionUsingGranularity(newSelection, selection().granularity())
; |
| 280 | 280 |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 |
| OLD | NEW |