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

Side by Side Diff: fpdfsdk/src/fpdfview.cpp

Issue 1473503002: Introduce "underlying types" to abstract XFA differences. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: rebase past Jun's CL. Created 5 years 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
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium 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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "public/fpdfview.h" 7 #include "public/fpdfview.h"
8 8
9 #include "../include/fpdfxfa/fpdfxfa_app.h" 9 #include "../include/fpdfxfa/fpdfxfa_app.h"
10 #include "../include/fpdfxfa/fpdfxfa_doc.h" 10 #include "../include/fpdfxfa/fpdfxfa_doc.h"
11 #include "../include/fpdfxfa/fpdfxfa_page.h" 11 #include "../include/fpdfxfa/fpdfxfa_page.h"
12 #include "../include/fpdfxfa/fpdfxfa_util.h" 12 #include "../include/fpdfxfa/fpdfxfa_util.h"
13 #include "core/include/fpdfapi/fpdf_module.h" 13 #include "core/include/fpdfapi/fpdf_module.h"
14 #include "core/include/fxcodec/fx_codec.h" 14 #include "core/include/fxcodec/fx_codec.h"
15 #include "core/include/fxcrt/fx_safe_types.h" 15 #include "core/include/fxcrt/fx_safe_types.h"
16 #include "fpdfsdk/include/fsdk_define.h" 16 #include "fpdfsdk/include/fsdk_define.h"
17 #include "fpdfsdk/include/fsdk_mgr.h" 17 #include "fpdfsdk/include/fsdk_mgr.h"
18 #include "fpdfsdk/include/fsdk_rendercontext.h" 18 #include "fpdfsdk/include/fsdk_rendercontext.h"
19 #include "fpdfsdk/include/javascript/IJavaScript.h" 19 #include "fpdfsdk/include/javascript/IJavaScript.h"
20 #include "public/fpdf_ext.h" 20 #include "public/fpdf_ext.h"
21 #include "public/fpdf_formfill.h" 21 #include "public/fpdf_formfill.h"
22 #include "public/fpdf_progressive.h" 22 #include "public/fpdf_progressive.h"
23 #include "third_party/base/nonstd_unique_ptr.h" 23 #include "third_party/base/nonstd_unique_ptr.h"
24 #include "third_party/base/numerics/safe_conversions_impl.h" 24 #include "third_party/base/numerics/safe_conversions_impl.h"
25 25
26 UnderlyingDocumentType* UnderlyingFromFPDFDocument(FPDF_DOCUMENT doc) {
27 return static_cast<UnderlyingDocumentType*>(doc);
28 }
29
30 FPDF_DOCUMENT FPDFDocumentFromUnderlying(UnderlyingDocumentType* doc) {
31 return static_cast<FPDF_DOCUMENT>(doc);
32 }
33
34 UnderlyingPageType* UnderlyingFromFPDFPage(FPDF_PAGE page) {
35 return static_cast<UnderlyingPageType*>(page);
36 }
37
26 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) { 38 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) {
27 return doc ? static_cast<CPDFXFA_Document*>(doc)->GetPDFDoc() : nullptr; 39 return doc ? UnderlyingFromFPDFDocument(doc)->GetPDFDoc() : nullptr;
28 } 40 }
29 41
30 FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) { 42 FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) {
31 return doc ? new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance()) : nullptr; 43 return doc ? FPDFDocumentFromUnderlying(
44 new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance()))
45 : nullptr;
32 } 46 }
33 47
34 CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) { 48 CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) {
35 return page ? static_cast<CPDFXFA_Page*>(page)->GetPDFPage() : nullptr; 49 return page ? UnderlyingFromFPDFPage(page)->GetPDFPage() : nullptr;
36 } 50 }
37 51
38 CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) { 52 CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) {
39 m_pFS = pFS; 53 m_pFS = pFS;
40 m_nCurPos = 0; 54 m_nCurPos = 0;
41 } 55 }
42 56
43 IFX_FileStream* CFPDF_FileStream::Retain() { 57 IFX_FileStream* CFPDF_FileStream::Retain() {
44 return this; 58 return this;
45 } 59 }
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { 423 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) {
410 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); 424 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
411 if (!pDoc) 425 if (!pDoc)
412 return -1; 426 return -1;
413 427
414 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); 428 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict();
415 return pDict ? pDict->GetInteger("R") : -1; 429 return pDict ? pDict->GetInteger("R") : -1;
416 } 430 }
417 431
418 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { 432 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) {
419 CPDFXFA_Document* pDoc = static_cast<CPDFXFA_Document*>(document); 433 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
420 return pDoc ? pDoc->GetPageCount() : 0; 434 return pDoc ? pDoc->GetPageCount() : 0;
421 } 435 }
422 436
423 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, 437 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
424 int page_index) { 438 int page_index) {
425 if (!document) 439 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
440 if (!pDoc)
426 return nullptr; 441 return nullptr;
427 CPDFXFA_Document* pDoc = static_cast<CPDFXFA_Document*>(document);
428 if (page_index < 0 || page_index >= pDoc->GetPageCount()) 442 if (page_index < 0 || page_index >= pDoc->GetPageCount())
429 return nullptr; 443 return nullptr;
430 444
431 return pDoc->GetPage(page_index); 445 return pDoc->GetPage(page_index);
432 } 446 }
433 447
434 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { 448 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) {
435 CPDFXFA_Page* pPage = static_cast<CPDFXFA_Page*>(page); 449 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
436 return pPage ? pPage->GetPageWidth() : 0.0; 450 return pPage ? pPage->GetPageWidth() : 0.0;
437 } 451 }
438 452
439 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) { 453 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) {
440 CPDFXFA_Page* pPage = static_cast<CPDFXFA_Page*>(page); 454 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
441 return pPage ? pPage->GetPageHeight() : 0.0; 455 return pPage ? pPage->GetPageHeight() : 0.0;
442 } 456 }
443 457
444 void DropContext(void* data) { 458 void DropContext(void* data) {
445 delete (CRenderContext*)data; 459 delete (CRenderContext*)data;
446 } 460 }
447 461
448 #if defined(_DEBUG) || defined(DEBUG) 462 #if defined(_DEBUG) || defined(DEBUG)
449 #define DEBUG_TRACE 463 #define DEBUG_TRACE
450 #endif 464 #endif
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 int start_y, 685 int start_y,
672 int size_x, 686 int size_x,
673 int size_y, 687 int size_y,
674 int rotate, 688 int rotate,
675 int device_x, 689 int device_x,
676 int device_y, 690 int device_y,
677 double* page_x, 691 double* page_x,
678 double* page_y) { 692 double* page_y) {
679 if (page == NULL || page_x == NULL || page_y == NULL) 693 if (page == NULL || page_x == NULL || page_y == NULL)
680 return; 694 return;
681 CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; 695 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
682
683 pPage->DeviceToPage(start_x, start_y, size_x, size_y, rotate, device_x, 696 pPage->DeviceToPage(start_x, start_y, size_x, size_y, rotate, device_x,
684 device_y, page_x, page_y); 697 device_y, page_x, page_y);
685 } 698 }
686 699
687 DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page, 700 DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
688 int start_x, 701 int start_x,
689 int start_y, 702 int start_y,
690 int size_x, 703 int size_x,
691 int size_y, 704 int size_y,
692 int rotate, 705 int rotate,
693 double page_x, 706 double page_x,
694 double page_y, 707 double page_y,
695 int* device_x, 708 int* device_x,
696 int* device_y) { 709 int* device_y) {
697 if (!device_x || !device_y) 710 if (!device_x || !device_y)
698 return; 711 return;
699 CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; 712 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
700 if (!pPage) 713 if (!pPage)
701 return; 714 return;
702 pPage->PageToDevice(start_x, start_y, size_x, size_y, rotate, page_x, page_y, 715 pPage->PageToDevice(start_x, start_y, size_x, size_y, rotate, page_x, page_y,
703 device_x, device_y); 716 device_x, device_y);
704 } 717 }
705 718
706 DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width, 719 DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width,
707 int height, 720 int height,
708 int alpha) { 721 int alpha) {
709 nonstd::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap); 722 nonstd::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap);
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 if (!buffer) { 1069 if (!buffer) {
1057 *buflen = len; 1070 *buflen = len;
1058 } else if (*buflen >= len) { 1071 } else if (*buflen >= len) {
1059 memcpy(buffer, utf16Name.c_str(), len); 1072 memcpy(buffer, utf16Name.c_str(), len);
1060 *buflen = len; 1073 *buflen = len;
1061 } else { 1074 } else {
1062 *buflen = -1; 1075 *buflen = -1;
1063 } 1076 }
1064 return (FPDF_DEST)pDestObj; 1077 return (FPDF_DEST)pDestObj;
1065 } 1078 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698