| OLD | NEW |
| 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/fpdf_progressive.h" | 7 #include "public/fpdf_progressive.h" |
| 8 | 8 |
| 9 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" | 9 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" |
| 10 #include "core/fpdfapi/fpdf_render/include/cpdf_progressiverenderer.h" | 10 #include "core/fpdfapi/fpdf_render/include/cpdf_progressiverenderer.h" |
| 11 #include "core/fpdfapi/include/cpdf_pagerendercontext.h" |
| 12 #include "core/fxcrt/include/fx_memory.h" |
| 11 #include "core/fxge/include/fx_ge.h" | 13 #include "core/fxge/include/fx_ge.h" |
| 12 #include "fpdfsdk/include/fsdk_define.h" | 14 #include "fpdfsdk/include/fsdk_define.h" |
| 13 #include "fpdfsdk/include/fsdk_rendercontext.h" | 15 #include "fpdfsdk/include/fsdk_pauseadapter.h" |
| 14 #include "public/fpdfview.h" | 16 #include "public/fpdfview.h" |
| 15 | 17 |
| 16 // These checks are here because core/ and public/ cannot depend on each other. | 18 // These checks are here because core/ and public/ cannot depend on each other. |
| 17 static_assert(CPDF_ProgressiveRenderer::Ready == FPDF_RENDER_READER, | 19 static_assert(CPDF_ProgressiveRenderer::Ready == FPDF_RENDER_READER, |
| 18 "CPDF_ProgressiveRenderer::Ready value mismatch"); | 20 "CPDF_ProgressiveRenderer::Ready value mismatch"); |
| 19 static_assert(CPDF_ProgressiveRenderer::ToBeContinued == | 21 static_assert(CPDF_ProgressiveRenderer::ToBeContinued == |
| 20 FPDF_RENDER_TOBECOUNTINUED, | 22 FPDF_RENDER_TOBECOUNTINUED, |
| 21 "CPDF_ProgressiveRenderer::ToBeContinued value mismatch"); | 23 "CPDF_ProgressiveRenderer::ToBeContinued value mismatch"); |
| 22 static_assert(CPDF_ProgressiveRenderer::Done == FPDF_RENDER_DONE, | 24 static_assert(CPDF_ProgressiveRenderer::Done == FPDF_RENDER_DONE, |
| 23 "CPDF_ProgressiveRenderer::Done value mismatch"); | 25 "CPDF_ProgressiveRenderer::Done value mismatch"); |
| 24 static_assert(CPDF_ProgressiveRenderer::Failed == FPDF_RENDER_FAILED, | 26 static_assert(CPDF_ProgressiveRenderer::Failed == FPDF_RENDER_FAILED, |
| 25 "CPDF_ProgressiveRenderer::Failed value mismatch"); | 27 "CPDF_ProgressiveRenderer::Failed value mismatch"); |
| 26 | 28 |
| 27 DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap, | 29 DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap, |
| 28 FPDF_PAGE page, | 30 FPDF_PAGE page, |
| 29 int start_x, | 31 int start_x, |
| 30 int start_y, | 32 int start_y, |
| 31 int size_x, | 33 int size_x, |
| 32 int size_y, | 34 int size_y, |
| 33 int rotate, | 35 int rotate, |
| 34 int flags, | 36 int flags, |
| 35 IFSDK_PAUSE* pause) { | 37 IFSDK_PAUSE* pause) { |
| 36 if (!bitmap || !pause || pause->version != 1) | 38 if (!bitmap || !pause || pause->version != 1) |
| 37 return FPDF_RENDER_FAILED; | 39 return FPDF_RENDER_FAILED; |
| 38 | 40 |
| 39 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 41 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 40 if (!pPage) | 42 if (!pPage) |
| 41 return FPDF_RENDER_FAILED; | 43 return FPDF_RENDER_FAILED; |
| 42 | 44 |
| 43 CRenderContext* pContext = new CRenderContext; | 45 CPDF_PageRenderContext* pContext = new CPDF_PageRenderContext; |
| 44 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>(pContext)); | 46 pPage->SetRenderContext(WrapUnique(pContext)); |
| 45 CFX_FxgeDevice* pDevice = new CFX_FxgeDevice; | 47 CFX_FxgeDevice* pDevice = new CFX_FxgeDevice; |
| 46 pContext->m_pDevice = pDevice; | 48 pContext->m_pDevice.reset(pDevice); |
| 47 CFX_DIBitmap* pBitmap = CFXBitmapFromFPDFBitmap(bitmap); | 49 CFX_DIBitmap* pBitmap = CFXBitmapFromFPDFBitmap(bitmap); |
| 48 pDevice->Attach(pBitmap, !!(flags & FPDF_REVERSE_BYTE_ORDER), nullptr, false); | 50 pDevice->Attach(pBitmap, !!(flags & FPDF_REVERSE_BYTE_ORDER), nullptr, false); |
| 49 | 51 |
| 50 IFSDK_PAUSE_Adapter IPauseAdapter(pause); | 52 IFSDK_PAUSE_Adapter IPauseAdapter(pause); |
| 51 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, | 53 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, |
| 52 rotate, flags, FALSE, &IPauseAdapter); | 54 rotate, flags, FALSE, &IPauseAdapter); |
| 53 | 55 |
| 54 if (pContext->m_pRenderer) { | 56 if (pContext->m_pRenderer) { |
| 55 return CPDF_ProgressiveRenderer::ToFPDFStatus( | 57 return CPDF_ProgressiveRenderer::ToFPDFStatus( |
| 56 pContext->m_pRenderer->GetStatus()); | 58 pContext->m_pRenderer->GetStatus()); |
| 57 } | 59 } |
| 58 return FPDF_RENDER_FAILED; | 60 return FPDF_RENDER_FAILED; |
| 59 } | 61 } |
| 60 | 62 |
| 61 DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page, | 63 DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page, |
| 62 IFSDK_PAUSE* pause) { | 64 IFSDK_PAUSE* pause) { |
| 63 if (!pause || pause->version != 1) | 65 if (!pause || pause->version != 1) |
| 64 return FPDF_RENDER_FAILED; | 66 return FPDF_RENDER_FAILED; |
| 65 | 67 |
| 66 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 68 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 67 if (!pPage) | 69 if (!pPage) |
| 68 return FPDF_RENDER_FAILED; | 70 return FPDF_RENDER_FAILED; |
| 69 | 71 |
| 70 CRenderContext* pContext = | 72 CPDF_PageRenderContext* pContext = pPage->GetRenderContext(); |
| 71 static_cast<CRenderContext*>(pPage->GetRenderContext()); | |
| 72 if (pContext && pContext->m_pRenderer) { | 73 if (pContext && pContext->m_pRenderer) { |
| 73 IFSDK_PAUSE_Adapter IPauseAdapter(pause); | 74 IFSDK_PAUSE_Adapter IPauseAdapter(pause); |
| 74 pContext->m_pRenderer->Continue(&IPauseAdapter); | 75 pContext->m_pRenderer->Continue(&IPauseAdapter); |
| 75 return CPDF_ProgressiveRenderer::ToFPDFStatus( | 76 return CPDF_ProgressiveRenderer::ToFPDFStatus( |
| 76 pContext->m_pRenderer->GetStatus()); | 77 pContext->m_pRenderer->GetStatus()); |
| 77 } | 78 } |
| 78 return FPDF_RENDER_FAILED; | 79 return FPDF_RENDER_FAILED; |
| 79 } | 80 } |
| 80 | 81 |
| 81 DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page) { | 82 DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page) { |
| 82 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 83 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 83 if (!pPage) | 84 if (!pPage) |
| 84 return; | 85 return; |
| 85 | 86 |
| 86 CRenderContext* pContext = | 87 CPDF_PageRenderContext* pContext = pPage->GetRenderContext(); |
| 87 static_cast<CRenderContext*>(pPage->GetRenderContext()); | |
| 88 if (!pContext) | 88 if (!pContext) |
| 89 return; | 89 return; |
| 90 | 90 |
| 91 pContext->m_pDevice->RestoreState(false); | 91 pContext->m_pDevice->RestoreState(false); |
| 92 pPage->SetRenderContext(std::unique_ptr<CFX_Deletable>()); | 92 pPage->SetRenderContext(std::unique_ptr<CPDF_PageRenderContext>()); |
| 93 } | 93 } |
| OLD | NEW |