| 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 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA, | 527 mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA, |
| 528 PDFiumPage::LinkTarget()), | 528 PDFiumPage::LinkTarget()), |
| 529 next_page_to_search_(-1), | 529 next_page_to_search_(-1), |
| 530 last_page_to_search_(-1), | 530 last_page_to_search_(-1), |
| 531 last_character_index_to_search_(-1), | 531 last_character_index_to_search_(-1), |
| 532 permissions_(0), | 532 permissions_(0), |
| 533 permissions_handler_revision_(-1), | 533 permissions_handler_revision_(-1), |
| 534 fpdf_availability_(NULL), | 534 fpdf_availability_(NULL), |
| 535 next_timer_id_(0), | 535 next_timer_id_(0), |
| 536 last_page_mouse_down_(-1), | 536 last_page_mouse_down_(-1), |
| 537 first_visible_page_(-1), | |
| 538 most_visible_page_(-1), | 537 most_visible_page_(-1), |
| 539 called_do_document_action_(false), | 538 called_do_document_action_(false), |
| 540 render_grayscale_(false), | 539 render_grayscale_(false), |
| 541 progressive_paint_timeout_(0), | 540 progressive_paint_timeout_(0), |
| 542 getting_password_(false) { | 541 getting_password_(false) { |
| 543 find_factory_.Initialize(this); | 542 find_factory_.Initialize(this); |
| 544 password_factory_.Initialize(this); | 543 password_factory_.Initialize(this); |
| 545 | 544 |
| 546 file_access_.m_FileLen = 0; | 545 file_access_.m_FileLen = 0; |
| 547 file_access_.m_GetBlock = &GetBlock; | 546 file_access_.m_GetBlock = &GetBlock; |
| (...skipping 1712 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2260 int page_index = -1; | 2259 int page_index = -1; |
| 2261 int form_type = FPDF_FORMFIELD_UNKNOWN; | 2260 int form_type = FPDF_FORMFIELD_UNKNOWN; |
| 2262 PDFiumPage::LinkTarget target; | 2261 PDFiumPage::LinkTarget target; |
| 2263 PDFiumPage::Area area = | 2262 PDFiumPage::Area area = |
| 2264 GetCharIndex(point, &page_index, &temp, &form_type, &target); | 2263 GetCharIndex(point, &page_index, &temp, &form_type, &target); |
| 2265 if (area == PDFiumPage::WEBLINK_AREA) | 2264 if (area == PDFiumPage::WEBLINK_AREA) |
| 2266 url = target.url; | 2265 url = target.url; |
| 2267 return url; | 2266 return url; |
| 2268 } | 2267 } |
| 2269 | 2268 |
| 2270 bool PDFiumEngine::IsSelecting() { | |
| 2271 return selecting_; | |
| 2272 } | |
| 2273 | |
| 2274 bool PDFiumEngine::HasPermission(DocumentPermission permission) const { | 2269 bool PDFiumEngine::HasPermission(DocumentPermission permission) const { |
| 2275 // PDF 1.7 spec, section 3.5.2 says: "If the revision number is 2 or greater, | 2270 // PDF 1.7 spec, section 3.5.2 says: "If the revision number is 2 or greater, |
| 2276 // the operations to which user access can be controlled are as follows: ..." | 2271 // the operations to which user access can be controlled are as follows: ..." |
| 2277 // | 2272 // |
| 2278 // Thus for revision numbers less than 2, permissions are ignored and this | 2273 // Thus for revision numbers less than 2, permissions are ignored and this |
| 2279 // always returns true. | 2274 // always returns true. |
| 2280 if (permissions_handler_revision_ < 2) | 2275 if (permissions_handler_revision_ < 2) |
| 2281 return true; | 2276 return true; |
| 2282 | 2277 |
| 2283 // Handle high quality printing permission separately for security handler | 2278 // Handle high quality printing permission separately for security handler |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2332 FPDF_WIDESTRING destination_pdf_wide = | 2327 FPDF_WIDESTRING destination_pdf_wide = |
| 2333 reinterpret_cast<FPDF_WIDESTRING>(destination_wide.c_str()); | 2328 reinterpret_cast<FPDF_WIDESTRING>(destination_wide.c_str()); |
| 2334 FPDF_BOOKMARK bookmark = FPDFBookmark_Find(doc_, destination_pdf_wide); | 2329 FPDF_BOOKMARK bookmark = FPDFBookmark_Find(doc_, destination_pdf_wide); |
| 2335 if (!bookmark) | 2330 if (!bookmark) |
| 2336 return -1; | 2331 return -1; |
| 2337 dest = FPDFBookmark_GetDest(doc_, bookmark); | 2332 dest = FPDFBookmark_GetDest(doc_, bookmark); |
| 2338 } | 2333 } |
| 2339 return dest ? FPDFDest_GetPageIndex(doc_, dest) : -1; | 2334 return dest ? FPDFDest_GetPageIndex(doc_, dest) : -1; |
| 2340 } | 2335 } |
| 2341 | 2336 |
| 2342 int PDFiumEngine::GetFirstVisiblePage() { | |
| 2343 CalculateVisiblePages(); | |
| 2344 return first_visible_page_; | |
| 2345 } | |
| 2346 | |
| 2347 int PDFiumEngine::GetMostVisiblePage() { | 2337 int PDFiumEngine::GetMostVisiblePage() { |
| 2348 CalculateVisiblePages(); | 2338 CalculateVisiblePages(); |
| 2349 return most_visible_page_; | 2339 return most_visible_page_; |
| 2350 } | 2340 } |
| 2351 | 2341 |
| 2352 pp::Rect PDFiumEngine::GetPageRect(int index) { | 2342 pp::Rect PDFiumEngine::GetPageRect(int index) { |
| 2353 pp::Rect rc(pages_[index]->rect()); | 2343 pp::Rect rc(pages_[index]->rect()); |
| 2354 rc.Inset(-kPageShadowLeft, -kPageShadowTop, | 2344 rc.Inset(-kPageShadowLeft, -kPageShadowTop, |
| 2355 -kPageShadowRight, -kPageShadowBottom); | 2345 -kPageShadowRight, -kPageShadowBottom); |
| 2356 return rc; | 2346 return rc; |
| 2357 } | 2347 } |
| 2358 | 2348 |
| 2359 pp::Rect PDFiumEngine::GetPageContentsRect(int index) { | 2349 pp::Rect PDFiumEngine::GetPageContentsRect(int index) { |
| 2360 return GetScreenRect(pages_[index]->rect()); | 2350 return GetScreenRect(pages_[index]->rect()); |
| 2361 } | 2351 } |
| 2362 | 2352 |
| 2363 void PDFiumEngine::PaintThumbnail(pp::ImageData* image_data, int index) { | |
| 2364 FPDF_BITMAP bitmap = FPDFBitmap_CreateEx( | |
| 2365 image_data->size().width(), image_data->size().height(), | |
| 2366 FPDFBitmap_BGRx, image_data->data(), image_data->stride()); | |
| 2367 | |
| 2368 if (pages_[index]->available()) { | |
| 2369 FPDFBitmap_FillRect(bitmap, 0, 0, image_data->size().width(), | |
| 2370 image_data->size().height(), 0xFFFFFFFF); | |
| 2371 | |
| 2372 FPDF_RenderPageBitmap( | |
| 2373 bitmap, pages_[index]->GetPage(), 0, 0, image_data->size().width(), | |
| 2374 image_data->size().height(), 0, GetRenderingFlags()); | |
| 2375 } else { | |
| 2376 FPDFBitmap_FillRect(bitmap, 0, 0, image_data->size().width(), | |
| 2377 image_data->size().height(), kPendingPageColor); | |
| 2378 } | |
| 2379 | |
| 2380 FPDFBitmap_Destroy(bitmap); | |
| 2381 } | |
| 2382 | |
| 2383 void PDFiumEngine::SetGrayscale(bool grayscale) { | 2353 void PDFiumEngine::SetGrayscale(bool grayscale) { |
| 2384 render_grayscale_ = grayscale; | 2354 render_grayscale_ = grayscale; |
| 2385 } | 2355 } |
| 2386 | 2356 |
| 2387 void PDFiumEngine::OnCallback(int id) { | 2357 void PDFiumEngine::OnCallback(int id) { |
| 2388 if (!timers_.count(id)) | 2358 if (!timers_.count(id)) |
| 2389 return; | 2359 return; |
| 2390 | 2360 |
| 2391 timers_[id].second(id); | 2361 timers_[id].second(id); |
| 2392 if (timers_.count(id)) // The callback might delete the timer. | 2362 if (timers_.count(id)) // The callback might delete the timer. |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2701 // will be lost when the page is first closed anyways). | 2671 // will be lost when the page is first closed anyways). |
| 2702 if (static_cast<int>(i) == last_page_mouse_down_) | 2672 if (static_cast<int>(i) == last_page_mouse_down_) |
| 2703 last_page_mouse_down_ = -1; | 2673 last_page_mouse_down_ = -1; |
| 2704 } | 2674 } |
| 2705 } | 2675 } |
| 2706 | 2676 |
| 2707 // Any pending highlighting of form fields will be invalid since these are in | 2677 // Any pending highlighting of form fields will be invalid since these are in |
| 2708 // screen coordinates. | 2678 // screen coordinates. |
| 2709 form_highlights_.clear(); | 2679 form_highlights_.clear(); |
| 2710 | 2680 |
| 2711 if (visible_pages_.size() == 0) | 2681 int most_visible_page = visible_pages_.empty() ? -1 : visible_pages_.front(); |
| 2712 first_visible_page_ = -1; | |
| 2713 else | |
| 2714 first_visible_page_ = visible_pages_.front(); | |
| 2715 | |
| 2716 int most_visible_page = first_visible_page_; | |
| 2717 // Check if the next page is more visible than the first one. | 2682 // Check if the next page is more visible than the first one. |
| 2718 if (most_visible_page != -1 && | 2683 if (most_visible_page != -1 && !pages_.empty() && |
| 2719 pages_.size() > 0 && | |
| 2720 most_visible_page < static_cast<int>(pages_.size()) - 1) { | 2684 most_visible_page < static_cast<int>(pages_.size()) - 1) { |
| 2721 pp::Rect rc_first = | 2685 pp::Rect rc_first = |
| 2722 visible_rect.Intersect(GetPageScreenRect(most_visible_page)); | 2686 visible_rect.Intersect(GetPageScreenRect(most_visible_page)); |
| 2723 pp::Rect rc_next = | 2687 pp::Rect rc_next = |
| 2724 visible_rect.Intersect(GetPageScreenRect(most_visible_page + 1)); | 2688 visible_rect.Intersect(GetPageScreenRect(most_visible_page + 1)); |
| 2725 if (rc_next.height() > rc_first.height()) | 2689 if (rc_next.height() > rc_first.height()) |
| 2726 most_visible_page++; | 2690 most_visible_page++; |
| 2727 } | 2691 } |
| 2728 | 2692 |
| 2729 SetCurrentPage(most_visible_page); | 2693 SetCurrentPage(most_visible_page); |
| (...skipping 1250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3980 double* height) { | 3944 double* height) { |
| 3981 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); | 3945 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); |
| 3982 if (!doc) | 3946 if (!doc) |
| 3983 return false; | 3947 return false; |
| 3984 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; | 3948 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; |
| 3985 FPDF_CloseDocument(doc); | 3949 FPDF_CloseDocument(doc); |
| 3986 return success; | 3950 return success; |
| 3987 } | 3951 } |
| 3988 | 3952 |
| 3989 } // namespace chrome_pdf | 3953 } // namespace chrome_pdf |
| OLD | NEW |