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

Side by Side Diff: fpdfsdk/fpdfview.cpp

Issue 2008553008: Remove CFX_PrivateData from CPDF_Page (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Fix non-XFA build. Created 4 years, 6 months 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
« no previous file with comments | « fpdfsdk/fpdf_progressive.cpp ('k') | fpdfsdk/fsdk_mgr.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <memory> 9 #include <memory>
10 10
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { 510 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) {
511 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page); 511 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
512 return pPage ? pPage->GetPageWidth() : 0.0; 512 return pPage ? pPage->GetPageWidth() : 0.0;
513 } 513 }
514 514
515 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) { 515 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) {
516 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page); 516 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
517 return pPage ? pPage->GetPageHeight() : 0.0; 517 return pPage ? pPage->GetPageHeight() : 0.0;
518 } 518 }
519 519
520 void DropContext(void* data) {
521 delete (CRenderContext*)data;
522 }
523
524 #if defined(_WIN32) 520 #if defined(_WIN32)
525 DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, 521 DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
526 FPDF_PAGE page, 522 FPDF_PAGE page,
527 int start_x, 523 int start_x,
528 int start_y, 524 int start_y,
529 int size_x, 525 int size_x,
530 int size_y, 526 int size_y,
531 int rotate, 527 int rotate,
532 int flags) { 528 int flags) {
533 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); 529 CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
534 if (!pPage) 530 if (!pPage)
535 return; 531 return;
536 532
537 CRenderContext* pContext = new CRenderContext; 533 CRenderContext* pContext = new CRenderContext;
538 pPage->SetPrivateData((void*)1, pContext, DropContext); 534 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext));
539 535
540 #if !defined(_WIN32_WCE) 536 #if !defined(_WIN32_WCE)
541 CFX_DIBitmap* pBitmap = nullptr; 537 CFX_DIBitmap* pBitmap = nullptr;
542 FX_BOOL bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded(); 538 FX_BOOL bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded();
543 FX_BOOL bHasImageMask = pPage->HasImageMask(); 539 FX_BOOL bHasImageMask = pPage->HasImageMask();
544 if (bBackgroundAlphaNeeded || bHasImageMask) { 540 if (bBackgroundAlphaNeeded || bHasImageMask) {
545 pBitmap = new CFX_DIBitmap; 541 pBitmap = new CFX_DIBitmap;
546 pBitmap->Create(size_x, size_y, FXDIB_Argb); 542 pBitmap->Create(size_x, size_y, FXDIB_Argb);
547 pBitmap->Clear(0x00ffffff); 543 pBitmap->Clear(0x00ffffff);
548 pContext->m_pDevice = new CFX_FxgeDevice; 544 pContext->m_pDevice = new CFX_FxgeDevice;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 HGDIOBJ hOldBitmap = SelectObject(hMemDC, pContext->m_hBitmap); 608 HGDIOBJ hOldBitmap = SelectObject(hMemDC, pContext->m_hBitmap);
613 609
614 BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY); 610 BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY);
615 SelectObject(hMemDC, hOldBitmap); 611 SelectObject(hMemDC, hOldBitmap);
616 DeleteDC(hMemDC); 612 DeleteDC(hMemDC);
617 613
618 #endif // !defined(_WIN32_WCE) 614 #endif // !defined(_WIN32_WCE)
619 if (bBackgroundAlphaNeeded || bHasImageMask) 615 if (bBackgroundAlphaNeeded || bHasImageMask)
620 delete pBitmap; 616 delete pBitmap;
621 617
622 delete pContext; 618 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>());
623 pPage->RemovePrivateData((void*)1);
624 } 619 }
625 #endif // defined(_WIN32) 620 #endif // defined(_WIN32)
626 621
627 DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, 622 DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
628 FPDF_PAGE page, 623 FPDF_PAGE page,
629 int start_x, 624 int start_x,
630 int start_y, 625 int start_y,
631 int size_x, 626 int size_x,
632 int size_y, 627 int size_y,
633 int rotate, 628 int rotate,
634 int flags) { 629 int flags) {
635 if (!bitmap) 630 if (!bitmap)
636 return; 631 return;
632
637 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); 633 CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
638 if (!pPage) 634 if (!pPage)
639 return; 635 return;
636
640 CRenderContext* pContext = new CRenderContext; 637 CRenderContext* pContext = new CRenderContext;
641 pPage->SetPrivateData((void*)1, pContext, DropContext); 638 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext));
642 pContext->m_pDevice = new CFX_FxgeDevice; 639 pContext->m_pDevice = new CFX_FxgeDevice;
643 640 if (flags & FPDF_REVERSE_BYTE_ORDER) {
644 if (flags & FPDF_REVERSE_BYTE_ORDER)
645 ((CFX_FxgeDevice*)pContext->m_pDevice) 641 ((CFX_FxgeDevice*)pContext->m_pDevice)
646 ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE); 642 ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
647 else 643 } else {
648 ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); 644 ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
645 }
649 646
650 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, 647 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
651 rotate, flags, TRUE, NULL); 648 rotate, flags, TRUE, nullptr);
652 649
653 delete pContext; 650 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>());
654 pPage->RemovePrivateData((void*)1);
655 } 651 }
656 652
657 #ifdef _SKIA_SUPPORT_ 653 #ifdef _SKIA_SUPPORT_
658 DLLEXPORT FPDF_RECORDER STDCALL FPDF_RenderPageSkp(FPDF_PAGE page, 654 DLLEXPORT FPDF_RECORDER STDCALL FPDF_RenderPageSkp(FPDF_PAGE page,
659 int size_x, 655 int size_x,
660 int size_y) { 656 int size_y) {
661 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); 657 CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
662 if (!pPage) 658 if (!pPage)
663 return nullptr; 659 return nullptr;
664 std::unique_ptr<CRenderContext> pContext(new CRenderContext); 660
665 pPage->SetPrivateData((void*)1, pContext.get(), DropContext); 661 CRenderContext* pContext = new CRenderContext;
662 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext));
666 CFX_FxgeDevice* skDevice = new CFX_FxgeDevice; 663 CFX_FxgeDevice* skDevice = new CFX_FxgeDevice;
667 FPDF_RECORDER recorder = skDevice->CreateRecorder(size_x, size_y); 664 FPDF_RECORDER recorder = skDevice->CreateRecorder(size_x, size_y);
668 pContext->m_pDevice = skDevice; 665 pContext->m_pDevice = skDevice;
669
670 FPDF_RenderPage_Retail(pContext.get(), page, 0, 0, size_x, size_y, 0, 0, TRUE, 666 FPDF_RenderPage_Retail(pContext.get(), page, 0, 0, size_x, size_y, 0, 0, TRUE,
671 NULL); 667 nullptr);
672 pPage->RemovePrivateData((void*)1); 668 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>());
673 return recorder; 669 return recorder;
674 } 670 }
675 #endif 671 #endif
676 672
677 DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) { 673 DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
674 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
678 if (!page) 675 if (!page)
679 return; 676 return;
680 #ifdef PDF_ENABLE_XFA 677 #ifdef PDF_ENABLE_XFA
681 CPDFXFA_Page* pPage = (CPDFXFA_Page*)page;
682 pPage->Release(); 678 pPage->Release();
683 #else // PDF_ENABLE_XFA 679 #else // PDF_ENABLE_XFA
684 CPDFSDK_PageView* pPageView = 680 CPDFSDK_PageView* pPageView =
685 (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page); 681 static_cast<CPDFSDK_PageView*>(pPage->GetView());
686 if (pPageView && pPageView->IsLocked()) { 682 if (pPageView && pPageView->IsLocked()) {
687 pPageView->TakeOverPage(); 683 pPageView->TakeOverPage();
688 return; 684 return;
689 } 685 }
690 delete (CPDF_Page*)page; 686 delete pPage;
691 #endif // PDF_ENABLE_XFA 687 #endif // PDF_ENABLE_XFA
692 } 688 }
693 689
694 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { 690 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) {
695 #ifdef PDF_ENABLE_XFA 691 #ifdef PDF_ENABLE_XFA
696 delete UnderlyingFromFPDFDocument(document); 692 delete UnderlyingFromFPDFDocument(document);
697 #else // PDF_ENABLE_XFA 693 #else // PDF_ENABLE_XFA
698 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); 694 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
699 if (!pDoc) 695 if (!pDoc)
700 return; 696 return;
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 if (!buffer) { 1135 if (!buffer) {
1140 *buflen = len; 1136 *buflen = len;
1141 } else if (*buflen >= len) { 1137 } else if (*buflen >= len) {
1142 memcpy(buffer, utf16Name.c_str(), len); 1138 memcpy(buffer, utf16Name.c_str(), len);
1143 *buflen = len; 1139 *buflen = len;
1144 } else { 1140 } else {
1145 *buflen = -1; 1141 *buflen = -1;
1146 } 1142 }
1147 return (FPDF_DEST)pDestObj; 1143 return (FPDF_DEST)pDestObj;
1148 } 1144 }
OLDNEW
« no previous file with comments | « fpdfsdk/fpdf_progressive.cpp ('k') | fpdfsdk/fsdk_mgr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698