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

Side by Side Diff: pdf/pdfium/pdfium_engine.cc

Issue 555803002: PDF Viewer - Search results don't work after rotating pdf (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 2 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
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "pdf/pdfium/pdfium_engine.h" 5 #include "pdf/pdfium/pdfium_engine.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 doc_(NULL), 560 doc_(NULL),
561 form_(NULL), 561 form_(NULL),
562 defer_page_unload_(false), 562 defer_page_unload_(false),
563 selecting_(false), 563 selecting_(false),
564 mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA, 564 mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA,
565 PDFiumPage::LinkTarget()), 565 PDFiumPage::LinkTarget()),
566 next_page_to_search_(-1), 566 next_page_to_search_(-1),
567 last_page_to_search_(-1), 567 last_page_to_search_(-1),
568 last_character_index_to_search_(-1), 568 last_character_index_to_search_(-1),
569 current_find_index_(-1), 569 current_find_index_(-1),
570 resume_find_index_(-1),
570 permissions_(0), 571 permissions_(0),
571 fpdf_availability_(NULL), 572 fpdf_availability_(NULL),
572 next_timer_id_(0), 573 next_timer_id_(0),
573 last_page_mouse_down_(-1), 574 last_page_mouse_down_(-1),
574 first_visible_page_(-1), 575 first_visible_page_(-1),
575 most_visible_page_(-1), 576 most_visible_page_(-1),
576 called_do_document_action_(false), 577 called_do_document_action_(false),
577 render_grayscale_(false), 578 render_grayscale_(false),
578 progressive_paint_timeout_(0), 579 progressive_paint_timeout_(0),
579 getting_password_(false) { 580 getting_password_(false) {
(...skipping 1096 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 // Only one page but didn't start midway. 1677 // Only one page but didn't start midway.
1677 ((pages_.size() == 1 && last_character_index_to_search_ == -1) || 1678 ((pages_.size() == 1 && last_character_index_to_search_ == -1) ||
1678 // Started midway, but only 1 page and we already looped around. 1679 // Started midway, but only 1 page and we already looped around.
1679 (pages_.size() == 1 && !first_search) || 1680 (pages_.size() == 1 && !first_search) ||
1680 // Started midway, and we've just looped around. 1681 // Started midway, and we've just looped around.
1681 (pages_.size() > 1 && current_page == next_page_to_search_)); 1682 (pages_.size() > 1 && current_page == next_page_to_search_));
1682 1683
1683 if (end_of_search) { 1684 if (end_of_search) {
1684 // Send the final notification. 1685 // Send the final notification.
1685 client_->NotifyNumberOfFindResultsChanged(find_results_.size(), true); 1686 client_->NotifyNumberOfFindResultsChanged(find_results_.size(), true);
1687
1688 // When searching is complete, resume finding at a particular index.
1689 if (resume_find_index_ != -1) {
1690 current_find_index_ = resume_find_index_;
1691 resume_find_index_ = -1;
1692 }
1686 } else { 1693 } else {
1687 pp::CompletionCallback callback = 1694 pp::CompletionCallback callback =
1688 find_factory_.NewCallback(&PDFiumEngine::ContinueFind); 1695 find_factory_.NewCallback(&PDFiumEngine::ContinueFind);
1689 pp::Module::Get()->core()->CallOnMainThread( 1696 pp::Module::Get()->core()->CallOnMainThread(
1690 0, callback, case_sensitive ? 1 : 0); 1697 0, callback, case_sensitive ? 1 : 0);
1691 } 1698 }
1692 } 1699 }
1693 1700
1694 void PDFiumEngine::SearchUsingPDFium(const base::string16& term, 1701 void PDFiumEngine::SearchUsingPDFium(const base::string16& term,
1695 bool case_sensitive, 1702 bool case_sensitive,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1771 for (i = 0; i < find_results_.size(); ++i) { 1778 for (i = 0; i < find_results_.size(); ++i) {
1772 if (find_results_[i].page_index() > page_index || 1779 if (find_results_[i].page_index() > page_index ||
1773 (find_results_[i].page_index() == page_index && 1780 (find_results_[i].page_index() == page_index &&
1774 find_results_[i].char_index() > char_index)) { 1781 find_results_[i].char_index() > char_index)) {
1775 break; 1782 break;
1776 } 1783 }
1777 } 1784 }
1778 find_results_.insert(find_results_.begin() + i, result); 1785 find_results_.insert(find_results_.begin() + i, result);
1779 UpdateTickMarks(); 1786 UpdateTickMarks();
1780 1787
1781 if (current_find_index_ == -1) { 1788 if (current_find_index_ == -1 && resume_find_index_ == -1) {
1782 // Select the first match. 1789 // Select the first match.
1783 SelectFindResult(true); 1790 SelectFindResult(true);
1784 } else if (static_cast<int>(i) <= current_find_index_) { 1791 } else if (static_cast<int>(i) <= current_find_index_) {
1785 // Update the current match index 1792 // Update the current match index
1786 current_find_index_++; 1793 current_find_index_++;
1787 client_->NotifySelectedFindResultChanged(current_find_index_); 1794 client_->NotifySelectedFindResultChanged(current_find_index_);
1788 } 1795 }
1789 client_->NotifyNumberOfFindResultsChanged(find_results_.size(), false); 1796 client_->NotifyNumberOfFindResultsChanged(find_results_.size(), false);
1790 } 1797 }
1791 1798
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1879 CancelPaints(); 1886 CancelPaints();
1880 1887
1881 current_zoom_ = new_zoom_level; 1888 current_zoom_ = new_zoom_level;
1882 1889
1883 CalculateVisiblePages(); 1890 CalculateVisiblePages();
1884 UpdateTickMarks(); 1891 UpdateTickMarks();
1885 } 1892 }
1886 1893
1887 void PDFiumEngine::RotateClockwise() { 1894 void PDFiumEngine::RotateClockwise() {
1888 current_rotation_ = (current_rotation_ + 1) % 4; 1895 current_rotation_ = (current_rotation_ + 1) % 4;
1896
1897 // Store the current find index so that we can resume finding at that
1898 // particular index after we have recomputed the find results.
1899 std::string current_find_text = current_find_text_;
1900 resume_find_index_ = current_find_index_;
1901
1889 InvalidateAllPages(); 1902 InvalidateAllPages();
1903
1904 if (!current_find_text.empty())
1905 StartFind(current_find_text.c_str(), false);
1890 } 1906 }
1891 1907
1892 void PDFiumEngine::RotateCounterclockwise() { 1908 void PDFiumEngine::RotateCounterclockwise() {
1893 current_rotation_ = (current_rotation_ - 1) % 4; 1909 current_rotation_ = (current_rotation_ - 1) % 4;
1910
1911 // Store the current find index so that we can resume finding at that
1912 // particular index after we have recomputed the find results.
1913 std::string current_find_text = current_find_text_;
1914 resume_find_index_ = current_find_index_;
1915
1894 InvalidateAllPages(); 1916 InvalidateAllPages();
1917
1918 if (!current_find_text.empty())
1919 StartFind(current_find_text.c_str(), false);
1895 } 1920 }
1896 1921
1897 void PDFiumEngine::InvalidateAllPages() { 1922 void PDFiumEngine::InvalidateAllPages() {
1898 selection_.clear();
1899 find_results_.clear();
1900
1901 CancelPaints(); 1923 CancelPaints();
1924 StopFind();
1902 LoadPageInfo(true); 1925 LoadPageInfo(true);
1903 UpdateTickMarks();
1904 client_->Invalidate(pp::Rect(plugin_size_)); 1926 client_->Invalidate(pp::Rect(plugin_size_));
1905 } 1927 }
1906 1928
1907 std::string PDFiumEngine::GetSelectedText() { 1929 std::string PDFiumEngine::GetSelectedText() {
1908 base::string16 result; 1930 base::string16 result;
1909 for (size_t i = 0; i < selection_.size(); ++i) { 1931 for (size_t i = 0; i < selection_.size(); ++i) {
1910 if (i > 0 && 1932 if (i > 0 &&
1911 selection_[i - 1].page_index() > selection_[i].page_index()) { 1933 selection_[i - 1].page_index() > selection_[i].page_index()) {
1912 result = selection_[i].GetText() + result; 1934 result = selection_[i].GetText() + result;
1913 } else { 1935 } else {
(...skipping 1600 matching lines...) Expand 10 before | Expand all | Expand 10 after
3514 double* height) { 3536 double* height) {
3515 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); 3537 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL);
3516 if (!doc) 3538 if (!doc)
3517 return false; 3539 return false;
3518 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; 3540 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
3519 FPDF_CloseDocument(doc); 3541 FPDF_CloseDocument(doc);
3520 return success; 3542 return success;
3521 } 3543 }
3522 3544
3523 } // namespace chrome_pdf 3545 } // namespace chrome_pdf
OLDNEW
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698