OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights |
3 * reserved. | 3 * reserved. |
4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
6 * Copyright (C) 2015 Google Inc. All rights reserved. | 6 * Copyright (C) 2015 Google Inc. All rights reserved. |
7 * | 7 * |
8 * Redistribution and use in source and binary forms, with or without | 8 * Redistribution and use in source and binary forms, with or without |
9 * modification, are permitted provided that the following conditions | 9 * modification, are permitted provided that the following conditions |
10 * are met: | 10 * are met: |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 } // namespace | 133 } // namespace |
134 | 134 |
135 SelectionController::~SelectionController() = default; | 135 SelectionController::~SelectionController() = default; |
136 | 136 |
137 Document& SelectionController::GetDocument() const { | 137 Document& SelectionController::GetDocument() const { |
138 DCHECK(frame_->GetDocument()); | 138 DCHECK(frame_->GetDocument()); |
139 return *frame_->GetDocument(); | 139 return *frame_->GetDocument(); |
140 } | 140 } |
141 | 141 |
142 void SelectionController::ContextDestroyed(Document*) { | 142 void SelectionController::ContextDestroyed(Document*) { |
143 original_base_in_flat_tree_ = VisiblePositionInFlatTree(); | 143 original_base_in_flat_tree_ = PositionInFlatTreeWithAffinity(); |
144 } | 144 } |
145 | 145 |
146 static PositionInFlatTree AdjustPositionRespectUserSelectAll( | 146 static PositionInFlatTree AdjustPositionRespectUserSelectAll( |
147 Node* inner_node, | 147 Node* inner_node, |
148 const PositionInFlatTree& selection_start, | 148 const PositionInFlatTree& selection_start, |
149 const PositionInFlatTree& selection_end, | 149 const PositionInFlatTree& selection_end, |
150 const PositionInFlatTree& position) { | 150 const PositionInFlatTree& position) { |
151 const VisibleSelectionInFlatTree& selection_in_user_select_all = | 151 const VisibleSelectionInFlatTree& selection_in_user_select_all = |
152 CreateVisibleSelection(ExpandSelectionToRespectUserSelectAll( | 152 CreateVisibleSelection(ExpandSelectionToRespectUserSelectAll( |
153 inner_node, position.IsNull() ? VisibleSelectionInFlatTree() | 153 inner_node, position.IsNull() ? VisibleSelectionInFlatTree() |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 const SelectionInFlatTree& passed_selection, | 722 const SelectionInFlatTree& passed_selection, |
723 TextGranularity granularity, | 723 TextGranularity granularity, |
724 EndPointsAdjustmentMode endpoints_adjustment_mode, | 724 EndPointsAdjustmentMode endpoints_adjustment_mode, |
725 HandleVisibility handle_visibility) { | 725 HandleVisibility handle_visibility) { |
726 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets | 726 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets |
727 // needs to be audited. See http://crbug.com/590369 for more details. | 727 // needs to be audited. See http://crbug.com/590369 for more details. |
728 GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets(); | 728 GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets(); |
729 | 729 |
730 const VisibleSelectionInFlatTree& new_selection = | 730 const VisibleSelectionInFlatTree& new_selection = |
731 CreateVisibleSelection(passed_selection); | 731 CreateVisibleSelection(passed_selection); |
| 732 // TODO(editing-dev): We should use |PositionWithAffinity| to pass affinity |
| 733 // to |CreateVisiblePosition()| for |original_base|. |
732 const PositionInFlatTree& base_position = | 734 const PositionInFlatTree& base_position = |
733 original_base_in_flat_tree_.DeepEquivalent(); | 735 original_base_in_flat_tree_.GetPosition(); |
734 const VisiblePositionInFlatTree& original_base = | 736 const VisiblePositionInFlatTree& original_base = |
735 base_position.IsConnected() ? CreateVisiblePosition(base_position) | 737 base_position.IsConnected() ? CreateVisiblePosition(base_position) |
736 : VisiblePositionInFlatTree(); | 738 : VisiblePositionInFlatTree(); |
737 const VisiblePositionInFlatTree& base = | 739 const VisiblePositionInFlatTree& base = |
738 original_base.IsNotNull() ? original_base | 740 original_base.IsNotNull() ? original_base |
739 : CreateVisiblePosition(new_selection.Base()); | 741 : CreateVisiblePosition(new_selection.Base()); |
740 const VisiblePositionInFlatTree& extent = | 742 const VisiblePositionInFlatTree& extent = |
741 CreateVisiblePosition(new_selection.Extent()); | 743 CreateVisiblePosition(new_selection.Extent()); |
742 const SelectionInFlatTree& adjusted_selection = | 744 const SelectionInFlatTree& adjusted_selection = |
743 endpoints_adjustment_mode == kAdjustEndpointsAtBidiBoundary | 745 endpoints_adjustment_mode == kAdjustEndpointsAtBidiBoundary |
744 ? AdjustEndpointsAtBidiBoundary(base, extent) | 746 ? AdjustEndpointsAtBidiBoundary(base, extent) |
745 : SelectionInFlatTree::Builder() | 747 : SelectionInFlatTree::Builder() |
746 .SetBaseAndExtent(base.DeepEquivalent(), | 748 .SetBaseAndExtent(base.DeepEquivalent(), |
747 extent.DeepEquivalent()) | 749 extent.DeepEquivalent()) |
748 .Build(); | 750 .Build(); |
749 | 751 |
750 SelectionInFlatTree::Builder builder(new_selection.AsSelection()); | 752 SelectionInFlatTree::Builder builder(new_selection.AsSelection()); |
751 if (adjusted_selection.Base() != base.DeepEquivalent() || | 753 if (adjusted_selection.Base() != base.DeepEquivalent() || |
752 adjusted_selection.Extent() != extent.DeepEquivalent()) { | 754 adjusted_selection.Extent() != extent.DeepEquivalent()) { |
753 original_base_in_flat_tree_ = base; | 755 original_base_in_flat_tree_ = base.ToPositionWithAffinity(); |
754 SetContext(&GetDocument()); | 756 SetContext(&GetDocument()); |
755 builder.SetBaseAndExtent(adjusted_selection.Base(), | 757 builder.SetBaseAndExtent(adjusted_selection.Base(), |
756 adjusted_selection.Extent()); | 758 adjusted_selection.Extent()); |
757 } else if (original_base.IsNotNull()) { | 759 } else if (original_base.IsNotNull()) { |
758 if (Selection().ComputeVisibleSelectionInFlatTree().Base() == | 760 if (Selection().ComputeVisibleSelectionInFlatTree().Base() == |
759 new_selection.Base()) { | 761 new_selection.Base()) { |
760 builder.SetBaseAndExtent(original_base.DeepEquivalent(), | 762 builder.SetBaseAndExtent(original_base.DeepEquivalent(), |
761 new_selection.Extent()); | 763 new_selection.Extent()); |
762 } | 764 } |
763 original_base_in_flat_tree_ = VisiblePositionInFlatTree(); | 765 original_base_in_flat_tree_ = PositionInFlatTreeWithAffinity(); |
764 } | 766 } |
765 | 767 |
766 builder.SetIsHandleVisible(handle_visibility == HandleVisibility::kVisible) | 768 builder.SetIsHandleVisible(handle_visibility == HandleVisibility::kVisible) |
767 .SetIsDirectional(frame_->GetEditor() | 769 .SetIsDirectional(frame_->GetEditor() |
768 .Behavior() | 770 .Behavior() |
769 .ShouldConsiderSelectionAsDirectional() || | 771 .ShouldConsiderSelectionAsDirectional() || |
770 new_selection.IsDirectional()); | 772 new_selection.IsDirectional()); |
771 const SelectionInFlatTree& selection_in_flat_tree = builder.Build(); | 773 const SelectionInFlatTree& selection_in_flat_tree = builder.Build(); |
772 if (Selection().ComputeVisibleSelectionInFlatTree() == | 774 if (Selection().ComputeVisibleSelectionInFlatTree() == |
773 CreateVisibleSelection(selection_in_flat_tree) && | 775 CreateVisibleSelection(selection_in_flat_tree) && |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1211 | 1213 |
1212 bool IsExtendingSelection(const MouseEventWithHitTestResults& event) { | 1214 bool IsExtendingSelection(const MouseEventWithHitTestResults& event) { |
1213 bool is_mouse_down_on_link_or_image = | 1215 bool is_mouse_down_on_link_or_image = |
1214 event.IsOverLink() || event.GetHitTestResult().GetImage(); | 1216 event.IsOverLink() || event.GetHitTestResult().GetImage(); |
1215 return (event.Event().GetModifiers() & WebInputEvent::Modifiers::kShiftKey) != | 1217 return (event.Event().GetModifiers() & WebInputEvent::Modifiers::kShiftKey) != |
1216 0 && | 1218 0 && |
1217 !is_mouse_down_on_link_or_image; | 1219 !is_mouse_down_on_link_or_image; |
1218 } | 1220 } |
1219 | 1221 |
1220 } // namespace blink | 1222 } // namespace blink |
OLD | NEW |