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 |