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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 FPDF_AddInstalledFont(mapper, font_map->fontname, font_map->charset); | 149 FPDF_AddInstalledFont(mapper, font_map->fontname, font_map->charset); |
150 } | 150 } |
151 } | 151 } |
152 | 152 |
153 void* MapFont(struct _FPDF_SYSFONTINFO*, int weight, int italic, | 153 void* MapFont(struct _FPDF_SYSFONTINFO*, int weight, int italic, |
154 int charset, int pitch_family, const char* face, int* exact) { | 154 int charset, int pitch_family, const char* face, int* exact) { |
155 // Do not attempt to map fonts if pepper is not initialized (for privet local | 155 // Do not attempt to map fonts if pepper is not initialized (for privet local |
156 // printing). | 156 // printing). |
157 // TODO(noamsml): Real font substitution (http://crbug.com/391978) | 157 // TODO(noamsml): Real font substitution (http://crbug.com/391978) |
158 if (!pp::Module::Get()) | 158 if (!pp::Module::Get()) |
159 return NULL; | 159 return nullptr; |
160 | 160 |
161 pp::BrowserFontDescription description; | 161 pp::BrowserFontDescription description; |
162 | 162 |
163 // Pretend the system does not have the Symbol font to force a fallback to | 163 // Pretend the system does not have the Symbol font to force a fallback to |
164 // the built in Symbol font in CFX_FontMapper::FindSubstFont(). | 164 // the built in Symbol font in CFX_FontMapper::FindSubstFont(). |
165 if (strcmp(face, "Symbol") == 0) | 165 if (strcmp(face, "Symbol") == 0) |
166 return NULL; | 166 return nullptr; |
167 | 167 |
168 if (pitch_family & FXFONT_FF_FIXEDPITCH) { | 168 if (pitch_family & FXFONT_FF_FIXEDPITCH) { |
169 description.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_MONOSPACE); | 169 description.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_MONOSPACE); |
170 } else if (pitch_family & FXFONT_FF_ROMAN) { | 170 } else if (pitch_family & FXFONT_FF_ROMAN) { |
171 description.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_SERIF); | 171 description.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_SERIF); |
172 } | 172 } |
173 | 173 |
174 static const struct { | 174 static const struct { |
175 const char* pdf_name; | 175 const char* pdf_name; |
176 const char* face; | 176 const char* face; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 if (face_utf8.empty()) | 247 if (face_utf8.empty()) |
248 return nullptr; | 248 return nullptr; |
249 | 249 |
250 description.set_face(face_utf8); | 250 description.set_face(face_utf8); |
251 description.set_weight(WeightToBrowserFontTrustedWeight(weight)); | 251 description.set_weight(WeightToBrowserFontTrustedWeight(weight)); |
252 description.set_italic(italic > 0); | 252 description.set_italic(italic > 0); |
253 } | 253 } |
254 | 254 |
255 if (!pp::PDF::IsAvailable()) { | 255 if (!pp::PDF::IsAvailable()) { |
256 NOTREACHED(); | 256 NOTREACHED(); |
257 return NULL; | 257 return nullptr; |
258 } | 258 } |
259 | 259 |
260 PP_Resource font_resource = pp::PDF::GetFontFileWithFallback( | 260 PP_Resource font_resource = pp::PDF::GetFontFileWithFallback( |
261 pp::InstanceHandle(g_last_instance_id), | 261 pp::InstanceHandle(g_last_instance_id), |
262 &description.pp_font_description(), | 262 &description.pp_font_description(), |
263 static_cast<PP_PrivateFontCharset>(charset)); | 263 static_cast<PP_PrivateFontCharset>(charset)); |
264 long res_id = font_resource; | 264 long res_id = font_resource; |
265 return reinterpret_cast<void*>(res_id); | 265 return reinterpret_cast<void*>(res_id); |
266 } | 266 } |
267 | 267 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 base::ReplaceChars(*text, kCr, kBlank, text); | 399 base::ReplaceChars(*text, kCr, kBlank, text); |
400 #elif defined(OS_WIN) | 400 #elif defined(OS_WIN) |
401 // Do nothing | 401 // Do nothing |
402 #else | 402 #else |
403 NOTIMPLEMENTED(); | 403 NOTIMPLEMENTED(); |
404 #endif | 404 #endif |
405 } | 405 } |
406 | 406 |
407 // Returns a VarDictionary (representing a bookmark), which in turn contains | 407 // Returns a VarDictionary (representing a bookmark), which in turn contains |
408 // child VarDictionaries (representing the child bookmarks). | 408 // child VarDictionaries (representing the child bookmarks). |
409 // If NULL is passed in as the bookmark then we traverse from the "root". | 409 // If nullptr is passed in as the bookmark then we traverse from the "root". |
410 // Note that the "root" bookmark contains no useful information. | 410 // Note that the "root" bookmark contains no useful information. |
411 pp::VarDictionary TraverseBookmarks(FPDF_DOCUMENT doc, | 411 pp::VarDictionary TraverseBookmarks(FPDF_DOCUMENT doc, |
412 FPDF_BOOKMARK bookmark, | 412 FPDF_BOOKMARK bookmark, |
413 unsigned int depth) { | 413 unsigned int depth) { |
414 pp::VarDictionary dict; | 414 pp::VarDictionary dict; |
415 base::string16 title; | 415 base::string16 title; |
416 unsigned long buffer_size = FPDFBookmark_GetTitle(bookmark, nullptr, 0); | 416 unsigned long buffer_size = FPDFBookmark_GetTitle(bookmark, nullptr, 0); |
417 if (buffer_size > 0) { | 417 if (buffer_size > 0) { |
418 PDFiumAPIStringBufferSizeInBytesAdapter<base::string16> api_string_adapter( | 418 PDFiumAPIStringBufferSizeInBytesAdapter<base::string16> api_string_adapter( |
419 &title, buffer_size, true); | 419 &title, buffer_size, true); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 PDFEngine* PDFEngine::Create(PDFEngine::Client* client) { | 525 PDFEngine* PDFEngine::Create(PDFEngine::Client* client) { |
526 return new PDFiumEngine(client); | 526 return new PDFiumEngine(client); |
527 } | 527 } |
528 | 528 |
529 PDFiumEngine::PDFiumEngine(PDFEngine::Client* client) | 529 PDFiumEngine::PDFiumEngine(PDFEngine::Client* client) |
530 : client_(client), | 530 : client_(client), |
531 current_zoom_(1.0), | 531 current_zoom_(1.0), |
532 current_rotation_(0), | 532 current_rotation_(0), |
533 doc_loader_(this), | 533 doc_loader_(this), |
534 password_tries_remaining_(0), | 534 password_tries_remaining_(0), |
535 doc_(NULL), | 535 doc_(nullptr), |
536 form_(NULL), | 536 form_(nullptr), |
537 defer_page_unload_(false), | 537 defer_page_unload_(false), |
538 selecting_(false), | 538 selecting_(false), |
539 mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA, | 539 mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA, |
540 PDFiumPage::LinkTarget()), | 540 PDFiumPage::LinkTarget()), |
541 next_page_to_search_(-1), | 541 next_page_to_search_(-1), |
542 last_page_to_search_(-1), | 542 last_page_to_search_(-1), |
543 last_character_index_to_search_(-1), | 543 last_character_index_to_search_(-1), |
544 permissions_(0), | 544 permissions_(0), |
545 permissions_handler_revision_(-1), | 545 permissions_handler_revision_(-1), |
546 fpdf_availability_(NULL), | 546 fpdf_availability_(nullptr), |
547 next_timer_id_(0), | 547 next_timer_id_(0), |
548 last_page_mouse_down_(-1), | 548 last_page_mouse_down_(-1), |
549 most_visible_page_(-1), | 549 most_visible_page_(-1), |
550 called_do_document_action_(false), | 550 called_do_document_action_(false), |
551 render_grayscale_(false), | 551 render_grayscale_(false), |
552 progressive_paint_timeout_(0), | 552 progressive_paint_timeout_(0), |
553 getting_password_(false) { | 553 getting_password_(false) { |
554 find_factory_.Initialize(this); | 554 find_factory_.Initialize(this); |
555 password_factory_.Initialize(this); | 555 password_factory_.Initialize(this); |
556 | 556 |
557 file_access_.m_FileLen = 0; | 557 file_access_.m_FileLen = 0; |
558 file_access_.m_GetBlock = &GetBlock; | 558 file_access_.m_GetBlock = &GetBlock; |
559 file_access_.m_Param = &doc_loader_; | 559 file_access_.m_Param = &doc_loader_; |
560 | 560 |
561 file_availability_.version = 1; | 561 file_availability_.version = 1; |
562 file_availability_.IsDataAvail = &IsDataAvail; | 562 file_availability_.IsDataAvail = &IsDataAvail; |
563 file_availability_.loader = &doc_loader_; | 563 file_availability_.loader = &doc_loader_; |
564 | 564 |
565 download_hints_.version = 1; | 565 download_hints_.version = 1; |
566 download_hints_.AddSegment = &AddSegment; | 566 download_hints_.AddSegment = &AddSegment; |
567 download_hints_.loader = &doc_loader_; | 567 download_hints_.loader = &doc_loader_; |
568 | 568 |
569 // Initialize FPDF_FORMFILLINFO member variables. Deriving from this struct | 569 // Initialize FPDF_FORMFILLINFO member variables. Deriving from this struct |
570 // allows the static callbacks to be able to cast the FPDF_FORMFILLINFO in | 570 // allows the static callbacks to be able to cast the FPDF_FORMFILLINFO in |
571 // callbacks to ourself instead of maintaining a map of them to | 571 // callbacks to ourself instead of maintaining a map of them to |
572 // PDFiumEngine. | 572 // PDFiumEngine. |
573 FPDF_FORMFILLINFO::version = 1; | 573 FPDF_FORMFILLINFO::version = 1; |
574 FPDF_FORMFILLINFO::m_pJsPlatform = this; | 574 FPDF_FORMFILLINFO::m_pJsPlatform = this; |
575 FPDF_FORMFILLINFO::Release = NULL; | 575 FPDF_FORMFILLINFO::Release = nullptr; |
576 FPDF_FORMFILLINFO::FFI_Invalidate = Form_Invalidate; | 576 FPDF_FORMFILLINFO::FFI_Invalidate = Form_Invalidate; |
577 FPDF_FORMFILLINFO::FFI_OutputSelectedRect = Form_OutputSelectedRect; | 577 FPDF_FORMFILLINFO::FFI_OutputSelectedRect = Form_OutputSelectedRect; |
578 FPDF_FORMFILLINFO::FFI_SetCursor = Form_SetCursor; | 578 FPDF_FORMFILLINFO::FFI_SetCursor = Form_SetCursor; |
579 FPDF_FORMFILLINFO::FFI_SetTimer = Form_SetTimer; | 579 FPDF_FORMFILLINFO::FFI_SetTimer = Form_SetTimer; |
580 FPDF_FORMFILLINFO::FFI_KillTimer = Form_KillTimer; | 580 FPDF_FORMFILLINFO::FFI_KillTimer = Form_KillTimer; |
581 FPDF_FORMFILLINFO::FFI_GetLocalTime = Form_GetLocalTime; | 581 FPDF_FORMFILLINFO::FFI_GetLocalTime = Form_GetLocalTime; |
582 FPDF_FORMFILLINFO::FFI_OnChange = Form_OnChange; | 582 FPDF_FORMFILLINFO::FFI_OnChange = Form_OnChange; |
583 FPDF_FORMFILLINFO::FFI_GetPage = Form_GetPage; | 583 FPDF_FORMFILLINFO::FFI_GetPage = Form_GetPage; |
584 FPDF_FORMFILLINFO::FFI_GetCurrentPage = Form_GetCurrentPage; | 584 FPDF_FORMFILLINFO::FFI_GetCurrentPage = Form_GetCurrentPage; |
585 FPDF_FORMFILLINFO::FFI_GetRotation = Form_GetRotation; | 585 FPDF_FORMFILLINFO::FFI_GetRotation = Form_GetRotation; |
(...skipping 23 matching lines...) Expand all Loading... |
609 IPDF_JSPLATFORM::app_beep = Form_Beep; | 609 IPDF_JSPLATFORM::app_beep = Form_Beep; |
610 IPDF_JSPLATFORM::app_response = Form_Response; | 610 IPDF_JSPLATFORM::app_response = Form_Response; |
611 IPDF_JSPLATFORM::Doc_getFilePath = Form_GetFilePath; | 611 IPDF_JSPLATFORM::Doc_getFilePath = Form_GetFilePath; |
612 IPDF_JSPLATFORM::Doc_mail = Form_Mail; | 612 IPDF_JSPLATFORM::Doc_mail = Form_Mail; |
613 IPDF_JSPLATFORM::Doc_print = Form_Print; | 613 IPDF_JSPLATFORM::Doc_print = Form_Print; |
614 IPDF_JSPLATFORM::Doc_submitForm = Form_SubmitForm; | 614 IPDF_JSPLATFORM::Doc_submitForm = Form_SubmitForm; |
615 IPDF_JSPLATFORM::Doc_gotoPage = Form_GotoPage; | 615 IPDF_JSPLATFORM::Doc_gotoPage = Form_GotoPage; |
616 IPDF_JSPLATFORM::Field_browse = Form_Browse; | 616 IPDF_JSPLATFORM::Field_browse = Form_Browse; |
617 | 617 |
618 IFSDK_PAUSE::version = 1; | 618 IFSDK_PAUSE::version = 1; |
619 IFSDK_PAUSE::user = NULL; | 619 IFSDK_PAUSE::user = nullptr; |
620 IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow; | 620 IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow; |
621 | 621 |
622 #if defined(OS_LINUX) | 622 #if defined(OS_LINUX) |
623 // PreviewModeClient does not know its pp::Instance. | 623 // PreviewModeClient does not know its pp::Instance. |
624 pp::Instance* instance = client_->GetPluginInstance(); | 624 pp::Instance* instance = client_->GetPluginInstance(); |
625 if (instance) | 625 if (instance) |
626 g_last_instance_id = instance->pp_instance(); | 626 g_last_instance_id = instance->pp_instance(); |
627 #endif | 627 #endif |
628 } | 628 } |
629 | 629 |
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1344 print_settings, | 1344 print_settings, |
1345 &pages_to_print[i]); | 1345 &pages_to_print[i]); |
1346 | 1346 |
1347 if (!temp_doc) | 1347 if (!temp_doc) |
1348 break; | 1348 break; |
1349 | 1349 |
1350 pp::Buffer_Dev buffer = GetFlattenedPrintData(temp_doc); | 1350 pp::Buffer_Dev buffer = GetFlattenedPrintData(temp_doc); |
1351 FPDF_CloseDocument(temp_doc); | 1351 FPDF_CloseDocument(temp_doc); |
1352 | 1352 |
1353 PDFiumMemBufferFileRead file_read(buffer.data(), buffer.size()); | 1353 PDFiumMemBufferFileRead file_read(buffer.data(), buffer.size()); |
1354 temp_doc = FPDF_LoadCustomDocument(&file_read, NULL); | 1354 temp_doc = FPDF_LoadCustomDocument(&file_read, nullptr); |
1355 | 1355 |
1356 FPDF_BOOL imported = FPDF_ImportPages(output_doc, temp_doc, "1", i); | 1356 FPDF_BOOL imported = FPDF_ImportPages(output_doc, temp_doc, "1", i); |
1357 FPDF_CloseDocument(temp_doc); | 1357 FPDF_CloseDocument(temp_doc); |
1358 if (!imported) | 1358 if (!imported) |
1359 break; | 1359 break; |
1360 } | 1360 } |
1361 | 1361 |
1362 pp::Buffer_Dev buffer; | 1362 pp::Buffer_Dev buffer; |
1363 if (i == pages_to_print.size()) { | 1363 if (i == pages_to_print.size()) { |
1364 FPDF_CopyViewerPreferences(output_doc, doc_); | 1364 FPDF_CopyViewerPreferences(output_doc, doc_); |
(...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2229 if (page->available()) | 2229 if (page->available()) |
2230 selection_.push_back(PDFiumRange(page, 0, page->GetCharCount())); | 2230 selection_.push_back(PDFiumRange(page, 0, page->GetCharCount())); |
2231 } | 2231 } |
2232 } | 2232 } |
2233 | 2233 |
2234 int PDFiumEngine::GetNumberOfPages() { | 2234 int PDFiumEngine::GetNumberOfPages() { |
2235 return pages_.size(); | 2235 return pages_.size(); |
2236 } | 2236 } |
2237 | 2237 |
2238 pp::VarArray PDFiumEngine::GetBookmarks() { | 2238 pp::VarArray PDFiumEngine::GetBookmarks() { |
2239 pp::VarDictionary dict = TraverseBookmarks(doc_, NULL, 0); | 2239 pp::VarDictionary dict = TraverseBookmarks(doc_, nullptr, 0); |
2240 // The root bookmark contains no useful information. | 2240 // The root bookmark contains no useful information. |
2241 return pp::VarArray(dict.Get(pp::Var("children"))); | 2241 return pp::VarArray(dict.Get(pp::Var("children"))); |
2242 } | 2242 } |
2243 | 2243 |
2244 int PDFiumEngine::GetNamedDestinationPage(const std::string& destination) { | 2244 int PDFiumEngine::GetNamedDestinationPage(const std::string& destination) { |
2245 // Look for the destination. | 2245 // Look for the destination. |
2246 FPDF_DEST dest = FPDF_GetNamedDestByName(doc_, destination.c_str()); | 2246 FPDF_DEST dest = FPDF_GetNamedDestByName(doc_, destination.c_str()); |
2247 if (!dest) { | 2247 if (!dest) { |
2248 // Look for a bookmark with the same name. | 2248 // Look for a bookmark with the same name. |
2249 base::string16 destination_wide = base::UTF8ToUTF16(destination); | 2249 base::string16 destination_wide = base::UTF8ToUTF16(destination); |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2619 } | 2619 } |
2620 | 2620 |
2621 bool PDFiumEngine::IsPageVisible(int index) const { | 2621 bool PDFiumEngine::IsPageVisible(int index) const { |
2622 return ContainsValue(visible_pages_, index); | 2622 return ContainsValue(visible_pages_, index); |
2623 } | 2623 } |
2624 | 2624 |
2625 bool PDFiumEngine::CheckPageAvailable(int index, std::vector<int>* pending) { | 2625 bool PDFiumEngine::CheckPageAvailable(int index, std::vector<int>* pending) { |
2626 if (!doc_ || !form_) | 2626 if (!doc_ || !form_) |
2627 return false; | 2627 return false; |
2628 | 2628 |
2629 if (static_cast<int>(pages_.size()) > index && pages_[index]->available()) | 2629 const int num_pages = static_cast<int>(pages_.size()); |
| 2630 if (index < num_pages && pages_[index]->available()) |
2630 return true; | 2631 return true; |
2631 | 2632 |
2632 if (!FPDFAvail_IsPageAvail(fpdf_availability_, index, &download_hints_)) { | 2633 if (!FPDFAvail_IsPageAvail(fpdf_availability_, index, &download_hints_)) { |
2633 size_t j; | 2634 size_t j; |
2634 for (j = 0; j < pending->size(); ++j) { | 2635 for (j = 0; j < pending->size(); ++j) { |
2635 if ((*pending)[j] == index) | 2636 if ((*pending)[j] == index) |
2636 break; | 2637 break; |
2637 } | 2638 } |
2638 | 2639 |
2639 if (j == pending->size()) | 2640 if (j == pending->size()) |
2640 pending->push_back(index); | 2641 pending->push_back(index); |
2641 return false; | 2642 return false; |
2642 } | 2643 } |
2643 | 2644 |
2644 if (static_cast<int>(pages_.size()) > index) | 2645 if (index < num_pages) |
2645 pages_[index]->set_available(true); | 2646 pages_[index]->set_available(true); |
2646 if (!default_page_size_.GetArea()) | 2647 if (!default_page_size_.GetArea()) |
2647 default_page_size_ = GetPageSize(index); | 2648 default_page_size_ = GetPageSize(index); |
2648 return true; | 2649 return true; |
2649 } | 2650 } |
2650 | 2651 |
2651 pp::Size PDFiumEngine::GetPageSize(int index) { | 2652 pp::Size PDFiumEngine::GetPageSize(int index) { |
2652 pp::Size size; | 2653 pp::Size size; |
2653 double width_in_points = 0; | 2654 double width_in_points = 0; |
2654 double height_in_points = 0; | 2655 double height_in_points = 0; |
(...skipping 12 matching lines...) Expand all Loading... |
2667 return size; | 2668 return size; |
2668 } | 2669 } |
2669 | 2670 |
2670 int PDFiumEngine::StartPaint(int page_index, const pp::Rect& dirty) { | 2671 int PDFiumEngine::StartPaint(int page_index, const pp::Rect& dirty) { |
2671 // For the first time we hit paint, do nothing and just record the paint for | 2672 // For the first time we hit paint, do nothing and just record the paint for |
2672 // the next callback. This keeps the UI responsive in case the user is doing | 2673 // the next callback. This keeps the UI responsive in case the user is doing |
2673 // a lot of scrolling. | 2674 // a lot of scrolling. |
2674 ProgressivePaint progressive; | 2675 ProgressivePaint progressive; |
2675 progressive.rect = dirty; | 2676 progressive.rect = dirty; |
2676 progressive.page_index = page_index; | 2677 progressive.page_index = page_index; |
2677 progressive.bitmap = NULL; | 2678 progressive.bitmap = nullptr; |
2678 progressive.painted_ = false; | 2679 progressive.painted_ = false; |
2679 progressive_paints_.push_back(progressive); | 2680 progressive_paints_.push_back(progressive); |
2680 return progressive_paints_.size() - 1; | 2681 return progressive_paints_.size() - 1; |
2681 } | 2682 } |
2682 | 2683 |
2683 bool PDFiumEngine::ContinuePaint(int progressive_index, | 2684 bool PDFiumEngine::ContinuePaint(int progressive_index, |
2684 pp::ImageData* image_data) { | 2685 pp::ImageData* image_data) { |
2685 DCHECK_GE(progressive_index, 0); | 2686 DCHECK_GE(progressive_index, 0); |
2686 DCHECK_LT(static_cast<size_t>(progressive_index), progressive_paints_.size()); | 2687 DCHECK_LT(static_cast<size_t>(progressive_index), progressive_paints_.size()); |
2687 DCHECK(image_data); | 2688 DCHECK(image_data); |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2833 | 2834 |
2834 void PDFiumEngine::DrawSelections(int progressive_index, | 2835 void PDFiumEngine::DrawSelections(int progressive_index, |
2835 pp::ImageData* image_data) { | 2836 pp::ImageData* image_data) { |
2836 DCHECK_GE(progressive_index, 0); | 2837 DCHECK_GE(progressive_index, 0); |
2837 DCHECK_LT(static_cast<size_t>(progressive_index), progressive_paints_.size()); | 2838 DCHECK_LT(static_cast<size_t>(progressive_index), progressive_paints_.size()); |
2838 DCHECK(image_data); | 2839 DCHECK(image_data); |
2839 | 2840 |
2840 int page_index = progressive_paints_[progressive_index].page_index; | 2841 int page_index = progressive_paints_[progressive_index].page_index; |
2841 pp::Rect dirty_in_screen = progressive_paints_[progressive_index].rect; | 2842 pp::Rect dirty_in_screen = progressive_paints_[progressive_index].rect; |
2842 | 2843 |
2843 void* region = NULL; | 2844 void* region = nullptr; |
2844 int stride; | 2845 int stride; |
2845 GetRegion(dirty_in_screen.point(), image_data, ®ion, &stride); | 2846 GetRegion(dirty_in_screen.point(), image_data, ®ion, &stride); |
2846 | 2847 |
2847 std::vector<pp::Rect> highlighted_rects; | 2848 std::vector<pp::Rect> highlighted_rects; |
2848 pp::Rect visible_rect = GetVisibleRect(); | 2849 pp::Rect visible_rect = GetVisibleRect(); |
2849 for (auto& range : selection_) { | 2850 for (auto& range : selection_) { |
2850 if (range.page_index() != page_index) | 2851 if (range.page_index() != page_index) |
2851 continue; | 2852 continue; |
2852 | 2853 |
2853 std::vector<pp::Rect> rects = range.GetScreenRects( | 2854 std::vector<pp::Rect> rects = range.GetScreenRects( |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2898 } | 2899 } |
2899 return -1; | 2900 return -1; |
2900 } | 2901 } |
2901 | 2902 |
2902 FPDF_BITMAP PDFiumEngine::CreateBitmap(const pp::Rect& rect, | 2903 FPDF_BITMAP PDFiumEngine::CreateBitmap(const pp::Rect& rect, |
2903 pp::ImageData* image_data) const { | 2904 pp::ImageData* image_data) const { |
2904 void* region; | 2905 void* region; |
2905 int stride; | 2906 int stride; |
2906 GetRegion(rect.point(), image_data, ®ion, &stride); | 2907 GetRegion(rect.point(), image_data, ®ion, &stride); |
2907 if (!region) | 2908 if (!region) |
2908 return NULL; | 2909 return nullptr; |
2909 return FPDFBitmap_CreateEx( | 2910 return FPDFBitmap_CreateEx( |
2910 rect.width(), rect.height(), FPDFBitmap_BGRx, region, stride); | 2911 rect.width(), rect.height(), FPDFBitmap_BGRx, region, stride); |
2911 } | 2912 } |
2912 | 2913 |
2913 void PDFiumEngine::GetPDFiumRect( | 2914 void PDFiumEngine::GetPDFiumRect( |
2914 int page_index, const pp::Rect& rect, int* start_x, int* start_y, | 2915 int page_index, const pp::Rect& rect, int* start_x, int* start_y, |
2915 int* size_x, int* size_y) const { | 2916 int* size_x, int* size_y) const { |
2916 pp::Rect page_rect = GetScreenRect(pages_[page_index]->rect()); | 2917 pp::Rect page_rect = GetScreenRect(pages_[page_index]->rect()); |
2917 page_rect.Offset(-rect.x(), -rect.y()); | 2918 page_rect.Offset(-rect.x(), -rect.y()); |
2918 | 2919 |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3277 DrawShadow(image_data, shadow_rect, page_rect, clip_rect, *page_shadow_); | 3278 DrawShadow(image_data, shadow_rect, page_rect, clip_rect, *page_shadow_); |
3278 } | 3279 } |
3279 | 3280 |
3280 void PDFiumEngine::GetRegion(const pp::Point& location, | 3281 void PDFiumEngine::GetRegion(const pp::Point& location, |
3281 pp::ImageData* image_data, | 3282 pp::ImageData* image_data, |
3282 void** region, | 3283 void** region, |
3283 int* stride) const { | 3284 int* stride) const { |
3284 if (image_data->is_null()) { | 3285 if (image_data->is_null()) { |
3285 DCHECK(plugin_size_.IsEmpty()); | 3286 DCHECK(plugin_size_.IsEmpty()); |
3286 *stride = 0; | 3287 *stride = 0; |
3287 *region = NULL; | 3288 *region = nullptr; |
3288 return; | 3289 return; |
3289 } | 3290 } |
3290 char* buffer = static_cast<char*>(image_data->data()); | 3291 char* buffer = static_cast<char*>(image_data->data()); |
3291 *stride = image_data->stride(); | 3292 *stride = image_data->stride(); |
3292 | 3293 |
3293 pp::Point offset_location = location + page_offset_; | 3294 pp::Point offset_location = location + page_offset_; |
3294 // TODO: update this when we support BIDI and scrollbars can be on the left. | 3295 // TODO: update this when we support BIDI and scrollbars can be on the left. |
3295 if (!buffer || | 3296 if (!buffer || |
3296 !pp::Rect(page_offset_, plugin_size_).Contains(offset_location)) { | 3297 !pp::Rect(page_offset_, plugin_size_).Contains(offset_location)) { |
3297 *region = NULL; | 3298 *region = nullptr; |
3298 return; | 3299 return; |
3299 } | 3300 } |
3300 | 3301 |
3301 buffer += location.y() * (*stride); | 3302 buffer += location.y() * (*stride); |
3302 buffer += (location.x() + page_offset_.x()) * 4; | 3303 buffer += (location.x() + page_offset_.x()) * 4; |
3303 *region = buffer; | 3304 *region = buffer; |
3304 } | 3305 } |
3305 | 3306 |
3306 void PDFiumEngine::OnSelectionChanged() { | 3307 void PDFiumEngine::OnSelectionChanged() { |
3307 pp::PDF::SetSelectedText(GetPluginInstance(), GetSelectedText().c_str()); | 3308 pp::PDF::SetSelectedText(GetPluginInstance(), GetSelectedText().c_str()); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3409 | 3410 |
3410 void PDFiumEngine::Form_OnChange(FPDF_FORMFILLINFO* param) { | 3411 void PDFiumEngine::Form_OnChange(FPDF_FORMFILLINFO* param) { |
3411 // Don't care about. | 3412 // Don't care about. |
3412 } | 3413 } |
3413 | 3414 |
3414 FPDF_PAGE PDFiumEngine::Form_GetPage(FPDF_FORMFILLINFO* param, | 3415 FPDF_PAGE PDFiumEngine::Form_GetPage(FPDF_FORMFILLINFO* param, |
3415 FPDF_DOCUMENT document, | 3416 FPDF_DOCUMENT document, |
3416 int page_index) { | 3417 int page_index) { |
3417 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param); | 3418 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param); |
3418 if (page_index < 0 || page_index >= static_cast<int>(engine->pages_.size())) | 3419 if (page_index < 0 || page_index >= static_cast<int>(engine->pages_.size())) |
3419 return NULL; | 3420 return nullptr; |
3420 return engine->pages_[page_index]->GetPage(); | 3421 return engine->pages_[page_index]->GetPage(); |
3421 } | 3422 } |
3422 | 3423 |
3423 FPDF_PAGE PDFiumEngine::Form_GetCurrentPage(FPDF_FORMFILLINFO* param, | 3424 FPDF_PAGE PDFiumEngine::Form_GetCurrentPage(FPDF_FORMFILLINFO* param, |
3424 FPDF_DOCUMENT document) { | 3425 FPDF_DOCUMENT document) { |
3425 // TODO(jam): find out what this is used for. | 3426 // TODO(jam): find out what this is used for. |
3426 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param); | 3427 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param); |
3427 int index = engine->last_page_mouse_down_; | 3428 int index = engine->last_page_mouse_down_; |
3428 if (index == -1) { | 3429 if (index == -1) { |
3429 index = engine->GetMostVisiblePage(); | 3430 index = engine->GetMostVisiblePage(); |
3430 if (index == -1) { | 3431 if (index == -1) { |
3431 NOTREACHED(); | 3432 NOTREACHED(); |
3432 return NULL; | 3433 return nullptr; |
3433 } | 3434 } |
3434 } | 3435 } |
3435 | 3436 |
3436 return engine->pages_[index]->GetPage(); | 3437 return engine->pages_[index]->GetPage(); |
3437 } | 3438 } |
3438 | 3439 |
3439 int PDFiumEngine::Form_GetRotation(FPDF_FORMFILLINFO* param, FPDF_PAGE page) { | 3440 int PDFiumEngine::Form_GetRotation(FPDF_FORMFILLINFO* param, FPDF_PAGE page) { |
3440 return 0; | 3441 return 0; |
3441 } | 3442 } |
3442 | 3443 |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3726 PDFEngineExports* PDFEngineExports::Get() { | 3727 PDFEngineExports* PDFEngineExports::Get() { |
3727 return g_pdf_engine_exports.Pointer(); | 3728 return g_pdf_engine_exports.Pointer(); |
3728 } | 3729 } |
3729 | 3730 |
3730 #if defined(OS_WIN) | 3731 #if defined(OS_WIN) |
3731 bool PDFiumEngineExports::RenderPDFPageToDC(const void* pdf_buffer, | 3732 bool PDFiumEngineExports::RenderPDFPageToDC(const void* pdf_buffer, |
3732 int buffer_size, | 3733 int buffer_size, |
3733 int page_number, | 3734 int page_number, |
3734 const RenderingSettings& settings, | 3735 const RenderingSettings& settings, |
3735 HDC dc) { | 3736 HDC dc) { |
3736 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, buffer_size, NULL); | 3737 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, buffer_size, nullptr); |
3737 if (!doc) | 3738 if (!doc) |
3738 return false; | 3739 return false; |
3739 FPDF_PAGE page = FPDF_LoadPage(doc, page_number); | 3740 FPDF_PAGE page = FPDF_LoadPage(doc, page_number); |
3740 if (!page) { | 3741 if (!page) { |
3741 FPDF_CloseDocument(doc); | 3742 FPDF_CloseDocument(doc); |
3742 return false; | 3743 return false; |
3743 } | 3744 } |
3744 RenderingSettings new_settings = settings; | 3745 RenderingSettings new_settings = settings; |
3745 // calculate the page size | 3746 // calculate the page size |
3746 if (new_settings.dpi_x == -1) | 3747 if (new_settings.dpi_x == -1) |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3798 return true; | 3799 return true; |
3799 } | 3800 } |
3800 #endif // defined(OS_WIN) | 3801 #endif // defined(OS_WIN) |
3801 | 3802 |
3802 bool PDFiumEngineExports::RenderPDFPageToBitmap( | 3803 bool PDFiumEngineExports::RenderPDFPageToBitmap( |
3803 const void* pdf_buffer, | 3804 const void* pdf_buffer, |
3804 int pdf_buffer_size, | 3805 int pdf_buffer_size, |
3805 int page_number, | 3806 int page_number, |
3806 const RenderingSettings& settings, | 3807 const RenderingSettings& settings, |
3807 void* bitmap_buffer) { | 3808 void* bitmap_buffer) { |
3808 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); | 3809 FPDF_DOCUMENT doc = |
| 3810 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); |
3809 if (!doc) | 3811 if (!doc) |
3810 return false; | 3812 return false; |
3811 FPDF_PAGE page = FPDF_LoadPage(doc, page_number); | 3813 FPDF_PAGE page = FPDF_LoadPage(doc, page_number); |
3812 if (!page) { | 3814 if (!page) { |
3813 FPDF_CloseDocument(doc); | 3815 FPDF_CloseDocument(doc); |
3814 return false; | 3816 return false; |
3815 } | 3817 } |
3816 | 3818 |
3817 pp::Rect dest; | 3819 pp::Rect dest; |
3818 int rotate = CalculatePosition(page, settings, &dest); | 3820 int rotate = CalculatePosition(page, settings, &dest); |
(...skipping 13 matching lines...) Expand all Loading... |
3832 FPDFBitmap_Destroy(bitmap); | 3834 FPDFBitmap_Destroy(bitmap); |
3833 FPDF_ClosePage(page); | 3835 FPDF_ClosePage(page); |
3834 FPDF_CloseDocument(doc); | 3836 FPDF_CloseDocument(doc); |
3835 return true; | 3837 return true; |
3836 } | 3838 } |
3837 | 3839 |
3838 bool PDFiumEngineExports::GetPDFDocInfo(const void* pdf_buffer, | 3840 bool PDFiumEngineExports::GetPDFDocInfo(const void* pdf_buffer, |
3839 int buffer_size, | 3841 int buffer_size, |
3840 int* page_count, | 3842 int* page_count, |
3841 double* max_page_width) { | 3843 double* max_page_width) { |
3842 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, buffer_size, NULL); | 3844 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, buffer_size, nullptr); |
3843 if (!doc) | 3845 if (!doc) |
3844 return false; | 3846 return false; |
3845 int page_count_local = FPDF_GetPageCount(doc); | 3847 int page_count_local = FPDF_GetPageCount(doc); |
3846 if (page_count) { | 3848 if (page_count) { |
3847 *page_count = page_count_local; | 3849 *page_count = page_count_local; |
3848 } | 3850 } |
3849 if (max_page_width) { | 3851 if (max_page_width) { |
3850 *max_page_width = 0; | 3852 *max_page_width = 0; |
3851 for (int page_number = 0; page_number < page_count_local; page_number++) { | 3853 for (int page_number = 0; page_number < page_count_local; page_number++) { |
3852 double page_width = 0; | 3854 double page_width = 0; |
3853 double page_height = 0; | 3855 double page_height = 0; |
3854 FPDF_GetPageSizeByIndex(doc, page_number, &page_width, &page_height); | 3856 FPDF_GetPageSizeByIndex(doc, page_number, &page_width, &page_height); |
3855 if (page_width > *max_page_width) { | 3857 if (page_width > *max_page_width) { |
3856 *max_page_width = page_width; | 3858 *max_page_width = page_width; |
3857 } | 3859 } |
3858 } | 3860 } |
3859 } | 3861 } |
3860 FPDF_CloseDocument(doc); | 3862 FPDF_CloseDocument(doc); |
3861 return true; | 3863 return true; |
3862 } | 3864 } |
3863 | 3865 |
3864 bool PDFiumEngineExports::GetPDFPageSizeByIndex( | 3866 bool PDFiumEngineExports::GetPDFPageSizeByIndex( |
3865 const void* pdf_buffer, | 3867 const void* pdf_buffer, |
3866 int pdf_buffer_size, | 3868 int pdf_buffer_size, |
3867 int page_number, | 3869 int page_number, |
3868 double* width, | 3870 double* width, |
3869 double* height) { | 3871 double* height) { |
3870 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); | 3872 FPDF_DOCUMENT doc = |
| 3873 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); |
3871 if (!doc) | 3874 if (!doc) |
3872 return false; | 3875 return false; |
3873 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; | 3876 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; |
3874 FPDF_CloseDocument(doc); | 3877 FPDF_CloseDocument(doc); |
3875 return success; | 3878 return success; |
3876 } | 3879 } |
3877 | 3880 |
3878 } // namespace chrome_pdf | 3881 } // namespace chrome_pdf |
OLD | NEW |