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) { | |
429 Vector<IntRect> result; | |
430 | |
431 for (DocumentMarker* marker : markers_) { | |
432 RenderedDocumentMarker* const rendered_marker = | |
433 ToRenderedDocumentMarker(marker); | |
434 UpdateMarkerRenderedRectIfNeeded(node, *rendered_marker); | |
435 if (!rendered_marker->IsRendered()) | |
436 continue; | |
437 result.push_back(rendered_marker->RenderedRect()); | |
438 } | |
439 | |
440 return result; | |
429 } | 441 } |
430 | 442 |
431 static void InvalidatePaintForTickmarks(const Node& node) { | 443 static void InvalidatePaintForTickmarks(const Node& node) { |
432 if (FrameView* frame_view = node.GetDocument().View()) | 444 if (FrameView* frame_view = node.GetDocument().View()) |
433 frame_view->InvalidatePaintForTickmarks(); | 445 frame_view->InvalidatePaintForTickmarks(); |
434 } | 446 } |
435 | 447 |
436 void DocumentMarkerController::UpdateMarkerRenderedRectIfNeeded( | 448 // TODO(rlanday): move this to TextMatchMarkerListImpl.cpp |
449 void TextMatchMarkerListImpl::UpdateMarkerRenderedRectIfNeeded( | |
yosin_UTC9
2017/05/24 09:17:23
Since this function is just two lines, let's expan
| |
437 const Node& node, | 450 const Node& node, |
438 RenderedDocumentMarker& marker) { | 451 RenderedDocumentMarker& marker) { |
439 DCHECK(!document_->View() || !document_->View()->NeedsLayout()); | |
440 DCHECK(!document_->NeedsLayoutTreeUpdate()); | |
441 if (!marker.IsValid()) | 452 if (!marker.IsValid()) |
442 UpdateMarkerRenderedRect(node, marker); | 453 UpdateMarkerRenderedRect(node, marker); |
443 } | 454 } |
444 | 455 |
445 void DocumentMarkerController::InvalidateRectsForTextMatchMarkersInNode( | 456 void DocumentMarkerController::InvalidateRectsForTextMatchMarkersInNode( |
446 const Node& node) { | 457 const Node& node) { |
447 MarkerLists* markers = markers_.at(&node); | 458 MarkerLists* markers = markers_.at(&node); |
448 | 459 |
449 const DocumentMarkerList* const marker_list = | 460 const DocumentMarkerList* const marker_list = |
450 ListForType(markers, DocumentMarker::kTextMatch); | 461 ListForType(markers, DocumentMarker::kTextMatch); |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
732 } | 743 } |
733 | 744 |
734 } // namespace blink | 745 } // namespace blink |
735 | 746 |
736 #ifndef NDEBUG | 747 #ifndef NDEBUG |
737 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { | 748 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { |
738 if (controller) | 749 if (controller) |
739 controller->ShowMarkers(); | 750 controller->ShowMarkers(); |
740 } | 751 } |
741 #endif | 752 #endif |
OLD | NEW |