Index: xfa/fee/fde_txtedtengine.cpp |
diff --git a/xfa/fee/fde_txtedtengine.cpp b/xfa/fee/fde_txtedtengine.cpp |
index 1dc03dcc850a37bfe260ab53f7695a591ebd85f9..812817fbfa7fc86651013d3aa3ba9a4716308c68 100644 |
--- a/xfa/fee/fde_txtedtengine.cpp |
+++ b/xfa/fee/fde_txtedtengine.cpp |
@@ -9,11 +9,10 @@ |
#include <algorithm> |
#include "xfa/fde/tto/fde_textout.h" |
-#include "xfa/fee/fde_txtedtbuf.h" |
#include "xfa/fee/fde_txtedtparag.h" |
-#include "xfa/fee/ifde_txtedtbuf.h" |
#include "xfa/fee/ifde_txtedtengine.h" |
#include "xfa/fee/ifde_txtedtpage.h" |
+#include "xfa/fwl/basewidget/fwl_editimp.h" |
#define FDE_PAGEWIDTH_MAX 0xFFFF |
#define FDE_TXTPLATESIZE (1024 * 12) |
@@ -21,9 +20,6 @@ |
#define FDE_TXTEDT_DORECORD_INS 0 |
#define FDE_TXTEDT_DORECORD_DEL 1 |
-IFDE_TxtEdtEngine* IFDE_TxtEdtEngine::Create() { |
- return new CFDE_TxtEdtEngine(); |
-} |
CFDE_TxtEdtEngine::CFDE_TxtEdtEngine() |
: m_pTextBreak(nullptr), |
m_nPageLineCount(20), |
@@ -71,7 +67,7 @@ void CFDE_TxtEdtEngine::SetEditParams(const FDE_TXTEDTPARAMS& params) { |
m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); |
UpdateTxtBreak(); |
} |
-const FDE_TXTEDTPARAMS* CFDE_TxtEdtEngine::GetEditParams() const { |
+FDE_TXTEDTPARAMS* CFDE_TxtEdtEngine::GetEditParams() { |
return &m_Param; |
} |
int32_t CFDE_TxtEdtEngine::CountPages() const { |
@@ -329,7 +325,7 @@ int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart, |
int32_t nTotalLength = GetTextBufLength(); |
int32_t nCount = m_SelRangePtrArr.GetSize(); |
for (int32_t i = 0; i < nCount; i++) { |
- FDE_LPTXTEDTSELRANGE lpSelRange = m_SelRangePtrArr.GetAt(i); |
+ FDE_TXTEDTSELRANGE* lpSelRange = m_SelRangePtrArr.GetAt(i); |
nTotalLength -= lpSelRange->nCount; |
} |
int32_t nExpectLength = nTotalLength + nLength; |
@@ -538,7 +534,7 @@ void CFDE_TxtEdtEngine::SetAliasChar(FX_WCHAR wcAlias) { |
} |
void CFDE_TxtEdtEngine::RemoveSelRange(int32_t nStart, int32_t nCount) { |
- FDE_LPTXTEDTSELRANGE lpTemp = NULL; |
+ FDE_TXTEDTSELRANGE* lpTemp = nullptr; |
int32_t nRangeCount = m_SelRangePtrArr.GetSize(); |
int32_t i = 0; |
for (i = 0; i < nRangeCount; i++) { |
@@ -557,17 +553,17 @@ void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) { |
} |
int32_t nSize = m_SelRangePtrArr.GetSize(); |
if (nSize <= 0) { |
- FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; |
+ FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; |
lpSelRange->nStart = nStart; |
lpSelRange->nCount = nCount; |
m_SelRangePtrArr.Add(lpSelRange); |
m_Param.pEventSink->On_SelChanged(this); |
return; |
} |
- FDE_LPTXTEDTSELRANGE lpTemp = NULL; |
+ FDE_TXTEDTSELRANGE* lpTemp = nullptr; |
lpTemp = m_SelRangePtrArr[nSize - 1]; |
if (nStart >= lpTemp->nStart + lpTemp->nCount) { |
- FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; |
+ FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; |
lpSelRange->nStart = nStart; |
lpSelRange->nCount = nCount; |
m_SelRangePtrArr.Add(lpSelRange); |
@@ -602,7 +598,7 @@ void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) { |
} |
} |
if (nRangeCnt == 0) { |
- FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; |
+ FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; |
lpSelRange->nStart = nStart; |
lpSelRange->nCount = nCount; |
m_SelRangePtrArr.InsertAt(nRangeBgn, lpSelRange); |
@@ -683,7 +679,7 @@ int32_t CFDE_TxtEdtEngine::DoLayout(IFX_Pause* pPause) { |
for (; m_nLayoutPos < nCount; m_nLayoutPos++) { |
pParag = m_ParagPtrArray[m_nLayoutPos]; |
pParag->CalcLines(); |
- nLineCount += pParag->m_nLineCount; |
+ nLineCount += pParag->GetLineCount(); |
if ((pPause != NULL) && (nLineCount > m_nPageLineCount) && |
pPause->NeedToPauseNow()) { |
m_nLineCount += nLineCount; |
@@ -709,8 +705,8 @@ void CFDE_TxtEdtEngine::EndLayout() { |
FX_BOOL CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) { |
return m_pTxtBuf->Optimize(pPause); |
} |
-IFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { |
- return (IFDE_TxtEdtBuf*)m_pTxtBuf; |
+CFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { |
+ return m_pTxtBuf; |
} |
int32_t CFDE_TxtEdtEngine::GetTextBufLength() const { |
return m_pTxtBuf->GetTextLength() - 1; |
@@ -727,7 +723,7 @@ int32_t CFDE_TxtEdtEngine::GetPageLineCount() const { |
int32_t CFDE_TxtEdtEngine::CountParags() const { |
return m_ParagPtrArray.GetSize(); |
} |
-IFDE_TxtEdtParag* CFDE_TxtEdtEngine::GetParag(int32_t nParagIndex) const { |
+CFDE_TxtEdtParag* CFDE_TxtEdtEngine::GetParag(int32_t nParagIndex) const { |
return m_ParagPtrArray[nParagIndex]; |
} |
IFX_CharIter* CFDE_TxtEdtEngine::CreateCharIter() { |
@@ -746,12 +742,12 @@ int32_t CFDE_TxtEdtEngine::Line2Parag(int32_t nStartParag, |
int32_t i = nStartParag; |
for (; i < nCount; i++) { |
pParag = m_ParagPtrArray[i]; |
- nLineTotal += pParag->m_nLineCount; |
+ nLineTotal += pParag->GetLineCount(); |
if (nLineTotal > nLineIndex) { |
break; |
} |
} |
- nStartLine = nLineTotal - pParag->m_nLineCount; |
+ nStartLine = nLineTotal - pParag->GetLineCount(); |
return i; |
} |
void CFDE_TxtEdtEngine::GetPreDeleteText(CFX_WideString& wsText, |
@@ -812,14 +808,14 @@ void CFDE_TxtEdtEngine::Inner_Insert(int32_t nStart, |
m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); |
int32_t nParagCount = m_ParagPtrArray.GetSize(); |
int32_t i = 0; |
- for (i = ParagPos.nParagIndex + 1; i < nParagCount; i++) { |
- m_ParagPtrArray[i]->m_nCharStart += nLength; |
- } |
+ for (i = ParagPos.nParagIndex + 1; i < nParagCount; i++) |
+ m_ParagPtrArray[i]->IncrementStartIndex(nLength); |
+ |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; |
- int32_t nReserveLineCount = pParag->m_nLineCount; |
- int32_t nReserveCharStart = pParag->m_nCharStart; |
+ int32_t nReserveLineCount = pParag->GetLineCount(); |
+ int32_t nReserveCharStart = pParag->GetStartIndex(); |
int32_t nLeavePart = ParagPos.nCharIndex; |
- int32_t nCutPart = pParag->m_nCharCount - ParagPos.nCharIndex; |
+ int32_t nCutPart = pParag->GetTextLength() - ParagPos.nCharIndex; |
int32_t nTextStart = 0; |
FX_WCHAR wCurChar = L' '; |
const FX_WCHAR* lpPos = lpText; |
@@ -829,30 +825,30 @@ void CFDE_TxtEdtEngine::Inner_Insert(int32_t nStart, |
wCurChar = *lpPos; |
if (wCurChar == m_wLineEnd) { |
if (bFirst) { |
- pParag->m_nCharCount = nLeavePart + (i - nTextStart + 1); |
- pParag->m_nLineCount = -1; |
- nReserveCharStart += pParag->m_nCharCount; |
+ pParag->SetTextLength(nLeavePart + (i - nTextStart + 1)); |
+ pParag->SetLineCount(-1); |
+ nReserveCharStart += pParag->GetTextLength(); |
bFirst = FALSE; |
} else { |
pParag = new CFDE_TxtEdtParag(this); |
- pParag->m_nLineCount = -1; |
- pParag->m_nCharCount = i - nTextStart + 1; |
- pParag->m_nCharStart = nReserveCharStart; |
+ pParag->SetLineCount(-1); |
+ pParag->SetTextLength(i - nTextStart + 1); |
+ pParag->SetStartIndex(nReserveCharStart); |
m_ParagPtrArray.InsertAt(++nParagIndex, pParag); |
- nReserveCharStart += pParag->m_nCharCount; |
+ nReserveCharStart += pParag->GetTextLength(); |
} |
nTextStart = i + 1; |
} |
} |
if (bFirst) { |
- pParag->m_nCharCount += nLength; |
- pParag->m_nLineCount = -1; |
+ pParag->IncrementTextLength(nLength); |
+ pParag->SetLineCount(-1); |
bFirst = FALSE; |
} else { |
pParag = new CFDE_TxtEdtParag(this); |
- pParag->m_nLineCount = -1; |
- pParag->m_nCharCount = nLength - nTextStart + nCutPart; |
- pParag->m_nCharStart = nReserveCharStart; |
+ pParag->SetLineCount(-1); |
+ pParag->SetTextLength(nLength - nTextStart + nCutPart); |
+ pParag->SetStartIndex(nReserveCharStart); |
m_ParagPtrArray.InsertAt(++nParagIndex, pParag); |
} |
m_pTxtBuf->Insert(nStart, lpText, nLength); |
@@ -860,7 +856,7 @@ void CFDE_TxtEdtEngine::Inner_Insert(int32_t nStart, |
for (i = ParagPos.nParagIndex; i <= nParagIndex; i++) { |
pParag = m_ParagPtrArray[i]; |
pParag->CalcLines(); |
- nTotalLineCount += pParag->m_nLineCount; |
+ nTotalLineCount += pParag->GetLineCount(); |
} |
m_nLineCount += nTotalLineCount - nReserveLineCount; |
m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); |
@@ -879,7 +875,7 @@ void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) { |
TextPos2ParagPos(nEnd, ParagPosEnd); |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPosEnd.nParagIndex]; |
FX_BOOL bLastParag = FALSE; |
- if (ParagPosEnd.nCharIndex == pParag->m_nCharCount - 1) { |
+ if (ParagPosEnd.nCharIndex == pParag->GetTextLength() - 1) { |
if (ParagPosEnd.nParagIndex < m_ParagPtrArray.GetSize() - 1) { |
ParagPosEnd.nParagIndex++; |
} else { |
@@ -892,8 +888,8 @@ void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) { |
for (i = ParagPosBgn.nParagIndex; i <= ParagPosEnd.nParagIndex; i++) { |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[i]; |
pParag->CalcLines(); |
- nTotalLineCount += pParag->m_nLineCount; |
- nTotalCharCount += pParag->m_nCharCount; |
+ nTotalLineCount += pParag->GetLineCount(); |
+ nTotalCharCount += pParag->GetTextLength(); |
} |
m_pTxtBuf->Delete(nStart, nCount); |
int32_t nNextParagIndex = (ParagPosBgn.nCharIndex == 0 && bLastParag) |
@@ -905,14 +901,14 @@ void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) { |
} |
if (!(bLastParag && ParagPosBgn.nCharIndex == 0)) { |
pParag = m_ParagPtrArray[ParagPosBgn.nParagIndex]; |
- pParag->m_nCharCount = nTotalCharCount - nCount; |
+ pParag->SetTextLength(nTotalCharCount - nCount); |
pParag->CalcLines(); |
- nTotalLineCount -= pParag->m_nLineCount; |
+ nTotalLineCount -= pParag->GetTextLength(); |
} |
int32_t nParagCount = m_ParagPtrArray.GetSize(); |
- for (i = nNextParagIndex; i < nParagCount; i++) { |
- m_ParagPtrArray[i]->m_nCharStart -= nCount; |
- } |
+ for (i = nNextParagIndex; i < nParagCount; i++) |
+ m_ParagPtrArray[i]->DecrementStartIndex(nCount); |
+ |
m_nLineCount -= nTotalLineCount; |
UpdatePages(); |
int32_t nPageCount = CountPages(); |
@@ -964,9 +960,9 @@ void CFDE_TxtEdtEngine::RebuildParagraphs() { |
nIndex = pIter->GetAt(); |
if (wChar == m_wLineEnd) { |
CFDE_TxtEdtParag* pParag = new CFDE_TxtEdtParag(this); |
- pParag->m_nCharStart = nParagStart; |
- pParag->m_nCharCount = nIndex - nParagStart + 1; |
- pParag->m_nLineCount = -1; |
+ pParag->SetStartIndex(nParagStart); |
+ pParag->SetTextLength(nIndex - nParagStart + 1); |
+ pParag->SetLineCount(-1); |
m_ParagPtrArray.Add(pParag); |
nParagStart = nIndex + 1; |
} |
@@ -1002,22 +998,22 @@ void CFDE_TxtEdtEngine::UpdateParags() { |
int32_t i = 0; |
for (i = 0; i < nCount; i++) { |
pParag = m_ParagPtrArray[i]; |
- if (pParag->m_nLineCount == -1) { |
+ if (pParag->GetLineCount() == -1) |
pParag->CalcLines(); |
- } |
- nLineCount += pParag->m_nLineCount; |
+ |
+ nLineCount += pParag->GetLineCount(); |
} |
m_nLineCount = nLineCount; |
} |
void CFDE_TxtEdtEngine::UpdatePages() { |
- if (m_nLineCount == 0) { |
+ if (m_nLineCount == 0) |
return; |
- } |
+ |
int32_t nPageCount = (m_nLineCount - 1) / (m_nPageLineCount) + 1; |
int32_t nSize = m_PagePtrArray.GetSize(); |
- if (nSize == nPageCount) { |
+ if (nSize == nPageCount) |
return; |
- } |
+ |
if (nSize > nPageCount) { |
IFDE_TxtEdtPage* pPage = NULL; |
int32_t i = 0; |
@@ -1028,7 +1024,6 @@ void CFDE_TxtEdtEngine::UpdatePages() { |
} |
m_PagePtrArray.RemoveAt(i); |
} |
- m_Param.pEventSink->On_PageCountChanged(this); |
return; |
} |
if (nSize < nPageCount) { |
@@ -1038,7 +1033,6 @@ void CFDE_TxtEdtEngine::UpdatePages() { |
pPage = IFDE_TxtEdtPage::Create(this, i); |
m_PagePtrArray.Add(pPage); |
} |
- m_Param.pEventSink->On_PageCountChanged(this); |
return; |
} |
} |
@@ -1244,25 +1238,24 @@ int32_t CFDE_TxtEdtEngine::MovePage2Char(int32_t nIndex) { |
int32_t i = 0; |
for (i = 0; i < nParagCount; i++) { |
pParag = m_ParagPtrArray[i]; |
- if (pParag->m_nCharStart <= nIndex && |
- nIndex < (pParag->m_nCharStart + pParag->m_nCharCount)) { |
+ if (pParag->GetStartIndex() <= nIndex && |
+ nIndex < (pParag->GetStartIndex() + pParag->GetTextLength())) { |
break; |
} |
- nLineCount += pParag->m_nLineCount; |
+ nLineCount += pParag->GetLineCount(); |
} |
pParag->LoadParag(); |
int32_t nLineStart = -1; |
int32_t nLineCharCount = -1; |
- for (i = 0; i < pParag->m_nLineCount; i++) { |
+ for (i = 0; i < pParag->GetLineCount(); i++) { |
pParag->GetLineRange(i, nLineStart, nLineCharCount); |
if (nLineStart <= nIndex && nIndex < (nLineStart + nLineCharCount)) { |
break; |
} |
} |
- ASSERT(i < pParag->m_nLineCount); |
+ ASSERT(i < pParag->GetLineCount()); |
nLineCount += (i + 1); |
m_nCaretPage = (nLineCount - 1) / m_nPageLineCount + 1 - 1; |
- m_Param.pEventSink->On_PageChange(this, m_nCaretPage); |
pParag->UnloadParag(); |
return m_nCaretPage; |
} |
@@ -1276,9 +1269,9 @@ void CFDE_TxtEdtEngine::TextPos2ParagPos(int32_t nIndex, |
while (nEnd > nBgn) { |
nMid = (nBgn + nEnd) / 2; |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[nMid]; |
- if (nIndex < pParag->m_nCharStart) { |
+ if (nIndex < pParag->GetStartIndex()) { |
nEnd = nMid - 1; |
- } else if (nIndex >= (pParag->m_nCharStart + pParag->m_nCharCount)) { |
+ } else if (nIndex >= (pParag->GetStartIndex() + pParag->GetTextLength())) { |
nBgn = nMid + 1; |
} else { |
break; |
@@ -1287,11 +1280,11 @@ void CFDE_TxtEdtEngine::TextPos2ParagPos(int32_t nIndex, |
if (nBgn == nEnd) { |
nMid = nBgn; |
} |
- ASSERT(nIndex >= m_ParagPtrArray[nMid]->m_nCharStart && |
- (nIndex < m_ParagPtrArray[nMid]->m_nCharStart + |
- m_ParagPtrArray[nMid]->m_nCharCount)); |
+ ASSERT(nIndex >= m_ParagPtrArray[nMid]->GetStartIndex() && |
+ (nIndex < m_ParagPtrArray[nMid]->GetStartIndex() + |
+ m_ParagPtrArray[nMid]->GetTextLength())); |
ParagPos.nParagIndex = nMid; |
- ParagPos.nCharIndex = nIndex - m_ParagPtrArray[nMid]->m_nCharStart; |
+ ParagPos.nCharIndex = nIndex - m_ParagPtrArray[nMid]->GetStartIndex(); |
} |
int32_t CFDE_TxtEdtEngine::MoveForward(FX_BOOL& bBefore) { |
if (m_nCaret == m_pTxtBuf->GetTextLength() - 1) { |
@@ -1343,7 +1336,6 @@ FX_BOOL CFDE_TxtEdtEngine::MoveUp(CFX_PointF& ptCaret) { |
} else { |
m_nCaretPage--; |
} |
- m_Param.pEventSink->On_PageChange(this, m_nCaretPage); |
ptCaret.x -= rtContent.left; |
IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
ptCaret.x += pCurPage->GetContentsBox().right(); |
@@ -1357,7 +1349,6 @@ FX_BOOL CFDE_TxtEdtEngine::MoveUp(CFX_PointF& ptCaret) { |
} |
ptCaret.y -= rtContent.top; |
m_nCaretPage--; |
- m_Param.pEventSink->On_PageChange(this, m_nCaretPage); |
IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
ptCaret.y += pCurPage->GetContentsBox().bottom(); |
} |
@@ -1387,7 +1378,6 @@ FX_BOOL CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) { |
} else { |
m_nCaretPage++; |
} |
- m_Param.pEventSink->On_PageChange(this, m_nCaretPage); |
ptCaret.x -= rtContent.right(); |
IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
ptCaret.x += pCurPage->GetContentsBox().left; |
@@ -1401,7 +1391,6 @@ FX_BOOL CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) { |
} |
ptCaret.y -= rtContent.bottom(); |
m_nCaretPage++; |
- m_Param.pEventSink->On_PageChange(this, m_nCaretPage); |
IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
ptCaret.y += pCurPage->GetContentsBox().top; |
} |
@@ -1414,7 +1403,7 @@ FX_BOOL CFDE_TxtEdtEngine::MoveLineStart() { |
TextPos2ParagPos(nIndex, ParagPos); |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; |
pParag->LoadParag(); |
- int32_t nLineCount = pParag->m_nLineCount; |
+ int32_t nLineCount = pParag->GetLineCount(); |
int32_t i = 0; |
int32_t nStart = 0; |
int32_t nCount = 0; |
@@ -1434,7 +1423,7 @@ FX_BOOL CFDE_TxtEdtEngine::MoveLineEnd() { |
TextPos2ParagPos(nIndex, ParagPos); |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; |
pParag->LoadParag(); |
- int32_t nLineCount = pParag->m_nLineCount; |
+ int32_t nLineCount = pParag->GetLineCount(); |
int32_t i = 0; |
int32_t nStart = 0; |
int32_t nCount = 0; |
@@ -1469,7 +1458,7 @@ FX_BOOL CFDE_TxtEdtEngine::MoveParagStart() { |
FDE_TXTEDTPARAGPOS ParagPos; |
TextPos2ParagPos(nIndex, ParagPos); |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; |
- UpdateCaretRect(pParag->m_nCharStart, TRUE); |
+ UpdateCaretRect(pParag->GetStartIndex(), TRUE); |
return TRUE; |
} |
FX_BOOL CFDE_TxtEdtEngine::MoveParagEnd() { |
@@ -1477,7 +1466,7 @@ FX_BOOL CFDE_TxtEdtEngine::MoveParagEnd() { |
FDE_TXTEDTPARAGPOS ParagPos; |
TextPos2ParagPos(nIndex, ParagPos); |
CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; |
- nIndex = pParag->m_nCharStart + pParag->m_nCharCount - 1; |
+ nIndex = pParag->GetStartIndex() + pParag->GetTextLength() - 1; |
FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nIndex); |
if (wChar == L'\n' && nIndex > 0) { |
nIndex--; |