Remove dependence of top-level fpdfsdk on xfa/fxgraphics
Change-Id: Iab197b69ef4d9971fdc8000b9a1c679c7fdaf447
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59030
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index 3e316aa..f5c4aa5 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -104,10 +104,8 @@
deps += [
"../fxbarcode",
- "../xfa/fwl",
"../xfa/fxfa",
"../xfa/fxfa/parser",
- "../xfa/fxgraphics",
"fpdfxfa",
]
allow_circular_includes_from += [ "fpdfxfa" ]
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index f272df6..70bbf32 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -28,9 +28,6 @@
#include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
#include "xfa/fxfa/cxfa_ffdocview.h"
#include "xfa/fxfa/cxfa_ffpageview.h"
-#include "xfa/fxfa/cxfa_ffwidgethandler.h"
-#include "xfa/fxfa/cxfa_rendercontext.h"
-#include "xfa/fxgraphics/cxfa_graphics.h"
#endif // PDF_ENABLE_XFA
CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_FormFillEnvironment* pFormFillEnv,
@@ -78,26 +75,7 @@
auto* pContext = static_cast<CPDFXFA_Context*>(pPage->GetDocumentExtension());
if (pContext->GetFormType() == FormType::kXFAFull) {
- CFX_RectF rectClip(
- static_cast<float>(pClip.left), static_cast<float>(pClip.top),
- static_cast<float>(pClip.Width()), static_cast<float>(pClip.Height()));
-
- CXFA_Graphics gs(pDevice);
- gs.SetClipRect(rectClip);
-
- CXFA_FFPageView* xfaView = pPage->GetXFAPageView();
- CXFA_RenderContext renderContext(xfaView, rectClip, mtUser2Device);
- renderContext.DoRender(&gs);
-
- CXFA_FFDocView* docView = xfaView->GetDocView();
- if (!docView)
- return;
- CPDFSDK_Annot* annot = GetFocusAnnot();
- if (!annot)
- return;
- // Render the focus widget
- docView->GetWidgetHandler()->RenderWidget(annot->GetXFAWidget(), &gs,
- mtUser2Device, false);
+ pPage->DrawFocusAnnot(pDevice, GetFocusAnnot(), mtUser2Device, pClip);
return;
}
#endif // PDF_ENABLE_XFA
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index ab0ed8e..45ed01e 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -17,6 +17,9 @@
#include "third_party/base/ptr_util.h"
#include "xfa/fxfa/cxfa_ffdocview.h"
#include "xfa/fxfa/cxfa_ffpageview.h"
+#include "xfa/fxfa/cxfa_ffwidgethandler.h"
+#include "xfa/fxfa/cxfa_rendercontext.h"
+#include "xfa/fxgraphics/cxfa_graphics.h"
CPDFXFA_Page::CPDFXFA_Page(CPDFXFA_Context* pContext, int page_index)
: m_pContext(pContext), m_iPageIndex(page_index) {
@@ -192,3 +195,29 @@
return pPageView->GetAnnotByXFAWidget(hNextFocus);
}
+
+void CPDFXFA_Page::DrawFocusAnnot(CFX_RenderDevice* pDevice,
+ CPDFSDK_Annot* pAnnot,
+ const CFX_Matrix& mtUser2Device,
+ const FX_RECT& rtClip) {
+ CFX_RectF rectClip(
+ static_cast<float>(rtClip.left), static_cast<float>(rtClip.top),
+ static_cast<float>(rtClip.Width()), static_cast<float>(rtClip.Height()));
+
+ CXFA_Graphics gs(pDevice);
+ gs.SetClipRect(rectClip);
+
+ CXFA_FFPageView* xfaView = GetXFAPageView();
+ CXFA_RenderContext renderContext(xfaView, rectClip, mtUser2Device);
+ renderContext.DoRender(&gs);
+
+ if (!pAnnot)
+ return;
+
+ CXFA_FFDocView* docView = xfaView->GetDocView();
+ if (!docView)
+ return;
+
+ docView->GetWidgetHandler()->RenderWidget(pAnnot->GetXFAWidget(), &gs,
+ mtUser2Device, false);
+}
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.h b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
index 2d89603..2e68285 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
@@ -16,6 +16,7 @@
#include "core/fxcrt/unowned_ptr.h"
#include "third_party/base/optional.h"
+class CFX_RenderDevice;
class CPDF_Dictionary;
class CPDFSDK_Annot;
class CPDFXFA_Context;
@@ -49,6 +50,10 @@
void SetXFAPageViewIndex(int index) { m_iPageIndex = index; }
CXFA_FFPageView* GetXFAPageView() const;
CPDFSDK_Annot* GetNextXFAAnnot(CPDFSDK_Annot* pSDKAnnot, bool bNext);
+ void DrawFocusAnnot(CFX_RenderDevice* pDevice,
+ CPDFSDK_Annot* pAnnot,
+ const CFX_Matrix& mtUser2Device,
+ const FX_RECT& rtClip);
private:
// Refcounted class.