Index: xfa/src/fgas/src/layout/fx_rtfbreak.cpp |
diff --git a/xfa/src/fgas/src/layout/fx_rtfbreak.cpp b/xfa/src/fgas/src/layout/fx_rtfbreak.cpp |
index 26d27312bc1656e16739b3efd2968b16248a3b0d..649d9bac3774983bcb129dd567e3546eecf585bc 100644 |
--- a/xfa/src/fgas/src/layout/fx_rtfbreak.cpp |
+++ b/xfa/src/fgas/src/layout/fx_rtfbreak.cpp |
@@ -17,8 +17,8 @@ IFX_RTFBreak* IFX_RTFBreak::Create(FX_DWORD dwPolicies) { |
CFX_RTFBreak::CFX_RTFBreak(FX_DWORD dwPolicies) |
: m_dwPolicies(dwPolicies), |
m_pArabicChar(NULL), |
- m_iLineStart(0), |
- m_iLineEnd(2000000), |
+ m_iBoundaryStart(0), |
+ m_iBoundaryEnd(2000000), |
m_dwLayoutStyles(0), |
m_bPagination(FALSE), |
m_bVertical(FALSE), |
@@ -62,19 +62,18 @@ CFX_RTFBreak::~CFX_RTFBreak() { |
m_pUserData->Release(); |
} |
} |
-void CFX_RTFBreak::SetLineWidth(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) { |
- m_iLineStart = FXSYS_round(fLineStart * 20000.0f); |
- m_iLineEnd = FXSYS_round(fLineEnd * 20000.0f); |
- FXSYS_assert(m_iLineEnd >= m_iLineStart); |
- if (m_pCurLine->m_iStart < m_iLineStart) { |
- m_pCurLine->m_iStart = m_iLineStart; |
- } |
+void CFX_RTFBreak::SetLineBoundary(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) { |
+ if (fLineStart > fLineEnd) |
+ return; |
+ m_iBoundaryStart = FXSYS_round(fLineStart * 20000.0f); |
+ m_iBoundaryEnd = FXSYS_round(fLineEnd * 20000.0f); |
+ m_pCurLine->m_iStart = std::min(m_pCurLine->m_iStart, m_iBoundaryEnd); |
+ m_pCurLine->m_iStart = std::max(m_pCurLine->m_iStart, m_iBoundaryStart); |
} |
-void CFX_RTFBreak::SetLinePos(FX_FLOAT fLinePos) { |
+void CFX_RTFBreak::SetLineStartPos(FX_FLOAT fLinePos) { |
int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); |
- if (iLinePos > m_iLineEnd) { |
- iLinePos = m_iLineEnd; |
- } |
+ iLinePos = std::min(iLinePos, m_iBoundaryEnd); |
+ iLinePos = std::max(iLinePos, m_iBoundaryStart); |
m_pCurLine->m_iStart = iLinePos; |
} |
void CFX_RTFBreak::SetLayoutStyles(FX_DWORD dwLayoutStyles) { |
@@ -129,8 +128,8 @@ void CFX_RTFBreak::SetTabWidth(FX_FLOAT fTabWidth) { |
m_iTabWidth = FXSYS_round(fTabWidth * 20000.0f); |
} |
void CFX_RTFBreak::AddPositionedTab(FX_FLOAT fTabPos) { |
- int32_t iLineEnd = m_iLineEnd; |
- int32_t iTabPos = FXSYS_round(fTabPos * 20000.0f) + m_iLineStart; |
+ int32_t iLineEnd = m_iBoundaryEnd; |
+ int32_t iTabPos = FXSYS_round(fTabPos * 20000.0f) + m_iBoundaryStart; |
if (iTabPos > iLineEnd) { |
iTabPos = iLineEnd; |
} |
@@ -155,10 +154,10 @@ void CFX_RTFBreak::SetPositionedTabs(const CFX_FloatArray& tabs) { |
m_PositionedTabs.RemoveAll(); |
int32_t iCount = tabs.GetSize(); |
m_PositionedTabs.SetSize(iCount); |
- int32_t iLineEnd = m_iLineEnd; |
+ int32_t iLineEnd = m_iBoundaryEnd; |
int32_t iTabPos; |
for (int32_t i = 0; i < iCount; i++) { |
- iTabPos = FXSYS_round(tabs[i] * 20000.0f) + m_iLineStart; |
+ iTabPos = FXSYS_round(tabs[i] * 20000.0f) + m_iBoundaryStart; |
if (iTabPos > iLineEnd) { |
iTabPos = iLineEnd; |
} |
@@ -317,7 +316,7 @@ inline FX_DWORD CFX_RTFBreak::GetUnifiedCharType(FX_DWORD dwType) const { |
int32_t CFX_RTFBreak::GetLastPositionedTab() const { |
int32_t iCount = m_PositionedTabs.GetSize(); |
if (iCount < 1) { |
- return m_iLineStart; |
+ return m_iBoundaryStart; |
} |
return m_PositionedTabs[iCount - 1]; |
} |
@@ -373,7 +372,7 @@ FX_DWORD CFX_RTFBreak::AppendChar(FX_WCHAR wch) { |
if (dwType != FX_CHARTYPE_Combination && |
GetUnifiedCharType(m_dwCharType) != GetUnifiedCharType(dwType)) { |
if (!m_bSingleLine && !m_bOrphanLine && m_dwCharType > 0 && |
- m_pCurLine->GetLineEnd() > m_iLineEnd + m_iTolerance) { |
+ m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
if (m_dwCharType != FX_CHARTYPE_Space || dwType != FX_CHARTYPE_Control) { |
dwRet1 = EndBreak(FX_RTFBREAK_LineBreak); |
int32_t iCount = m_pCurLine->CountChars(); |
@@ -429,7 +428,8 @@ FX_DWORD CFX_RTFBreak::AppendChar_CharCode(FX_WCHAR wch) { |
pCurChar->m_iCharWidth = iCharWidth; |
m_pCurLine->m_iWidth += iCharWidth; |
m_dwCharType = 0; |
- if (!m_bSingleLine && m_pCurLine->GetLineEnd() > m_iLineEnd + m_iTolerance) { |
+ if (!m_bSingleLine && |
+ m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
return EndBreak(FX_RTFBREAK_LineBreak); |
} |
return FX_RTFBREAK_None; |
@@ -464,7 +464,7 @@ FX_DWORD CFX_RTFBreak::AppendChar_Tab(CFX_RTFChar* pCurChar, |
if (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_ExpandTab) { |
FX_BOOL bBreak = FALSE; |
if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { |
- bBreak = (m_pCurLine->GetLineEnd() > m_iLineEnd + m_iTolerance); |
+ bBreak = (m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance); |
} |
int32_t& iLineWidth = m_pCurLine->m_iWidth; |
int32_t iCharWidth = iLineWidth; |
@@ -561,7 +561,7 @@ FX_DWORD CFX_RTFBreak::AppendChar_Arabic(CFX_RTFChar* pCurChar, |
iLineWidth += iCharWidth; |
m_pCurLine->m_iArabicChars++; |
if (!m_bSingleLine && !m_bOrphanLine && |
- m_pCurLine->GetLineEnd() > m_iLineEnd + m_iTolerance) { |
+ m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
return EndBreak(FX_RTFBREAK_LineBreak); |
} |
return FX_RTFBREAK_None; |
@@ -601,7 +601,7 @@ FX_DWORD CFX_RTFBreak::AppendChar_Others(CFX_RTFChar* pCurChar, |
FX_BOOL bBreak = (dwType != FX_CHARTYPE_Space || |
(m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0); |
if (!m_bSingleLine && !m_bOrphanLine && bBreak && |
- m_pCurLine->GetLineEnd() > m_iLineEnd + m_iTolerance) { |
+ m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
return EndBreak(FX_RTFBREAK_LineBreak); |
} |
return FX_RTFBREAK_None; |
@@ -662,7 +662,7 @@ FX_DWORD CFX_RTFBreak::EndBreak(FX_DWORD dwStatus) { |
} |
EndBreak_Ret: |
m_pCurLine = pNextLine; |
- m_pCurLine->m_iStart = m_iLineStart; |
+ m_pCurLine->m_iStart = m_iBoundaryStart; |
CFX_RTFChar* pTC = GetLastChar(0); |
m_dwCharType = pTC == NULL ? 0 : pTC->GetCharType(); |
return dwStatus; |
@@ -672,7 +672,7 @@ FX_BOOL CFX_RTFBreak::EndBreak_SplitLine(CFX_RTFLine* pNextLine, |
FX_DWORD dwStatus) { |
FX_BOOL bDone = FALSE; |
if (!m_bSingleLine && !m_bOrphanLine && |
- m_pCurLine->GetLineEnd() > m_iLineEnd + m_iTolerance) { |
+ m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
CFX_RTFChar& tc = m_pCurLine->GetChar(m_pCurLine->CountChars() - 1); |
switch (tc.GetCharType()) { |
case FX_CHARTYPE_Tab: |
@@ -888,7 +888,7 @@ void CFX_RTFBreak::EndBreak_Alignment(CFX_TPOArray& tpos, |
break; |
} |
} |
- int32_t iOffset = m_iLineEnd - iNetWidth; |
+ int32_t iOffset = m_iBoundaryEnd - iNetWidth; |
int32_t iLowerAlignment = (m_iAlignment & FX_RTFLINEALIGNMENT_LowerMask); |
int32_t iHigherAlignment = (m_iAlignment & FX_RTFLINEALIGNMENT_HigherMask); |
if (iGapChars > 0 && (iHigherAlignment == FX_RTFLINEALIGNMENT_Distributed || |
@@ -942,7 +942,7 @@ int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, |
} |
int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, |
iLast = -1, iLastPos = -1; |
- if (m_bSingleLine || m_bOrphanLine || iEndPos <= m_iLineEnd) { |
+ if (m_bSingleLine || m_bOrphanLine || iEndPos <= m_iBoundaryEnd) { |
if (!bAllChars || m_bCharCode) { |
return iLength; |
} |
@@ -954,7 +954,7 @@ int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, |
const CFX_RTFChar* pChar; |
int32_t iCharWidth; |
while (iLength > 0) { |
- if (iEndPos <= m_iLineEnd) { |
+ if (iEndPos <= m_iBoundaryEnd) { |
break; |
} |
pChar = pCharArray + iLength--; |
@@ -1021,9 +1021,9 @@ int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, |
iCharWidth = pCur->m_iCharWidth; |
FX_BOOL bBreak = FALSE; |
if (nCur == FX_CBP_TB && bTabBreak) { |
- bBreak = iCharWidth > 0 && iEndPos - iCharWidth <= m_iLineEnd; |
+ bBreak = iCharWidth > 0 && iEndPos - iCharWidth <= m_iBoundaryEnd; |
} else { |
- bBreak = iEndPos <= m_iLineEnd; |
+ bBreak = iEndPos <= m_iBoundaryEnd; |
} |
if (m_bSingleLine || m_bOrphanLine || bBreak || bNeedBreak) { |
if (eType == FX_LBT_DIRECT_BRK && iBreak < 0) { |
@@ -1135,7 +1135,7 @@ void CFX_RTFBreak::GetLineRect(CFX_RectF& rect) const { |
rect.top = 0; |
CFX_RTFLine* pRTFLine = GetRTFLine(TRUE); |
if (pRTFLine == NULL) { |
- rect.left = ((FX_FLOAT)m_iLineStart) / 20000.0f; |
+ rect.left = ((FX_FLOAT)m_iBoundaryStart) / 20000.0f; |
rect.width = rect.height = 0; |
return; |
} |