summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fxjs/xfa/cjx_layoutpseudomodel.cpp9
-rw-r--r--fxjs/xfa/cjx_object.h1
-rw-r--r--xfa/fxfa/cxfa_fffield.cpp4
-rw-r--r--xfa/fxfa/cxfa_fftext.cpp4
-rw-r--r--xfa/fxfa/cxfa_fwltheme.cpp2
-rw-r--r--xfa/fxfa/parser/cxfa_contentlayoutitem.cpp79
-rw-r--r--xfa/fxfa/parser/cxfa_contentlayoutitem.h9
-rw-r--r--xfa/fxfa/parser/cxfa_layoutitem.cpp99
-rw-r--r--xfa/fxfa/parser/cxfa_layoutitem.h11
9 files changed, 101 insertions, 117 deletions
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index ea842c78e0..4c460c8a41 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -92,7 +92,8 @@ CJS_Return CJX_LayoutPseudoModel::HWXY(
if (!pDocLayout)
return CJS_Return();
- CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode);
+ CXFA_ContentLayoutItem* pLayoutItem =
+ ToContentLayoutItem(pDocLayout->GetLayoutItem(pNode));
if (!pLayoutItem)
return CJS_Return();
@@ -195,7 +196,8 @@ CJS_Return CJX_LayoutPseudoModel::pageSpan(
if (!pDocLayout)
return CJS_Return();
- CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode);
+ CXFA_ContentLayoutItem* pLayoutItem =
+ ToContentLayoutItem(pDocLayout->GetLayoutItem(pNode));
if (!pLayoutItem)
return CJS_Return(runtime->NewNumber(-1));
@@ -473,7 +475,8 @@ CJS_Return CJX_LayoutPseudoModel::PageInternals(
if (!pDocLayout)
return CJS_Return();
- CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode);
+ CXFA_ContentLayoutItem* pLayoutItem =
+ ToContentLayoutItem(pDocLayout->GetLayoutItem(pNode));
if (!pLayoutItem)
return CJS_Return(runtime->NewNumber(-1));
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 5b57cbe6e7..c9042b5049 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -19,6 +19,7 @@
#include "third_party/base/optional.h"
#include "third_party/base/span.h"
#include "xfa/fxfa/fxfa_basic.h"
+#include "xfa/fxfa/parser/cxfa_measurement.h"
class CFXJSE_Value;
class CFX_V8;
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index f3c1412361..8dd0a9ec4c 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -167,7 +167,7 @@ void CXFA_FFField::CapPlacement() {
CFX_RectF rtWidget = GetRectWithoutRotate();
CXFA_Margin* margin = m_pNode->GetMarginIfExists();
if (margin) {
- CXFA_LayoutItem* pItem = this;
+ CXFA_ContentLayoutItem* pItem = this;
float fLeftInset = margin->GetLeftInset();
float fRightInset = margin->GetRightInset();
float fTopInset = margin->GetTopInset();
@@ -195,7 +195,7 @@ void CXFA_FFField::CapPlacement() {
m_rtCaption.Reset();
} else {
fCapReserve = caption->GetReserve();
- CXFA_LayoutItem* pItem = this;
+ CXFA_ContentLayoutItem* pItem = this;
if (!pItem->GetPrev() && !pItem->GetNext()) {
m_rtCaption = rtWidget;
} else {
diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp
index 453a74b3b9..3012ab9f5f 100644
--- a/xfa/fxfa/cxfa_fftext.cpp
+++ b/xfa/fxfa/cxfa_fftext.cpp
@@ -42,7 +42,7 @@ void CXFA_FFText::RenderWidget(CXFA_Graphics* pGS,
CFX_RectF rtText = GetRectWithoutRotate();
CXFA_Margin* margin = m_pNode->GetMarginIfExists();
if (margin) {
- CXFA_LayoutItem* pItem = this;
+ CXFA_ContentLayoutItem* pItem = this;
if (!pItem->GetPrev() && !pItem->GetNext()) {
XFA_RectWithoutMargin(&rtText, margin);
} else {
@@ -78,7 +78,7 @@ bool CXFA_FFText::PerformLayout() {
return true;
pTextLayout->m_Blocks.clear();
- CXFA_LayoutItem* pItem = this;
+ CXFA_ContentLayoutItem* pItem = this;
if (!pItem->GetPrev() && !pItem->GetNext())
return true;
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index 1a94ba6446..73f03ce41c 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -157,7 +157,7 @@ CFX_RectF CXFA_FWLTheme::GetUIMargin(CFWL_ThemePart* pThemePart) const {
if (!pWidget)
return CFX_RectF();
- CXFA_LayoutItem* pItem = pWidget;
+ CXFA_ContentLayoutItem* pItem = pWidget;
CXFA_Node* pNode = pWidget->GetNode();
CFX_RectF rect = pNode->GetUIMargin();
CXFA_Para* para = pNode->GetParaIfExists();
diff --git a/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp b/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
index 1ee364b9b7..e763e2d5da 100644
--- a/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
@@ -7,6 +7,7 @@
#include "xfa/fxfa/parser/cxfa_contentlayoutitem.h"
#include "fxjs/xfa/cjx_object.h"
+#include "xfa/fxfa/parser/cxfa_margin.h"
#include "xfa/fxfa/parser/cxfa_node.h"
CXFA_ContentLayoutItem::CXFA_ContentLayoutItem(CXFA_Node* pNode)
@@ -19,3 +20,81 @@ CXFA_ContentLayoutItem::~CXFA_ContentLayoutItem() {
if (m_pFormNode->JSObject()->GetLayoutItem() == this)
m_pFormNode->JSObject()->SetLayoutItem(nullptr);
}
+
+CXFA_ContentLayoutItem* CXFA_ContentLayoutItem::GetFirst() {
+ CXFA_ContentLayoutItem* pCurNode = this;
+ while (pCurNode->m_pPrev)
+ pCurNode = pCurNode->m_pPrev;
+
+ return pCurNode;
+}
+
+CXFA_ContentLayoutItem* CXFA_ContentLayoutItem::GetLast() {
+ CXFA_ContentLayoutItem* pCurNode = this;
+ while (pCurNode->m_pNext)
+ pCurNode = pCurNode->m_pNext;
+
+ return pCurNode;
+}
+
+CFX_RectF CXFA_ContentLayoutItem::GetRect(bool bRelative) const {
+ CFX_PointF sPos = m_sPos;
+ CFX_SizeF sSize = m_sSize;
+ if (bRelative)
+ return CFX_RectF(sPos, sSize);
+
+ for (CXFA_LayoutItem* pLayoutItem = m_pParent; pLayoutItem;
+ pLayoutItem = pLayoutItem->m_pParent) {
+ if (CXFA_ContentLayoutItem* pContent = pLayoutItem->AsContentLayoutItem()) {
+ sPos += pContent->m_sPos;
+ CXFA_Margin* pMarginNode =
+ pContent->m_pFormNode->GetFirstChildByClass<CXFA_Margin>(
+ XFA_Element::Margin);
+ if (pMarginNode) {
+ sPos += CFX_PointF(pMarginNode->JSObject()
+ ->GetMeasure(XFA_Attribute::LeftInset)
+ .ToUnit(XFA_Unit::Pt),
+ pMarginNode->JSObject()
+ ->GetMeasure(XFA_Attribute::TopInset)
+ .ToUnit(XFA_Unit::Pt));
+ }
+ continue;
+ }
+
+ if (pLayoutItem->GetFormNode()->GetElementType() ==
+ XFA_Element::ContentArea) {
+ sPos += CFX_PointF(pLayoutItem->GetFormNode()
+ ->JSObject()
+ ->GetMeasure(XFA_Attribute::X)
+ .ToUnit(XFA_Unit::Pt),
+ pLayoutItem->GetFormNode()
+ ->JSObject()
+ ->GetMeasure(XFA_Attribute::Y)
+ .ToUnit(XFA_Unit::Pt));
+ break;
+ }
+ if (pLayoutItem->GetFormNode()->GetElementType() == XFA_Element::PageArea)
+ break;
+ }
+ return CFX_RectF(sPos, sSize);
+}
+
+int32_t CXFA_ContentLayoutItem::GetIndex() const {
+ int32_t iIndex = 0;
+ const CXFA_ContentLayoutItem* pCurNode = this;
+ while (pCurNode->m_pPrev) {
+ pCurNode = pCurNode->m_pPrev;
+ ++iIndex;
+ }
+ return iIndex;
+}
+
+int32_t CXFA_ContentLayoutItem::GetCount() const {
+ int32_t iCount = GetIndex() + 1;
+ const CXFA_ContentLayoutItem* pCurNode = this;
+ while (pCurNode->m_pNext) {
+ pCurNode = pCurNode->m_pNext;
+ iCount++;
+ }
+ return iCount;
+}
diff --git a/xfa/fxfa/parser/cxfa_contentlayoutitem.h b/xfa/fxfa/parser/cxfa_contentlayoutitem.h
index 500d3e4959..c7c440f9c2 100644
--- a/xfa/fxfa/parser/cxfa_contentlayoutitem.h
+++ b/xfa/fxfa/parser/cxfa_contentlayoutitem.h
@@ -14,6 +14,15 @@ class CXFA_ContentLayoutItem : public CXFA_LayoutItem {
explicit CXFA_ContentLayoutItem(CXFA_Node* pNode);
~CXFA_ContentLayoutItem() override;
+ CXFA_ContentLayoutItem* GetFirst();
+ CXFA_ContentLayoutItem* GetLast();
+ CXFA_ContentLayoutItem* GetPrev() const { return m_pPrev; }
+ CXFA_ContentLayoutItem* GetNext() const { return m_pNext; }
+
+ CFX_RectF GetRect(bool bRelative) const;
+ int32_t GetIndex() const;
+ int32_t GetCount() const;
+
CXFA_ContentLayoutItem* m_pPrev;
CXFA_ContentLayoutItem* m_pNext;
CFX_PointF m_sPos;
diff --git a/xfa/fxfa/parser/cxfa_layoutitem.cpp b/xfa/fxfa/parser/cxfa_layoutitem.cpp
index 42294a508b..8b1c30e8cf 100644
--- a/xfa/fxfa/parser/cxfa_layoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutitem.cpp
@@ -57,105 +57,6 @@ CXFA_ContainerLayoutItem* CXFA_LayoutItem::GetPage() const {
}
return nullptr;
}
-
-CFX_RectF CXFA_LayoutItem::GetRect(bool bRelative) const {
- ASSERT(m_bIsContentLayoutItem);
-
- auto* pThis = static_cast<const CXFA_ContentLayoutItem*>(this);
- CFX_PointF sPos = pThis->m_sPos;
- CFX_SizeF sSize = pThis->m_sSize;
- if (bRelative)
- return CFX_RectF(sPos, sSize);
-
- for (CXFA_LayoutItem* pLayoutItem = pThis->m_pParent; pLayoutItem;
- pLayoutItem = pLayoutItem->m_pParent) {
- if (CXFA_ContentLayoutItem* pContent = pLayoutItem->AsContentLayoutItem()) {
- sPos += pContent->m_sPos;
- CXFA_Margin* pMarginNode =
- pLayoutItem->m_pFormNode->GetFirstChildByClass<CXFA_Margin>(
- XFA_Element::Margin);
- if (pMarginNode) {
- sPos += CFX_PointF(pMarginNode->JSObject()
- ->GetMeasure(XFA_Attribute::LeftInset)
- .ToUnit(XFA_Unit::Pt),
- pMarginNode->JSObject()
- ->GetMeasure(XFA_Attribute::TopInset)
- .ToUnit(XFA_Unit::Pt));
- }
- continue;
- }
-
- if (pLayoutItem->m_pFormNode->GetElementType() ==
- XFA_Element::ContentArea) {
- sPos += CFX_PointF(pLayoutItem->m_pFormNode->JSObject()
- ->GetMeasure(XFA_Attribute::X)
- .ToUnit(XFA_Unit::Pt),
- pLayoutItem->m_pFormNode->JSObject()
- ->GetMeasure(XFA_Attribute::Y)
- .ToUnit(XFA_Unit::Pt));
- break;
- }
- if (pLayoutItem->m_pFormNode->GetElementType() == XFA_Element::PageArea)
- break;
- }
- return CFX_RectF(sPos, sSize);
-}
-
-CXFA_LayoutItem* CXFA_LayoutItem::GetFirst() {
- ASSERT(m_bIsContentLayoutItem);
- CXFA_ContentLayoutItem* pCurNode = static_cast<CXFA_ContentLayoutItem*>(this);
- while (pCurNode->m_pPrev)
- pCurNode = pCurNode->m_pPrev;
-
- return pCurNode;
-}
-
-const CXFA_LayoutItem* CXFA_LayoutItem::GetLast() const {
- ASSERT(m_bIsContentLayoutItem);
- const CXFA_ContentLayoutItem* pCurNode =
- static_cast<const CXFA_ContentLayoutItem*>(this);
- while (pCurNode->m_pNext)
- pCurNode = pCurNode->m_pNext;
-
- return pCurNode;
-}
-
-CXFA_LayoutItem* CXFA_LayoutItem::GetPrev() const {
- ASSERT(m_bIsContentLayoutItem);
-
- return static_cast<const CXFA_ContentLayoutItem*>(this)->m_pPrev;
-}
-
-CXFA_LayoutItem* CXFA_LayoutItem::GetNext() const {
- ASSERT(m_bIsContentLayoutItem);
- return static_cast<const CXFA_ContentLayoutItem*>(this)->m_pNext;
-}
-
-int32_t CXFA_LayoutItem::GetIndex() const {
- ASSERT(m_bIsContentLayoutItem);
- int32_t iIndex = 0;
- const CXFA_ContentLayoutItem* pCurNode =
- static_cast<const CXFA_ContentLayoutItem*>(this);
- while (pCurNode->m_pPrev) {
- pCurNode = pCurNode->m_pPrev;
- ++iIndex;
- }
- return iIndex;
-}
-
-int32_t CXFA_LayoutItem::GetCount() const {
- ASSERT(m_bIsContentLayoutItem);
-
- int32_t iCount = GetIndex() + 1;
- const CXFA_ContentLayoutItem* pCurNode =
- static_cast<const CXFA_ContentLayoutItem*>(this);
- while (pCurNode->m_pNext) {
- pCurNode = pCurNode->m_pNext;
- iCount++;
- }
- return iCount;
-}
-
void CXFA_LayoutItem::AddChild(CXFA_LayoutItem* pChildItem) {
if (pChildItem->m_pParent)
pChildItem->m_pParent->RemoveChild(pChildItem);
diff --git a/xfa/fxfa/parser/cxfa_layoutitem.h b/xfa/fxfa/parser/cxfa_layoutitem.h
index 6e51a05e69..f5568df575 100644
--- a/xfa/fxfa/parser/cxfa_layoutitem.h
+++ b/xfa/fxfa/parser/cxfa_layoutitem.h
@@ -24,19 +24,10 @@ class CXFA_LayoutItem {
CXFA_ContentLayoutItem* AsContentLayoutItem();
CXFA_ContainerLayoutItem* GetPage() const;
- CFX_RectF GetRect(bool bRelative) const;
-
+ CXFA_LayoutItem* GetParent() const { return m_pParent; }
CXFA_Node* GetFormNode() const { return m_pFormNode.Get(); }
void SetFormNode(CXFA_Node* pNode) { m_pFormNode = pNode; }
- int32_t GetIndex() const;
- int32_t GetCount() const;
-
- CXFA_LayoutItem* GetParent() const { return m_pParent; }
- CXFA_LayoutItem* GetFirst();
- const CXFA_LayoutItem* GetLast() const;
- CXFA_LayoutItem* GetPrev() const;
- CXFA_LayoutItem* GetNext() const;
void AddChild(CXFA_LayoutItem* pChildItem);
void AddHeadChild(CXFA_LayoutItem* pChildItem);