1 // Copyright 2016 The PDFium Authors 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 <stdint.h> 11 12 #include <memory> 13 14 #include "core/fpdfapi/page/cpdf_pageobjectholder.h" 15 #include "core/fpdfapi/render/cpdf_rendercontext.h" 16 #include "core/fxcrt/fx_coordinates.h" 17 #include "core/fxcrt/unowned_ptr.h" 18 19 class CPDF_RenderOptions; 20 class CPDF_RenderStatus; 21 class CFX_RenderDevice; 22 class PauseIndicatorIface; 23 24 class CPDF_ProgressiveRenderer { 25 public: 26 // Must match FDF_RENDER_* definitions in public/fpdf_progressive.h, but 27 // cannot #include that header. fpdfsdk/fpdf_progressive.cpp has 28 // static_asserts to make sure the two sets of values match. 29 enum Status { 30 kReady, // FPDF_RENDER_READY 31 kToBeContinued, // FPDF_RENDER_TOBECONTINUED 32 kDone, // FPDF_RENDER_DONE 33 kFailed // FPDF_RENDER_FAILED 34 }; 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(PauseIndicatorIface* pPause); 43 void Continue(PauseIndicatorIface* pPause); 44 45 private: 46 // Maximum page objects to render before checking for pause. 47 static constexpr int kStepLimit = 100; 48 49 Status m_Status = kReady; 50 UnownedPtr<CPDF_RenderContext> const m_pContext; 51 UnownedPtr<CFX_RenderDevice> const m_pDevice; 52 UnownedPtr<const CPDF_RenderOptions> const m_pOptions; 53 std::unique_ptr<CPDF_RenderStatus> m_pRenderStatus; 54 CFX_FloatRect m_ClipRect; 55 uint32_t m_LayerIndex = 0; 56 UnownedPtr<CPDF_RenderContext::Layer> m_pCurrentLayer; 57 CPDF_PageObjectHolder::const_iterator m_LastObjectRendered; 58 }; 59 60 #endif // CORE_FPDFAPI_RENDER_CPDF_PROGRESSIVERENDERER_H_ 61