Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cxfa_ffwidget.cpp
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "xfa/fxfa/cxfa_ffwidget.h"
8
9#include <algorithm>
10#include <memory>
11#include <utility>
12
13#include "core/fxcodec/fx_codec.h"
14#include "core/fxcodec/progressive_decoder.h"
15#include "core/fxcrt/check.h"
16#include "core/fxcrt/maybe_owned.h"
17#include "core/fxge/cfx_fillrenderoptions.h"
18#include "core/fxge/cfx_path.h"
19#include "core/fxge/cfx_renderdevice.h"
20#include "core/fxge/dib/cfx_dibitmap.h"
21#include "xfa/fgas/graphics/cfgas_gegraphics.h"
22#include "xfa/fwl/fwl_widgethit.h"
23#include "xfa/fxfa/cxfa_eventparam.h"
24#include "xfa/fxfa/cxfa_ffapp.h"
25#include "xfa/fxfa/cxfa_ffdoc.h"
26#include "xfa/fxfa/cxfa_ffdocview.h"
27#include "xfa/fxfa/cxfa_ffpageview.h"
28#include "xfa/fxfa/cxfa_ffwidgethandler.h"
29#include "xfa/fxfa/cxfa_imagerenderer.h"
30#include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
31#include "xfa/fxfa/parser/cxfa_border.h"
32#include "xfa/fxfa/parser/cxfa_box.h"
33#include "xfa/fxfa/parser/cxfa_edge.h"
34#include "xfa/fxfa/parser/cxfa_image.h"
35#include "xfa/fxfa/parser/cxfa_margin.h"
36#include "xfa/fxfa/parser/cxfa_node.h"
37
39 const CFX_RectF& rtImage,
40 const CFX_Matrix& matrix,
41 RetainPtr<CFX_DIBitmap> bitmap,
42 XFA_AttributeValue iAspect,
43 const CFX_Size& dpi,
44 XFA_AttributeValue iHorzAlign,
45 XFA_AttributeValue iVertAlign) {
46 if (rtImage.IsEmpty())
47 return;
48
49 CHECK(bitmap);
50 if (bitmap->GetBuffer().empty()) {
51 return;
52 }
53
54 CFX_RectF rtFit(rtImage.TopLeft(),
55 XFA_UnitPx2Pt(bitmap->GetWidth(), dpi.width),
56 XFA_UnitPx2Pt(bitmap->GetHeight(), dpi.height));
57 switch (iAspect) {
58 case XFA_AttributeValue::Fit: {
59 float f1 = rtImage.height / rtFit.height;
60 float f2 = rtImage.width / rtFit.width;
61 f1 = std::min(f1, f2);
62 rtFit.height = rtFit.height * f1;
63 rtFit.width = rtFit.width * f1;
64 break;
65 }
66 case XFA_AttributeValue::Height: {
67 float f1 = rtImage.height / rtFit.height;
68 rtFit.height = rtImage.height;
69 rtFit.width = f1 * rtFit.width;
70 break;
71 }
72 case XFA_AttributeValue::None:
73 rtFit.height = rtImage.height;
74 rtFit.width = rtImage.width;
75 break;
76 case XFA_AttributeValue::Width: {
77 float f1 = rtImage.width / rtFit.width;
78 rtFit.width = rtImage.width;
79 rtFit.height = rtFit.height * f1;
80 break;
81 }
82 case XFA_AttributeValue::Actual:
83 default:
84 break;
85 }
86
87 if (iHorzAlign == XFA_AttributeValue::Center)
88 rtFit.left += (rtImage.width - rtFit.width) / 2;
89 else if (iHorzAlign == XFA_AttributeValue::Right)
90 rtFit.left = rtImage.right() - rtFit.width;
91
92 if (iVertAlign == XFA_AttributeValue::Middle)
93 rtFit.top += (rtImage.height - rtFit.height) / 2;
94 else if (iVertAlign == XFA_AttributeValue::Bottom)
95 rtFit.top = rtImage.bottom() - rtImage.height;
96
98 CFX_RenderDevice::StateRestorer restorer(device);
99 CFX_Path path;
100 path.AppendRect(rtImage.left, rtImage.bottom(), rtImage.right(), rtImage.top);
101 device->SetClip_PathFill(path, &matrix,
103
104 CFX_Matrix image_to_device(1, 0, 0, -1, 0, 1);
105 image_to_device.Concat(
106 CFX_Matrix(rtFit.width, 0, 0, rtFit.height, rtFit.left, rtFit.top));
107 image_to_device.Concat(matrix);
108
109 CXFA_ImageRenderer image_renderer(device, std::move(bitmap), image_to_device);
110 if (!image_renderer.Start()) {
111 return;
112 }
113
114 while (image_renderer.Continue()) {
115 continue;
116 }
117}
118
120 RetainPtr<IFX_SeekableReadStream> pImageFileRead,
121 FXCODEC_IMAGE_TYPE type,
122 int32_t& iImageXDpi,
123 int32_t& iImageYDpi) {
124 auto pProgressiveDecoder = std::make_unique<ProgressiveDecoder>();
125
126 CFX_DIBAttribute dibAttr;
127 pProgressiveDecoder->LoadImageInfo(std::move(pImageFileRead), type, &dibAttr,
128 false);
129 switch (dibAttr.m_wDPIUnit) {
130 case CFX_DIBAttribute::kResUnitCentimeter:
131 dibAttr.m_nXDPI = static_cast<int32_t>(dibAttr.m_nXDPI * 2.54f);
132 dibAttr.m_nYDPI = static_cast<int32_t>(dibAttr.m_nYDPI * 2.54f);
133 break;
134 case CFX_DIBAttribute::kResUnitMeter:
135 dibAttr.m_nXDPI =
136 static_cast<int32_t>(dibAttr.m_nXDPI / (float)100 * 2.54f);
137 dibAttr.m_nYDPI =
138 static_cast<int32_t>(dibAttr.m_nYDPI / (float)100 * 2.54f);
139 break;
140 default:
141 break;
142 }
143 iImageXDpi = dibAttr.m_nXDPI > 1 ? dibAttr.m_nXDPI : (96);
144 iImageYDpi = dibAttr.m_nYDPI > 1 ? dibAttr.m_nYDPI : (96);
145 if (pProgressiveDecoder->GetWidth() <= 0 ||
146 pProgressiveDecoder->GetHeight() <= 0) {
147 return nullptr;
148 }
149
150 RetainPtr<CFX_DIBitmap> pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
151 if (!pBitmap->Create(pProgressiveDecoder->GetWidth(),
152 pProgressiveDecoder->GetHeight(),
153 pProgressiveDecoder->GetBitmapFormat())) {
154 return nullptr;
155 }
156
157 pBitmap->Clear(0xffffffff);
158
159 auto [status, nFrames] = pProgressiveDecoder->GetFrames();
160 if (status != FXCODEC_STATUS::kDecodeReady || nFrames == 0) {
161 return nullptr;
162 }
163
164 status = pProgressiveDecoder->StartDecode(pBitmap);
165 if (status == FXCODEC_STATUS::kError) {
166 return nullptr;
167 }
168
169 while (status == FXCODEC_STATUS::kDecodeToBeContinued) {
170 status = pProgressiveDecoder->ContinueDecode();
171 if (status == FXCODEC_STATUS::kError) {
172 return nullptr;
173 }
174 }
175
176 return pBitmap;
177}
178
179void XFA_RectWithoutMargin(CFX_RectF* rt, const CXFA_Margin* margin) {
180 if (!margin)
181 return;
182
185}
186
187// static
189 if (!pLayoutItem->GetFormNode()->HasCreatedUIWidget())
190 return nullptr;
191
192 return GetFFWidget(ToContentLayoutItem(pLayoutItem));
193}
194
196
197CXFA_FFWidget::~CXFA_FFWidget() = default;
198
199void CXFA_FFWidget::Trace(cppgc::Visitor* visitor) const {
200 visitor->Trace(m_pLayoutItem);
201 visitor->Trace(m_pDocView);
202 visitor->Trace(m_pPageView);
203 visitor->Trace(m_pNode);
204}
205
209
213
219
225
227 CFX_RectF rtWidget = GetWidgetRect();
228 float fValue = 0;
229 switch (m_pNode->GetRotate()) {
230 case 90:
231 rtWidget.top = rtWidget.bottom();
232 fValue = rtWidget.width;
233 rtWidget.width = rtWidget.height;
234 rtWidget.height = fValue;
235 break;
236 case 180:
237 rtWidget.left = rtWidget.right();
238 rtWidget.top = rtWidget.bottom();
239 break;
240 case 270:
241 rtWidget.left = rtWidget.right();
242 fValue = rtWidget.width;
243 rtWidget.width = rtWidget.height;
244 rtWidget.height = fValue;
245 break;
246 }
247 return rtWidget;
248}
249
255
257 return nullptr;
258}
259
261 if (focus == kDrawFocus || !m_pPageView)
262 return CFX_RectF();
263 return m_pPageView->GetPageViewRect();
264}
265
267 const CFX_Matrix& matrix,
268 HighlightOption highlight) {
270 return;
271
272 CXFA_Border* border = m_pNode->GetBorderIfExists();
273 if (!border)
274 return;
275
277 CXFA_Margin* margin = border->GetMarginIfExists();
278 XFA_RectWithoutMargin(&rtBorder, margin);
279 rtBorder.Normalize();
280 DrawBorder(pGS, border, rtBorder, matrix);
281}
282
284 return !!m_pPageView;
285}
286
289 return true;
290}
291
294 return true;
295}
296
298 return false;
299}
300
302
304 CXFA_FFWidgetHandler* pHandler) {
305 CXFA_Node* pNode = GetNode();
306 return pNode->IsWidgetReady() && pHandler->HasEvent(pNode, eEventType);
307}
308
310 CXFA_FFWidgetHandler* pHandler) {
311 CXFA_Node* pNode = GetNode();
312 if (!pNode->IsWidgetReady())
313 return false;
314
315 return pHandler->ProcessEvent(pNode, params) == XFA_EventError::kSuccess;
316}
317
319 CXFA_Box* box,
320 const CFX_RectF& rtBorder,
321 const CFX_Matrix& matrix) {
322 if (box)
323 box->Draw(pGS, rtBorder, matrix, false);
324}
325
327 CXFA_Box* box,
328 const CFX_RectF& rtBorder,
329 const CFX_Matrix& matrix,
330 bool forceRound) {
331 if (box)
332 box->Draw(pGS, rtBorder, matrix, forceRound);
333}
334
337 rtWidget.Inflate(2, 2);
338 m_pDocView->InvalidateRect(m_pPageView.Get(), rtWidget);
339}
340
342 return false;
343}
344
346 return false;
347}
348
350 Mask<XFA_FWL_KeyFlag> dwFlags,
351 const CFX_PointF& point,
352 CFWL_MessageMouse::MouseCommand command) {
353 return false;
354}
355
357 const CFX_PointF& point) {
358 return false;
359}
360
362 const CFX_PointF& point) {
363 return false;
364}
365
367 const CFX_PointF& point) {
368 return false;
369}
370
372 const CFX_PointF& point) {
373 return false;
374}
375
377 const CFX_PointF& point,
378 const CFX_Vector& delta) {
379 return false;
380}
381
383 const CFX_PointF& point) {
384 return false;
385}
386
388 const CFX_PointF& point) {
389 return false;
390}
391
393 const CFX_PointF& point) {
394 return false;
395}
396
399 if (pParent && !pParent->IsAncestorOf(pOldWidget)) {
400 if (!pParent->OnSetFocus(pOldWidget))
401 return false;
402 }
404
406 m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Enter, &eParam);
407 return true;
408}
409
413 if (!pNewWidget)
414 return true;
415
417 if (pParent && !pParent->IsAncestorOf(pNewWidget)) {
418 if (!pParent->OnKillFocus(pNewWidget))
419 return false;
420 }
421 return true;
422}
423
425 Mask<XFA_FWL_KeyFlag> dwFlags) {
426 return false;
427}
428
429bool CXFA_FFWidget::OnChar(uint32_t dwChar, Mask<XFA_FWL_KeyFlag> dwFlags) {
430 return false;
431}
432
436
438 return false;
439}
440
442 return false;
443}
444
446 return false;
447}
448
450 return false;
451}
452
454 return false;
455}
456
458 return false;
459}
460
462 return CanCut();
463}
464
466 return CanCopy();
467}
468
470 return false;
471}
472
474 return false;
475}
476
478 return std::nullopt;
479}
480
482 return std::nullopt;
483}
484
485bool CXFA_FFWidget::Paste(const WideString& wsPaste) {
486 return false;
487}
488
490
492
494
498
500 return FormFieldType::kXFA;
501}
502
505 if (mt.IsIdentity())
506 return point;
507
508 return mt.GetInverse().Transform(point);
509}
510
512 int32_t iRotate = m_pNode->GetRotate();
513 if (!iRotate)
514 return CFX_Matrix();
515
517 CFX_Matrix mt;
518 switch (iRotate) {
519 case 90:
520 mt.a = 0;
521 mt.b = -1;
522 mt.c = 1;
523 mt.d = 0;
524 mt.e = rcWidget.left - rcWidget.top;
525 mt.f = rcWidget.left + rcWidget.top;
526 break;
527 case 180:
528 mt.a = -1;
529 mt.b = 0;
530 mt.c = 0;
531 mt.d = -1;
532 mt.e = rcWidget.left * 2;
533 mt.f = rcWidget.top * 2;
534 break;
535 case 270:
536 mt.a = 0;
537 mt.b = 1;
538 mt.c = -1;
539 mt.d = 0;
540 mt.e = rcWidget.left + rcWidget.top;
541 mt.f = rcWidget.top - rcWidget.left;
542 break;
543 }
544 return mt;
545}
546
547void CXFA_FFWidget::DisplayCaret(bool bVisible, const CFX_RectF* pRtAnchor) {
548 GetDoc()->DisplayCaret(this, bVisible, pRtAnchor);
549}
550
552 DCHECK(GetNode()->IsWidgetReady());
553 CXFA_Border* borderUI = GetNode()->GetUIBorder();
554 if (!borderUI)
555 return;
556
557 CXFA_Edge* edge = borderUI->GetEdgeIfExists(0);
558 if (!edge)
559 return;
560
561 *cr = edge->GetColor();
562 *fWidth = edge->GetThickness();
563}
564
567 return rtLayout.width < 0.1f && rtLayout.height < 0.1f;
568}
569
571 CXFA_Node* pParentNode = m_pNode->GetParent();
572 if (!pParentNode)
573 return nullptr;
574
575 CXFA_LayoutProcessor* layout = GetDocView()->GetLayoutProcessor();
576 return layout->GetLayoutItem(pParentNode);
577}
578
580 if (!pWidget)
581 return false;
582
583 CXFA_Node* pChildNode = pWidget->GetNode();
584 while (pChildNode) {
585 if (pChildNode == m_pNode)
586 return true;
587
588 pChildNode = pChildNode->GetParent();
589 }
590 return false;
591}
592
594 return GetWidgetRect().Contains(point);
595}
596
598 return m_pDocView->GetDoc();
599}
600
601CXFA_FFApp* CXFA_FFWidget::GetApp() {
602 return GetDoc()->GetApp();
603}
604
608
612
614 CXFA_ContentLayoutItem* pItem = GetLayoutItem();
617 return;
618 }
620 m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Exit, &eParam);
621}
622
626
627void CXFA_FFWidget::SetButtonDown(bool bSet) {
628 CXFA_ContentLayoutItem* pItem = GetLayoutItem();
629 if (bSet)
631 else
633}
#define DCHECK
Definition check.h:33
CFX_RenderDevice * GetRenderDevice()
constexpr CFX_Matrix()=default
CFX_PointF Transform(const CFX_PointF &point) const
CFX_Matrix GetInverse() const
constexpr CFX_Matrix(float a1, float b1, float c1, float d1, float e1, float f1)
bool IsIdentity() const
void Concat(const CFX_Matrix &right)
void AppendRect(float left, float bottom, float right, float top)
Definition cfx_path.cpp:310
constexpr CFX_RectF()=default
bool IsEmpty() const
void Deflate(float off_left, float off_top, float off_right, float off_bottom)
void Inflate(float x, float y)
CFX_RectF & operator=(const CFX_RectF &other)=default
float bottom() const
void Normalize()
bool Contains(const PointType &p) const
float right() const
StateRestorer(CFX_RenderDevice *pDevice)
bool SetClip_PathFill(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_FillRenderOptions &fill_options)
void Draw(CFGAS_GEGraphics *pGS, const CFX_RectF &rtWidget, const CFX_Matrix &matrix, bool forceRound)
Definition cxfa_box.cpp:186
void SetStatusBits(Mask< XFA_WidgetStatus > val)
CXFA_ContentLayoutItem * GetNext() const
bool TestStatusBits(Mask< XFA_WidgetStatus > val) const
void ClearStatusBits(Mask< XFA_WidgetStatus > val)
CXFA_EventParam(XFA_EVENTTYPE type)
CallbackIface * GetAppProvider() const
Definition cxfa_ffapp.h:146
CFWL_App * GetFWLApp() const
Definition cxfa_ffapp.h:147
CXFA_FFDoc * GetDoc() const
CXFA_LayoutProcessor * GetLayoutProcessor() const
void DisplayCaret(CXFA_FFWidget *hWidget, bool bVisible, const CFX_RectF *pRtAnchor)
CXFA_FFApp * GetApp() const
Definition cxfa_ffdoc.h:168
CXFA_FFDocView * GetDocView() const
XFA_EventError ProcessEvent(CXFA_Node *pNode, CXFA_EventParam *pParam)
bool HasEvent(CXFA_Node *pNode, XFA_EVENTTYPE eEventType)
virtual bool PtInActiveRect(const CFX_PointF &point)
void DrawBorderWithFlag(CFGAS_GEGraphics *pGS, CXFA_Box *box, const CFX_RectF &rtBorder, const CFX_Matrix &matrix, bool forceRound)
static CXFA_FFWidget * FromLayoutItem(CXFA_LayoutItem *pLayoutItem)
CFX_Matrix GetRotateMatrix() override
virtual bool PerformLayout()
const CFX_RectF & RecacheWidgetRect() const
CXFA_FFWidget * GetNextFFWidget() const
virtual bool Paste(const WideString &wsPaste)
virtual bool OnSetFocus(CXFA_FFWidget *pOldWidget)
virtual std::optional< WideString > Cut()
virtual bool OnLButtonUp(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point)
const CFX_RectF & GetWidgetRect() const
virtual void RenderWidget(CFGAS_GEGraphics *pGS, const CFX_Matrix &matrix, HighlightOption highlight)
virtual bool OnMouseExit()
CXFA_LayoutItem * GetParent()
void DisplayCaret(bool bVisible, const CFX_RectF *pRtAnchor) override
CXFA_FFWidget(CXFA_Node *pNode)
virtual bool OnRButtonUp(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point)
virtual bool Undo()
virtual bool AcceptsFocusOnButtonDown(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point, CFWL_MessageMouse::MouseCommand command)
virtual bool Redo()
virtual bool CanUndo()
virtual std::optional< WideString > Copy()
bool HasEventUnderHandler(XFA_EVENTTYPE eEventType, CXFA_FFWidgetHandler *pHandler)
virtual bool UpdateFWLData()
virtual void UpdateWidgetProperty()
virtual bool CanCopy()
bool IsAncestorOf(CXFA_FFWidget *pWidget)
virtual bool CanDeSelect()
virtual bool OnRButtonDblClk(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point)
bool HasVisibleStatus() const
virtual bool OnLButtonDown(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point)
virtual bool CanPaste()
virtual bool IsLoaded()
CFWL_App * GetFWLApp() const
CXFA_FFApp::CallbackIface * GetAppProvider()
CXFA_Node * GetNode() const
void DrawBorder(CFGAS_GEGraphics *pGS, CXFA_Box *box, const CFX_RectF &rtBorder, const CFX_Matrix &matrix)
virtual bool OnChar(uint32_t dwChar, Mask< XFA_FWL_KeyFlag > dwFlags)
virtual FormFieldType GetFormFieldType()
void GetBorderColorAndThickness(FX_ARGB *cr, float *fWidth) override
virtual void Delete()
virtual bool LoadWidget()
void SetButtonDown(bool bSet)
bool ProcessEventUnderHandler(CXFA_EventParam *params, CXFA_FFWidgetHandler *pHandler)
virtual bool OnMouseMove(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point)
virtual bool CanCut()
virtual CFX_RectF GetBBox(FocusOption focus)
CXFA_FFDoc * GetDoc()
CXFA_FFApp * GetApp()
virtual bool OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode, Mask< XFA_FWL_KeyFlag > dwFlags)
void ModifyStatus(Mask< XFA_WidgetStatus > dwAdded, Mask< XFA_WidgetStatus > dwRemoved)
virtual bool OnLButtonDblClk(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point)
virtual void DeSelect()
CFX_RectF GetRectWithoutRotate()
CXFA_ContentLayoutItem * GetLayoutItem() const
virtual bool OnKillFocus(CXFA_FFWidget *pNewWidget)
CFX_PointF Rotate2Normal(const CFX_PointF &point)
virtual void SelectAll()
virtual bool OnMouseWheel(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point, const CFX_Vector &delta)
virtual bool CanDelete()
virtual pdfium::FWL_WidgetHit HitTest(const CFX_PointF &point)
virtual bool CanSelectAll()
CFX_RectF m_WidgetRect
~CXFA_FFWidget() override
CXFA_FFPageView * GetPageView() const
CXFA_FFDocView * GetDocView() const
virtual CXFA_FFField * AsField()
virtual bool CanRedo()
virtual bool OnRButtonDown(Mask< XFA_FWL_KeyFlag > dwFlags, const CFX_PointF &point)
virtual bool OnMouseEnter()
virtual WideString GetText()
CXFA_Node * GetFormNode() const
CXFA_LayoutItem * GetLayoutItem(CXFA_Node *pFormItem)
float GetBottomInset() const
float GetLeftInset() const
float GetTopInset() const
float GetRightInset() const
bool IsWidgetReady() const
Definition cxfa_node.h:328
CXFA_Border * GetUIBorder()
CXFA_Margin * GetMarginIfExists() const
bool HasCreatedUIWidget() const
Definition cxfa_object.h:84
FX_ARGB GetColor() const
float GetThickness() const
WideString()=default
FormFieldType
CXFA_FFWidget * GetFFWidget(CXFA_ContentLayoutItem *item)
XFA_EVENTTYPE
@ XFA_EVENT_Exit
@ XFA_EVENT_Enter
RetainPtr< CFX_DIBitmap > XFA_LoadImageFromBuffer(RetainPtr< IFX_SeekableReadStream > pImageFileRead, FXCODEC_IMAGE_TYPE type, int32_t &iImageXDpi, int32_t &iImageYDpi)
void XFA_RectWithoutMargin(CFX_RectF *rt, const CXFA_Margin *margin)
void XFA_DrawImage(CFGAS_GEGraphics *pGS, const CFX_RectF &rtImage, const CFX_Matrix &matrix, RetainPtr< CFX_DIBitmap > pDIBitmap, XFA_AttributeValue iAspect, const CFX_Size &dpi, XFA_AttributeValue iHorzAlign, XFA_AttributeValue iVertAlign)
CXFA_ContentLayoutItem * ToContentLayoutItem(CXFA_LayoutItem *item)
CFX_VTemplate< int32_t > CFX_Vector
CFX_PTemplate< float > CFX_PointF
CFX_STemplate< int32_t > CFX_Size
uint32_t FX_ARGB
Definition fx_dib.h:36
XFA_EventError
Definition fxfa.h:54
XFA_WidgetStatus
Definition fxfa.h:61
XFA_AttributeValue
Definition fxfa_basic.h:60
Definition heap.h:12
fxcodec::ProgressiveDecoder ProgressiveDecoder
#define CHECK(cvref)
static constexpr CFX_FillRenderOptions WindingOptions()
fxcrt::WideString WideString
Definition widestring.h:207