| Index: fpdfsdk/fpdfview.cpp
|
| diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
|
| index cdcaba43187831ef9e52260183156af241e20e81..bf7ae0f5c2f22836460424949db480e0e94236d2 100644
|
| --- a/fpdfsdk/fpdfview.cpp
|
| +++ b/fpdfsdk/fpdfview.cpp
|
| @@ -517,10 +517,6 @@ DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) {
|
| return pPage ? pPage->GetPageHeight() : 0.0;
|
| }
|
|
|
| -void DropContext(void* data) {
|
| - delete (CRenderContext*)data;
|
| -}
|
| -
|
| #if defined(_WIN32)
|
| DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
|
| FPDF_PAGE page,
|
| @@ -535,7 +531,7 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
|
| return;
|
|
|
| CRenderContext* pContext = new CRenderContext;
|
| - pPage->SetPrivateData((void*)1, pContext, DropContext);
|
| + pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext));
|
|
|
| #if !defined(_WIN32_WCE)
|
| CFX_DIBitmap* pBitmap = nullptr;
|
| @@ -619,8 +615,7 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
|
| if (bBackgroundAlphaNeeded || bHasImageMask)
|
| delete pBitmap;
|
|
|
| - delete pContext;
|
| - pPage->RemovePrivateData((void*)1);
|
| + pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>());
|
| }
|
| #endif // defined(_WIN32)
|
|
|
| @@ -634,24 +629,25 @@ DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
|
| int flags) {
|
| if (!bitmap)
|
| return;
|
| +
|
| CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
|
| if (!pPage)
|
| return;
|
| +
|
| CRenderContext* pContext = new CRenderContext;
|
| - pPage->SetPrivateData((void*)1, pContext, DropContext);
|
| + pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext));
|
| pContext->m_pDevice = new CFX_FxgeDevice;
|
| -
|
| - if (flags & FPDF_REVERSE_BYTE_ORDER)
|
| + if (flags & FPDF_REVERSE_BYTE_ORDER) {
|
| ((CFX_FxgeDevice*)pContext->m_pDevice)
|
| ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
|
| - else
|
| + } else {
|
| ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
|
| + }
|
|
|
| FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
|
| - rotate, flags, TRUE, NULL);
|
| + rotate, flags, TRUE, nullptr);
|
|
|
| - delete pContext;
|
| - pPage->RemovePrivateData((void*)1);
|
| + pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>());
|
| }
|
|
|
| #ifdef _SKIA_SUPPORT_
|
| @@ -661,33 +657,33 @@ DLLEXPORT FPDF_RECORDER STDCALL FPDF_RenderPageSkp(FPDF_PAGE page,
|
| CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
|
| if (!pPage)
|
| return nullptr;
|
| - std::unique_ptr<CRenderContext> pContext(new CRenderContext);
|
| - pPage->SetPrivateData((void*)1, pContext.get(), DropContext);
|
| +
|
| + CRenderContext* pContext = new CRenderContext;
|
| + pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext));
|
| CFX_FxgeDevice* skDevice = new CFX_FxgeDevice;
|
| FPDF_RECORDER recorder = skDevice->CreateRecorder(size_x, size_y);
|
| pContext->m_pDevice = skDevice;
|
| -
|
| FPDF_RenderPage_Retail(pContext.get(), page, 0, 0, size_x, size_y, 0, 0, TRUE,
|
| - NULL);
|
| - pPage->RemovePrivateData((void*)1);
|
| + nullptr);
|
| + pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>());
|
| return recorder;
|
| }
|
| #endif
|
|
|
| DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
|
| + UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
|
| if (!page)
|
| return;
|
| #ifdef PDF_ENABLE_XFA
|
| - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page;
|
| pPage->Release();
|
| #else // PDF_ENABLE_XFA
|
| CPDFSDK_PageView* pPageView =
|
| - (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page);
|
| + static_cast<CPDFSDK_PageView*>(pPage->GetView());
|
| if (pPageView && pPageView->IsLocked()) {
|
| pPageView->TakeOverPage();
|
| return;
|
| }
|
| - delete (CPDF_Page*)page;
|
| + delete pPage;
|
| #endif // PDF_ENABLE_XFA
|
| }
|
|
|
|
|