summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xfa/fxfa/cxfa_fffield.cpp10
-rw-r--r--xfa/fxfa/cxfa_ffpushbutton.cpp6
-rw-r--r--xfa/fxfa/cxfa_textlayout.cpp106
-rw-r--r--xfa/fxfa/cxfa_textlayout.h28
-rw-r--r--xfa/fxfa/cxfa_widgetacc.cpp7
5 files changed, 72 insertions, 85 deletions
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index 67a4cb1aca..a58fd00cce 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -216,10 +216,9 @@ void CXFA_FFField::CapPlacement() {
CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
if (fCapReserve <= 0 && pCapTextLayout) {
- CFX_SizeF size;
CFX_SizeF minSize;
CFX_SizeF maxSize;
- pCapTextLayout->CalcSize(minSize, maxSize, size);
+ CFX_SizeF size = pCapTextLayout->CalcSize(minSize, maxSize);
if (iCapPlacement == XFA_ATTRIBUTEENUM_Top ||
iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) {
fCapReserve = size.height;
@@ -592,9 +591,8 @@ void CXFA_FFField::LayoutCaption() {
if (!pCapTextLayout)
return;
- float fHeight = 0;
- pCapTextLayout->Layout(CFX_SizeF(m_rtCaption.width, m_rtCaption.height),
- &fHeight);
+ float fHeight =
+ pCapTextLayout->Layout(CFX_SizeF(m_rtCaption.width, m_rtCaption.height));
if (m_rtCaption.height < fHeight)
m_rtCaption.height = fHeight;
}
@@ -619,7 +617,7 @@ void CXFA_FFField::RenderCaption(CXFA_Graphics* pGS, CFX_Matrix* pMatrix) {
rtClip = pMatrix->TransformRect(rtClip);
mt.Concat(*pMatrix);
}
- pCapTextLayout->DrawString(pRenderDevice, mt, rtClip);
+ pCapTextLayout->DrawString(pRenderDevice, mt, rtClip, 0);
}
bool CXFA_FFField::ProcessCommittedData() {
diff --git a/xfa/fxfa/cxfa_ffpushbutton.cpp b/xfa/fxfa/cxfa_ffpushbutton.cpp
index fbadfcecd2..c966cdacfd 100644
--- a/xfa/fxfa/cxfa_ffpushbutton.cpp
+++ b/xfa/fxfa/cxfa_ffpushbutton.cpp
@@ -182,15 +182,15 @@ void CXFA_FFPushButton::RenderHighlightCaption(CXFA_Graphics* pGS,
uint32_t dwState = m_pNormalWidget->GetStates();
if (m_pDownTextLayout && (dwState & FWL_STATE_PSB_Pressed) &&
(dwState & FWL_STATE_PSB_Hovered)) {
- if (m_pDownTextLayout->DrawString(pRenderDevice, mt, rtClip))
+ if (m_pDownTextLayout->DrawString(pRenderDevice, mt, rtClip, 0))
return;
} else if (m_pRolloverTextLayout && (dwState & FWL_STATE_PSB_Hovered)) {
- if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip))
+ if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip, 0))
return;
}
if (pCapTextLayout)
- pCapTextLayout->DrawString(pRenderDevice, mt, rtClip);
+ pCapTextLayout->DrawString(pRenderDevice, mt, rtClip, 0);
}
void CXFA_FFPushButton::OnProcessMessage(CFWL_Message* pMessage) {
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 9be3c4f5fa..532079e4a7 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -246,10 +246,9 @@ float CXFA_TextLayout::GetLayoutHeight() {
if (m_pLoader->m_lineHeights.empty() && m_pLoader->m_fWidth > 0) {
CFX_SizeF szMax(m_pLoader->m_fWidth, m_pLoader->m_fHeight);
- CFX_SizeF szDef;
m_pLoader->m_bSaveLineHeight = true;
m_pLoader->m_fLastPos = 0;
- CalcSize(szMax, szMax, szDef);
+ CFX_SizeF szDef = CalcSize(szMax, szMax);
m_pLoader->m_bSaveLineHeight = false;
return szDef.height;
}
@@ -276,24 +275,24 @@ float CXFA_TextLayout::StartLayout(float fWidth) {
}
m_pLoader->m_fWidth = fWidth;
- if (fWidth < 0) {
- CFX_SizeF szMax;
- CFX_SizeF szDef;
- m_pLoader->m_bSaveLineHeight = true;
- m_pLoader->m_fLastPos = 0;
- CalcSize(szMax, szMax, szDef);
- m_pLoader->m_bSaveLineHeight = false;
- fWidth = szDef.width;
- }
- return fWidth;
+ if (fWidth >= 0)
+ return fWidth;
+
+ CFX_SizeF szMax;
+
+ m_pLoader->m_bSaveLineHeight = true;
+ m_pLoader->m_fLastPos = 0;
+ CFX_SizeF szDef = CalcSize(szMax, szMax);
+ m_pLoader->m_bSaveLineHeight = false;
+ return szDef.width;
}
-bool CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
- float& fCalcHeight,
- float fContentAreaHeight,
- float fTextHeight) {
+float CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
+ float fCalcHeight,
+ float fContentAreaHeight,
+ float fTextHeight) {
if (!m_pLoader)
- return false;
+ return fCalcHeight;
int32_t iBlockCount = pdfium::CollectionSize<int32_t>(m_Blocks);
float fHeight = fTextHeight;
@@ -302,7 +301,7 @@ bool CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
m_pLoader->m_fHeight = fHeight;
if (fContentAreaHeight < 0)
- return false;
+ return fCalcHeight;
m_bHasBlock = true;
if (iBlockCount == 0 && fHeight > 0) {
@@ -335,10 +334,9 @@ bool CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
int32_t i = 0;
for (i = iLineIndex; i < iCount; i++) {
float fLineHeight = m_pLoader->m_lineHeights[i];
- if (i == iLineIndex && fLineHeight - fContentAreaHeight > 0.001) {
- fCalcHeight = 0;
- return true;
- }
+ if (i == iLineIndex && fLineHeight - fContentAreaHeight > 0.001)
+ return 0;
+
if (fLinePos + fLineHeight - fContentAreaHeight > 0.001) {
if (iBlockCount >= (iBlockIndex + 1) * 2) {
m_Blocks[iBlockIndex * 2] = iLineIndex;
@@ -358,15 +356,13 @@ bool CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
m_pLoader->m_BlocksHeight.push_back(fCalcHeight);
}
}
- return true;
+ return fCalcHeight;
}
-
- fCalcHeight = fLinePos;
- return true;
+ return fLinePos;
}
fLinePos += fLineHeight;
}
- return false;
+ return fCalcHeight;
}
int32_t CXFA_TextLayout::CountBlocks() const {
@@ -374,29 +370,27 @@ int32_t CXFA_TextLayout::CountBlocks() const {
return iCount > 0 ? iCount : 1;
}
-bool CXFA_TextLayout::CalcSize(const CFX_SizeF& minSize,
- const CFX_SizeF& maxSize,
- CFX_SizeF& defaultSize) {
- defaultSize.width = maxSize.width;
- if (defaultSize.width < 1)
- defaultSize.width = 0xFFFF;
+CFX_SizeF CXFA_TextLayout::CalcSize(const CFX_SizeF& minSize,
+ const CFX_SizeF& maxSize) {
+ float width = maxSize.width;
+ if (width < 1)
+ width = 0xFFFF;
m_pBreak = CreateBreak(false);
float fLinePos = 0;
m_iLines = 0;
m_fMaxWidth = 0;
- Loader(defaultSize, fLinePos, false);
+ Loader(width, fLinePos, false);
if (fLinePos < 0.1f)
fLinePos = m_textParser.GetFontSize(m_pTextProvider, nullptr);
m_pTabstopContext.reset();
- defaultSize = CFX_SizeF(m_fMaxWidth, fLinePos);
- return true;
+ return CFX_SizeF(m_fMaxWidth, fLinePos);
}
-bool CXFA_TextLayout::Layout(const CFX_SizeF& size, float* fHeight) {
+float CXFA_TextLayout::Layout(const CFX_SizeF& size) {
if (size.width < 1)
- return false;
+ return 0.f;
Unload();
m_pBreak = CreateBreak(true);
@@ -407,12 +401,10 @@ bool CXFA_TextLayout::Layout(const CFX_SizeF& size, float* fHeight) {
m_iLines = 0;
float fLinePos = 0;
- Loader(size, fLinePos, true);
+ Loader(size.width, fLinePos, true);
UpdateAlign(size.height, fLinePos);
m_pTabstopContext.reset();
- if (fHeight)
- *fHeight = fLinePos;
- return true;
+ return fLinePos;
}
bool CXFA_TextLayout::Layout(int32_t iBlock) {
@@ -443,7 +435,7 @@ bool CXFA_TextLayout::Layout(int32_t iBlock) {
if (iCount > 1)
m_pLoader->m_iTotalLines = m_Blocks[iBlock * 2 + 1];
- Loader(szText, fLinePos, true);
+ Loader(szText.width, fLinePos, true);
if (iCount == 0 && m_pLoader->m_fStartLineOffset < 0.1f)
UpdateAlign(szText.height, fLinePos);
} else if (m_pTextDataNode) {
@@ -464,8 +456,8 @@ bool CXFA_TextLayout::Layout(int32_t iBlock) {
CFX_XMLNode* pSaveXMLNode = m_pLoader->m_pXMLNode;
for (; pXMLNode;
pXMLNode = pXMLNode->GetNodeItem(CFX_XMLNode::NextSibling)) {
- if (!LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle,
- true, nullptr)) {
+ if (!LoadRichText(pXMLNode, szText.width, fLinePos,
+ m_pLoader->m_pParentStyle, true, nullptr)) {
break;
}
}
@@ -473,8 +465,8 @@ bool CXFA_TextLayout::Layout(int32_t iBlock) {
pXMLNode = pSaveXMLNode->GetNodeItem(CFX_XMLNode::Parent);
if (pXMLNode == pContainerNode)
break;
- if (!LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle,
- true, nullptr, false)) {
+ if (!LoadRichText(pXMLNode, szText.width, fLinePos,
+ m_pLoader->m_pParentStyle, true, nullptr, false)) {
break;
}
pSaveXMLNode = pXMLNode;
@@ -483,7 +475,7 @@ bool CXFA_TextLayout::Layout(int32_t iBlock) {
continue;
for (; pXMLNode;
pXMLNode = pXMLNode->GetNodeItem(CFX_XMLNode::NextSibling)) {
- if (!LoadRichText(pXMLNode, szText, fLinePos,
+ if (!LoadRichText(pXMLNode, szText.width, fLinePos,
m_pLoader->m_pParentStyle, true, nullptr)) {
break;
}
@@ -493,7 +485,7 @@ bool CXFA_TextLayout::Layout(int32_t iBlock) {
pNode = m_pLoader->m_pNode;
if (!pNode)
return true;
- LoadText(pNode, szText, fLinePos, true);
+ LoadText(pNode, szText.width, fLinePos, true);
}
}
if (iBlock == iCount) {
@@ -624,7 +616,7 @@ void CXFA_TextLayout::UpdateAlign(float fHeight, float fBottom) {
}
}
-bool CXFA_TextLayout::Loader(const CFX_SizeF& szText,
+bool CXFA_TextLayout::Loader(float textWidth,
float& fLinePos,
bool bSavePieces) {
GetTextDataNode();
@@ -638,20 +630,20 @@ bool CXFA_TextLayout::Loader(const CFX_SizeF& szText,
m_textParser.DoParse(pXMLContainer, m_pTextProvider);
auto pRootStyle = m_textParser.CreateRootStyle(m_pTextProvider);
- LoadRichText(pXMLContainer, szText, fLinePos, pRootStyle, bSavePieces,
+ LoadRichText(pXMLContainer, textWidth, fLinePos, pRootStyle, bSavePieces,
nullptr);
}
} else {
- LoadText(m_pTextDataNode, szText, fLinePos, bSavePieces);
+ LoadText(m_pTextDataNode, textWidth, fLinePos, bSavePieces);
}
return true;
}
void CXFA_TextLayout::LoadText(CXFA_Node* pNode,
- const CFX_SizeF& szText,
+ float textWidth,
float& fLinePos,
bool bSavePieces) {
- InitBreak(szText.width);
+ InitBreak(textWidth);
CXFA_ParaData paraData = m_pTextProvider->GetParaData();
float fSpaceAbove = 0;
@@ -682,7 +674,7 @@ void CXFA_TextLayout::LoadText(CXFA_Node* pNode,
bool CXFA_TextLayout::LoadRichText(
CFX_XMLNode* pXMLNode,
- const CFX_SizeF& szText,
+ float textWidth,
float& fLinePos,
const RetainPtr<CFX_CSSComputedStyle>& pParentStyle,
bool bSavePieces,
@@ -729,7 +721,7 @@ bool CXFA_TextLayout::LoadRichText(
pStyle = m_textParser.ComputeStyle(pXMLNode, pParentStyle.Get());
InitBreak(bContentNode ? pParentStyle.Get() : pStyle.Get(), eDisplay,
- szText.width, pXMLNode, pParentStyle.Get());
+ textWidth, pXMLNode, pParentStyle.Get());
if ((eDisplay == CFX_CSSDisplay::Block ||
eDisplay == CFX_CSSDisplay::ListItem) &&
pStyle &&
@@ -828,7 +820,7 @@ bool CXFA_TextLayout::LoadRichText(
if (bCurOl)
iLiCount++;
- if (!LoadRichText(pChildNode, szText, fLinePos,
+ if (!LoadRichText(pChildNode, textWidth, fLinePos,
pContext ? pStyle : pParentStyle, bSavePieces,
pLinkData, true, bIsOl, iLiCount))
return false;
diff --git a/xfa/fxfa/cxfa_textlayout.h b/xfa/fxfa/cxfa_textlayout.h
index 1811d964be..070a2bd87d 100644
--- a/xfa/fxfa/cxfa_textlayout.h
+++ b/xfa/fxfa/cxfa_textlayout.h
@@ -34,21 +34,19 @@ class CXFA_TextLayout {
~CXFA_TextLayout();
float GetLayoutHeight();
- float StartLayout(float fWidth = -1);
- bool DoLayout(int32_t iBlockIndex,
- float& fCalcHeight,
- float fContentAreaHeight = -1,
- float fTextHeight = -1);
+ float StartLayout(float fWidth);
+ float DoLayout(int32_t iBlockIndex,
+ float fCalcHeight,
+ float fContentAreaHeight,
+ float fTextHeight);
+ float Layout(const CFX_SizeF& size);
- bool CalcSize(const CFX_SizeF& minSize,
- const CFX_SizeF& maxSize,
- CFX_SizeF& defaultSize);
- bool Layout(const CFX_SizeF& size, float* fHeight = nullptr);
+ CFX_SizeF CalcSize(const CFX_SizeF& minSize, const CFX_SizeF& maxSize);
void ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex);
bool DrawString(CFX_RenderDevice* pFxDevice,
const CFX_Matrix& tmDoc2Device,
const CFX_RectF& rtClip,
- int32_t iBlock = 0);
+ int32_t iBlock);
bool IsLoaded() const { return !m_pieceLines.empty(); }
void Unload();
const std::vector<std::unique_ptr<CXFA_PieceLine>>* GetPieceLines() const {
@@ -67,16 +65,14 @@ class CXFA_TextLayout {
CFX_CSSDisplay eDisplay,
float fLineWidth,
CFX_XMLNode* pXMLNode,
- CFX_CSSComputedStyle* pParentStyle = nullptr);
- bool Loader(const CFX_SizeF& szText,
- float& fLinePos,
- bool bSavePieces = true);
+ CFX_CSSComputedStyle* pParentStyle);
+ bool Loader(float textWidth, float& fLinePos, bool bSavePieces);
void LoadText(CXFA_Node* pNode,
- const CFX_SizeF& szText,
+ float textWidth,
float& fLinePos,
bool bSavePieces);
bool LoadRichText(CFX_XMLNode* pXMLNode,
- const CFX_SizeF& szText,
+ float textWidth,
float& fLinePos,
const RetainPtr<CFX_CSSComputedStyle>& pParentStyle,
bool bSavePieces,
diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp
index 2c54c3cf49..cb43783bdc 100644
--- a/xfa/fxfa/cxfa_widgetacc.cpp
+++ b/xfa/fxfa/cxfa_widgetacc.cpp
@@ -709,7 +709,7 @@ void CXFA_WidgetAcc::CalcCaptionSize(CFX_SizeF& szCap) {
szCap.width = fCapReserve;
CFX_SizeF minSize;
- pCapTextLayout->CalcSize(minSize, szCap, szCap);
+ szCap = pCapTextLayout->CalcSize(minSize, szCap);
if (bReserveExit)
bVert ? szCap.height = fCapReserve : szCap.width = fCapReserve;
} else {
@@ -1181,8 +1181,9 @@ bool CXFA_WidgetAcc::FindSplitPos(int32_t iBlockIndex, float& fCalcHeight) {
CXFA_TextLayout* pTextLayout =
static_cast<CXFA_TextLayoutData*>(m_pLayoutData.get())->GetTextLayout();
- pTextLayout->DoLayout(iBlockIndex, fCalcHeight, fCalcHeight,
- m_pLayoutData->m_fWidgetHeight - fTopInset);
+ fCalcHeight =
+ pTextLayout->DoLayout(iBlockIndex, fCalcHeight, fCalcHeight,
+ m_pLayoutData->m_fWidgetHeight - fTopInset);
if (fCalcHeight != 0) {
if (iBlockIndex == 0)
fCalcHeight = fCalcHeight + fTopInset;