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_pageobjectholder.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 PauseIndicatorIface; 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 kReady, // FPDF_RENDER_READY 29 kToBeContinued, // FPDF_RENDER_TOBECONTINUED 30 kDone, // FPDF_RENDER_DONE 31 kFailed // FPDF_RENDER_FAILED 32 }; 33 34 CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext, 35 CFX_RenderDevice* pDevice, 36 const CPDF_RenderOptions* pOptions); 37 ~CPDF_ProgressiveRenderer(); 38 GetStatus()39 Status GetStatus() const { return m_Status; } 40 void Start(PauseIndicatorIface* pPause); 41 void Continue(PauseIndicatorIface* pPause); 42 43 private: 44 // Maximum page objects to render before checking for pause. 45 static const int kStepLimit = 100; 46 47 Status m_Status = kReady; 48 UnownedPtr<CPDF_RenderContext> const m_pContext; 49 UnownedPtr<CFX_RenderDevice> const m_pDevice; 50 const CPDF_RenderOptions* const m_pOptions; 51 std::unique_ptr<CPDF_RenderStatus> m_pRenderStatus; 52 CFX_FloatRect m_ClipRect; 53 uint32_t m_LayerIndex = 0; 54 CPDF_RenderContext::Layer* m_pCurrentLayer = nullptr; 55 CPDF_PageObjectHolder::const_iterator m_LastObjectRendered; 56 }; 57 58 #endif // CORE_FPDFAPI_RENDER_CPDF_PROGRESSIVERENDERER_H_ 59