Replace CFWL_EditTP dependence on fxfa/ with new AdapaterInterface call.
Removes 4 circular include directives as a result.
Make XFA_ThemeGetOuterWidget() private to its cpp file.
Change-Id: Idcd6f7ae2ee4793738566ce5b4c64d003e72eaa9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55170
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/cfwl_widget.cpp b/xfa/fwl/cfwl_widget.cpp
index a6ab965..0c3dee3 100644
--- a/xfa/fwl/cfwl_widget.cpp
+++ b/xfa/fwl/cfwl_widget.cpp
@@ -200,6 +200,13 @@
return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Child);
}
+CFWL_Widget* CFWL_Widget::GetOutmost() const {
+ CFWL_Widget* pOuter = const_cast<CFWL_Widget*>(this);
+ while (pOuter->GetOuter())
+ pOuter = pOuter->GetOuter();
+ return pOuter;
+}
+
CFX_RectF CFWL_Widget::GetEdgeRect() const {
CFX_RectF rtEdge(0, 0, m_pProperties->m_rtWidget.width,
m_pProperties->m_rtWidget.height);
diff --git a/xfa/fwl/cfwl_widget.h b/xfa/fwl/cfwl_widget.h
index 3c15c69..28a3aa3 100644
--- a/xfa/fwl/cfwl_widget.h
+++ b/xfa/fwl/cfwl_widget.h
@@ -55,6 +55,7 @@
virtual ~AdapterIface() {}
virtual CFX_Matrix GetRotateMatrix() = 0;
virtual void DisplayCaret(bool bVisible, const CFX_RectF* pRtAnchor) = 0;
+ virtual void GetBorderColorAndThickness(FX_ARGB* cr, float* fWidth) = 0;
};
~CFWL_Widget() override;
@@ -92,6 +93,7 @@
CFWL_Widget* GetOwner() { return m_pWidgetMgr->GetOwnerWidget(this); }
CFWL_Widget* GetOuter() const { return m_pOuter; }
+ CFWL_Widget* GetOutmost() const;
void ModifyStyles(uint32_t dwStylesAdded, uint32_t dwStylesRemoved);
uint32_t GetStylesEx() const;
diff --git a/xfa/fwl/theme/cfwl_edittp.cpp b/xfa/fwl/theme/cfwl_edittp.cpp
index 2832fc0..ff8501e 100644
--- a/xfa/fwl/theme/cfwl_edittp.cpp
+++ b/xfa/fwl/theme/cfwl_edittp.cpp
@@ -9,32 +9,20 @@
#include "xfa/fwl/cfwl_edit.h"
#include "xfa/fwl/cfwl_themebackground.h"
#include "xfa/fwl/cfwl_widget.h"
-#include "xfa/fxfa/cxfa_ffwidget.h"
-#include "xfa/fxfa/cxfa_fwltheme.h"
-#include "xfa/fxfa/parser/cxfa_border.h"
-#include "xfa/fxfa/parser/cxfa_edge.h"
#include "xfa/fxgraphics/cxfa_gecolor.h"
#include "xfa/fxgraphics/cxfa_gepath.h"
-CFWL_EditTP::CFWL_EditTP() {}
+CFWL_EditTP::CFWL_EditTP() = default;
-CFWL_EditTP::~CFWL_EditTP() {}
+CFWL_EditTP::~CFWL_EditTP() = default;
void CFWL_EditTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
if (CFWL_Part::CombTextLine == pParams.m_iPart) {
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams.m_pWidget);
- ASSERT(pWidget->GetNode()->IsWidgetReady());
-
- CXFA_Border* borderUI = pWidget->GetNode()->GetUIBorder();
+ CFWL_Widget::AdapterIface* pWidget =
+ pParams.m_pWidget->GetOutmost()->GetFFWidget();
FX_ARGB cr = 0xFF000000;
float fWidth = 1.0f;
- if (borderUI) {
- CXFA_Edge* edge = borderUI->GetEdgeIfExists(0);
- if (edge) {
- cr = edge->GetColor();
- fWidth = edge->GetThickness();
- }
- }
+ pWidget->GetBorderColorAndThickness(&cr, &fWidth);
pParams.m_pGraphics->SetStrokeColor(CXFA_GEColor(cr));
pParams.m_pGraphics->SetLineWidth(fWidth);
pParams.m_pGraphics->StrokePath(pParams.m_pPath.Get(), &pParams.m_matrix);
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index acd74d5..8855738 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -28,6 +28,7 @@
#include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
#include "xfa/fxfa/parser/cxfa_border.h"
#include "xfa/fxfa/parser/cxfa_box.h"
+#include "xfa/fxfa/parser/cxfa_edge.h"
#include "xfa/fxfa/parser/cxfa_image.h"
#include "xfa/fxfa/parser/cxfa_margin.h"
#include "xfa/fxfa/parser/cxfa_node.h"
@@ -557,6 +558,20 @@
pDocEnvironment->DisplayCaret(this, bVisible, pRtAnchor);
}
+void CXFA_FFWidget::GetBorderColorAndThickness(FX_ARGB* cr, float* fWidth) {
+ ASSERT(GetNode()->IsWidgetReady());
+ CXFA_Border* borderUI = GetNode()->GetUIBorder();
+ if (!borderUI)
+ return;
+
+ CXFA_Edge* edge = borderUI->GetEdgeIfExists(0);
+ if (!edge)
+ return;
+
+ *cr = edge->GetColor();
+ *fWidth = edge->GetThickness();
+}
+
bool CXFA_FFWidget::IsLayoutRectEmpty() {
CFX_RectF rtLayout = GetRectWithoutRotate();
return rtLayout.width < 0.1f && rtLayout.height < 0.1f;
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index 58ebb66..48d9eed 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -73,6 +73,7 @@
// CFWL_Widget::AdapterIface:
CFX_Matrix GetRotateMatrix() override;
void DisplayCaret(bool bVisible, const CFX_RectF* pRtAnchor) override;
+ void GetBorderColorAndThickness(FX_ARGB* cr, float* fWidth) override;
virtual CFX_RectF GetBBox(FocusOption focus);
virtual void RenderWidget(CXFA_Graphics* pGS,
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index 0e87554..f0a48c8 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -36,15 +36,13 @@
const float kLineHeight = 12.0f;
-} // namespace
-
CXFA_FFWidget* XFA_ThemeGetOuterWidget(CFWL_Widget* pWidget) {
- CFWL_Widget* pOuter = pWidget;
- while (pOuter && pOuter->GetOuter())
- pOuter = pOuter->GetOuter();
+ CFWL_Widget* pOuter = pWidget ? pWidget->GetOutmost() : nullptr;
return pOuter ? static_cast<CXFA_FFWidget*>(pOuter->GetFFWidget()) : nullptr;
}
+} // namespace
+
CXFA_FWLTheme::CXFA_FWLTheme(CXFA_FFApp* pApp)
: m_pCheckBoxTP(pdfium::MakeUnique<CFWL_CheckBoxTP>()),
m_pListBoxTP(pdfium::MakeUnique<CFWL_ListBoxTP>()),
diff --git a/xfa/fxfa/cxfa_fwltheme.h b/xfa/fxfa/cxfa_fwltheme.h
index c52e962..11f2584 100644
--- a/xfa/fxfa/cxfa_fwltheme.h
+++ b/xfa/fxfa/cxfa_fwltheme.h
@@ -67,6 +67,4 @@
CFX_RectF m_Rect;
};
-CXFA_FFWidget* XFA_ThemeGetOuterWidget(CFWL_Widget* pWidget);
-
#endif // XFA_FXFA_CXFA_FWLTHEME_H_