From 32c70815316672091946be88e5941089c359d151 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 16 Feb 2016 17:15:32 -0800 Subject: Split CPDF_PageObjectHolder off from CPDF_PageObjectList Eventually, we're going to expose an iterator over CPDF_PageObjectList that we don't want to be inherited by the CPDF_PageObjectHolder sub-classes: page and form. Also, the operations that the object holder performs dealing with inquiring about masks and such seem beyond the scope of what a list would provide. Hence the "Holder" name. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1701073002 . --- core/src/fpdfapi/fpdf_render/fpdf_render.cpp | 42 +++++++++++++++------------- 1 file changed, 23 insertions(+), 19 deletions(-) (limited to 'core/src/fpdfapi/fpdf_render/fpdf_render.cpp') diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp index 0ea941a1e6..0023ee92de 100644 --- a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp +++ b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp @@ -237,17 +237,19 @@ FX_BOOL CPDF_RenderStatus::Initialize(CPDF_RenderContext* pContext, m_Transparency = transparency; return TRUE; } -void CPDF_RenderStatus::RenderObjectList(const CPDF_PageObjectList* pObjs, - const CFX_Matrix* pObj2Device) { +void CPDF_RenderStatus::RenderObjectList( + const CPDF_PageObjectHolder* pObjectHolder, + const CFX_Matrix* pObj2Device) { CFX_FloatRect clip_rect = m_pDevice->GetClipBox(); CFX_Matrix device2object; device2object.SetReverse(*pObj2Device); device2object.TransformRect(clip_rect); int index = 0; - FX_POSITION pos = pObjs->GetFirstObjectPosition(); + FX_POSITION pos = pObjectHolder->GetPageObjectList()->GetHeadPosition(); while (pos) { index++; - CPDF_PageObject* pCurObj = pObjs->GetNextObject(pos); + CPDF_PageObject* pCurObj = + pObjectHolder->GetPageObjectList()->GetNextObject(pos); if (pCurObj == m_pStopObj) { m_bStopped = TRUE; return; @@ -971,10 +973,10 @@ CPDF_RenderContext::CPDF_RenderContext(CPDF_Document* pDoc, CPDF_RenderContext::~CPDF_RenderContext() {} -void CPDF_RenderContext::AppendLayer(CPDF_PageObjectList* pObjs, +void CPDF_RenderContext::AppendLayer(CPDF_PageObjectHolder* pObjectHolder, const CFX_Matrix* pObject2Device) { Layer* pLayer = m_Layers.AddSpace(); - pLayer->m_pObjectList = pObjs; + pLayer->m_pObjectHolder = pObjectHolder; if (pObject2Device) { pLayer->m_Matrix = *pObject2Device; } else { @@ -999,9 +1001,9 @@ void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, FinalMatrix.Concat(*pLastMatrix); CPDF_RenderStatus status; status.Initialize(this, pDevice, pLastMatrix, pStopObj, NULL, NULL, - pOptions, pLayer->m_pObjectList->m_Transparency, FALSE, - NULL); - status.RenderObjectList(pLayer->m_pObjectList, &FinalMatrix); + pOptions, pLayer->m_pObjectHolder->m_Transparency, + FALSE, NULL); + status.RenderObjectList(pLayer->m_pObjectHolder, &FinalMatrix); if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) { m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); } @@ -1012,8 +1014,8 @@ void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, } else { CPDF_RenderStatus status; status.Initialize(this, pDevice, NULL, pStopObj, NULL, NULL, pOptions, - pLayer->m_pObjectList->m_Transparency, FALSE, NULL); - status.RenderObjectList(pLayer->m_pObjectList, &pLayer->m_Matrix); + pLayer->m_pObjectHolder->m_Transparency, FALSE, NULL); + status.RenderObjectList(pLayer->m_pObjectHolder, &pLayer->m_Matrix); if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) { m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); } @@ -1064,7 +1066,7 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { m_pRenderStatus.reset(new CPDF_RenderStatus()); m_pRenderStatus->Initialize( m_pContext, m_pDevice, NULL, NULL, NULL, NULL, m_pOptions, - m_pCurrentLayer->m_pObjectList->m_Transparency, FALSE, NULL); + m_pCurrentLayer->m_pObjectHolder->m_Transparency, FALSE, NULL); m_pDevice->SaveState(); m_ClipRect = m_pDevice->GetClipBox(); CFX_Matrix device2object; @@ -1074,14 +1076,16 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { FX_POSITION pos; if (m_LastObjectRendered) { pos = m_LastObjectRendered; - m_pCurrentLayer->m_pObjectList->GetNextObject(pos); + m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->GetNextObject(pos); } else { - pos = m_pCurrentLayer->m_pObjectList->GetFirstObjectPosition(); + pos = m_pCurrentLayer->m_pObjectHolder->GetPageObjectList() + ->GetHeadPosition(); } int nObjsToGo = kStepLimit; while (pos) { CPDF_PageObject* pCurObj = - m_pCurrentLayer->m_pObjectList->GetObjectAt(pos); + m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->GetObjectAt( + pos); if (pCurObj && pCurObj->m_Left <= m_ClipRect.right && pCurObj->m_Right >= m_ClipRect.left && pCurObj->m_Bottom <= m_ClipRect.top && @@ -1108,9 +1112,9 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { return; nObjsToGo = kStepLimit; } - m_pCurrentLayer->m_pObjectList->GetNextObject(pos); + m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->GetNextObject(pos); } - if (m_pCurrentLayer->m_pObjectList->IsParsed()) { + if (m_pCurrentLayer->m_pObjectHolder->IsParsed()) { m_pRenderStatus.reset(); m_pDevice->RestoreState(); m_pCurrentLayer = nullptr; @@ -1120,8 +1124,8 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { return; } } else { - m_pCurrentLayer->m_pObjectList->ContinueParse(pPause); - if (!m_pCurrentLayer->m_pObjectList->IsParsed()) + m_pCurrentLayer->m_pObjectHolder->ContinueParse(pPause); + if (!m_pCurrentLayer->m_pObjectHolder->IsParsed()) return; } } -- cgit v1.2.3