| 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 2272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3146 DCHECK(valid_); | 3146 DCHECK(valid_); |
| 3147 return ++index_; | 3147 return ++index_; |
| 3148 } | 3148 } |
| 3149 | 3149 |
| 3150 void PDFiumEngine::DeviceToPage(int page_index, | 3150 void PDFiumEngine::DeviceToPage(int page_index, |
| 3151 float device_x, | 3151 float device_x, |
| 3152 float device_y, | 3152 float device_y, |
| 3153 double* page_x, | 3153 double* page_x, |
| 3154 double* page_y) { | 3154 double* page_y) { |
| 3155 *page_x = *page_y = 0; | 3155 *page_x = *page_y = 0; |
| 3156 int temp_x = static_cast<int>((device_x + position_.x())/ current_zoom_ - | 3156 int temp_x = static_cast<int>((device_x + position_.x()) / current_zoom_ - |
| 3157 pages_[page_index]->rect().x()); | 3157 pages_[page_index]->rect().x()); |
| 3158 int temp_y = static_cast<int>((device_y + position_.y())/ current_zoom_ - | 3158 int temp_y = static_cast<int>((device_y + position_.y()) / current_zoom_ - |
| 3159 pages_[page_index]->rect().y()); | 3159 pages_[page_index]->rect().y()); |
| 3160 FPDF_DeviceToPage( | 3160 FPDF_DeviceToPage( |
| 3161 pages_[page_index]->GetPage(), 0, 0, | 3161 pages_[page_index]->GetPage(), 0, 0, |
| 3162 pages_[page_index]->rect().width(), pages_[page_index]->rect().height(), | 3162 pages_[page_index]->rect().width(), pages_[page_index]->rect().height(), |
| 3163 current_rotation_, temp_x, temp_y, page_x, page_y); | 3163 current_rotation_, temp_x, temp_y, page_x, page_y); |
| 3164 } | 3164 } |
| 3165 | 3165 |
| 3166 int PDFiumEngine::GetVisiblePageIndex(FPDF_PAGE page) { | 3166 int PDFiumEngine::GetVisiblePageIndex(FPDF_PAGE page) { |
| 3167 for (int page_index : visible_pages_) { | 3167 for (int page_index : visible_pages_) { |
| 3168 if (pages_[page_index]->GetPage() == page) | 3168 if (pages_[page_index]->GetPage() == page) |
| 3169 return page_index; | 3169 return page_index; |
| 3170 } | 3170 } |
| 3171 return -1; | 3171 return -1; |
| 3172 } | 3172 } |
| 3173 | 3173 |
| 3174 void PDFiumEngine::SetCurrentPage(int index) { | 3174 void PDFiumEngine::SetCurrentPage(int index) { |
| 3175 if (index == most_visible_page_ || !form_) | 3175 if (index == most_visible_page_ || !form_) |
| 3176 return; | 3176 return; |
| 3177 |
| 3177 if (most_visible_page_ != -1 && called_do_document_action_) { | 3178 if (most_visible_page_ != -1 && called_do_document_action_) { |
| 3178 FPDF_PAGE old_page = pages_[most_visible_page_]->GetPage(); | 3179 FPDF_PAGE old_page = pages_[most_visible_page_]->GetPage(); |
| 3179 FORM_DoPageAAction(old_page, form_, FPDFPAGE_AACTION_CLOSE); | 3180 FORM_DoPageAAction(old_page, form_, FPDFPAGE_AACTION_CLOSE); |
| 3180 } | 3181 } |
| 3181 most_visible_page_ = index; | 3182 most_visible_page_ = index; |
| 3182 #if defined(OS_LINUX) | 3183 #if defined(OS_LINUX) |
| 3183 g_last_instance_id = client_->GetPluginInstance()->pp_instance(); | 3184 g_last_instance_id = client_->GetPluginInstance()->pp_instance(); |
| 3184 #endif | 3185 #endif |
| 3185 if (most_visible_page_ != -1 && called_do_document_action_) { | 3186 if (most_visible_page_ != -1 && called_do_document_action_) { |
| 3186 FPDF_PAGE new_page = pages_[most_visible_page_]->GetPage(); | 3187 FPDF_PAGE new_page = pages_[most_visible_page_]->GetPage(); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3348 | 3349 |
| 3349 void PDFiumEngine::RotateInternal() { | 3350 void PDFiumEngine::RotateInternal() { |
| 3350 // Store the current find index so that we can resume finding at that | 3351 // Store the current find index so that we can resume finding at that |
| 3351 // particular index after we have recomputed the find results. | 3352 // particular index after we have recomputed the find results. |
| 3352 std::string current_find_text = current_find_text_; | 3353 std::string current_find_text = current_find_text_; |
| 3353 if (current_find_index_.valid()) | 3354 if (current_find_index_.valid()) |
| 3354 resume_find_index_.SetIndex(current_find_index_.GetIndex()); | 3355 resume_find_index_.SetIndex(current_find_index_.GetIndex()); |
| 3355 else | 3356 else |
| 3356 resume_find_index_.Invalidate(); | 3357 resume_find_index_.Invalidate(); |
| 3357 | 3358 |
| 3359 // Save the current page. |
| 3360 int most_visible_page = most_visible_page_; |
| 3361 |
| 3358 InvalidateAllPages(); | 3362 InvalidateAllPages(); |
| 3359 | 3363 |
| 3364 // Restore find results. |
| 3360 if (!current_find_text.empty()) { | 3365 if (!current_find_text.empty()) { |
| 3361 // Clear the UI. | 3366 // Clear the UI. |
| 3362 client_->NotifyNumberOfFindResultsChanged(0, false); | 3367 client_->NotifyNumberOfFindResultsChanged(0, false); |
| 3363 StartFind(current_find_text, false); | 3368 StartFind(current_find_text, false); |
| 3364 } | 3369 } |
| 3370 |
| 3371 // Restore current page. After a rotation, the page heights have changed but |
| 3372 // the scroll position has not. Re-adjust. |
| 3373 // TODO(thestig): It would be better to also restore the position on the page. |
| 3374 client_->ScrollToPage(most_visible_page); |
| 3365 } | 3375 } |
| 3366 | 3376 |
| 3367 void PDFiumEngine::SetSelecting(bool selecting) { | 3377 void PDFiumEngine::SetSelecting(bool selecting) { |
| 3368 bool was_selecting = selecting_; | 3378 bool was_selecting = selecting_; |
| 3369 selecting_ = selecting; | 3379 selecting_ = selecting; |
| 3370 if (selecting_ != was_selecting) | 3380 if (selecting_ != was_selecting) |
| 3371 client_->IsSelectingChanged(selecting); | 3381 client_->IsSelectingChanged(selecting); |
| 3372 } | 3382 } |
| 3373 | 3383 |
| 3374 void PDFiumEngine::Form_Invalidate(FPDF_FORMFILLINFO* param, | 3384 void PDFiumEngine::Form_Invalidate(FPDF_FORMFILLINFO* param, |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3910 FPDF_DOCUMENT doc = | 3920 FPDF_DOCUMENT doc = |
| 3911 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); | 3921 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); |
| 3912 if (!doc) | 3922 if (!doc) |
| 3913 return false; | 3923 return false; |
| 3914 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; | 3924 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; |
| 3915 FPDF_CloseDocument(doc); | 3925 FPDF_CloseDocument(doc); |
| 3916 return success; | 3926 return success; |
| 3917 } | 3927 } |
| 3918 | 3928 |
| 3919 } // namespace chrome_pdf | 3929 } // namespace chrome_pdf |
| OLD | NEW |