OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights |
7 * reserved. | 7 * reserved. |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
10 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 | 391 |
392 const HeapVector<Member<DocumentMarker>>& results = | 392 const HeapVector<Member<DocumentMarker>>& results = |
393 list->MarkersIntersectingRange(offset, offset); | 393 list->MarkersIntersectingRange(offset, offset); |
394 if (!results.IsEmpty()) | 394 if (!results.IsEmpty()) |
395 return results.front(); | 395 return results.front(); |
396 } | 396 } |
397 | 397 |
398 return nullptr; | 398 return nullptr; |
399 } | 399 } |
400 | 400 |
| 401 HeapVector<std::pair<Member<Node>, Member<DocumentMarker>>> |
| 402 DocumentMarkerController::MarkersIntersectingRange( |
| 403 const EphemeralRangeInFlatTree& range, |
| 404 DocumentMarker::MarkerTypes types) { |
| 405 HeapVector<std::pair<Member<Node>, Member<DocumentMarker>>> node_marker_pairs; |
| 406 if (!PossiblyHasMarkers(types)) |
| 407 return node_marker_pairs; |
| 408 |
| 409 Node* const range_start_container = |
| 410 range.StartPosition().ComputeContainerNode(); |
| 411 const unsigned range_start_offset = |
| 412 range.StartPosition().ComputeOffsetInContainerNode(); |
| 413 Node* const range_end_container = range.EndPosition().ComputeContainerNode(); |
| 414 const unsigned range_end_offset = |
| 415 range.EndPosition().ComputeOffsetInContainerNode(); |
| 416 |
| 417 for (Node& node : range.Nodes()) { |
| 418 MarkerLists* const markers = markers_.at(&node); |
| 419 if (!markers) |
| 420 continue; |
| 421 |
| 422 for (DocumentMarker::MarkerType type : types) { |
| 423 const DocumentMarkerList* const list = ListForType(markers, type); |
| 424 if (!list) |
| 425 continue; |
| 426 |
| 427 const unsigned start_offset = |
| 428 node == range_start_container ? range_start_offset : 0; |
| 429 const unsigned end_offset = node == range_end_container |
| 430 ? range_end_offset |
| 431 : node.MaxCharacterOffset(); |
| 432 |
| 433 const DocumentMarkerVector& markers_from_this_list = |
| 434 list->MarkersIntersectingRange(start_offset, end_offset); |
| 435 for (DocumentMarker* marker : markers_from_this_list) |
| 436 node_marker_pairs.push_back(std::make_pair(&node, marker)); |
| 437 } |
| 438 } |
| 439 |
| 440 return node_marker_pairs; |
| 441 } |
| 442 |
401 DocumentMarkerVector DocumentMarkerController::MarkersFor( | 443 DocumentMarkerVector DocumentMarkerController::MarkersFor( |
402 Node* node, | 444 Node* node, |
403 DocumentMarker::MarkerTypes marker_types) { | 445 DocumentMarker::MarkerTypes marker_types) { |
404 DocumentMarkerVector result; | 446 DocumentMarkerVector result; |
405 | 447 |
406 MarkerLists* markers = markers_.at(node); | 448 MarkerLists* markers = markers_.at(node); |
407 if (!markers) | 449 if (!markers) |
408 return result; | 450 return result; |
409 | 451 |
410 for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) { | 452 for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) { |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 } | 794 } |
753 | 795 |
754 } // namespace blink | 796 } // namespace blink |
755 | 797 |
756 #ifndef NDEBUG | 798 #ifndef NDEBUG |
757 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { | 799 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { |
758 if (controller) | 800 if (controller) |
759 controller->ShowMarkers(); | 801 controller->ShowMarkers(); |
760 } | 802 } |
761 #endif | 803 #endif |
OLD | NEW |