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 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 } | 389 } |
390 std::sort(result.begin(), result.end(), | 390 std::sort(result.begin(), result.end(), |
391 [](const Member<DocumentMarker>& marker1, | 391 [](const Member<DocumentMarker>& marker1, |
392 const Member<DocumentMarker>& marker2) { | 392 const Member<DocumentMarker>& marker2) { |
393 return marker1->StartOffset() < marker2->StartOffset(); | 393 return marker1->StartOffset() < marker2->StartOffset(); |
394 }); | 394 }); |
395 return result; | 395 return result; |
396 } | 396 } |
397 | 397 |
398 Vector<IntRect> DocumentMarkerController::RenderedRectsForTextMatchMarkers() { | 398 Vector<IntRect> DocumentMarkerController::RenderedRectsForTextMatchMarkers() { |
| 399 DCHECK(!document_->View()->NeedsLayout()); |
| 400 DCHECK(!document_->NeedsLayoutTreeUpdate()); |
| 401 |
399 Vector<IntRect> result; | 402 Vector<IntRect> result; |
| 403 |
400 if (!PossiblyHasMarkers(DocumentMarker::kTextMatch)) | 404 if (!PossiblyHasMarkers(DocumentMarker::kTextMatch)) |
401 return result; | 405 return result; |
402 DCHECK(!(markers_.IsEmpty())); | 406 DCHECK(!(markers_.IsEmpty())); |
403 | 407 |
404 // outer loop: process each node | 408 // outer loop: process each node |
405 MarkerMap::iterator end = markers_.end(); | 409 MarkerMap::iterator end = markers_.end(); |
406 for (MarkerMap::iterator node_iterator = markers_.begin(); | 410 for (MarkerMap::iterator node_iterator = markers_.begin(); |
407 node_iterator != end; ++node_iterator) { | 411 node_iterator != end; ++node_iterator) { |
408 // inner loop; process each marker in this node | 412 // inner loop; process each marker in this node |
409 const Node& node = *node_iterator->key; | 413 const Node& node = *node_iterator->key; |
410 if (!node.isConnected()) | 414 if (!node.isConnected()) |
411 continue; | 415 continue; |
412 MarkerLists* markers = node_iterator->value.Get(); | 416 MarkerLists* markers = node_iterator->value.Get(); |
413 DocumentMarkerList* const list = | 417 DocumentMarkerList* const list = |
414 ListForType(markers, DocumentMarker::kTextMatch); | 418 ListForType(markers, DocumentMarker::kTextMatch); |
415 if (!list || list->IsEmpty()) | 419 if (!list) |
416 continue; | 420 continue; |
417 | 421 result.AppendVector(ToTextMatchMarkerListImpl(list)->RenderedRects(node)); |
418 for (DocumentMarker* marker : list->GetMarkers()) { | |
419 RenderedDocumentMarker* const rendered_marker = | |
420 ToRenderedDocumentMarker(marker); | |
421 UpdateMarkerRenderedRectIfNeeded(node, *rendered_marker); | |
422 if (!rendered_marker->IsRendered()) | |
423 continue; | |
424 result.push_back(rendered_marker->RenderedRect()); | |
425 } | |
426 } | 422 } |
427 | 423 |
428 return result; | 424 return result; |
| 425 } |
| 426 |
| 427 // TODO(rlanday): move this to TextMatchMarkerListImpl.cpp |
| 428 Vector<IntRect> TextMatchMarkerListImpl::RenderedRects(const Node& node) const { |
| 429 Vector<IntRect> result; |
| 430 |
| 431 for (DocumentMarker* marker : markers_) { |
| 432 RenderedDocumentMarker* const rendered_marker = |
| 433 ToRenderedDocumentMarker(marker); |
| 434 if (!rendered_marker->IsValid()) |
| 435 UpdateMarkerRenderedRect(node, *rendered_marker); |
| 436 if (!rendered_marker->IsRendered()) |
| 437 continue; |
| 438 result.push_back(rendered_marker->RenderedRect()); |
| 439 } |
| 440 |
| 441 return result; |
429 } | 442 } |
430 | 443 |
431 static void InvalidatePaintForTickmarks(const Node& node) { | 444 static void InvalidatePaintForTickmarks(const Node& node) { |
432 if (FrameView* frame_view = node.GetDocument().View()) | 445 if (FrameView* frame_view = node.GetDocument().View()) |
433 frame_view->InvalidatePaintForTickmarks(); | 446 frame_view->InvalidatePaintForTickmarks(); |
434 } | 447 } |
435 | 448 |
436 void DocumentMarkerController::UpdateMarkerRenderedRectIfNeeded( | |
437 const Node& node, | |
438 RenderedDocumentMarker& marker) { | |
439 DCHECK(!document_->View() || !document_->View()->NeedsLayout()); | |
440 DCHECK(!document_->NeedsLayoutTreeUpdate()); | |
441 if (!marker.IsValid()) | |
442 UpdateMarkerRenderedRect(node, marker); | |
443 } | |
444 | |
445 void DocumentMarkerController::InvalidateRectsForTextMatchMarkersInNode( | 449 void DocumentMarkerController::InvalidateRectsForTextMatchMarkersInNode( |
446 const Node& node) { | 450 const Node& node) { |
447 MarkerLists* markers = markers_.at(&node); | 451 MarkerLists* markers = markers_.at(&node); |
448 | 452 |
449 const DocumentMarkerList* const marker_list = | 453 const DocumentMarkerList* const marker_list = |
450 ListForType(markers, DocumentMarker::kTextMatch); | 454 ListForType(markers, DocumentMarker::kTextMatch); |
451 if (!marker_list || marker_list->IsEmpty()) | 455 if (!marker_list || marker_list->IsEmpty()) |
452 return; | 456 return; |
453 | 457 |
454 const HeapVector<Member<DocumentMarker>>& markers_in_list = | 458 const HeapVector<Member<DocumentMarker>>& markers_in_list = |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 } | 736 } |
733 | 737 |
734 } // namespace blink | 738 } // namespace blink |
735 | 739 |
736 #ifndef NDEBUG | 740 #ifndef NDEBUG |
737 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { | 741 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { |
738 if (controller) | 742 if (controller) |
739 controller->ShowMarkers(); | 743 controller->ShowMarkers(); |
740 } | 744 } |
741 #endif | 745 #endif |
OLD | NEW |