1 // Copyright 2016 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FPDFAPI_RENDER_CPDF_PROGRESSIVERENDERER_H_ 8 #define CORE_FPDFAPI_RENDER_CPDF_PROGRESSIVERENDERER_H_ 9 10 #include <memory> 11 12 #include "core/fpdfapi/page/cpdf_pageobjectlist.h" 13 #include "core/fpdfapi/render/cpdf_rendercontext.h" 14 #include "core/fxcrt/fx_coordinates.h" 15 #include "core/fxcrt/fx_system.h" 16 17 class CPDF_RenderOptions; 18 class CPDF_RenderStatus; 19 class CFX_RenderDevice; 20 class IFX_PauseIndicator; 21 22 class CPDF_ProgressiveRenderer { 23 public: 24 // Must match FDF_RENDER_* definitions in public/fpdf_progressive.h, but 25 // cannot #include that header. fpdfsdk/fpdf_progressive.cpp has 26 // static_asserts to make sure the two sets of values match. 27 enum Status { 28 Ready, // FPDF_RENDER_READY 29 ToBeContinued, // FPDF_RENDER_TOBECONTINUED 30 Done, // FPDF_RENDER_DONE 31 Failed // FPDF_RENDER_FAILED 32 }; 33 ToFPDFStatus(Status status)34 static int ToFPDFStatus(Status status) { return static_cast<int>(status); } 35 36 CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext, 37 CFX_RenderDevice* pDevice, 38 const CPDF_RenderOptions* pOptions); 39 ~CPDF_ProgressiveRenderer(); 40 GetStatus()41 Status GetStatus() const { return m_Status; } 42 void Start(IFX_PauseIndicator* pPause); 43 void Continue(IFX_PauseIndicator* pPause); 44 45 private: 46 // Maximum page objects to render before checking for pause. 47 static const int kStepLimit = 100; 48 49 Status m_Status; 50 UnownedPtr<CPDF_RenderContext> const m_pContext; 51 UnownedPtr<CFX_RenderDevice> const m_pDevice; 52 const CPDF_RenderOptions* const m_pOptions; 53 std::unique_ptr<CPDF_RenderStatus> m_pRenderStatus; 54 CFX_FloatRect m_ClipRect; 55 uint32_t m_LayerIndex; 56 CPDF_RenderContext::Layer* m_pCurrentLayer; 57 CPDF_PageObjectList::iterator m_LastObjectRendered; 58 }; 59 60 #endif // CORE_FPDFAPI_RENDER_CPDF_PROGRESSIVERENDERER_H_ 61