Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 850 void PDFiumEngine::AddSegment(FX_DOWNLOADHINTS* param, | 850 void PDFiumEngine::AddSegment(FX_DOWNLOADHINTS* param, |
| 851 size_t offset, size_t size) { | 851 size_t offset, size_t size) { |
| 852 PDFiumEngine::DownloadHints* download_hints = | 852 PDFiumEngine::DownloadHints* download_hints = |
| 853 static_cast<PDFiumEngine::DownloadHints*>(param); | 853 static_cast<PDFiumEngine::DownloadHints*>(param); |
| 854 return download_hints->loader->RequestData(offset, size); | 854 return download_hints->loader->RequestData(offset, size); |
| 855 } | 855 } |
| 856 | 856 |
| 857 bool PDFiumEngine::New(const char* url, | 857 bool PDFiumEngine::New(const char* url, |
| 858 const char* headers) { | 858 const char* headers) { |
| 859 url_ = url; | 859 url_ = url; |
| 860 if (!headers) | 860 if (headers) |
| 861 headers_ = headers; | |
| 862 else | |
| 861 headers_.clear(); | 863 headers_.clear(); |
| 862 else | |
| 863 headers_ = headers; | |
| 864 return true; | 864 return true; |
| 865 } | 865 } |
| 866 | 866 |
| 867 void PDFiumEngine::PageOffsetUpdated(const pp::Point& page_offset) { | 867 void PDFiumEngine::PageOffsetUpdated(const pp::Point& page_offset) { |
| 868 page_offset_ = page_offset; | 868 page_offset_ = page_offset; |
| 869 } | 869 } |
| 870 | 870 |
| 871 void PDFiumEngine::PluginSizeUpdated(const pp::Size& size) { | 871 void PDFiumEngine::PluginSizeUpdated(const pp::Size& size) { |
| 872 CancelPaints(); | 872 CancelPaints(); |
| 873 | 873 |
| (...skipping 2280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3154 DCHECK(valid_); | 3154 DCHECK(valid_); |
| 3155 return ++index_; | 3155 return ++index_; |
| 3156 } | 3156 } |
| 3157 | 3157 |
| 3158 void PDFiumEngine::DeviceToPage(int page_index, | 3158 void PDFiumEngine::DeviceToPage(int page_index, |
| 3159 float device_x, | 3159 float device_x, |
| 3160 float device_y, | 3160 float device_y, |
| 3161 double* page_x, | 3161 double* page_x, |
| 3162 double* page_y) { | 3162 double* page_y) { |
| 3163 *page_x = *page_y = 0; | 3163 *page_x = *page_y = 0; |
| 3164 int temp_x = static_cast<int>((device_x + position_.x())/ current_zoom_ - | 3164 int temp_x = static_cast<int>((device_x + position_.x()) / current_zoom_ - |
| 3165 pages_[page_index]->rect().x()); | 3165 pages_[page_index]->rect().x()); |
| 3166 int temp_y = static_cast<int>((device_y + position_.y())/ current_zoom_ - | 3166 int temp_y = static_cast<int>((device_y + position_.y()) / current_zoom_ - |
| 3167 pages_[page_index]->rect().y()); | 3167 pages_[page_index]->rect().y()); |
| 3168 FPDF_DeviceToPage( | 3168 FPDF_DeviceToPage( |
| 3169 pages_[page_index]->GetPage(), 0, 0, | 3169 pages_[page_index]->GetPage(), 0, 0, |
| 3170 pages_[page_index]->rect().width(), pages_[page_index]->rect().height(), | 3170 pages_[page_index]->rect().width(), pages_[page_index]->rect().height(), |
| 3171 current_rotation_, temp_x, temp_y, page_x, page_y); | 3171 current_rotation_, temp_x, temp_y, page_x, page_y); |
| 3172 } | 3172 } |
| 3173 | 3173 |
| 3174 int PDFiumEngine::GetVisiblePageIndex(FPDF_PAGE page) { | 3174 int PDFiumEngine::GetVisiblePageIndex(FPDF_PAGE page) { |
| 3175 for (int page_index : visible_pages_) { | 3175 for (int page_index : visible_pages_) { |
| 3176 if (pages_[page_index]->GetPage() == page) | 3176 if (pages_[page_index]->GetPage() == page) |
| 3177 return page_index; | 3177 return page_index; |
| 3178 } | 3178 } |
| 3179 return -1; | 3179 return -1; |
| 3180 } | 3180 } |
| 3181 | 3181 |
| 3182 void PDFiumEngine::SetCurrentPage(int index) { | 3182 void PDFiumEngine::SetCurrentPage(int index) { |
| 3183 if (index == most_visible_page_ || !form_) | 3183 if (index == most_visible_page_ || !form_) |
| 3184 return; | 3184 return; |
| 3185 | |
| 3185 if (most_visible_page_ != -1 && called_do_document_action_) { | 3186 if (most_visible_page_ != -1 && called_do_document_action_) { |
| 3186 FPDF_PAGE old_page = pages_[most_visible_page_]->GetPage(); | 3187 FPDF_PAGE old_page = pages_[most_visible_page_]->GetPage(); |
| 3187 FORM_DoPageAAction(old_page, form_, FPDFPAGE_AACTION_CLOSE); | 3188 FORM_DoPageAAction(old_page, form_, FPDFPAGE_AACTION_CLOSE); |
| 3188 } | 3189 } |
| 3189 most_visible_page_ = index; | 3190 most_visible_page_ = index; |
| 3190 #if defined(OS_LINUX) | 3191 #if defined(OS_LINUX) |
| 3191 g_last_instance_id = client_->GetPluginInstance()->pp_instance(); | 3192 g_last_instance_id = client_->GetPluginInstance()->pp_instance(); |
| 3192 #endif | 3193 #endif |
| 3193 if (most_visible_page_ != -1 && called_do_document_action_) { | 3194 if (most_visible_page_ != -1 && called_do_document_action_) { |
| 3194 FPDF_PAGE new_page = pages_[most_visible_page_]->GetPage(); | 3195 FPDF_PAGE new_page = pages_[most_visible_page_]->GetPage(); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3356 | 3357 |
| 3357 void PDFiumEngine::RotateInternal() { | 3358 void PDFiumEngine::RotateInternal() { |
| 3358 // Store the current find index so that we can resume finding at that | 3359 // Store the current find index so that we can resume finding at that |
| 3359 // particular index after we have recomputed the find results. | 3360 // particular index after we have recomputed the find results. |
| 3360 std::string current_find_text = current_find_text_; | 3361 std::string current_find_text = current_find_text_; |
| 3361 if (current_find_index_.valid()) | 3362 if (current_find_index_.valid()) |
| 3362 resume_find_index_.SetIndex(current_find_index_.GetIndex()); | 3363 resume_find_index_.SetIndex(current_find_index_.GetIndex()); |
| 3363 else | 3364 else |
| 3364 resume_find_index_.Invalidate(); | 3365 resume_find_index_.Invalidate(); |
| 3365 | 3366 |
| 3367 // Save the current page. | |
| 3368 int most_visible_page = most_visible_page_; | |
| 3369 | |
| 3366 InvalidateAllPages(); | 3370 InvalidateAllPages(); |
| 3367 | 3371 |
| 3372 // Restore find results. | |
| 3368 if (!current_find_text.empty()) { | 3373 if (!current_find_text.empty()) { |
| 3369 // Clear the UI. | 3374 // Clear the UI. |
| 3370 client_->NotifyNumberOfFindResultsChanged(0, false); | 3375 client_->NotifyNumberOfFindResultsChanged(0, false); |
| 3371 StartFind(current_find_text, false); | 3376 StartFind(current_find_text, false); |
| 3372 } | 3377 } |
| 3378 | |
| 3379 // Restore current page. After a rotation, the page heights have changed but | |
| 3380 // the scroll position has not. Readjust. | |
|
raymes
2016/08/22 01:09:30
Possibly add a note that we should restore the pos
Lei Zhang
2016/08/22 19:08:44
Done.
| |
| 3381 client_->ScrollToPage(most_visible_page); | |
| 3373 } | 3382 } |
| 3374 | 3383 |
| 3375 void PDFiumEngine::SetSelecting(bool selecting) { | 3384 void PDFiumEngine::SetSelecting(bool selecting) { |
| 3376 bool was_selecting = selecting_; | 3385 bool was_selecting = selecting_; |
| 3377 selecting_ = selecting; | 3386 selecting_ = selecting; |
| 3378 if (selecting_ != was_selecting) | 3387 if (selecting_ != was_selecting) |
| 3379 client_->IsSelectingChanged(selecting); | 3388 client_->IsSelectingChanged(selecting); |
| 3380 } | 3389 } |
| 3381 | 3390 |
| 3382 void PDFiumEngine::Form_Invalidate(FPDF_FORMFILLINFO* param, | 3391 void PDFiumEngine::Form_Invalidate(FPDF_FORMFILLINFO* param, |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3918 FPDF_DOCUMENT doc = | 3927 FPDF_DOCUMENT doc = |
| 3919 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); | 3928 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); |
| 3920 if (!doc) | 3929 if (!doc) |
| 3921 return false; | 3930 return false; |
| 3922 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; | 3931 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; |
| 3923 FPDF_CloseDocument(doc); | 3932 FPDF_CloseDocument(doc); |
| 3924 return success; | 3933 return success; |
| 3925 } | 3934 } |
| 3926 | 3935 |
| 3927 } // namespace chrome_pdf | 3936 } // namespace chrome_pdf |
| OLD | NEW |