From cbd4410908e2a4898fdd5e0d6d17591fc2c71f54 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Wed, 3 Jan 2018 11:11:16 -0500 Subject: Fold CXFA_MarginData into CXFA_Margin This CL removes the CXFA_MarginData wrapper and moves the methods directly to CXFA_Margin. Change-Id: I7c9e979fb78d0d356605f1318489daabcb8c32cd Reviewed-on: https://pdfium-review.googlesource.com/22110 Reviewed-by: Henrique Nakashima Commit-Queue: dsinclair --- BUILD.gn | 2 -- fxjs/xfa/cjx_object.cpp | 8 +++++ fxjs/xfa/cjx_object.h | 1 + xfa/fxfa/cxfa_ffarc.cpp | 6 ++-- xfa/fxfa/cxfa_ffcheckbutton.cpp | 26 ++++++++-------- xfa/fxfa/cxfa_ffcheckbutton.h | 2 +- xfa/fxfa/cxfa_fffield.cpp | 45 +++++++++++++-------------- xfa/fxfa/cxfa_fffield.h | 4 +-- xfa/fxfa/cxfa_ffimage.cpp | 6 ++-- xfa/fxfa/cxfa_ffline.cpp | 6 ++-- xfa/fxfa/cxfa_ffpushbutton.cpp | 12 ++++---- xfa/fxfa/cxfa_ffrectangle.cpp | 6 ++-- xfa/fxfa/cxfa_fftext.cpp | 23 +++++++------- xfa/fxfa/cxfa_ffwidget.cpp | 15 ++++----- xfa/fxfa/cxfa_ffwidget.h | 2 +- xfa/fxfa/cxfa_widgetacc.cpp | 59 ++++++++++++++++++------------------ xfa/fxfa/cxfa_widgetacc.h | 1 - xfa/fxfa/parser/cxfa_boxdata.cpp | 7 ++--- xfa/fxfa/parser/cxfa_boxdata.h | 4 +-- xfa/fxfa/parser/cxfa_captiondata.cpp | 7 ++--- xfa/fxfa/parser/cxfa_captiondata.h | 4 +-- xfa/fxfa/parser/cxfa_datadata.cpp | 6 +--- xfa/fxfa/parser/cxfa_margin.cpp | 32 +++++++++++++++++++ xfa/fxfa/parser/cxfa_margin.h | 10 ++++++ xfa/fxfa/parser/cxfa_margindata.cpp | 41 ------------------------- xfa/fxfa/parser/cxfa_margindata.h | 30 ------------------ xfa/fxfa/parser/cxfa_widgetdata.cpp | 25 +++++++-------- xfa/fxfa/parser/cxfa_widgetdata.h | 4 +-- 28 files changed, 183 insertions(+), 211 deletions(-) delete mode 100644 xfa/fxfa/parser/cxfa_margindata.cpp delete mode 100644 xfa/fxfa/parser/cxfa_margindata.h diff --git a/BUILD.gn b/BUILD.gn index b6482c761f..453354414e 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -2432,8 +2432,6 @@ if (pdf_enable_xfa) { "xfa/fxfa/parser/cxfa_map.h", "xfa/fxfa/parser/cxfa_margin.cpp", "xfa/fxfa/parser/cxfa_margin.h", - "xfa/fxfa/parser/cxfa_margindata.cpp", - "xfa/fxfa/parser/cxfa_margindata.h", "xfa/fxfa/parser/cxfa_mdp.cpp", "xfa/fxfa/parser/cxfa_mdp.h", "xfa/fxfa/parser/cxfa_measurement.cpp", diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp index 304b861dcf..b1e3030020 100644 --- a/fxjs/xfa/cjx_object.cpp +++ b/fxjs/xfa/cjx_object.cpp @@ -431,6 +431,14 @@ pdfium::Optional CJX_Object::TryMeasure( return ToNode(GetXFAObject())->GetDefaultMeasurement(eAttr); } +pdfium::Optional CJX_Object::TryMeasureAsFloat( + XFA_Attribute attr) const { + pdfium::Optional measure = TryMeasure(attr, false); + if (measure) + return {measure->ToUnit(XFA_Unit::Pt)}; + return {}; +} + CXFA_Measurement CJX_Object::GetMeasure(XFA_Attribute eAttr) const { return TryMeasure(eAttr, true).value_or(CXFA_Measurement()); } diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h index f6ce3ccfb8..32bb01f3f6 100644 --- a/fxjs/xfa/cjx_object.h +++ b/fxjs/xfa/cjx_object.h @@ -197,6 +197,7 @@ class CJX_Object { pdfium::Optional TryMeasure(XFA_Attribute eAttr, bool bUseDefault) const; + pdfium::Optional TryMeasureAsFloat(XFA_Attribute attr) const; bool SetMeasure(XFA_Attribute eAttr, CXFA_Measurement mValue, bool bNotify); CXFA_Measurement GetMeasure(XFA_Attribute eAttr) const; diff --git a/xfa/fxfa/cxfa_ffarc.cpp b/xfa/fxfa/cxfa_ffarc.cpp index 7f9e938925..e670ba9785 100644 --- a/xfa/fxfa/cxfa_ffarc.cpp +++ b/xfa/fxfa/cxfa_ffarc.cpp @@ -23,9 +23,9 @@ void CXFA_FFArc::RenderWidget(CXFA_Graphics* pGS, return; CFX_RectF rtArc = GetRectWithoutRotate(); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) - XFA_RectWidthoutMargin(rtArc, marginData); + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) + XFA_RectWidthoutMargin(rtArc, margin); CFX_Matrix mtRotate = GetRotateMatrix(); mtRotate.Concat(matrix); diff --git a/xfa/fxfa/cxfa_ffcheckbutton.cpp b/xfa/fxfa/cxfa_ffcheckbutton.cpp index 8dc2882504..00369784e1 100644 --- a/xfa/fxfa/cxfa_ffcheckbutton.cpp +++ b/xfa/fxfa/cxfa_ffcheckbutton.cpp @@ -89,10 +89,10 @@ bool CXFA_FFCheckButton::PerformLayout() { CXFA_FFWidget::PerformLayout(); float fCheckSize = m_pDataAcc->GetCheckButtonSize(); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); + CXFA_Margin* margin = m_pDataAcc->GetMargin(); CFX_RectF rtWidget = GetRectWithoutRotate(); - if (marginData.HasValidNode()) - XFA_RectWidthoutMargin(rtWidget, marginData); + if (margin) + XFA_RectWidthoutMargin(rtWidget, margin); XFA_AttributeEnum iCapPlacement = XFA_AttributeEnum::Unknown; float fCapReserve = 0; @@ -120,18 +120,18 @@ bool CXFA_FFCheckButton::PerformLayout() { } m_rtUI = rtWidget; - CXFA_MarginData captionMarginData = captionData.GetMarginData(); + CXFA_Margin* captionMargin = captionData.GetMargin(); switch (iCapPlacement) { case XFA_AttributeEnum::Left: { m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(captionMarginData); + CapLeftRightPlacement(captionMargin); m_rtUI.width -= fCapReserve; m_rtUI.left += fCapReserve; break; } case XFA_AttributeEnum::Top: { m_rtCaption.height = fCapReserve; - XFA_RectWidthoutMargin(m_rtCaption, captionMarginData); + XFA_RectWidthoutMargin(m_rtCaption, captionMargin); m_rtUI.height -= fCapReserve; m_rtUI.top += fCapReserve; break; @@ -139,14 +139,14 @@ bool CXFA_FFCheckButton::PerformLayout() { case XFA_AttributeEnum::Right: { m_rtCaption.left = m_rtCaption.right() - fCapReserve; m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(captionMarginData); + CapLeftRightPlacement(captionMargin); m_rtUI.width -= fCapReserve; break; } case XFA_AttributeEnum::Bottom: { m_rtCaption.top = m_rtCaption.bottom() - fCapReserve; m_rtCaption.height = fCapReserve; - XFA_RectWidthoutMargin(m_rtCaption, captionMarginData); + XFA_RectWidthoutMargin(m_rtCaption, captionMargin); m_rtUI.height -= fCapReserve; break; } @@ -173,9 +173,9 @@ bool CXFA_FFCheckButton::PerformLayout() { m_rtCheckBox = m_rtUI; CXFA_BorderData borderUIData = m_pDataAcc->GetUIBorderData(); if (borderUIData.HasValidNode()) { - CXFA_MarginData borderMarginData = borderUIData.GetMarginData(); - if (borderMarginData.HasValidNode()) - XFA_RectWidthoutMargin(m_rtUI, borderMarginData); + CXFA_Margin* borderMargin = borderUIData.GetMargin(); + if (borderMargin) + XFA_RectWidthoutMargin(m_rtUI, borderMargin); } m_rtUI.Normalize(); @@ -188,8 +188,8 @@ bool CXFA_FFCheckButton::PerformLayout() { } void CXFA_FFCheckButton::CapLeftRightPlacement( - const CXFA_MarginData& captionMarginData) { - XFA_RectWidthoutMargin(m_rtCaption, captionMarginData); + const CXFA_Margin* captionMargin) { + XFA_RectWidthoutMargin(m_rtCaption, captionMargin); if (m_rtCaption.height < 0) m_rtCaption.top += m_rtCaption.height; if (m_rtCaption.width < 0) { diff --git a/xfa/fxfa/cxfa_ffcheckbutton.h b/xfa/fxfa/cxfa_ffcheckbutton.h index 36d97d78a9..56fd1c9d7b 100644 --- a/xfa/fxfa/cxfa_ffcheckbutton.h +++ b/xfa/fxfa/cxfa_ffcheckbutton.h @@ -35,7 +35,7 @@ class CXFA_FFCheckButton : public CXFA_FFField { private: bool CommitData() override; bool IsDataChanged() override; - void CapLeftRightPlacement(const CXFA_MarginData& captionMarginData); + void CapLeftRightPlacement(const CXFA_Margin* captionMargin); void AddUIMargin(XFA_AttributeEnum iCapPlacement); XFA_CHECKSTATE FWLState2XFAState(); diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp index 827d38d8c3..75bd064e29 100644 --- a/xfa/fxfa/cxfa_fffield.cpp +++ b/xfa/fxfa/cxfa_fffield.cpp @@ -23,6 +23,7 @@ #include "xfa/fxfa/cxfa_fwltheme.h" #include "xfa/fxfa/cxfa_textlayout.h" #include "xfa/fxfa/parser/cxfa_calculate.h" +#include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxfa/parser/cxfa_node.h" #include "xfa/fxfa/parser/cxfa_script.h" #include "xfa/fxgraphics/cxfa_gecolor.h" @@ -168,13 +169,13 @@ bool CXFA_FFField::PerformLayout() { void CXFA_FFField::CapPlacement() { CFX_RectF rtWidget = GetRectWithoutRotate(); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) { + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) { CXFA_LayoutItem* pItem = this; - float fLeftInset = marginData.GetLeftInset(); - float fRightInset = marginData.GetRightInset(); - float fTopInset = marginData.GetTopInset(); - float fBottomInset = marginData.GetBottomInset(); + float fLeftInset = margin->GetLeftInset(); + float fRightInset = margin->GetRightInset(); + float fTopInset = margin->GetTopInset(); + float fBottomInset = margin->GetBottomInset(); if (!pItem->GetPrev() && !pItem->GetNext()) { rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset); } else { @@ -209,7 +210,7 @@ void CXFA_FFField::CapPlacement() { m_rtCaption.height += pItem->GetRect(false).Height(); pItem = pItem->GetNext(); } - XFA_RectWidthoutMargin(m_rtCaption, marginData); + XFA_RectWidthoutMargin(m_rtCaption, margin); } CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout(); @@ -231,16 +232,14 @@ void CXFA_FFField::CapPlacement() { switch (iCapPlacement) { case XFA_AttributeEnum::Left: { m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(captionData.GetMarginData(), rtWidget, - iCapPlacement); + CapLeftRightPlacement(captionData.GetMargin(), rtWidget, iCapPlacement); m_rtUI.width -= fCapReserve; m_rtUI.left += fCapReserve; break; } case XFA_AttributeEnum::Top: { m_rtCaption.height = fCapReserve; - CapTopBottomPlacement(captionData.GetMarginData(), rtWidget, - iCapPlacement); + CapTopBottomPlacement(captionData.GetMargin(), rtWidget, iCapPlacement); m_rtUI.top += fCapReserve; m_rtUI.height -= fCapReserve; break; @@ -248,16 +247,14 @@ void CXFA_FFField::CapPlacement() { case XFA_AttributeEnum::Right: { m_rtCaption.left = m_rtCaption.right() - fCapReserve; m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(captionData.GetMarginData(), rtWidget, - iCapPlacement); + CapLeftRightPlacement(captionData.GetMargin(), rtWidget, iCapPlacement); m_rtUI.width -= fCapReserve; break; } case XFA_AttributeEnum::Bottom: { m_rtCaption.top = m_rtCaption.bottom() - fCapReserve; m_rtCaption.height = fCapReserve; - CapTopBottomPlacement(captionData.GetMarginData(), rtWidget, - iCapPlacement); + CapTopBottomPlacement(captionData.GetMargin(), rtWidget, iCapPlacement); m_rtUI.height -= fCapReserve; break; } @@ -269,20 +266,20 @@ void CXFA_FFField::CapPlacement() { CXFA_BorderData borderUIData = m_pDataAcc->GetUIBorderData(); if (borderUIData.HasValidNode()) { - CXFA_MarginData borderMarginData = borderUIData.GetMarginData(); - if (borderMarginData.HasValidNode()) - XFA_RectWidthoutMargin(m_rtUI, borderMarginData); + CXFA_Margin* borderMargin = borderUIData.GetMargin(); + if (borderMargin) + XFA_RectWidthoutMargin(m_rtUI, borderMargin); } m_rtUI.Normalize(); } -void CXFA_FFField::CapTopBottomPlacement(const CXFA_MarginData& marginData, +void CXFA_FFField::CapTopBottomPlacement(const CXFA_Margin* margin, const CFX_RectF& rtWidget, XFA_AttributeEnum iCapPlacement) { CFX_RectF rtUIMargin = m_pDataAcc->GetUIMargin(); m_rtCaption.left += rtUIMargin.left; - if (marginData.HasValidNode()) { - XFA_RectWidthoutMargin(m_rtCaption, marginData); + if (margin) { + XFA_RectWidthoutMargin(m_rtCaption, margin); if (m_rtCaption.height < 0) m_rtCaption.top += m_rtCaption.height; } @@ -302,14 +299,14 @@ void CXFA_FFField::CapTopBottomPlacement(const CXFA_MarginData& marginData, } } -void CXFA_FFField::CapLeftRightPlacement(const CXFA_MarginData& marginData, +void CXFA_FFField::CapLeftRightPlacement(const CXFA_Margin* margin, const CFX_RectF& rtWidget, XFA_AttributeEnum iCapPlacement) { CFX_RectF rtUIMargin = m_pDataAcc->GetUIMargin(); m_rtCaption.top += rtUIMargin.top; m_rtCaption.height -= rtUIMargin.top; - if (marginData.HasValidNode()) { - XFA_RectWidthoutMargin(m_rtCaption, marginData); + if (margin) { + XFA_RectWidthoutMargin(m_rtCaption, margin); if (m_rtCaption.height < 0) m_rtCaption.top += m_rtCaption.height; } diff --git a/xfa/fxfa/cxfa_fffield.h b/xfa/fxfa/cxfa_fffield.h index b566fe970d..f6051275d2 100644 --- a/xfa/fxfa/cxfa_fffield.h +++ b/xfa/fxfa/cxfa_fffield.h @@ -83,10 +83,10 @@ class CXFA_FFField : public CXFA_FFWidget, public IFWL_WidgetDelegate { void DrawFocus(CXFA_Graphics* pGS, CFX_Matrix* pMatrix); void TranslateFWLMessage(CFWL_Message* pMessage); void CapPlacement(); - void CapTopBottomPlacement(const CXFA_MarginData& marginData, + void CapTopBottomPlacement(const CXFA_Margin* margin, const CFX_RectF& rtWidget, XFA_AttributeEnum iCapPlacement); - void CapLeftRightPlacement(const CXFA_MarginData& marginData, + void CapLeftRightPlacement(const CXFA_Margin* margin, const CFX_RectF& rtWidget, XFA_AttributeEnum iCapPlacement); void SetEditScrollOffset(); diff --git a/xfa/fxfa/cxfa_ffimage.cpp b/xfa/fxfa/cxfa_ffimage.cpp index 864d34e101..c37234c686 100644 --- a/xfa/fxfa/cxfa_ffimage.cpp +++ b/xfa/fxfa/cxfa_ffimage.cpp @@ -51,9 +51,9 @@ void CXFA_FFImage::RenderWidget(CXFA_Graphics* pGS, return; CFX_RectF rtImage = GetRectWithoutRotate(); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) - XFA_RectWidthoutMargin(rtImage, marginData); + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) + XFA_RectWidthoutMargin(rtImage, margin); XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left; XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top; diff --git a/xfa/fxfa/cxfa_ffline.cpp b/xfa/fxfa/cxfa_ffline.cpp index fb2c98a1a9..bbe928f91a 100644 --- a/xfa/fxfa/cxfa_ffline.cpp +++ b/xfa/fxfa/cxfa_ffline.cpp @@ -109,9 +109,9 @@ void CXFA_FFLine::RenderWidget(CXFA_Graphics* pGS, mtRotate.Concat(matrix); CFX_RectF rtLine = GetRectWithoutRotate(); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) - XFA_RectWidthoutMargin(rtLine, marginData); + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) + XFA_RectWidthoutMargin(rtLine, margin); GetRectFromHand(rtLine, lineData.GetHand(), fLineWidth); CXFA_GEPath linePath; diff --git a/xfa/fxfa/cxfa_ffpushbutton.cpp b/xfa/fxfa/cxfa_ffpushbutton.cpp index 615c8ae16c..914b350767 100644 --- a/xfa/fxfa/cxfa_ffpushbutton.cpp +++ b/xfa/fxfa/cxfa_ffpushbutton.cpp @@ -97,15 +97,15 @@ bool CXFA_FFPushButton::PerformLayout() { CFX_RectF rtWidget = GetRectWithoutRotate(); m_rtUI = rtWidget; - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) - XFA_RectWidthoutMargin(rtWidget, marginData); + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) + XFA_RectWidthoutMargin(rtWidget, margin); CXFA_CaptionData captionData = m_pDataAcc->GetCaptionData(); m_rtCaption = rtWidget; - CXFA_MarginData captionMarginData = captionData.GetMarginData(); - if (captionMarginData.HasValidNode()) - XFA_RectWidthoutMargin(m_rtCaption, captionMarginData); + CXFA_Margin* captionMargin = captionData.GetMargin(); + if (captionMargin) + XFA_RectWidthoutMargin(m_rtCaption, captionMargin); LayoutHighlightCaption(); SetFWLRect(); diff --git a/xfa/fxfa/cxfa_ffrectangle.cpp b/xfa/fxfa/cxfa_ffrectangle.cpp index 063a9e9865..080488418d 100644 --- a/xfa/fxfa/cxfa_ffrectangle.cpp +++ b/xfa/fxfa/cxfa_ffrectangle.cpp @@ -24,9 +24,9 @@ void CXFA_FFRectangle::RenderWidget(CXFA_Graphics* pGS, return; CFX_RectF rect = GetRectWithoutRotate(); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) - XFA_RectWidthoutMargin(rect, marginData); + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) + XFA_RectWidthoutMargin(rect, margin); CFX_Matrix mtRotate = GetRotateMatrix(); mtRotate.Concat(matrix); diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp index 606c22e130..46a58c24c9 100644 --- a/xfa/fxfa/cxfa_fftext.cpp +++ b/xfa/fxfa/cxfa_fftext.cpp @@ -17,6 +17,7 @@ #include "xfa/fxfa/cxfa_pieceline.h" #include "xfa/fxfa/cxfa_textlayout.h" #include "xfa/fxfa/cxfa_textpiece.h" +#include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxgraphics/cxfa_graphics.h" CXFA_FFText::CXFA_FFText(CXFA_WidgetAcc* pDataAcc) : CXFA_FFDraw(pDataAcc) {} @@ -40,21 +41,21 @@ void CXFA_FFText::RenderWidget(CXFA_Graphics* pGS, CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice(); CFX_RectF rtText = GetRectWithoutRotate(); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) { + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) { CXFA_LayoutItem* pItem = this; if (!pItem->GetPrev() && !pItem->GetNext()) { - XFA_RectWidthoutMargin(rtText, marginData); + XFA_RectWidthoutMargin(rtText, margin); } else { float fTopInset = 0; float fBottomInset = 0; if (!pItem->GetPrev()) - fTopInset = marginData.GetTopInset(); + fTopInset = margin->GetTopInset(); else if (!pItem->GetNext()) - fBottomInset = marginData.GetBottomInset(); + fBottomInset = margin->GetBottomInset(); - rtText.Deflate(marginData.GetLeftInset(), fTopInset, - marginData.GetRightInset(), fBottomInset); + rtText.Deflate(margin->GetLeftInset(), fTopInset, margin->GetRightInset(), + fBottomInset); } } @@ -85,12 +86,12 @@ bool CXFA_FFText::PerformLayout() { pItem = pItem->GetFirst(); while (pItem) { CFX_RectF rtText = pItem->GetRect(false); - CXFA_MarginData marginData = m_pDataAcc->GetMarginData(); - if (marginData.HasValidNode()) { + CXFA_Margin* margin = m_pDataAcc->GetMargin(); + if (margin) { if (!pItem->GetPrev()) - rtText.height -= marginData.GetTopInset(); + rtText.height -= margin->GetTopInset(); else if (!pItem->GetNext()) - rtText.height -= marginData.GetBottomInset(); + rtText.height -= margin->GetBottomInset(); } pTextLayout->ItemBlocks(rtText, pItem->GetIndex()); pItem = pItem->GetNext(); diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp index fdb10a34f2..9367301175 100644 --- a/xfa/fxfa/cxfa_ffwidget.cpp +++ b/xfa/fxfa/cxfa_ffwidget.cpp @@ -31,6 +31,7 @@ #include "xfa/fxfa/cxfa_textlayout.h" #include "xfa/fxfa/cxfa_widgetacc.h" #include "xfa/fxfa/parser/cxfa_cornerdata.h" +#include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxfa/parser/cxfa_node.h" #include "xfa/fxgraphics/cxfa_gecolor.h" #include "xfa/fxgraphics/cxfa_gepath.h" @@ -989,9 +990,9 @@ void CXFA_FFWidget::RenderWidget(CXFA_Graphics* pGS, return; CFX_RectF rtBorder = GetRectWithoutRotate(); - CXFA_MarginData marginData = borderData.GetMarginData(); - if (marginData.HasValidNode()) - XFA_RectWidthoutMargin(rtBorder, marginData); + CXFA_Margin* margin = borderData.GetMargin(); + if (margin) + XFA_RectWidthoutMargin(rtBorder, margin); rtBorder.Normalize(); DrawBorder(pGS, borderData, rtBorder, matrix); @@ -2016,13 +2017,13 @@ RetainPtr XFA_LoadImageFromBuffer( } void XFA_RectWidthoutMargin(CFX_RectF& rt, - const CXFA_MarginData& marginData, + const CXFA_Margin* margin, bool bUI) { - if (!marginData.HasValidNode()) + if (!margin) return; - rt.Deflate(marginData.GetLeftInset(), marginData.GetTopInset(), - marginData.GetRightInset(), marginData.GetBottomInset()); + rt.Deflate(margin->GetLeftInset(), margin->GetTopInset(), + margin->GetRightInset(), margin->GetBottomInset()); } CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem) { diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h index a258e02e38..ac3d985094 100644 --- a/xfa/fxfa/cxfa_ffwidget.h +++ b/xfa/fxfa/cxfa_ffwidget.h @@ -63,7 +63,7 @@ RetainPtr XFA_LoadImageFromBuffer( FXCODEC_IMAGE_TYPE XFA_GetImageType(const WideString& wsType); char* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len); void XFA_RectWidthoutMargin(CFX_RectF& rt, - const CXFA_MarginData& marginData, + const CXFA_Margin* margin, bool bUI = false); CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem); bool XFA_IsCreateWidget(XFA_Element iType); diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp index dcf621f442..ec33159055 100644 --- a/xfa/fxfa/cxfa_widgetacc.cpp +++ b/xfa/fxfa/cxfa_widgetacc.cpp @@ -25,6 +25,7 @@ #include "xfa/fxfa/parser/cxfa_items.h" #include "xfa/fxfa/parser/cxfa_layoutprocessor.h" #include "xfa/fxfa/parser/cxfa_localevalue.h" +#include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxfa/parser/cxfa_node.h" #include "xfa/fxfa/parser/cxfa_para.h" #include "xfa/fxfa/parser/cxfa_script.h" @@ -725,12 +726,12 @@ void CXFA_WidgetAcc::CalcCaptionSize(CFX_SizeF& szCap) { } } - CXFA_MarginData captionMarginData = captionData.GetMarginData(); - if (captionMarginData.HasValidNode()) { - float fLeftInset = captionMarginData.GetLeftInset(); - float fTopInset = captionMarginData.GetTopInset(); - float fRightInset = captionMarginData.GetRightInset(); - float fBottomInset = captionMarginData.GetBottomInset(); + CXFA_Margin* captionMargin = captionData.GetMargin(); + if (captionMargin) { + float fLeftInset = captionMargin->GetLeftInset(); + float fTopInset = captionMargin->GetTopInset(); + float fRightInset = captionMargin->GetRightInset(); + float fBottomInset = captionMargin->GetBottomInset(); if (bReserveExit) { bVert ? (szCap.width += fLeftInset + fRightInset) : (szCap.height += fTopInset + fBottomInset); @@ -768,10 +769,10 @@ bool CXFA_WidgetAcc::CalculateFieldAutoSize(CFX_SizeF& size) { } bool CXFA_WidgetAcc::CalculateWidgetAutoSize(CFX_SizeF& size) { - CXFA_MarginData marginData = GetMarginData(); - if (marginData.HasValidNode()) { - size.width += marginData.GetLeftInset() + marginData.GetRightInset(); - size.height += marginData.GetTopInset() + marginData.GetBottomInset(); + CXFA_Margin* margin = GetMargin(); + if (margin) { + size.width += margin->GetLeftInset() + margin->GetRightInset(); + size.height += margin->GetTopInset() + margin->GetBottomInset(); } CXFA_Para* para = GetPara(); @@ -860,9 +861,9 @@ bool CXFA_WidgetAcc::CalculateTextEditAutoSize(CFX_SizeF& size) { } CFX_RectF rtUIMargin = GetUIMargin(); size.width -= rtUIMargin.left + rtUIMargin.width; - CXFA_MarginData marginData = GetMarginData(); - if (marginData.HasValidNode()) - size.width -= marginData.GetLeftInset() + marginData.GetRightInset(); + CXFA_Margin* margin = GetMargin(); + if (margin) + size.width -= margin->GetLeftInset() + margin->GetRightInset(); CalculateTextContentSize(size); size.height += rtUIMargin.top + rtUIMargin.height; @@ -1005,9 +1006,9 @@ void CXFA_WidgetAcc::LoadText() { } float CXFA_WidgetAcc::CalculateWidgetAutoWidth(float fWidthCalc) { - CXFA_MarginData marginData = GetMarginData(); - if (marginData.HasValidNode()) - fWidthCalc += marginData.GetLeftInset() + marginData.GetRightInset(); + CXFA_Margin* margin = GetMargin(); + if (margin) + fWidthCalc += margin->GetLeftInset() + margin->GetRightInset(); pdfium::Optional min = TryMinWidth(); if (min) @@ -1021,16 +1022,16 @@ float CXFA_WidgetAcc::CalculateWidgetAutoWidth(float fWidthCalc) { } float CXFA_WidgetAcc::GetWidthWithoutMargin(float fWidthCalc) { - CXFA_MarginData marginData = GetMarginData(); - if (marginData.HasValidNode()) - fWidthCalc -= marginData.GetLeftInset() + marginData.GetRightInset(); + CXFA_Margin* margin = GetMargin(); + if (margin) + fWidthCalc -= margin->GetLeftInset() + margin->GetRightInset(); return fWidthCalc; } float CXFA_WidgetAcc::CalculateWidgetAutoHeight(float fHeightCalc) { - CXFA_MarginData marginData = GetMarginData(); - if (marginData.HasValidNode()) - fHeightCalc += marginData.GetTopInset() + marginData.GetBottomInset(); + CXFA_Margin* margin = GetMargin(); + if (margin) + fHeightCalc += margin->GetTopInset() + margin->GetBottomInset(); pdfium::Optional min = TryMinHeight(); if (min) @@ -1044,9 +1045,9 @@ float CXFA_WidgetAcc::CalculateWidgetAutoHeight(float fHeightCalc) { } float CXFA_WidgetAcc::GetHeightWithoutMargin(float fHeightCalc) { - CXFA_MarginData marginData = GetMarginData(); - if (marginData.HasValidNode()) - fHeightCalc -= marginData.GetTopInset() + marginData.GetBottomInset(); + CXFA_Margin* margin = GetMargin(); + if (margin) + fHeightCalc -= margin->GetTopInset() + margin->GetBottomInset(); return fHeightCalc; } @@ -1149,10 +1150,10 @@ bool CXFA_WidgetAcc::FindSplitPos(int32_t iBlockIndex, float& fCalcHeight) { float fTopInset = 0; float fBottomInset = 0; if (iBlockIndex == 0) { - CXFA_MarginData marginData = GetMarginData(); - if (marginData.HasValidNode()) { - fTopInset = marginData.GetTopInset(); - fBottomInset = marginData.GetBottomInset(); + CXFA_Margin* margin = GetMargin(); + if (margin) { + fTopInset = margin->GetTopInset(); + fBottomInset = margin->GetBottomInset(); } CFX_RectF rtUIMargin = GetUIMargin(); diff --git a/xfa/fxfa/cxfa_widgetacc.h b/xfa/fxfa/cxfa_widgetacc.h index e193bd2069..35bed64db1 100644 --- a/xfa/fxfa/cxfa_widgetacc.h +++ b/xfa/fxfa/cxfa_widgetacc.h @@ -17,7 +17,6 @@ #include "xfa/fxfa/parser/cxfa_boxdata.h" #include "xfa/fxfa/parser/cxfa_eventdata.h" #include "xfa/fxfa/parser/cxfa_imagedata.h" -#include "xfa/fxfa/parser/cxfa_margindata.h" #include "xfa/fxfa/parser/cxfa_widgetdata.h" class CFGAS_GEFont; diff --git a/xfa/fxfa/parser/cxfa_boxdata.cpp b/xfa/fxfa/parser/cxfa_boxdata.cpp index 6e27c71e56..31fefbf93d 100644 --- a/xfa/fxfa/parser/cxfa_boxdata.cpp +++ b/xfa/fxfa/parser/cxfa_boxdata.cpp @@ -139,10 +139,9 @@ CXFA_FillData CXFA_BoxData::GetFillData(bool bModified) const { return CXFA_FillData(pFillNode); } -CXFA_MarginData CXFA_BoxData::GetMarginData() const { - return CXFA_MarginData( - m_pNode ? m_pNode->GetChild(0, XFA_Element::Margin, false) - : nullptr); +CXFA_Margin* CXFA_BoxData::GetMargin() const { + return m_pNode ? m_pNode->GetChild(0, XFA_Element::Margin, false) + : nullptr; } std::tuple CXFA_BoxData::Get3DStyle() const { diff --git a/xfa/fxfa/parser/cxfa_boxdata.h b/xfa/fxfa/parser/cxfa_boxdata.h index 38a7faa38c..c44065f67e 100644 --- a/xfa/fxfa/parser/cxfa_boxdata.h +++ b/xfa/fxfa/parser/cxfa_boxdata.h @@ -14,8 +14,8 @@ #include "xfa/fxfa/parser/cxfa_datadata.h" #include "xfa/fxfa/parser/cxfa_edgedata.h" #include "xfa/fxfa/parser/cxfa_filldata.h" -#include "xfa/fxfa/parser/cxfa_margindata.h" +class CXFA_Margin; class CXFA_Node; class CXFA_BoxData : public CXFA_DataData { @@ -32,7 +32,7 @@ class CXFA_BoxData : public CXFA_DataData { int32_t CountEdges() const; CXFA_EdgeData GetEdgeData(int32_t nIndex) const; CXFA_FillData GetFillData(bool bModified) const; - CXFA_MarginData GetMarginData() const; + CXFA_Margin* GetMargin() const; std::vector GetStrokes() const; diff --git a/xfa/fxfa/parser/cxfa_captiondata.cpp b/xfa/fxfa/parser/cxfa_captiondata.cpp index 59dbb2b008..276d10c354 100644 --- a/xfa/fxfa/parser/cxfa_captiondata.cpp +++ b/xfa/fxfa/parser/cxfa_captiondata.cpp @@ -39,10 +39,9 @@ float CXFA_CaptionData::GetReserve() const { .ToUnit(XFA_Unit::Pt); } -CXFA_MarginData CXFA_CaptionData::GetMarginData() const { - return CXFA_MarginData( - m_pNode ? m_pNode->GetChild(0, XFA_Element::Margin, false) - : nullptr); +CXFA_Margin* CXFA_CaptionData::GetMargin() const { + return m_pNode ? m_pNode->GetChild(0, XFA_Element::Margin, false) + : nullptr; } CXFA_FontData CXFA_CaptionData::GetFontData() const { diff --git a/xfa/fxfa/parser/cxfa_captiondata.h b/xfa/fxfa/parser/cxfa_captiondata.h index 119c34e4b1..4b526b6754 100644 --- a/xfa/fxfa/parser/cxfa_captiondata.h +++ b/xfa/fxfa/parser/cxfa_captiondata.h @@ -9,8 +9,8 @@ #include "xfa/fxfa/parser/cxfa_datadata.h" #include "xfa/fxfa/parser/cxfa_fontdata.h" -#include "xfa/fxfa/parser/cxfa_margindata.h" +class CXFA_Margin; class CXFA_Node; class CXFA_Value; @@ -22,7 +22,7 @@ class CXFA_CaptionData : public CXFA_DataData { bool IsHidden() const; XFA_AttributeEnum GetPlacementType() const; float GetReserve() const; - CXFA_MarginData GetMarginData() const; + CXFA_Margin* GetMargin() const; CXFA_FontData GetFontData() const; CXFA_Value* GetValue() const; }; diff --git a/xfa/fxfa/parser/cxfa_datadata.cpp b/xfa/fxfa/parser/cxfa_datadata.cpp index b2c8119639..76a4651d0d 100644 --- a/xfa/fxfa/parser/cxfa_datadata.cpp +++ b/xfa/fxfa/parser/cxfa_datadata.cpp @@ -71,9 +71,5 @@ XFA_Element CXFA_DataData::GetElementType() const { pdfium::Optional CXFA_DataData::TryMeasureAsFloat( XFA_Attribute attr) const { - pdfium::Optional measure = - m_pNode->JSObject()->TryMeasure(attr, false); - if (measure) - return {measure->ToUnit(XFA_Unit::Pt)}; - return {}; + return m_pNode->JSObject()->TryMeasureAsFloat(attr); } diff --git a/xfa/fxfa/parser/cxfa_margin.cpp b/xfa/fxfa/parser/cxfa_margin.cpp index 6a50d13e4d..6dd4d39ee4 100644 --- a/xfa/fxfa/parser/cxfa_margin.cpp +++ b/xfa/fxfa/parser/cxfa_margin.cpp @@ -39,3 +39,35 @@ CXFA_Margin::CXFA_Margin(CXFA_Document* doc, XFA_PacketType packet) pdfium::MakeUnique(this)) {} CXFA_Margin::~CXFA_Margin() {} + +float CXFA_Margin::GetLeftInset() const { + return TryLeftInset().value_or(0); +} + +float CXFA_Margin::GetTopInset() const { + return TryTopInset().value_or(0); +} + +float CXFA_Margin::GetRightInset() const { + return TryRightInset().value_or(0); +} + +float CXFA_Margin::GetBottomInset() const { + return TryBottomInset().value_or(0); +} + +pdfium::Optional CXFA_Margin::TryLeftInset() const { + return JSObject()->TryMeasureAsFloat(XFA_Attribute::LeftInset); +} + +pdfium::Optional CXFA_Margin::TryTopInset() const { + return JSObject()->TryMeasureAsFloat(XFA_Attribute::TopInset); +} + +pdfium::Optional CXFA_Margin::TryRightInset() const { + return JSObject()->TryMeasureAsFloat(XFA_Attribute::RightInset); +} + +pdfium::Optional CXFA_Margin::TryBottomInset() const { + return JSObject()->TryMeasureAsFloat(XFA_Attribute::BottomInset); +} diff --git a/xfa/fxfa/parser/cxfa_margin.h b/xfa/fxfa/parser/cxfa_margin.h index 3ac7657d17..621704ab7a 100644 --- a/xfa/fxfa/parser/cxfa_margin.h +++ b/xfa/fxfa/parser/cxfa_margin.h @@ -13,6 +13,16 @@ class CXFA_Margin : public CXFA_Node { public: CXFA_Margin(CXFA_Document* doc, XFA_PacketType packet); ~CXFA_Margin() override; + + float GetLeftInset() const; + float GetTopInset() const; + float GetRightInset() const; + float GetBottomInset() const; + + pdfium::Optional TryLeftInset() const; + pdfium::Optional TryTopInset() const; + pdfium::Optional TryRightInset() const; + pdfium::Optional TryBottomInset() const; }; #endif // XFA_FXFA_PARSER_CXFA_MARGIN_H_ diff --git a/xfa/fxfa/parser/cxfa_margindata.cpp b/xfa/fxfa/parser/cxfa_margindata.cpp deleted file mode 100644 index c8baf2d05a..0000000000 --- a/xfa/fxfa/parser/cxfa_margindata.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2016 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/fxfa/parser/cxfa_margindata.h" - -CXFA_MarginData::CXFA_MarginData(CXFA_Node* pNode) : CXFA_DataData(pNode) {} - -float CXFA_MarginData::GetLeftInset() const { - return TryLeftInset().value_or(0); -} - -float CXFA_MarginData::GetTopInset() const { - return TryTopInset().value_or(0); -} - -float CXFA_MarginData::GetRightInset() const { - return TryRightInset().value_or(0); -} - -float CXFA_MarginData::GetBottomInset() const { - return TryBottomInset().value_or(0); -} - -pdfium::Optional CXFA_MarginData::TryLeftInset() const { - return TryMeasureAsFloat(XFA_Attribute::LeftInset); -} - -pdfium::Optional CXFA_MarginData::TryTopInset() const { - return TryMeasureAsFloat(XFA_Attribute::TopInset); -} - -pdfium::Optional CXFA_MarginData::TryRightInset() const { - return TryMeasureAsFloat(XFA_Attribute::RightInset); -} - -pdfium::Optional CXFA_MarginData::TryBottomInset() const { - return TryMeasureAsFloat(XFA_Attribute::BottomInset); -} diff --git a/xfa/fxfa/parser/cxfa_margindata.h b/xfa/fxfa/parser/cxfa_margindata.h deleted file mode 100644 index 069aa7cc2d..0000000000 --- a/xfa/fxfa/parser/cxfa_margindata.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2016 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_FXFA_PARSER_CXFA_MARGINDATA_H_ -#define XFA_FXFA_PARSER_CXFA_MARGINDATA_H_ - -#include "core/fxcrt/fx_system.h" -#include "xfa/fxfa/parser/cxfa_datadata.h" - -class CXFA_Node; - -class CXFA_MarginData : public CXFA_DataData { - public: - explicit CXFA_MarginData(CXFA_Node* pNode); - - float GetLeftInset() const; - float GetTopInset() const; - float GetRightInset() const; - float GetBottomInset() const; - - pdfium::Optional TryLeftInset() const; - pdfium::Optional TryTopInset() const; - pdfium::Optional TryRightInset() const; - pdfium::Optional TryBottomInset() const; -}; - -#endif // XFA_FXFA_PARSER_CXFA_MARGINDATA_H_ diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp index ba10f244d3..0f31fbafaa 100644 --- a/xfa/fxfa/parser/cxfa_widgetdata.cpp +++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp @@ -275,9 +275,9 @@ CXFA_FontData CXFA_WidgetData::GetFontData(bool bModified) { 0, XFA_Element::Font, bModified)); } -CXFA_MarginData CXFA_WidgetData::GetMarginData() { - return CXFA_MarginData(m_pNode->JSObject()->GetProperty( - 0, XFA_Element::Margin, false)); +CXFA_Margin* CXFA_WidgetData::GetMargin() { + return m_pNode->JSObject()->GetProperty(0, XFA_Element::Margin, + false); } CXFA_Para* CXFA_WidgetData::GetPara() { @@ -373,12 +373,13 @@ CXFA_BorderData CXFA_WidgetData::GetUIBorderData() { CFX_RectF CXFA_WidgetData::GetUIMargin() { CXFA_Node* pUIChild = GetUIChild(); - CXFA_MarginData mgUI = - CXFA_MarginData(pUIChild ? pUIChild->JSObject()->GetProperty( - 0, XFA_Element::Margin, false) - : nullptr); + CXFA_Margin* mgUI = nullptr; + if (pUIChild) { + mgUI = pUIChild->JSObject()->GetProperty( + 0, XFA_Element::Margin, false); + } - if (!mgUI.HasValidNode()) + if (!mgUI) return CFX_RectF(); CXFA_BorderData borderData = GetUIBorderData(); @@ -387,10 +388,10 @@ CFX_RectF CXFA_WidgetData::GetUIMargin() { return CFX_RectF(); } - pdfium::Optional left = mgUI.TryLeftInset(); - pdfium::Optional top = mgUI.TryTopInset(); - pdfium::Optional right = mgUI.TryRightInset(); - pdfium::Optional bottom = mgUI.TryBottomInset(); + pdfium::Optional left = mgUI->TryLeftInset(); + pdfium::Optional top = mgUI->TryTopInset(); + pdfium::Optional right = mgUI->TryRightInset(); + pdfium::Optional bottom = mgUI->TryBottomInset(); if (borderData.HasValidNode()) { bool bVisible = false; float fThickness = 0; diff --git a/xfa/fxfa/parser/cxfa_widgetdata.h b/xfa/fxfa/parser/cxfa_widgetdata.h index e7016bda91..e2dbfbfafd 100644 --- a/xfa/fxfa/parser/cxfa_widgetdata.h +++ b/xfa/fxfa/parser/cxfa_widgetdata.h @@ -19,7 +19,6 @@ #include "xfa/fxfa/parser/cxfa_captiondata.h" #include "xfa/fxfa/parser/cxfa_datadata.h" #include "xfa/fxfa/parser/cxfa_fontdata.h" -#include "xfa/fxfa/parser/cxfa_margindata.h" enum XFA_CHECKSTATE { XFA_CHECKSTATE_On = 0, @@ -35,6 +34,7 @@ enum XFA_VALUEPICTURE { }; class CXFA_Calculate; +class CXFA_Margin; class CXFA_Node; class CXFA_Para; class CXFA_Validate; @@ -61,7 +61,7 @@ class CXFA_WidgetData : public CXFA_DataData { CXFA_BorderData GetBorderData(bool bModified); CXFA_CaptionData GetCaptionData(); CXFA_FontData GetFontData(bool bModified); - CXFA_MarginData GetMarginData(); + CXFA_Margin* GetMargin(); CXFA_Para* GetPara(); CXFA_Value* GetDefaultValue(); CXFA_Value* GetFormValue(); -- cgit v1.2.3