Break direct dependence between fpdfsdk and fxcodec.
Introduce a CPDF_WindowsRenderDevice at the fpdfapi/render layer to
tie together CFX_WindowsRenderDevice and the various fxcodec classes
that it needs.
Change-Id: I80e61d7baecb9031df60f298e89f0a0390869e43
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58570
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/BUILD.gn b/core/fpdfapi/render/BUILD.gn
index 713abca..bba7cb9 100644
--- a/core/fpdfapi/render/BUILD.gn
+++ b/core/fpdfapi/render/BUILD.gn
@@ -51,6 +51,12 @@
"../page",
"../parser",
]
+ if (is_win) {
+ sources += [
+ "cpdf_windowsrenderdevice.cpp",
+ "cpdf_windowsrenderdevice.h",
+ ]
+ }
visibility = [ "../../../*" ]
}
diff --git a/core/fpdfapi/render/cpdf_windowsrenderdevice.cpp b/core/fpdfapi/render/cpdf_windowsrenderdevice.cpp
new file mode 100644
index 0000000..8e1f212
--- /dev/null
+++ b/core/fpdfapi/render/cpdf_windowsrenderdevice.cpp
@@ -0,0 +1,26 @@
+// Copyright 2019 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "core/fpdfapi/render/cpdf_windowsrenderdevice.h"
+
+#include "core/fxcodec/basic/basicmodule.h"
+#include "core/fxcodec/fax/faxmodule.h"
+#include "core/fxcodec/flate/flatemodule.h"
+#include "core/fxcodec/jpeg/jpegmodule.h"
+#include "core/fxge/win32/cfx_psrenderer.h"
+
+namespace {
+
+constexpr EncoderIface kEncoderIface = {
+ BasicModule::A85Encode, FaxModule::FaxEncode, FlateModule::Encode,
+ JpegModule::JpegEncode, BasicModule::RunLengthEncode};
+
+} // namespace
+
+CPDF_WindowsRenderDevice::CPDF_WindowsRenderDevice(HDC hDC)
+ : CFX_WindowsRenderDevice(hDC, &kEncoderIface) {}
+
+CPDF_WindowsRenderDevice::~CPDF_WindowsRenderDevice() = default;
diff --git a/core/fpdfapi/render/cpdf_windowsrenderdevice.h b/core/fpdfapi/render/cpdf_windowsrenderdevice.h
new file mode 100644
index 0000000..51d150e
--- /dev/null
+++ b/core/fpdfapi/render/cpdf_windowsrenderdevice.h
@@ -0,0 +1,18 @@
+// Copyright 2019 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FPDFAPI_RENDER_CPDF_WINDOWSRENDERDEVICE_H_
+#define CORE_FPDFAPI_RENDER_CPDF_WINDOWSRENDERDEVICE_H_
+
+#include "core/fxge/cfx_windowsrenderdevice.h"
+
+class CPDF_WindowsRenderDevice final : public CFX_WindowsRenderDevice {
+ public:
+ explicit CPDF_WindowsRenderDevice(HDC hDC);
+ ~CPDF_WindowsRenderDevice() override;
+};
+
+#endif // CORE_FPDFAPI_RENDER_CPDF_WINDOWSRENDERDEVICE_H_
diff --git a/core/fxge/cfx_windowsrenderdevice.h b/core/fxge/cfx_windowsrenderdevice.h
index d2ca8a0..3d96207 100644
--- a/core/fxge/cfx_windowsrenderdevice.h
+++ b/core/fxge/cfx_windowsrenderdevice.h
@@ -34,7 +34,7 @@
#endif
extern WindowsPrintMode g_pdfium_print_mode;
-class CFX_WindowsRenderDevice final : public CFX_RenderDevice {
+class CFX_WindowsRenderDevice : public CFX_RenderDevice {
public:
CFX_WindowsRenderDevice(HDC hDC, const EncoderIface* pEncoderIface);
~CFX_WindowsRenderDevice() override;
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index 0badb3c..9d9993b 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -84,7 +84,6 @@
"../core/fpdfapi/render",
"../core/fpdfdoc",
"../core/fpdftext",
- "../core/fxcodec",
"../core/fxcrt",
"../core/fxge",
"../fxjs",
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index c215a93..5539fbc 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -54,12 +54,7 @@
#endif // PDF_ENABLE_XFA
#if defined(OS_WIN)
-#include "core/fxcodec/basic/basicmodule.h"
-#include "core/fxcodec/fax/faxmodule.h"
-#include "core/fxcodec/flate/flatemodule.h"
-#include "core/fxcodec/jpeg/jpegmodule.h"
-#include "core/fxge/cfx_windowsrenderdevice.h"
-#include "core/fxge/win32/cfx_psrenderer.h"
+#include "core/fpdfapi/render/cpdf_windowsrenderdevice.h"
#include "public/fpdf_edit.h"
// These checks are here because core/ and public/ cannot depend on each other.
@@ -83,12 +78,6 @@
bool g_bLibraryInitialized = false;
-#if defined(OS_WIN)
-constexpr EncoderIface kEncoderIface = {
- BasicModule::A85Encode, FaxModule::FaxEncode, FlateModule::Encode,
- JpegModule::JpegEncode, BasicModule::RunLengthEncode};
-#endif // defined(OS_WIN)
-
void RenderPageImpl(CPDF_PageRenderContext* pContext,
CPDF_Page* pPage,
const CFX_Matrix& matrix,
@@ -563,8 +552,7 @@
pContext->m_pOptions->GetOptions().bBreakForMasks = true;
}
} else {
- pContext->m_pDevice =
- pdfium::MakeUnique<CFX_WindowsRenderDevice>(dc, &kEncoderIface);
+ pContext->m_pDevice = pdfium::MakeUnique<CPDF_WindowsRenderDevice>(dc);
}
RenderPageWithContext(pContext, page, start_x, start_y, size_x, size_y,
@@ -592,8 +580,7 @@
pOwnedContext = pdfium::MakeUnique<CPDF_PageRenderContext>();
pContext = pOwnedContext.get();
pPage->SetRenderContext(std::move(pOwnedContext));
- pContext->m_pDevice =
- pdfium::MakeUnique<CFX_WindowsRenderDevice>(dc, &kEncoderIface);
+ pContext->m_pDevice = pdfium::MakeUnique<CPDF_WindowsRenderDevice>(dc);
pContext->m_pOptions = pdfium::MakeUnique<CPDF_RenderOptions>();
pContext->m_pOptions->GetOptions().bBreakForMasks = true;
@@ -610,7 +597,7 @@
pContext->m_pRenderer->Continue(nullptr);
}
} else if (bNewBitmap) {
- CFX_WindowsRenderDevice WinDC(dc, &kEncoderIface);
+ CPDF_WindowsRenderDevice WinDC(dc);
bool bitsStretched = false;
if (WinDC.GetDeviceType() == DeviceType::kPrinter) {
auto pDst = pdfium::MakeRetain<CFX_DIBitmap>();