Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Side by Side Diff: sky/engine/core/dom/DocumentMarkerController.cpp

Issue 830273006: Delete document marker related invalidation code. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 8 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 } 123 }
124 124
125 void DocumentMarkerController::addTextMatchMarker(const Range* range, bool activ eMatch) 125 void DocumentMarkerController::addTextMatchMarker(const Range* range, bool activ eMatch)
126 { 126 {
127 // Use a TextIterator to visit the potentially multiple nodes the range cove rs. 127 // Use a TextIterator to visit the potentially multiple nodes the range cove rs.
128 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) { 128 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) {
129 RefPtr<Range> textPiece = markedText.range(); 129 RefPtr<Range> textPiece = markedText.range();
130 unsigned startOffset = textPiece->startOffset(); 130 unsigned startOffset = textPiece->startOffset();
131 unsigned endOffset = textPiece->endOffset(); 131 unsigned endOffset = textPiece->endOffset();
132 addMarker(textPiece->startContainer(), DocumentMarker(startOffset, endOf fset, activeMatch)); 132 addMarker(textPiece->startContainer(), DocumentMarker(startOffset, endOf fset, activeMatch));
133 if (endOffset > startOffset) {
134 // Rendered rects for markers in WebKit are not populated until each time
135 // the markers are painted. However, we need it to happen sooner, be cause
136 // the whole purpose of tickmarks on the scrollbar is to show where
137 // matches off-screen are (that haven't been painted yet).
138 Node* node = textPiece->startContainer();
139 DocumentMarkerVector markers = markersFor(node);
140 toRenderedDocumentMarker(markers[markers.size() - 1])->setRenderedRe ct(range->boundingBox());
141 }
142 } 133 }
143 } 134 }
144 135
145 void DocumentMarkerController::prepareForDestruction() 136 void DocumentMarkerController::prepareForDestruction()
146 { 137 {
147 clear(); 138 clear();
148 } 139 }
149 140
150 void DocumentMarkerController::removeMarkers(Range* range, DocumentMarker::Marke rTypes markerTypes, RemovePartiallyOverlappingMarkerOrNot shouldRemovePartiallyO verlappingMarker) 141 void DocumentMarkerController::removeMarkers(Range* range, DocumentMarker::Marke rTypes markerTypes, RemovePartiallyOverlappingMarkerOrNot shouldRemovePartiallyO verlappingMarker)
151 { 142 {
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 } 345 }
355 } 346 }
356 347
357 if (emptyListsCount == DocumentMarker::MarkerTypeIndexesCount) { 348 if (emptyListsCount == DocumentMarker::MarkerTypeIndexesCount) {
358 m_markers.remove(node); 349 m_markers.remove(node);
359 if (m_markers.isEmpty()) 350 if (m_markers.isEmpty())
360 m_possiblyExistingMarkerTypes = 0; 351 m_possiblyExistingMarkerTypes = 0;
361 } 352 }
362 } 353 }
363 354
364 DocumentMarker* DocumentMarkerController::markerContainingPoint(const LayoutPoin t& point, DocumentMarker::MarkerType markerType)
365 {
366 if (!possiblyHasMarkers(markerType))
367 return 0;
368 ASSERT(!(m_markers.isEmpty()));
369
370 // outer loop: process each node that contains any markers
371 MarkerMap::iterator end = m_markers.end();
372 for (MarkerMap::iterator nodeIterator = m_markers.begin(); nodeIterator != e nd; ++nodeIterator) {
373 // inner loop; process each marker in this node
374 MarkerLists* markers = nodeIterator->value.get();
375 OwnPtr<MarkerList>& list = (*markers)[MarkerTypeToMarkerIndex(markerType )];
376 unsigned markerCount = list.get() ? list->size() : 0;
377 for (unsigned markerIndex = 0; markerIndex < markerCount; ++markerIndex) {
378 RenderedDocumentMarker* marker = list->at(markerIndex).get();
379 if (marker->contains(point))
380 return marker;
381 }
382 }
383
384 return 0;
385 }
386
387 DocumentMarkerVector DocumentMarkerController::markersFor(Node* node, DocumentMa rker::MarkerTypes markerTypes) 355 DocumentMarkerVector DocumentMarkerController::markersFor(Node* node, DocumentMa rker::MarkerTypes markerTypes)
388 { 356 {
389 DocumentMarkerVector result; 357 DocumentMarkerVector result;
390 358
391 MarkerLists* markers = m_markers.get(node); 359 MarkerLists* markers = m_markers.get(node);
392 if (!markers) 360 if (!markers)
393 return result; 361 return result;
394 362
395 for (size_t markerListIndex = 0; markerListIndex < DocumentMarker::MarkerTyp eIndexesCount; ++markerListIndex) { 363 for (size_t markerListIndex = 0; markerListIndex < DocumentMarker::MarkerTyp eIndexesCount; ++markerListIndex) {
396 OwnPtr<MarkerList>& list = (*markers)[markerListIndex]; 364 OwnPtr<MarkerList>& list = (*markers)[markerListIndex];
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 if (node == startContainer && marker->endOffset() <= static_cast<uns igned>(range->startOffset())) 411 if (node == startContainer && marker->endOffset() <= static_cast<uns igned>(range->startOffset()))
444 continue; 412 continue;
445 if (node == endContainer && marker->startOffset() >= static_cast<uns igned>(range->endOffset())) 413 if (node == endContainer && marker->startOffset() >= static_cast<uns igned>(range->endOffset()))
446 continue; 414 continue;
447 foundMarkers.append(marker); 415 foundMarkers.append(marker);
448 } 416 }
449 } 417 }
450 return foundMarkers; 418 return foundMarkers;
451 } 419 }
452 420
453 Vector<IntRect> DocumentMarkerController::renderedRectsForMarkers(DocumentMarker ::MarkerType markerType)
454 {
455 Vector<IntRect> result;
456
457 if (!possiblyHasMarkers(markerType))
458 return result;
459 ASSERT(!(m_markers.isEmpty()));
460
461 // outer loop: process each node
462 MarkerMap::iterator end = m_markers.end();
463 for (MarkerMap::iterator nodeIterator = m_markers.begin(); nodeIterator != e nd; ++nodeIterator) {
464 // inner loop; process each marker in this node
465 MarkerLists* markers = nodeIterator->value.get();
466 for (size_t markerListIndex = 0; markerListIndex < DocumentMarker::Marke rTypeIndexesCount; ++markerListIndex) {
467 OwnPtr<MarkerList>& list = (*markers)[markerListIndex];
468 if (!list || list->isEmpty() || (*list->begin())->type() != markerTy pe)
469 continue;
470 for (unsigned markerIndex = 0; markerIndex < list->size(); ++markerI ndex) {
471 RenderedDocumentMarker* marker = list->at(markerIndex).get();
472 if (!marker->isRendered())
473 continue;
474 result.append(marker->renderedRect());
475 }
476 }
477 }
478
479 return result;
480 }
481
482 void DocumentMarkerController::removeMarkers(Node* node, DocumentMarker::MarkerT ypes markerTypes) 421 void DocumentMarkerController::removeMarkers(Node* node, DocumentMarker::MarkerT ypes markerTypes)
483 { 422 {
484 if (!possiblyHasMarkers(markerTypes)) 423 if (!possiblyHasMarkers(markerTypes))
485 return; 424 return;
486 ASSERT(!m_markers.isEmpty()); 425 ASSERT(!m_markers.isEmpty());
487 426
488 MarkerMap::iterator iterator = m_markers.find(node); 427 MarkerMap::iterator iterator = m_markers.find(node);
489 if (iterator != m_markers.end()) 428 if (iterator != m_markers.end())
490 removeMarkersFromList(iterator, markerTypes); 429 removeMarkersFromList(iterator, markerTypes);
491 } 430 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 nodeCanBeRemoved = emptyListsCount == DocumentMarker::MarkerTypeIndexesC ount; 497 nodeCanBeRemoved = emptyListsCount == DocumentMarker::MarkerTypeIndexesC ount;
559 } 498 }
560 499
561 if (nodeCanBeRemoved) { 500 if (nodeCanBeRemoved) {
562 m_markers.remove(iterator); 501 m_markers.remove(iterator);
563 if (m_markers.isEmpty()) 502 if (m_markers.isEmpty())
564 m_possiblyExistingMarkerTypes = 0; 503 m_possiblyExistingMarkerTypes = 0;
565 } 504 }
566 } 505 }
567 506
568 void DocumentMarkerController::invalidateRenderedRectsForMarkersInRect(const Lay outRect& r)
569 {
570 // outer loop: process each markered node in the document
571 MarkerMap::iterator end = m_markers.end();
572 for (MarkerMap::iterator i = m_markers.begin(); i != end; ++i) {
573
574 // inner loop: process each rect in the current node
575 MarkerLists* markers = i->value.get();
576 for (size_t markerListIndex = 0; markerListIndex < DocumentMarker::Marke rTypeIndexesCount; ++markerListIndex) {
577 OwnPtr<MarkerList>& list = (*markers)[markerListIndex];
578 for (size_t markerIndex = 0; list.get() && markerIndex < list->size( ); ++markerIndex)
579 list->at(markerIndex)->invalidate(r);
580 }
581 }
582 }
583
584 void DocumentMarkerController::shiftMarkers(Node* node, unsigned startOffset, in t delta) 507 void DocumentMarkerController::shiftMarkers(Node* node, unsigned startOffset, in t delta)
585 { 508 {
586 if (!possiblyHasMarkers(DocumentMarker::AllMarkers())) 509 if (!possiblyHasMarkers(DocumentMarker::AllMarkers()))
587 return; 510 return;
588 ASSERT(!m_markers.isEmpty()); 511 ASSERT(!m_markers.isEmpty());
589 512
590 MarkerLists* markers = m_markers.get(node); 513 MarkerLists* markers = m_markers.get(node);
591 if (!markers) 514 if (!markers)
592 return; 515 return;
593 516
594 bool docDirty = false; 517 bool docDirty = false;
595 for (size_t markerListIndex = 0; markerListIndex < DocumentMarker::MarkerTyp eIndexesCount; ++markerListIndex) { 518 for (size_t markerListIndex = 0; markerListIndex < DocumentMarker::MarkerTyp eIndexesCount; ++markerListIndex) {
596 OwnPtr<MarkerList>& list = (*markers)[markerListIndex]; 519 OwnPtr<MarkerList>& list = (*markers)[markerListIndex];
597 if (!list) 520 if (!list)
598 continue; 521 continue;
599 MarkerList::iterator startPos = std::lower_bound(list->begin(), list->en d(), startOffset, startsAfter); 522 MarkerList::iterator startPos = std::lower_bound(list->begin(), list->en d(), startOffset, startsAfter);
600 for (MarkerList::iterator marker = startPos; marker != list->end(); ++ma rker) { 523 for (MarkerList::iterator marker = startPos; marker != list->end(); ++ma rker) {
601 #if ENABLE(ASSERT) 524 #if ENABLE(ASSERT)
602 int startOffset = (*marker)->startOffset(); 525 int startOffset = (*marker)->startOffset();
603 ASSERT(startOffset + delta >= 0); 526 ASSERT(startOffset + delta >= 0);
604 #endif 527 #endif
605 (*marker)->shiftOffsets(delta); 528 (*marker)->shiftOffsets(delta);
606 docDirty = true; 529 docDirty = true;
607
608 // Marker moved, so previously-computed rendered rectangle is now in valid
609 (*marker)->invalidate();
610 } 530 }
611 } 531 }
612 } 532 }
613 533
614 void DocumentMarkerController::setMarkersActive(Range* range, bool active) 534 void DocumentMarkerController::setMarkersActive(Range* range, bool active)
615 { 535 {
616 if (!possiblyHasMarkers(DocumentMarker::AllMarkers())) 536 if (!possiblyHasMarkers(DocumentMarker::AllMarkers()))
617 return; 537 return;
618 ASSERT(!m_markers.isEmpty()); 538 ASSERT(!m_markers.isEmpty());
619 539
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 624
705 } // namespace blink 625 } // namespace blink
706 626
707 #ifndef NDEBUG 627 #ifndef NDEBUG
708 void showDocumentMarkers(const blink::DocumentMarkerController* controller) 628 void showDocumentMarkers(const blink::DocumentMarkerController* controller)
709 { 629 {
710 if (controller) 630 if (controller)
711 controller->showMarkers(); 631 controller->showMarkers();
712 } 632 }
713 #endif 633 #endif
OLDNEW
« no previous file with comments | « sky/engine/core/dom/DocumentMarkerController.h ('k') | sky/engine/core/dom/RenderedDocumentMarker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698