48 if (!m_pCurrentLayer) {
49 if (m_LayerIndex >= m_pContext->CountLayers()) {
53 m_pCurrentLayer = m_pContext->GetLayer(m_LayerIndex);
54 m_LastObjectRendered = m_pCurrentLayer->GetObjectHolder()->end();
56 std::make_unique<CPDF_RenderStatus>(m_pContext, m_pDevice);
58 m_pRenderStatus->SetOptions(*m_pOptions);
59 m_pRenderStatus->SetTransparency(
60 m_pCurrentLayer->GetObjectHolder()->GetTransparency());
61 m_pRenderStatus->Initialize(
nullptr,
nullptr);
62 m_pDevice->SaveState();
63 m_ClipRect = m_pCurrentLayer->GetMatrix().GetInverse().TransformRect(
64 CFX_FloatRect(m_pDevice->GetClipBox()));
66 CPDF_PageObjectHolder::const_iterator iter;
67 CPDF_PageObjectHolder::const_iterator iterEnd =
68 m_pCurrentLayer->GetObjectHolder()->end();
69 if (m_LastObjectRendered != iterEnd) {
70 iter = m_LastObjectRendered;
73 iter = m_pCurrentLayer->GetObjectHolder()->begin();
75 int nObjsToGo = kStepLimit;
77 while (iter != iterEnd) {
83 if (m_pOptions->GetOptions().bBreakForMasks && pCurObj->IsImage() &&
84 pCurObj->AsImage()->GetImage()->IsMask()) {
86 if (m_pDevice->GetDeviceType() == DeviceType::kPrinter) {
87 m_LastObjectRendered = iter;
88 m_pRenderStatus->ProcessClipPath(pCurObj->clip_path(),
89 m_pCurrentLayer->GetMatrix());
95 if (m_pRenderStatus->ContinueSingleObject(
96 pCurObj, m_pCurrentLayer->GetMatrix(), pPause)) {
99 if (pCurObj->IsImage() && m_pRenderStatus->GetRenderOptions()
101 .bLimitedImageCache) {
102 m_pContext->GetPageCache()->CacheOptimization(
103 m_pRenderStatus->GetRenderOptions().GetCacheSizeLimit());
110 m_LastObjectRendered = iter;
111 if (nObjsToGo == 0) {
114 nObjsToGo = kStepLimit;
117 if (is_mask && iter != iterEnd)
120 if (m_pCurrentLayer->GetObjectHolder()->GetParseState() ==
121 CPDF_PageObjectHolder::ParseState::kParsed) {
122 m_pRenderStatus.reset();
123 m_pDevice->RestoreState(
false);
124 m_pCurrentLayer =
nullptr;
128 }
else if (is_mask) {
131 m_pCurrentLayer->GetObjectHolder()->ContinueParse(pPause);
132 if (m_pCurrentLayer->GetObjectHolder()->GetParseState() !=
133 CPDF_PageObjectHolder::ParseState::kParsed) {
const CFX_FloatRect & GetRect() const
virtual bool IsForm() const
virtual bool IsShading() const