Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
cxfa_layoutprocessor.cpp
Go to the documentation of this file.
1
// Copyright 2016 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/layout/cxfa_layoutprocessor.h"
8
9
#
include
"fxjs/gc/container_trace.h"
10
#
include
"fxjs/xfa/cjx_object.h"
11
#
include
"v8/include/cppgc/heap.h"
12
#
include
"xfa/fxfa/layout/cxfa_contentlayoutitem.h"
13
#
include
"xfa/fxfa/layout/cxfa_contentlayoutprocessor.h"
14
#
include
"xfa/fxfa/layout/cxfa_viewlayoutprocessor.h"
15
#
include
"xfa/fxfa/parser/cxfa_document.h"
16
#
include
"xfa/fxfa/parser/cxfa_localemgr.h"
17
#
include
"xfa/fxfa/parser/cxfa_measurement.h"
18
#
include
"xfa/fxfa/parser/cxfa_node.h"
19
#
include
"xfa/fxfa/parser/cxfa_subform.h"
20
#
include
"xfa/fxfa/parser/xfa_document_datamerger_imp.h"
21
#
include
"xfa/fxfa/parser/xfa_utils.h"
22
23
// static
24
CXFA_LayoutProcessor* CXFA_LayoutProcessor::
FromDocument
(
25
const
CXFA_Document* pXFADoc) {
26
return
static_cast
<CXFA_LayoutProcessor*>(pXFADoc->GetLayoutProcessor());
27
}
28
29
CXFA_LayoutProcessor::CXFA_LayoutProcessor(
cppgc
::Heap* pHeap)
30
: m_pHeap(pHeap) {}
31
32
CXFA_LayoutProcessor::~
CXFA_LayoutProcessor
() =
default
;
33
34
void
CXFA_LayoutProcessor::
Trace
(
cppgc
::Visitor* visitor)
const
{
35
CXFA_Document::LayoutProcessorIface::Trace(visitor);
36
visitor->Trace(m_pViewLayoutProcessor);
37
visitor->Trace(m_pContentLayoutProcessor);
38
}
39
40
void
CXFA_LayoutProcessor::
SetForceRelayout
() {
41
m_bNeedLayout =
true
;
42
}
43
44
int32_t CXFA_LayoutProcessor::
StartLayout
() {
45
return
NeedLayout() ? RestartLayout() : 100;
46
}
47
48
int32_t CXFA_LayoutProcessor::RestartLayout() {
49
m_pContentLayoutProcessor =
nullptr
;
50
m_nProgressCounter = 0;
51
CXFA_Node
* pFormPacketNode =
52
ToNode(
GetDocument
()->GetXFAObject(
XFA_HASHCODE_Form
));
53
if
(!pFormPacketNode)
54
return
-1;
55
56
CXFA_Subform* pFormRoot =
57
pFormPacketNode->GetFirstChildByClass<CXFA_Subform>(
XFA_Element
::Subform);
58
if
(!pFormRoot)
59
return
-1;
60
61
if
(!m_pViewLayoutProcessor) {
62
m_pViewLayoutProcessor =
63
cppgc::MakeGarbageCollected<CXFA_ViewLayoutProcessor>(
64
GetHeap()->GetAllocationHandle(), GetHeap(),
this
);
65
}
66
if
(!m_pViewLayoutProcessor->InitLayoutPage(pFormRoot))
67
return
-1;
68
69
if
(!m_pViewLayoutProcessor->PrepareFirstPage(pFormRoot))
70
return
-1;
71
72
m_pContentLayoutProcessor =
73
cppgc::MakeGarbageCollected<CXFA_ContentLayoutProcessor>(
74
GetHeap()->GetAllocationHandle(), GetHeap(), pFormRoot,
75
m_pViewLayoutProcessor);
76
m_nProgressCounter = 1;
77
return
0;
78
}
79
80
int32_t CXFA_LayoutProcessor::
DoLayout
() {
81
if
(m_nProgressCounter < 1)
82
return
-1;
83
84
CXFA_ContentLayoutProcessor
::
Result
eStatus;
85
CXFA_Node
* pFormNode = m_pContentLayoutProcessor->GetFormNode();
86
float
fPosX =
87
pFormNode->JSObject()->GetMeasureInUnit(
XFA_Attribute
::X,
XFA_Unit
::
Pt
);
88
float
fPosY =
89
pFormNode->JSObject()->GetMeasureInUnit(
XFA_Attribute
::Y,
XFA_Unit
::
Pt
);
90
do
{
91
float
fAvailHeight = m_pViewLayoutProcessor->GetAvailHeight();
92
eStatus =
93
m_pContentLayoutProcessor->DoLayout(
true
, fAvailHeight, fAvailHeight);
94
if
(eStatus !=
CXFA_ContentLayoutProcessor
::
Result
::
kDone
)
95
m_nProgressCounter++;
96
97
CXFA_ContentLayoutItem* pLayoutItem =
98
m_pContentLayoutProcessor->ExtractLayoutItem();
99
if
(pLayoutItem)
100
pLayoutItem->m_sPos = CFX_PointF(fPosX, fPosY);
101
102
m_pViewLayoutProcessor->SubmitContentItem(pLayoutItem, eStatus);
103
}
while
(eStatus !=
CXFA_ContentLayoutProcessor
::
Result
::
kDone
);
104
105
if
(eStatus ==
CXFA_ContentLayoutProcessor
::
Result
::
kDone
) {
106
m_pViewLayoutProcessor->FinishPaginatedPageSets();
107
m_pViewLayoutProcessor->SyncLayoutData();
108
m_bHasChangedContainers =
false
;
109
m_bNeedLayout =
false
;
110
}
111
return
100 *
112
(eStatus ==
CXFA_ContentLayoutProcessor
::
Result
::
kDone
113
? m_nProgressCounter
114
: m_nProgressCounter - 1) /
115
m_nProgressCounter;
116
}
117
118
bool
CXFA_LayoutProcessor::
IncrementLayout
() {
119
if
(m_bNeedLayout) {
120
RestartLayout();
121
return
DoLayout
(
)
== 100;
122
}
123
return
!m_bHasChangedContainers;
124
}
125
126
int32_t CXFA_LayoutProcessor::
CountPages
()
const
{
127
return
m_pViewLayoutProcessor ? m_pViewLayoutProcessor->GetPageCount() : 0;
128
}
129
130
CXFA_ViewLayoutItem* CXFA_LayoutProcessor::
GetPage
(int32_t index)
const
{
131
return
m_pViewLayoutProcessor ? m_pViewLayoutProcessor->GetPage(index)
132
:
nullptr
;
133
}
134
135
CXFA_LayoutItem
* CXFA_LayoutProcessor::
GetLayoutItem
(
CXFA_Node
* pFormItem) {
136
return
pFormItem->JSObject()->GetLayoutItem();
137
}
138
139
void
CXFA_LayoutProcessor::
SetHasChangedContainer
() {
140
m_bHasChangedContainers =
true
;
141
}
142
143
bool
CXFA_LayoutProcessor::NeedLayout()
const
{
144
return
m_bNeedLayout || m_bHasChangedContainers;
145
}
CXFA_ContentLayoutProcessor
Definition
cxfa_contentlayoutprocessor.h:36
CXFA_ContentLayoutProcessor::Result
Result
Definition
cxfa_contentlayoutprocessor.h:38
CXFA_ContentLayoutProcessor::Result::kDone
@ kDone
Definition
cxfa_contentlayoutprocessor.h:39
CXFA_Document::LayoutProcessorIface::GetDocument
CXFA_Document * GetDocument() const
Definition
cxfa_document.h:78
CXFA_LayoutItem
Definition
cxfa_layoutitem.h:20
CXFA_LayoutProcessor::~CXFA_LayoutProcessor
~CXFA_LayoutProcessor() override
CXFA_LayoutProcessor::CountPages
int32_t CountPages() const
Definition
cxfa_layoutprocessor.cpp:126
CXFA_LayoutProcessor::IncrementLayout
bool IncrementLayout()
Definition
cxfa_layoutprocessor.cpp:118
CXFA_LayoutProcessor::Trace
void Trace(cppgc::Visitor *visitor) const override
Definition
cxfa_layoutprocessor.cpp:34
CXFA_LayoutProcessor::GetLayoutItem
CXFA_LayoutItem * GetLayoutItem(CXFA_Node *pFormItem)
Definition
cxfa_layoutprocessor.cpp:135
CXFA_LayoutProcessor::StartLayout
int32_t StartLayout()
Definition
cxfa_layoutprocessor.cpp:44
CXFA_LayoutProcessor::SetHasChangedContainer
void SetHasChangedContainer() override
Definition
cxfa_layoutprocessor.cpp:139
CXFA_LayoutProcessor::DoLayout
int32_t DoLayout()
Definition
cxfa_layoutprocessor.cpp:80
CXFA_LayoutProcessor::GetPage
CXFA_ViewLayoutItem * GetPage(int32_t index) const
Definition
cxfa_layoutprocessor.cpp:130
CXFA_LayoutProcessor::FromDocument
static CXFA_LayoutProcessor * FromDocument(const CXFA_Document *pXFADoc)
Definition
cxfa_layoutprocessor.cpp:24
CXFA_LayoutProcessor::SetForceRelayout
void SetForceRelayout() override
Definition
cxfa_layoutprocessor.cpp:40
CXFA_Node
Definition
cxfa_node.h:94
XFA_Unit
XFA_Unit
Definition
fxfa_basic.h:91
XFA_Unit::Pt
@ Pt
Definition
fxfa_basic.h:94
XFA_Attribute
XFA_Attribute
Definition
fxfa_basic.h:67
XFA_HASHCODE_Form
@ XFA_HASHCODE_Form
Definition
fxfa_basic.h:22
XFA_Element
XFA_Element
Definition
fxfa_basic.h:75
cppgc
Definition
heap.h:12
qtwebengine
src
3rdparty
chromium
third_party
pdfium
xfa
fxfa
layout
cxfa_layoutprocessor.cpp
Generated on
for Qt by
1.18.0