xref: /aosp_15_r20/external/pdfium/xfa/fxfa/layout/cxfa_viewlayoutitem.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2016 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/layout/cxfa_viewlayoutitem.h"
8*3ac0a46fSAndroid Build Coastguard Worker 
9*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/xfa/cjx_object.h"
10*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffpageview.h"
11*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/layout/cxfa_viewlayoutprocessor.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_measurement.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_medium.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_node.h"
16*3ac0a46fSAndroid Build Coastguard Worker 
CXFA_ViewLayoutItem(CXFA_Node * pNode,CXFA_FFPageView * pPageView)17*3ac0a46fSAndroid Build Coastguard Worker CXFA_ViewLayoutItem::CXFA_ViewLayoutItem(CXFA_Node* pNode,
18*3ac0a46fSAndroid Build Coastguard Worker                                          CXFA_FFPageView* pPageView)
19*3ac0a46fSAndroid Build Coastguard Worker     : CXFA_LayoutItem(pNode, kViewItem), m_pFFPageView(pPageView) {
20*3ac0a46fSAndroid Build Coastguard Worker   if (m_pFFPageView)
21*3ac0a46fSAndroid Build Coastguard Worker     m_pFFPageView->SetLayoutItem(this);
22*3ac0a46fSAndroid Build Coastguard Worker }
23*3ac0a46fSAndroid Build Coastguard Worker 
24*3ac0a46fSAndroid Build Coastguard Worker CXFA_ViewLayoutItem::~CXFA_ViewLayoutItem() = default;
25*3ac0a46fSAndroid Build Coastguard Worker 
Trace(cppgc::Visitor * visitor) const26*3ac0a46fSAndroid Build Coastguard Worker void CXFA_ViewLayoutItem::Trace(cppgc::Visitor* visitor) const {
27*3ac0a46fSAndroid Build Coastguard Worker   CXFA_LayoutItem::Trace(visitor);
28*3ac0a46fSAndroid Build Coastguard Worker   visitor->Trace(m_pOldSubform);
29*3ac0a46fSAndroid Build Coastguard Worker   visitor->Trace(m_pFFPageView);
30*3ac0a46fSAndroid Build Coastguard Worker }
31*3ac0a46fSAndroid Build Coastguard Worker 
GetLayout() const32*3ac0a46fSAndroid Build Coastguard Worker CXFA_LayoutProcessor* CXFA_ViewLayoutItem::GetLayout() const {
33*3ac0a46fSAndroid Build Coastguard Worker   return CXFA_LayoutProcessor::FromDocument(GetFormNode()->GetDocument());
34*3ac0a46fSAndroid Build Coastguard Worker }
35*3ac0a46fSAndroid Build Coastguard Worker 
GetPageIndex() const36*3ac0a46fSAndroid Build Coastguard Worker int32_t CXFA_ViewLayoutItem::GetPageIndex() const {
37*3ac0a46fSAndroid Build Coastguard Worker   auto* pLayout =
38*3ac0a46fSAndroid Build Coastguard Worker       CXFA_LayoutProcessor::FromDocument(GetFormNode()->GetDocument());
39*3ac0a46fSAndroid Build Coastguard Worker   return pLayout->GetLayoutPageMgr()->GetPageIndex(this);
40*3ac0a46fSAndroid Build Coastguard Worker }
41*3ac0a46fSAndroid Build Coastguard Worker 
GetPageSize() const42*3ac0a46fSAndroid Build Coastguard Worker CFX_SizeF CXFA_ViewLayoutItem::GetPageSize() const {
43*3ac0a46fSAndroid Build Coastguard Worker   CFX_SizeF size;
44*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Medium* pMedium =
45*3ac0a46fSAndroid Build Coastguard Worker       GetFormNode()->GetFirstChildByClass<CXFA_Medium>(XFA_Element::Medium);
46*3ac0a46fSAndroid Build Coastguard Worker   if (!pMedium)
47*3ac0a46fSAndroid Build Coastguard Worker     return size;
48*3ac0a46fSAndroid Build Coastguard Worker 
49*3ac0a46fSAndroid Build Coastguard Worker   size = CFX_SizeF(
50*3ac0a46fSAndroid Build Coastguard Worker       pMedium->JSObject()->GetMeasureInUnit(XFA_Attribute::Short, XFA_Unit::Pt),
51*3ac0a46fSAndroid Build Coastguard Worker       pMedium->JSObject()->GetMeasureInUnit(XFA_Attribute::Long, XFA_Unit::Pt));
52*3ac0a46fSAndroid Build Coastguard Worker   if (pMedium->JSObject()->GetEnum(XFA_Attribute::Orientation) ==
53*3ac0a46fSAndroid Build Coastguard Worker       XFA_AttributeValue::Landscape) {
54*3ac0a46fSAndroid Build Coastguard Worker     size = CFX_SizeF(size.height, size.width);
55*3ac0a46fSAndroid Build Coastguard Worker   }
56*3ac0a46fSAndroid Build Coastguard Worker   return size;
57*3ac0a46fSAndroid Build Coastguard Worker }
58*3ac0a46fSAndroid Build Coastguard Worker 
GetMasterPage() const59*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* CXFA_ViewLayoutItem::GetMasterPage() const {
60*3ac0a46fSAndroid Build Coastguard Worker   return GetFormNode();
61*3ac0a46fSAndroid Build Coastguard Worker }
62*3ac0a46fSAndroid Build Coastguard Worker 
SetOldSubform(CXFA_Node * pSubform)63*3ac0a46fSAndroid Build Coastguard Worker void CXFA_ViewLayoutItem::SetOldSubform(CXFA_Node* pSubform) {
64*3ac0a46fSAndroid Build Coastguard Worker   m_pOldSubform = pSubform;
65*3ac0a46fSAndroid Build Coastguard Worker }
66