xref: /aosp_15_r20/external/pdfium/xfa/fxfa/cxfa_fwltheme.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_fwltheme.h"
8*3ac0a46fSAndroid Build Coastguard Worker 
9*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_codepage.h"
10*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fde/cfde_textout.h"
11*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/font/cfgas_fontmgr.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/font/cfgas_gefont.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/font/cfgas_gemodule.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/graphics/cfgas_gecolor.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_barcode.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_caret.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_checkbox.h"
18*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_combobox.h"
19*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_datetimepicker.h"
20*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_edit.h"
21*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_listbox.h"
22*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_monthcalendar.h"
23*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_picturebox.h"
24*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_pushbutton.h"
25*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_scrollbar.h"
26*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_themebackground.h"
27*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_themetext.h"
28*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/theme/cfwl_widgettp.h"
29*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffapp.h"
30*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffwidget.h"
31*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_fontmgr.h"
32*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_para.h"
33*3ac0a46fSAndroid Build Coastguard Worker 
34*3ac0a46fSAndroid Build Coastguard Worker namespace {
35*3ac0a46fSAndroid Build Coastguard Worker 
36*3ac0a46fSAndroid Build Coastguard Worker constexpr const wchar_t* kFWLThemeCalFonts[] = {
37*3ac0a46fSAndroid Build Coastguard Worker     L"Arial",
38*3ac0a46fSAndroid Build Coastguard Worker     L"Courier New",
39*3ac0a46fSAndroid Build Coastguard Worker     L"DejaVu Sans",
40*3ac0a46fSAndroid Build Coastguard Worker };
41*3ac0a46fSAndroid Build Coastguard Worker 
42*3ac0a46fSAndroid Build Coastguard Worker const float kLineHeight = 12.0f;
43*3ac0a46fSAndroid Build Coastguard Worker 
GetOutmostFFWidget(CFWL_Widget * pWidget)44*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* GetOutmostFFWidget(CFWL_Widget* pWidget) {
45*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* pOuter = pWidget ? pWidget->GetOutmost() : nullptr;
46*3ac0a46fSAndroid Build Coastguard Worker   return pOuter ? static_cast<CXFA_FFWidget*>(pOuter->GetAdapterIface())
47*3ac0a46fSAndroid Build Coastguard Worker                 : nullptr;
48*3ac0a46fSAndroid Build Coastguard Worker }
49*3ac0a46fSAndroid Build Coastguard Worker 
50*3ac0a46fSAndroid Build Coastguard Worker }  // namespace
51*3ac0a46fSAndroid Build Coastguard Worker 
CXFA_FWLTheme(cppgc::Heap * pHeap,CXFA_FFApp * pApp)52*3ac0a46fSAndroid Build Coastguard Worker CXFA_FWLTheme::CXFA_FWLTheme(cppgc::Heap* pHeap, CXFA_FFApp* pApp)
53*3ac0a46fSAndroid Build Coastguard Worker     : IFWL_ThemeProvider(pHeap),
54*3ac0a46fSAndroid Build Coastguard Worker       m_pTextOut(std::make_unique<CFDE_TextOut>()),
55*3ac0a46fSAndroid Build Coastguard Worker       m_pApp(pApp) {}
56*3ac0a46fSAndroid Build Coastguard Worker 
57*3ac0a46fSAndroid Build Coastguard Worker CXFA_FWLTheme::~CXFA_FWLTheme() = default;
58*3ac0a46fSAndroid Build Coastguard Worker 
PreFinalize()59*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FWLTheme::PreFinalize() {
60*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut.reset();
61*3ac0a46fSAndroid Build Coastguard Worker }
62*3ac0a46fSAndroid Build Coastguard Worker 
Trace(cppgc::Visitor * visitor) const63*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FWLTheme::Trace(cppgc::Visitor* visitor) const {
64*3ac0a46fSAndroid Build Coastguard Worker   IFWL_ThemeProvider::Trace(visitor);
65*3ac0a46fSAndroid Build Coastguard Worker   visitor->Trace(m_pApp);
66*3ac0a46fSAndroid Build Coastguard Worker }
67*3ac0a46fSAndroid Build Coastguard Worker 
LoadCalendarFont(CXFA_FFDoc * doc)68*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FWLTheme::LoadCalendarFont(CXFA_FFDoc* doc) {
69*3ac0a46fSAndroid Build Coastguard Worker   if (m_pCalendarFont)
70*3ac0a46fSAndroid Build Coastguard Worker     return true;
71*3ac0a46fSAndroid Build Coastguard Worker 
72*3ac0a46fSAndroid Build Coastguard Worker   for (const wchar_t* font : kFWLThemeCalFonts) {
73*3ac0a46fSAndroid Build Coastguard Worker     m_pCalendarFont = m_pApp->GetXFAFontMgr()->GetFont(doc, font, 0);
74*3ac0a46fSAndroid Build Coastguard Worker     if (m_pCalendarFont)
75*3ac0a46fSAndroid Build Coastguard Worker       return true;
76*3ac0a46fSAndroid Build Coastguard Worker   }
77*3ac0a46fSAndroid Build Coastguard Worker 
78*3ac0a46fSAndroid Build Coastguard Worker   m_pCalendarFont = CFGAS_GEModule::Get()->GetFontMgr()->GetFontByCodePage(
79*3ac0a46fSAndroid Build Coastguard Worker       FX_CodePage::kMSWin_WesternEuropean, 0, nullptr);
80*3ac0a46fSAndroid Build Coastguard Worker   return !!m_pCalendarFont;
81*3ac0a46fSAndroid Build Coastguard Worker }
82*3ac0a46fSAndroid Build Coastguard Worker 
DrawBackground(const CFWL_ThemeBackground & pParams)83*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FWLTheme::DrawBackground(const CFWL_ThemeBackground& pParams) {
84*3ac0a46fSAndroid Build Coastguard Worker   GetTheme(pParams.GetWidget())->DrawBackground(pParams);
85*3ac0a46fSAndroid Build Coastguard Worker }
86*3ac0a46fSAndroid Build Coastguard Worker 
DrawText(const CFWL_ThemeText & pParams)87*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FWLTheme::DrawText(const CFWL_ThemeText& pParams) {
88*3ac0a46fSAndroid Build Coastguard Worker   if (pParams.m_wsText.IsEmpty())
89*3ac0a46fSAndroid Build Coastguard Worker     return;
90*3ac0a46fSAndroid Build Coastguard Worker 
91*3ac0a46fSAndroid Build Coastguard Worker   if (pParams.GetWidget()->GetClassID() == FWL_Type::MonthCalendar) {
92*3ac0a46fSAndroid Build Coastguard Worker     CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.GetWidget());
93*3ac0a46fSAndroid Build Coastguard Worker     if (!pWidget)
94*3ac0a46fSAndroid Build Coastguard Worker       return;
95*3ac0a46fSAndroid Build Coastguard Worker 
96*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetStyles(pParams.m_dwTTOStyles);
97*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetAlignment(pParams.m_iTTOAlign);
98*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetFont(m_pCalendarFont);
99*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
100*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);
101*3ac0a46fSAndroid Build Coastguard Worker     if ((pParams.GetPart() == CFWL_ThemePart::Part::kDatesIn) &&
102*3ac0a46fSAndroid Build Coastguard Worker         !(pParams.m_dwStates & CFWL_PartState::kFlagged) &&
103*3ac0a46fSAndroid Build Coastguard Worker         (pParams.m_dwStates &
104*3ac0a46fSAndroid Build Coastguard Worker          Mask<CFWL_PartState>{CFWL_PartState::kHovered,
105*3ac0a46fSAndroid Build Coastguard Worker                               CFWL_PartState::kSelected})) {
106*3ac0a46fSAndroid Build Coastguard Worker       m_pTextOut->SetTextColor(0xFF888888);
107*3ac0a46fSAndroid Build Coastguard Worker     }
108*3ac0a46fSAndroid Build Coastguard Worker     if (pParams.GetPart() == CFWL_ThemePart::Part::kCaption)
109*3ac0a46fSAndroid Build Coastguard Worker       m_pTextOut->SetTextColor(ArgbEncode(0xff, 0, 153, 255));
110*3ac0a46fSAndroid Build Coastguard Worker 
111*3ac0a46fSAndroid Build Coastguard Worker     CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
112*3ac0a46fSAndroid Build Coastguard Worker     CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
113*3ac0a46fSAndroid Build Coastguard Worker     CFX_Matrix mtPart = pParams.m_matrix;
114*3ac0a46fSAndroid Build Coastguard Worker     const CFX_Matrix* pMatrix = pGraphics->GetMatrix();
115*3ac0a46fSAndroid Build Coastguard Worker     if (pMatrix)
116*3ac0a46fSAndroid Build Coastguard Worker       mtPart.Concat(*pMatrix);
117*3ac0a46fSAndroid Build Coastguard Worker 
118*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetMatrix(mtPart);
119*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->DrawLogicText(pRenderDevice, pParams.m_wsText,
120*3ac0a46fSAndroid Build Coastguard Worker                               pParams.m_PartRect);
121*3ac0a46fSAndroid Build Coastguard Worker     return;
122*3ac0a46fSAndroid Build Coastguard Worker   }
123*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.GetWidget());
124*3ac0a46fSAndroid Build Coastguard Worker   if (!pWidget)
125*3ac0a46fSAndroid Build Coastguard Worker     return;
126*3ac0a46fSAndroid Build Coastguard Worker 
127*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Node* pNode = pWidget->GetNode();
128*3ac0a46fSAndroid Build Coastguard Worker   CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
129*3ac0a46fSAndroid Build Coastguard Worker   CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
130*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetStyles(pParams.m_dwTTOStyles);
131*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetAlignment(pParams.m_iTTOAlign);
132*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetFont(pNode->GetFGASFont(pWidget->GetDoc()));
133*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetFontSize(pNode->GetFontSize());
134*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetTextColor(pNode->GetTextColor());
135*3ac0a46fSAndroid Build Coastguard Worker   CFX_Matrix mtPart = pParams.m_matrix;
136*3ac0a46fSAndroid Build Coastguard Worker   const CFX_Matrix* pMatrix = pGraphics->GetMatrix();
137*3ac0a46fSAndroid Build Coastguard Worker   if (pMatrix)
138*3ac0a46fSAndroid Build Coastguard Worker     mtPart.Concat(*pMatrix);
139*3ac0a46fSAndroid Build Coastguard Worker 
140*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetMatrix(mtPart);
141*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->DrawLogicText(pRenderDevice, pParams.m_wsText,
142*3ac0a46fSAndroid Build Coastguard Worker                             pParams.m_PartRect);
143*3ac0a46fSAndroid Build Coastguard Worker }
144*3ac0a46fSAndroid Build Coastguard Worker 
GetUIMargin(const CFWL_ThemePart & pThemePart) const145*3ac0a46fSAndroid Build Coastguard Worker CFX_RectF CXFA_FWLTheme::GetUIMargin(const CFWL_ThemePart& pThemePart) const {
146*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget());
147*3ac0a46fSAndroid Build Coastguard Worker   if (!pWidget)
148*3ac0a46fSAndroid Build Coastguard Worker     return CFX_RectF();
149*3ac0a46fSAndroid Build Coastguard Worker 
150*3ac0a46fSAndroid Build Coastguard Worker   CXFA_ContentLayoutItem* pItem = pWidget->GetLayoutItem();
151*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Node* pNode = pWidget->GetNode();
152*3ac0a46fSAndroid Build Coastguard Worker   CFX_RectF rect = pNode->GetUIMargin();
153*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Para* para = pNode->GetParaIfExists();
154*3ac0a46fSAndroid Build Coastguard Worker   if (para) {
155*3ac0a46fSAndroid Build Coastguard Worker     rect.left += para->GetMarginLeft();
156*3ac0a46fSAndroid Build Coastguard Worker     if (pNode->IsMultiLine())
157*3ac0a46fSAndroid Build Coastguard Worker       rect.width += para->GetMarginRight();
158*3ac0a46fSAndroid Build Coastguard Worker   }
159*3ac0a46fSAndroid Build Coastguard Worker   if (!pItem->GetPrev()) {
160*3ac0a46fSAndroid Build Coastguard Worker     if (pItem->GetNext())
161*3ac0a46fSAndroid Build Coastguard Worker       rect.height = 0;
162*3ac0a46fSAndroid Build Coastguard Worker   } else if (!pItem->GetNext()) {
163*3ac0a46fSAndroid Build Coastguard Worker     rect.top = 0;
164*3ac0a46fSAndroid Build Coastguard Worker   } else {
165*3ac0a46fSAndroid Build Coastguard Worker     rect.top = 0;
166*3ac0a46fSAndroid Build Coastguard Worker     rect.height = 0;
167*3ac0a46fSAndroid Build Coastguard Worker   }
168*3ac0a46fSAndroid Build Coastguard Worker   return rect;
169*3ac0a46fSAndroid Build Coastguard Worker }
170*3ac0a46fSAndroid Build Coastguard Worker 
GetCXBorderSize() const171*3ac0a46fSAndroid Build Coastguard Worker float CXFA_FWLTheme::GetCXBorderSize() const {
172*3ac0a46fSAndroid Build Coastguard Worker   return 1.0f;
173*3ac0a46fSAndroid Build Coastguard Worker }
174*3ac0a46fSAndroid Build Coastguard Worker 
GetCYBorderSize() const175*3ac0a46fSAndroid Build Coastguard Worker float CXFA_FWLTheme::GetCYBorderSize() const {
176*3ac0a46fSAndroid Build Coastguard Worker   return 1.0f;
177*3ac0a46fSAndroid Build Coastguard Worker }
178*3ac0a46fSAndroid Build Coastguard Worker 
GetFontSize(const CFWL_ThemePart & pThemePart) const179*3ac0a46fSAndroid Build Coastguard Worker float CXFA_FWLTheme::GetFontSize(const CFWL_ThemePart& pThemePart) const {
180*3ac0a46fSAndroid Build Coastguard Worker   if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
181*3ac0a46fSAndroid Build Coastguard Worker     return pWidget->GetNode()->GetFontSize();
182*3ac0a46fSAndroid Build Coastguard Worker   return FWLTHEME_CAPACITY_FontSize;
183*3ac0a46fSAndroid Build Coastguard Worker }
184*3ac0a46fSAndroid Build Coastguard Worker 
GetFont(const CFWL_ThemePart & pThemePart)185*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<CFGAS_GEFont> CXFA_FWLTheme::GetFont(
186*3ac0a46fSAndroid Build Coastguard Worker     const CFWL_ThemePart& pThemePart) {
187*3ac0a46fSAndroid Build Coastguard Worker   if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
188*3ac0a46fSAndroid Build Coastguard Worker     return pWidget->GetNode()->GetFGASFont(pWidget->GetDoc());
189*3ac0a46fSAndroid Build Coastguard Worker 
190*3ac0a46fSAndroid Build Coastguard Worker   return GetFWLFont();
191*3ac0a46fSAndroid Build Coastguard Worker }
192*3ac0a46fSAndroid Build Coastguard Worker 
GetFWLFont()193*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<CFGAS_GEFont> CXFA_FWLTheme::GetFWLFont() {
194*3ac0a46fSAndroid Build Coastguard Worker   if (!m_pFWLFont)
195*3ac0a46fSAndroid Build Coastguard Worker     m_pFWLFont = CFGAS_GEFont::LoadFont(L"Helvetica", 0, FX_CodePage::kDefANSI);
196*3ac0a46fSAndroid Build Coastguard Worker 
197*3ac0a46fSAndroid Build Coastguard Worker   return m_pFWLFont;
198*3ac0a46fSAndroid Build Coastguard Worker }
199*3ac0a46fSAndroid Build Coastguard Worker 
GetLineHeight(const CFWL_ThemePart & pThemePart) const200*3ac0a46fSAndroid Build Coastguard Worker float CXFA_FWLTheme::GetLineHeight(const CFWL_ThemePart& pThemePart) const {
201*3ac0a46fSAndroid Build Coastguard Worker   if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
202*3ac0a46fSAndroid Build Coastguard Worker     return pWidget->GetNode()->GetLineHeight();
203*3ac0a46fSAndroid Build Coastguard Worker   return kLineHeight;
204*3ac0a46fSAndroid Build Coastguard Worker }
205*3ac0a46fSAndroid Build Coastguard Worker 
GetScrollBarWidth() const206*3ac0a46fSAndroid Build Coastguard Worker float CXFA_FWLTheme::GetScrollBarWidth() const {
207*3ac0a46fSAndroid Build Coastguard Worker   return 9.0f;
208*3ac0a46fSAndroid Build Coastguard Worker }
209*3ac0a46fSAndroid Build Coastguard Worker 
GetTextColor(const CFWL_ThemePart & pThemePart) const210*3ac0a46fSAndroid Build Coastguard Worker FX_COLORREF CXFA_FWLTheme::GetTextColor(
211*3ac0a46fSAndroid Build Coastguard Worker     const CFWL_ThemePart& pThemePart) const {
212*3ac0a46fSAndroid Build Coastguard Worker   if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
213*3ac0a46fSAndroid Build Coastguard Worker     return pWidget->GetNode()->GetTextColor();
214*3ac0a46fSAndroid Build Coastguard Worker   return FWLTHEME_CAPACITY_TextColor;
215*3ac0a46fSAndroid Build Coastguard Worker }
216*3ac0a46fSAndroid Build Coastguard Worker 
GetSpaceAboveBelow(const CFWL_ThemePart & pThemePart) const217*3ac0a46fSAndroid Build Coastguard Worker CFX_SizeF CXFA_FWLTheme::GetSpaceAboveBelow(
218*3ac0a46fSAndroid Build Coastguard Worker     const CFWL_ThemePart& pThemePart) const {
219*3ac0a46fSAndroid Build Coastguard Worker   CFX_SizeF sizeAboveBelow;
220*3ac0a46fSAndroid Build Coastguard Worker   if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget())) {
221*3ac0a46fSAndroid Build Coastguard Worker     CXFA_Para* para = pWidget->GetNode()->GetParaIfExists();
222*3ac0a46fSAndroid Build Coastguard Worker     if (para) {
223*3ac0a46fSAndroid Build Coastguard Worker       sizeAboveBelow.width = para->GetSpaceAbove();
224*3ac0a46fSAndroid Build Coastguard Worker       sizeAboveBelow.height = para->GetSpaceBelow();
225*3ac0a46fSAndroid Build Coastguard Worker     }
226*3ac0a46fSAndroid Build Coastguard Worker   }
227*3ac0a46fSAndroid Build Coastguard Worker   return sizeAboveBelow;
228*3ac0a46fSAndroid Build Coastguard Worker }
229*3ac0a46fSAndroid Build Coastguard Worker 
CalcTextRect(const CFWL_ThemeText & pParams,CFX_RectF * pRect)230*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FWLTheme::CalcTextRect(const CFWL_ThemeText& pParams,
231*3ac0a46fSAndroid Build Coastguard Worker                                  CFX_RectF* pRect) {
232*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.GetWidget());
233*3ac0a46fSAndroid Build Coastguard Worker   if (!pWidget)
234*3ac0a46fSAndroid Build Coastguard Worker     return;
235*3ac0a46fSAndroid Build Coastguard Worker 
236*3ac0a46fSAndroid Build Coastguard Worker   if (pParams.GetWidget()->GetClassID() == FWL_Type::MonthCalendar) {
237*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetFont(m_pCalendarFont);
238*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
239*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);
240*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetAlignment(pParams.m_iTTOAlign);
241*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->SetStyles(pParams.m_dwTTOStyles);
242*3ac0a46fSAndroid Build Coastguard Worker     m_pTextOut->CalcLogicSize(pParams.m_wsText.AsStringView(), pRect);
243*3ac0a46fSAndroid Build Coastguard Worker     return;
244*3ac0a46fSAndroid Build Coastguard Worker   }
245*3ac0a46fSAndroid Build Coastguard Worker 
246*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Node* pNode = pWidget->GetNode();
247*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetFont(pNode->GetFGASFont(pWidget->GetDoc()));
248*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetFontSize(pNode->GetFontSize());
249*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetTextColor(pNode->GetTextColor());
250*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetAlignment(pParams.m_iTTOAlign);
251*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->SetStyles(pParams.m_dwTTOStyles);
252*3ac0a46fSAndroid Build Coastguard Worker   m_pTextOut->CalcLogicSize(pParams.m_wsText.AsStringView(), pRect);
253*3ac0a46fSAndroid Build Coastguard Worker }
254