Make fpdfdoc layer live above all of fpdfapi.
To do this, we need but one tiny virtual API - with just the ability
to delete a class. Then cpdf_pagerendercontext.{cpp,h} can sink down
to the fpdfapi/page module with the other page related code, and
fpdfapi can lose its fpdfdoc dependence entirely.
In turn, we can remove one circular include now that
cpdf_pagerendercontext.h has moved down a directory.
Change-Id: Ifff7555fa6c15f2bc0c74836f0d9cc45825c3089
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55430
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/BUILD.gn b/core/fpdfapi/BUILD.gn
index 50409a5..3f947dd 100644
--- a/core/fpdfapi/BUILD.gn
+++ b/core/fpdfapi/BUILD.gn
@@ -9,12 +9,9 @@
sources = [
"cpdf_modulemgr.cpp",
"cpdf_modulemgr.h",
- "cpdf_pagerendercontext.cpp",
- "cpdf_pagerendercontext.h",
]
configs += [ "../../:pdfium_core_config" ]
deps = [
- "../fpdfdoc",
"../fxcodec",
"../fxcrt",
"../fxge",
@@ -25,6 +22,5 @@
"parser",
"render",
]
- allow_circular_includes_from = [ "page" ]
visibility = [ "../../*" ]
}
diff --git a/core/fpdfapi/page/BUILD.gn b/core/fpdfapi/page/BUILD.gn
index 4fdc543..5478f83 100644
--- a/core/fpdfapi/page/BUILD.gn
+++ b/core/fpdfapi/page/BUILD.gn
@@ -57,6 +57,8 @@
"cpdf_pageobject.h",
"cpdf_pageobjectholder.cpp",
"cpdf_pageobjectholder.h",
+ "cpdf_pagerendercontext.cpp",
+ "cpdf_pagerendercontext.h",
"cpdf_path.cpp",
"cpdf_path.h",
"cpdf_pathobject.cpp",
diff --git a/core/fpdfapi/page/cpdf_page.cpp b/core/fpdfapi/page/cpdf_page.cpp
index 8d25410..d3adfec 100644
--- a/core/fpdfapi/page/cpdf_page.cpp
+++ b/core/fpdfapi/page/cpdf_page.cpp
@@ -10,9 +10,9 @@
#include <utility>
#include "constants/page_object.h"
-#include "core/fpdfapi/cpdf_pagerendercontext.h"
#include "core/fpdfapi/page/cpdf_contentparser.h"
#include "core/fpdfapi/page/cpdf_pageobject.h"
+#include "core/fpdfapi/page/cpdf_pagerendercontext.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_object.h"
diff --git a/core/fpdfapi/cpdf_pagerendercontext.cpp b/core/fpdfapi/page/cpdf_pagerendercontext.cpp
similarity index 86%
rename from core/fpdfapi/cpdf_pagerendercontext.cpp
rename to core/fpdfapi/page/cpdf_pagerendercontext.cpp
index 77d0ea5..a3f75b1 100644
--- a/core/fpdfapi/cpdf_pagerendercontext.cpp
+++ b/core/fpdfapi/page/cpdf_pagerendercontext.cpp
@@ -4,13 +4,12 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-#include "core/fpdfapi/cpdf_pagerendercontext.h"
+#include "core/fpdfapi/page/cpdf_pagerendercontext.h"
#include "core/fpdfapi/render/cpdf_occontext.h"
#include "core/fpdfapi/render/cpdf_progressiverenderer.h"
#include "core/fpdfapi/render/cpdf_rendercontext.h"
#include "core/fpdfapi/render/cpdf_renderoptions.h"
-#include "core/fpdfdoc/cpdf_annotlist.h"
#include "core/fxge/cfx_renderdevice.h"
CPDF_PageRenderContext::CPDF_PageRenderContext() {}
diff --git a/core/fpdfapi/cpdf_pagerendercontext.h b/core/fpdfapi/page/cpdf_pagerendercontext.h
similarity index 70%
rename from core/fpdfapi/cpdf_pagerendercontext.h
rename to core/fpdfapi/page/cpdf_pagerendercontext.h
index 5cbcdb7..f9c89a2 100644
--- a/core/fpdfapi/cpdf_pagerendercontext.h
+++ b/core/fpdfapi/page/cpdf_pagerendercontext.h
@@ -4,13 +4,12 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-#ifndef CORE_FPDFAPI_CPDF_PAGERENDERCONTEXT_H_
-#define CORE_FPDFAPI_CPDF_PAGERENDERCONTEXT_H_
+#ifndef CORE_FPDFAPI_PAGE_CPDF_PAGERENDERCONTEXT_H_
+#define CORE_FPDFAPI_PAGE_CPDF_PAGERENDERCONTEXT_H_
#include <memory>
class CFX_RenderDevice;
-class CPDF_AnnotList;
class CPDF_ProgressiveRenderer;
class CPDF_RenderContext;
class CPDF_RenderOptions;
@@ -18,15 +17,20 @@
// Everything about rendering is put here: for OOM recovery
class CPDF_PageRenderContext {
public:
+ // Context merely manages the lifetime for callers.
+ class AnnotListIface {
+ public:
+ virtual ~AnnotListIface() {}
+ };
CPDF_PageRenderContext();
~CPDF_PageRenderContext();
// Specific destruction order required.
- std::unique_ptr<CPDF_AnnotList> m_pAnnots;
+ std::unique_ptr<AnnotListIface> m_pAnnots;
std::unique_ptr<CPDF_RenderOptions> m_pOptions;
std::unique_ptr<CFX_RenderDevice> m_pDevice;
std::unique_ptr<CPDF_RenderContext> m_pContext;
std::unique_ptr<CPDF_ProgressiveRenderer> m_pRenderer;
};
-#endif // CORE_FPDFAPI_CPDF_PAGERENDERCONTEXT_H_
+#endif // CORE_FPDFAPI_PAGE_CPDF_PAGERENDERCONTEXT_H_
diff --git a/core/fpdfdoc/cpdf_annotlist.h b/core/fpdfdoc/cpdf_annotlist.h
index 49a00e5..6de9952 100644
--- a/core/fpdfdoc/cpdf_annotlist.h
+++ b/core/fpdfdoc/cpdf_annotlist.h
@@ -10,6 +10,7 @@
#include <memory>
#include <vector>
+#include "core/fpdfapi/page/cpdf_pagerendercontext.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/unowned_ptr.h"
@@ -21,10 +22,10 @@
class CPDF_RenderContext;
class CPDF_RenderOptions;
-class CPDF_AnnotList {
+class CPDF_AnnotList : public CPDF_PageRenderContext::AnnotListIface {
public:
explicit CPDF_AnnotList(CPDF_Page* pPage);
- ~CPDF_AnnotList();
+ ~CPDF_AnnotList() override;
void DisplayAnnots(CPDF_Page* pPage,
CPDF_RenderContext* pContext,
diff --git a/fpdfsdk/fpdf_progressive.cpp b/fpdfsdk/fpdf_progressive.cpp
index 6c28b65..6bf9f37 100644
--- a/fpdfsdk/fpdf_progressive.cpp
+++ b/fpdfsdk/fpdf_progressive.cpp
@@ -8,8 +8,8 @@
#include <utility>
-#include "core/fpdfapi/cpdf_pagerendercontext.h"
#include "core/fpdfapi/page/cpdf_page.h"
+#include "core/fpdfapi/page/cpdf_pagerendercontext.h"
#include "core/fpdfapi/render/cpdf_progressiverenderer.h"
#include "core/fxge/cfx_defaultrenderdevice.h"
#include "core/fxge/cfx_renderdevice.h"
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index ddbe833..4819fe0 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -12,8 +12,8 @@
#include "build/build_config.h"
#include "core/fpdfapi/cpdf_modulemgr.h"
-#include "core/fpdfapi/cpdf_pagerendercontext.h"
#include "core/fpdfapi/page/cpdf_page.h"
+#include "core/fpdfapi/page/cpdf_pagerendercontext.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_document.h"
@@ -121,10 +121,12 @@
pContext->m_pContext->AppendLayer(pPage, &matrix);
if (flags & FPDF_ANNOT) {
- pContext->m_pAnnots = pdfium::MakeUnique<CPDF_AnnotList>(pPage);
+ auto pOwnedList = pdfium::MakeUnique<CPDF_AnnotList>(pPage);
+ CPDF_AnnotList* pList = pOwnedList.get();
+ pContext->m_pAnnots = std::move(pOwnedList);
bool bPrinting = pContext->m_pDevice->GetDeviceClass() != FXDC_DISPLAY;
- pContext->m_pAnnots->DisplayAnnots(pPage, pContext->m_pContext.get(),
- bPrinting, &matrix, false, nullptr);
+ pList->DisplayAnnots(pPage, pContext->m_pContext.get(), bPrinting, &matrix,
+ false, nullptr);
}
pContext->m_pRenderer = pdfium::MakeUnique<CPDF_ProgressiveRenderer>(