| Index: pdf/pdfium/pdfium_engine.cc
|
| diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
|
| index 4231e22453cfeccc2ab50ff21295ba11666b7fd9..9fb2b7e099bdad4d6829792039df90c94d250e2e 100644
|
| --- a/pdf/pdfium/pdfium_engine.cc
|
| +++ b/pdf/pdfium/pdfium_engine.cc
|
| @@ -567,6 +567,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client)
|
| last_page_to_search_(-1),
|
| last_character_index_to_search_(-1),
|
| current_find_index_(-1),
|
| + resume_find_index_(-1),
|
| permissions_(0),
|
| fpdf_availability_(NULL),
|
| next_timer_id_(0),
|
| @@ -1683,6 +1684,12 @@ void PDFiumEngine::StartFind(const char* text, bool case_sensitive) {
|
| if (end_of_search) {
|
| // Send the final notification.
|
| client_->NotifyNumberOfFindResultsChanged(find_results_.size(), true);
|
| +
|
| + // When searching is complete, resume finding at a particular index.
|
| + if (resume_find_index_ != -1) {
|
| + current_find_index_ = resume_find_index_;
|
| + resume_find_index_ = -1;
|
| + }
|
| } else {
|
| pp::CompletionCallback callback =
|
| find_factory_.NewCallback(&PDFiumEngine::ContinueFind);
|
| @@ -1778,7 +1785,7 @@ void PDFiumEngine::AddFindResult(const PDFiumRange& result) {
|
| find_results_.insert(find_results_.begin() + i, result);
|
| UpdateTickMarks();
|
|
|
| - if (current_find_index_ == -1) {
|
| + if (current_find_index_ == -1 && resume_find_index_ == -1) {
|
| // Select the first match.
|
| SelectFindResult(true);
|
| } else if (static_cast<int>(i) <= current_find_index_) {
|
| @@ -1886,21 +1893,36 @@ void PDFiumEngine::ZoomUpdated(double new_zoom_level) {
|
|
|
| void PDFiumEngine::RotateClockwise() {
|
| current_rotation_ = (current_rotation_ + 1) % 4;
|
| +
|
| + // Store the current find index so that we can resume finding at that
|
| + // particular index after we have recomputed the find results.
|
| + std::string current_find_text = current_find_text_;
|
| + resume_find_index_ = current_find_index_;
|
| +
|
| InvalidateAllPages();
|
| +
|
| + if (!current_find_text.empty())
|
| + StartFind(current_find_text.c_str(), false);
|
| }
|
|
|
| void PDFiumEngine::RotateCounterclockwise() {
|
| current_rotation_ = (current_rotation_ - 1) % 4;
|
| +
|
| + // Store the current find index so that we can resume finding at that
|
| + // particular index after we have recomputed the find results.
|
| + std::string current_find_text = current_find_text_;
|
| + resume_find_index_ = current_find_index_;
|
| +
|
| InvalidateAllPages();
|
| +
|
| + if (!current_find_text.empty())
|
| + StartFind(current_find_text.c_str(), false);
|
| }
|
|
|
| void PDFiumEngine::InvalidateAllPages() {
|
| - selection_.clear();
|
| - find_results_.clear();
|
| -
|
| CancelPaints();
|
| + StopFind();
|
| LoadPageInfo(true);
|
| - UpdateTickMarks();
|
| client_->Invalidate(pp::Rect(plugin_size_));
|
| }
|
|
|
|
|