diff options
Diffstat (limited to 'xfa/fee')
-rw-r--r-- | xfa/fee/fde_txtedtbuf.cpp | 59 | ||||
-rw-r--r-- | xfa/fee/fde_txtedtbuf.h | 63 | ||||
-rw-r--r-- | xfa/fee/fde_txtedtengine.cpp | 143 | ||||
-rw-r--r-- | xfa/fee/fde_txtedtengine.h | 139 | ||||
-rw-r--r-- | xfa/fee/fde_txtedtpage.cpp | 13 | ||||
-rw-r--r-- | xfa/fee/fde_txtedtpage.h | 4 | ||||
-rw-r--r-- | xfa/fee/fde_txtedtparag.cpp | 5 | ||||
-rw-r--r-- | xfa/fee/fde_txtedtparag.h | 26 | ||||
-rw-r--r-- | xfa/fee/ifde_txtedtbuf.h | 39 | ||||
-rw-r--r-- | xfa/fee/ifde_txtedtengine.h | 129 | ||||
-rw-r--r-- | xfa/fee/ifde_txtedtpage.h | 7 |
11 files changed, 241 insertions, 386 deletions
diff --git a/xfa/fee/fde_txtedtbuf.cpp b/xfa/fee/fde_txtedtbuf.cpp index 4464a0f515..988ca4a5c1 100644 --- a/xfa/fee/fde_txtedtbuf.cpp +++ b/xfa/fee/fde_txtedtbuf.cpp @@ -8,9 +8,14 @@ #include <algorithm> -#include "xfa/fee/ifde_txtedtbuf.h" #include "xfa/fee/ifde_txtedtengine.h" +namespace { + +const int kDefaultChunkSize = 1024; + +} // namespace + #define FDE_DEFCHUNKCOUNT 2 #define FDE_TXTEDT_FORMATBLOCK_BGN 0xFFF9 #define FDE_TXTEDT_FORMATBLOCK_END 0xFFFB @@ -34,7 +39,7 @@ FX_BOOL CFDE_TxtEdtBufIter::Next(FX_BOOL bPrev) { return FALSE; } ASSERT(m_nCurChunk < m_pBuf->m_Chunks.GetSize()); - CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER lpChunk = NULL; + CFDE_TxtEdtBuf::FDE_CHUNKHEADER* lpChunk = nullptr; if (m_nCurIndex > 0) { m_nCurIndex--; } else { @@ -55,14 +60,14 @@ FX_BOOL CFDE_TxtEdtBufIter::Next(FX_BOOL bPrev) { return FALSE; } ASSERT(m_nCurChunk < m_pBuf->m_Chunks.GetSize()); - CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER lpChunk = m_pBuf->m_Chunks[m_nCurChunk]; + CFDE_TxtEdtBuf::FDE_CHUNKHEADER* lpChunk = m_pBuf->m_Chunks[m_nCurChunk]; if (lpChunk->nUsed != (m_nCurIndex + 1)) { m_nCurIndex++; } else { int32_t nEnd = m_pBuf->m_Chunks.GetSize() - 1; while (m_nCurChunk < nEnd) { m_nCurChunk++; - CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER lpChunkTemp = + CFDE_TxtEdtBuf::FDE_CHUNKHEADER* lpChunkTemp = m_pBuf->m_Chunks[m_nCurChunk]; if (lpChunkTemp->nUsed > 0) { m_nCurIndex = 0; @@ -103,8 +108,9 @@ IFX_CharIter* CFDE_TxtEdtBufIter::Clone() { pIter->m_Alias = m_Alias; return pIter; } -CFDE_TxtEdtBuf::CFDE_TxtEdtBuf(int32_t nDefChunkSize) - : m_nChunkSize(nDefChunkSize), + +CFDE_TxtEdtBuf::CFDE_TxtEdtBuf() + : m_nChunkSize(kDefaultChunkSize), m_nTotal(0), m_bChanged(FALSE), m_pAllocator(NULL) { @@ -138,8 +144,9 @@ void CFDE_TxtEdtBuf::SetText(const CFX_WideString& wsText) { ((nTextLength - 1) / m_nChunkSize + 1) - m_Chunks.GetSize(); int32_t i = 0; for (i = 0; i < nNeedCount; i++) { - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_pAllocator->Alloc( - sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR)); + FDE_CHUNKHEADER* lpChunk = + static_cast<FDE_CHUNKHEADER*>(m_pAllocator->Alloc( + sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR))); lpChunk->nUsed = 0; m_Chunks.Add(lpChunk); } @@ -151,7 +158,7 @@ void CFDE_TxtEdtBuf::SetText(const CFX_WideString& wsText) { if (nLeave < nCopyedLength) { nCopyedLength = nLeave; } - FDE_LPCHUNKHEADER lpChunk = m_Chunks[i]; + FDE_CHUNKHEADER* lpChunk = m_Chunks[i]; FXSYS_memcpy(lpChunk->wChars, lpSrcBuf, nCopyedLength * sizeof(FX_WCHAR)); nLeave -= nCopyedLength; lpSrcBuf += nCopyedLength; @@ -165,7 +172,7 @@ void CFDE_TxtEdtBuf::GetText(CFX_WideString& wsText) const { } FX_WCHAR CFDE_TxtEdtBuf::GetCharByIndex(int32_t nIndex) const { ASSERT(nIndex >= 0 && nIndex < GetTextLength()); - FDE_LPCHUNKHEADER pChunkHeader = NULL; + FDE_CHUNKHEADER* pChunkHeader = nullptr; int32_t nTotal = 0; int32_t nCount = m_Chunks.GetSize(); int32_t i = 0; @@ -188,7 +195,7 @@ void CFDE_TxtEdtBuf::GetRange(CFX_WideString& wsText, int32_t nCount = m_Chunks.GetSize(); FX_WCHAR* lpDstBuf = wsText.GetBuffer(nLength); int32_t nChunkIndex = cp.nChunkIndex; - FDE_LPCHUNKHEADER lpChunkHeader = m_Chunks[nChunkIndex]; + FDE_CHUNKHEADER* lpChunkHeader = m_Chunks[nChunkIndex]; int32_t nCopyLength = lpChunkHeader->nUsed - cp.nCharIndex; FX_WCHAR* lpSrcBuf = lpChunkHeader->wChars + cp.nCharIndex; while (nLeave > 0) { @@ -216,9 +223,10 @@ void CFDE_TxtEdtBuf::Insert(int32_t nPos, Index2CP(nPos, cp); int32_t nLengthTemp = nLength; if (cp.nCharIndex != 0) { - FDE_LPCHUNKHEADER lpNewChunk = (FDE_LPCHUNKHEADER)m_pAllocator->Alloc( - sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR)); - FDE_LPCHUNKHEADER lpChunk = m_Chunks[cp.nChunkIndex]; + FDE_CHUNKHEADER* lpNewChunk = + static_cast<FDE_CHUNKHEADER*>(m_pAllocator->Alloc( + sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR))); + FDE_CHUNKHEADER* lpChunk = m_Chunks[cp.nChunkIndex]; int32_t nCopy = lpChunk->nUsed - cp.nCharIndex; FXSYS_memcpy(lpNewChunk->wChars, lpChunk->wChars + cp.nCharIndex, nCopy * sizeof(FX_WCHAR)); @@ -229,7 +237,7 @@ void CFDE_TxtEdtBuf::Insert(int32_t nPos, cp.nCharIndex = 0; } if (cp.nChunkIndex != 0) { - FDE_LPCHUNKHEADER lpChunk = m_Chunks[cp.nChunkIndex - 1]; + FDE_CHUNKHEADER* lpChunk = m_Chunks[cp.nChunkIndex - 1]; if (lpChunk->nUsed != m_nChunkSize) { cp.nChunkIndex--; int32_t nFree = m_nChunkSize - lpChunk->nUsed; @@ -243,8 +251,9 @@ void CFDE_TxtEdtBuf::Insert(int32_t nPos, } } while (nLengthTemp > 0) { - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_pAllocator->Alloc( - sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR)); + FDE_CHUNKHEADER* lpChunk = + static_cast<FDE_CHUNKHEADER*>(m_pAllocator->Alloc( + sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR))); ASSERT(lpChunk); int32_t nCopy = std::min(nLengthTemp, m_nChunkSize); FXSYS_memcpy(lpChunk->wChars, lpText, nCopy * sizeof(FX_WCHAR)); @@ -262,7 +271,7 @@ void CFDE_TxtEdtBuf::Delete(int32_t nIndex, int32_t nLength) { FDE_CHUNKPLACE cpEnd; Index2CP(nIndex + nLength - 1, cpEnd); m_nTotal -= nLength; - FDE_LPCHUNKHEADER lpChunk = m_Chunks[cpEnd.nChunkIndex]; + FDE_CHUNKHEADER* lpChunk = m_Chunks[cpEnd.nChunkIndex]; int32_t nFirstPart = cpEnd.nCharIndex + 1; int32_t nMovePart = lpChunk->nUsed - nFirstPart; if (nMovePart != 0) { @@ -316,7 +325,7 @@ FX_BOOL CFDE_TxtEdtBuf::Optimize(IFX_Pause* pPause) { } int32_t i = 0; for (; i < nCount; i++) { - FDE_LPCHUNKHEADER lpChunk = m_Chunks[i]; + FDE_CHUNKHEADER* lpChunk = m_Chunks[i]; if (lpChunk->nUsed == 0) { m_pAllocator->Free(lpChunk); m_Chunks.RemoveAt(i); @@ -324,11 +333,11 @@ FX_BOOL CFDE_TxtEdtBuf::Optimize(IFX_Pause* pPause) { --nCount; } } - if (pPause != NULL && pPause->NeedToPauseNow()) { + if (pPause && pPause->NeedToPauseNow()) return FALSE; - } - FDE_LPCHUNKHEADER lpPreChunk = m_Chunks[0]; - FDE_LPCHUNKHEADER lpCurChunk = NULL; + + FDE_CHUNKHEADER* lpPreChunk = m_Chunks[0]; + FDE_CHUNKHEADER* lpCurChunk = nullptr; for (i = 1; i < nCount; i++) { lpCurChunk = m_Chunks[i]; if (lpPreChunk->nUsed + lpCurChunk->nUsed <= m_nChunkSize) { @@ -364,8 +373,8 @@ void CFDE_TxtEdtBuf::ResetChunkBuffer(int32_t nDefChunkCount, m_pAllocator = FX_CreateAllocator(FX_ALLOCTYPE_Fixed, nDefChunkCount, nChunkLength); ASSERT(m_pAllocator); - FDE_LPCHUNKHEADER lpChunkHeader = - (FDE_LPCHUNKHEADER)m_pAllocator->Alloc(nChunkLength); + FDE_CHUNKHEADER* lpChunkHeader = + static_cast<FDE_CHUNKHEADER*>(m_pAllocator->Alloc(nChunkLength)); ASSERT(lpChunkHeader); lpChunkHeader->nUsed = 0; m_Chunks.Add(lpChunkHeader); diff --git a/xfa/fee/fde_txtedtbuf.h b/xfa/fee/fde_txtedtbuf.h index 102217da87..5d7de45401 100644 --- a/xfa/fee/fde_txtedtbuf.h +++ b/xfa/fee/fde_txtedtbuf.h @@ -7,7 +7,6 @@ #ifndef XFA_FEE_FDE_TXTEDTBUF_H_ #define XFA_FEE_FDE_TXTEDTBUF_H_ -#include "xfa/fee/ifde_txtedtbuf.h" #include "xfa/fee/ifde_txtedtengine.h" #include "xfa/fgas/crt/fgas_memory.h" @@ -36,47 +35,43 @@ class CFDE_TxtEdtBufIter : public IFX_CharIter { int32_t m_nIndex; FX_WCHAR m_Alias; }; -class CFDE_TxtEdtBuf : public IFDE_TxtEdtBuf { +class CFDE_TxtEdtBuf { + public: + CFDE_TxtEdtBuf(); + + void Release(); + FX_BOOL SetChunkSize(int32_t nChunkSize); + int32_t GetChunkSize() const; + int32_t GetTextLength() const; + void SetText(const CFX_WideString& wsText); + void GetText(CFX_WideString& wsText) const; + FX_WCHAR GetCharByIndex(int32_t nIndex) const; + void GetRange(CFX_WideString& wsText, + int32_t nBegin, + int32_t nCount = -1) const; + + void Insert(int32_t nPos, const FX_WCHAR* lpText, int32_t nLength = 1); + void Delete(int32_t nIndex, int32_t nLength = 1); + void Clear(FX_BOOL bRelease = TRUE); + + FX_BOOL Optimize(IFX_Pause* pPause = nullptr); + + protected: + ~CFDE_TxtEdtBuf(); + + private: friend class CFDE_TxtEdtBufIter; - struct _FDE_CHUNKHEADER { + + struct FDE_CHUNKHEADER { int32_t nUsed; FX_WCHAR wChars[1]; }; - typedef _FDE_CHUNKHEADER FDE_CHUNKHEADER; - typedef _FDE_CHUNKHEADER* FDE_LPCHUNKHEADER; - struct _FDE_CHUNKPLACE { + + struct FDE_CHUNKPLACE { int32_t nChunkIndex; int32_t nCharIndex; }; - typedef _FDE_CHUNKPLACE FDE_CHUNKPLACE; - typedef _FDE_CHUNKPLACE* FDE_LPCHUNKPLACE; - - public: - CFDE_TxtEdtBuf(int32_t nDefChunkSize = FDE_DEFCHUNKLENGTH); - - virtual void Release(); - virtual FX_BOOL SetChunkSize(int32_t nChunkSize); - virtual int32_t GetChunkSize() const; - virtual int32_t GetTextLength() const; - virtual void SetText(const CFX_WideString& wsText); - virtual void GetText(CFX_WideString& wsText) const; - virtual FX_WCHAR GetCharByIndex(int32_t nIndex) const; - virtual void GetRange(CFX_WideString& wsText, - int32_t nBegine, - int32_t nCount = -1) const; - - virtual void Insert(int32_t nPos, - const FX_WCHAR* lpText, - int32_t nLength = 1); - virtual void Delete(int32_t nIndex, int32_t nLength = 1); - virtual void Clear(FX_BOOL bRelease = TRUE); - - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL); - - protected: - virtual ~CFDE_TxtEdtBuf(); - private: void ResetChunkBuffer(int32_t nDefChunkCount, int32_t nChunkSize); int32_t CP2Index(const FDE_CHUNKPLACE& cp) const; void Index2CP(int32_t nIndex, FDE_CHUNKPLACE& cp) const; diff --git a/xfa/fee/fde_txtedtengine.cpp b/xfa/fee/fde_txtedtengine.cpp index 1dc03dcc85..812817fbfa 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--; diff --git a/xfa/fee/fde_txtedtengine.h b/xfa/fee/fde_txtedtengine.h index b122969eae..4671bf549a 100644 --- a/xfa/fee/fde_txtedtengine.h +++ b/xfa/fee/fde_txtedtengine.h @@ -8,7 +8,7 @@ #define XFA_FEE_FDE_TXTEDTENGINE_H_ #include "core/fxcrt/include/fx_string.h" -#include "xfa/fee/ifde_txtedtbuf.h" +#include "xfa/fee/fde_txtedtbuf.h" #include "xfa/fee/ifde_txtedtengine.h" #include "xfa/fgas/layout/fgas_textbreak.h" @@ -28,83 +28,64 @@ class IFDE_TxtEdtDoRecord { virtual void Serialize(CFX_ByteString& bsDoRecord) const = 0; }; -class CFDE_TxtEdtEngine : public IFDE_TxtEdtEngine { - friend class CFDE_TxtEdtDoRecord_Insert; - friend class CFDE_TxtEdtDoRecord_DeleteRange; - friend class CFDE_TxtEdtPage; - struct _FDE_TXTEDTSELRANGE { - int32_t nStart; - int32_t nCount; - }; - typedef _FDE_TXTEDTSELRANGE FDE_TXTEDTSELRANGE; - typedef _FDE_TXTEDTSELRANGE* FDE_LPTXTEDTSELRANGE; - struct _FDE_TXTEDTPARAGPOS { - int32_t nParagIndex; - int32_t nCharIndex; - }; - typedef _FDE_TXTEDTPARAGPOS FDE_TXTEDTPARAGPOS; - typedef _FDE_TXTEDTPARAGPOS* FDE_LPTXTEDTPARAGPOS; - +class CFDE_TxtEdtEngine { public: CFDE_TxtEdtEngine(); - virtual void Release(); - - virtual void SetEditParams(const FDE_TXTEDTPARAMS& params); - virtual const FDE_TXTEDTPARAMS* GetEditParams() const; - - virtual int32_t CountPages() const; - virtual IFDE_TxtEdtPage* GetPage(int32_t nIndex); - - virtual FX_BOOL SetBufChunkSize(int32_t nChunkSize); - virtual void SetTextByStream(IFX_Stream* pStream); - virtual void SetText(const CFX_WideString& wsText); - virtual int32_t GetTextLength() const; - virtual void GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount = -1); - virtual void ClearText(); - - virtual int32_t GetCaretRect(CFX_RectF& rtCaret) const; - virtual int32_t GetCaretPos() const; - virtual int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore); - virtual int32_t MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, - FX_BOOL bShift = FALSE, - FX_BOOL bCtrl = FALSE); - virtual void Lock(); - virtual void Unlock(); - virtual FX_BOOL IsLocked() const; - - virtual int32_t Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLength); - virtual int32_t Delete(int32_t nStart, FX_BOOL bBackspace = FALSE); - virtual int32_t DeleteRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t Replace(int32_t nStart, - int32_t nLength, - const CFX_WideString& wsReplace); - virtual void SetLimit(int32_t nLimit); - virtual void SetAliasChar(FX_WCHAR wcAlias); + void Release(); + + void SetEditParams(const FDE_TXTEDTPARAMS& params); + FDE_TXTEDTPARAMS* GetEditParams(); + + int32_t CountPages() const; + IFDE_TxtEdtPage* GetPage(int32_t nIndex); + + FX_BOOL SetBufChunkSize(int32_t nChunkSize); + void SetTextByStream(IFX_Stream* pStream); + void SetText(const CFX_WideString& wsText); + int32_t GetTextLength() const; + void GetText(CFX_WideString& wsText, int32_t nStart, int32_t nCount = -1); + void ClearText(); + + int32_t GetCaretRect(CFX_RectF& rtCaret) const; + int32_t GetCaretPos() const; + int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore); + int32_t MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, + FX_BOOL bShift = FALSE, + FX_BOOL bCtrl = FALSE); + void Lock(); + void Unlock(); + FX_BOOL IsLocked() const; + + int32_t Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLength); + int32_t Delete(int32_t nStart, FX_BOOL bBackspace = FALSE); + int32_t DeleteRange(int32_t nStart, int32_t nCount = -1); + int32_t Replace(int32_t nStart, + int32_t nLength, + const CFX_WideString& wsReplace); + + void SetLimit(int32_t nLimit); + void SetAliasChar(FX_WCHAR wcAlias); void RemoveSelRange(int32_t nStart, int32_t nCount = -1); - virtual void AddSelRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t CountSelRanges(); - virtual int32_t GetSelRange(int32_t nIndex, int32_t& nStart); - virtual void ClearSelection(); + void AddSelRange(int32_t nStart, int32_t nCount = -1); + int32_t CountSelRanges(); + int32_t GetSelRange(int32_t nIndex, int32_t& nStart); + void ClearSelection(); - virtual FX_BOOL Redo(const CFX_ByteStringC& bsRedo); - virtual FX_BOOL Undo(const CFX_ByteStringC& bsUndo); + FX_BOOL Redo(const CFX_ByteStringC& bsRedo); + FX_BOOL Undo(const CFX_ByteStringC& bsUndo); - virtual int32_t StartLayout(); - virtual int32_t DoLayout(IFX_Pause* pPause); - virtual void EndLayout(); + int32_t StartLayout(); + int32_t DoLayout(IFX_Pause* pPause); + void EndLayout(); - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL); - virtual int32_t CountParags() const; - virtual IFDE_TxtEdtParag* GetParag(int32_t nParagIndex) const; - virtual IFX_CharIter* CreateCharIter(); - IFDE_TxtEdtBuf* GetTextBuf() const; + FX_BOOL Optimize(IFX_Pause* pPause = NULL); + int32_t CountParags() const; + CFDE_TxtEdtParag* GetParag(int32_t nParagIndex) const; + IFX_CharIter* CreateCharIter(); + CFDE_TxtEdtBuf* GetTextBuf() const; int32_t GetTextBufLength() const; CFX_TxtBreak* GetTextBreak() const; int32_t GetLineCount() const; @@ -117,9 +98,23 @@ class CFDE_TxtEdtEngine : public IFDE_TxtEdtEngine { FX_WCHAR GetAliasChar() const { return m_wcAliasChar; } protected: - virtual ~CFDE_TxtEdtEngine(); + ~CFDE_TxtEdtEngine(); private: + friend class CFDE_TxtEdtDoRecord_Insert; + friend class CFDE_TxtEdtDoRecord_DeleteRange; + friend class CFDE_TxtEdtPage; + + struct FDE_TXTEDTSELRANGE { + int32_t nStart; + int32_t nCount; + }; + + struct FDE_TXTEDTPARAGPOS { + int32_t nParagIndex; + int32_t nCharIndex; + }; + void Inner_Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLength); void GetPreDeleteText(CFX_WideString& wsText, int32_t nIndex, @@ -173,12 +168,12 @@ class CFDE_TxtEdtEngine : public IFDE_TxtEdtEngine { FX_BOOL IsSelect(); void DeleteSelect(); - IFDE_TxtEdtBuf* m_pTxtBuf; + CFDE_TxtEdtBuf* m_pTxtBuf; CFX_TxtBreak* m_pTextBreak; FDE_TXTEDTPARAMS m_Param; CFX_ArrayTemplate<IFDE_TxtEdtPage*> m_PagePtrArray; CFX_ArrayTemplate<CFDE_TxtEdtParag*> m_ParagPtrArray; - CFX_ArrayTemplate<FDE_LPTXTEDTSELRANGE> m_SelRangePtrArr; + CFX_ArrayTemplate<FDE_TXTEDTSELRANGE*> m_SelRangePtrArr; int32_t m_nPageLineCount; int32_t m_nLineCount; int32_t m_nAnchorPos; diff --git a/xfa/fee/fde_txtedtpage.cpp b/xfa/fee/fde_txtedtpage.cpp index c50f66e2ff..d46e1a11b0 100644 --- a/xfa/fee/fde_txtedtpage.cpp +++ b/xfa/fee/fde_txtedtpage.cpp @@ -12,13 +12,12 @@ #include "xfa/fee/fde_txtedtengine.h" #include "xfa/fee/fde_txtedtparag.h" #include "xfa/fee/fx_wordbreak/fx_wordbreak.h" -#include "xfa/fee/ifde_txtedtbuf.h" #include "xfa/fee/ifde_txtedtengine.h" #include "xfa/fee/ifde_txtedtpage.h" #define FDE_TXTEDT_TOLERANCE 0.1f -IFDE_TxtEdtPage* IFDE_TxtEdtPage::Create(IFDE_TxtEdtEngine* pEngine, +IFDE_TxtEdtPage* IFDE_TxtEdtPage::Create(CFDE_TxtEdtEngine* pEngine, int32_t nIndex) { return (IFDE_TxtEdtPage*)new CFDE_TxtEdtPage(pEngine, nIndex); } @@ -122,7 +121,7 @@ int32_t CFDE_TxtEdtTextSet::GetCharRects_Impl(FDE_HVISUALOBJ hText, tr.wLineBreakChar = pTextParams->wLineBreakChar; return pEngine->GetTextBreak()->GetCharRects(&tr, rtArray, bBBox); } -CFDE_TxtEdtPage::CFDE_TxtEdtPage(IFDE_TxtEdtEngine* pEngine, int32_t nPageIndex) +CFDE_TxtEdtPage::CFDE_TxtEdtPage(CFDE_TxtEdtEngine* pEngine, int32_t nPageIndex) : m_pIter(nullptr), m_pTextSet(nullptr), m_pBgnParag(nullptr), @@ -151,8 +150,8 @@ CFDE_TxtEdtPage::~CFDE_TxtEdtPage() { void CFDE_TxtEdtPage::Release() { delete this; } -IFDE_TxtEdtEngine* CFDE_TxtEdtPage::GetEngine() const { - return (IFDE_TxtEdtEngine*)m_pEditEngine; +CFDE_TxtEdtEngine* CFDE_TxtEdtPage::GetEngine() const { + return m_pEditEngine; } FDE_VISUALOBJTYPE CFDE_TxtEdtPage::GetType() { return FDE_VISUALOBJ_Text; @@ -349,7 +348,7 @@ int32_t CFDE_TxtEdtPage::SelectWord(const CFX_PointF& fPoint, int32_t& nCount) { if (m_nRefCount < 0) { return -1; } - IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); + CFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); FX_BOOL bBefore; int32_t nIndex = GetCharIndex(fPoint, bBefore); if (nIndex == m_pEditEngine->GetTextBufLength()) { @@ -375,7 +374,7 @@ int32_t CFDE_TxtEdtPage::LoadPage(const CFX_RectF* pClipBox, m_nRefCount++; return m_nRefCount; } - IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); + CFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); const FDE_TXTEDTPARAMS* pParams = m_pEditEngine->GetEditParams(); if (m_pIter != NULL) { m_pIter->Release(); diff --git a/xfa/fee/fde_txtedtpage.h b/xfa/fee/fde_txtedtpage.h index 13a444f0da..8ac104c2a7 100644 --- a/xfa/fee/fde_txtedtpage.h +++ b/xfa/fee/fde_txtedtpage.h @@ -97,11 +97,11 @@ class CFDE_TxtEdtTextSet : public IFDE_TextSet { class CFDE_TxtEdtPage : public IFDE_TxtEdtPage { public: - CFDE_TxtEdtPage(IFDE_TxtEdtEngine* pEngine, int32_t nLineIndex); + CFDE_TxtEdtPage(CFDE_TxtEdtEngine* pEngine, int32_t nLineIndex); // IFDE_TxtEditPage: void Release() override; - IFDE_TxtEdtEngine* GetEngine() const override; + CFDE_TxtEdtEngine* GetEngine() const override; int32_t GetCharRect(int32_t nIndex, CFX_RectF& rect, FX_BOOL bBBox = FALSE) const override; diff --git a/xfa/fee/fde_txtedtparag.cpp b/xfa/fee/fde_txtedtparag.cpp index 0aae327b16..f49f43147d 100644 --- a/xfa/fee/fde_txtedtparag.cpp +++ b/xfa/fee/fde_txtedtparag.cpp @@ -9,7 +9,6 @@ #include "xfa/fee/fde_txtedtbuf.h" #include "xfa/fee/fde_txtedtengine.h" #include "xfa/fee/fx_wordbreak/fx_wordbreak.h" -#include "xfa/fee/ifde_txtedtbuf.h" #include "xfa/fee/ifde_txtedtengine.h" #include "xfa/fgas/layout/fgas_textbreak.h" @@ -32,7 +31,7 @@ void CFDE_TxtEdtParag::LoadParag() { return; } CFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak(); - IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); + CFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); const FDE_TXTEDTPARAMS* pParam = m_pEngine->GetEditParams(); FX_WCHAR wcAlias = 0; if (pParam->dwMode & FDE_TEXTEDITMODE_Password) { @@ -102,7 +101,7 @@ void CFDE_TxtEdtParag::UnloadParag() { } void CFDE_TxtEdtParag::CalcLines() { CFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak(); - IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); + CFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); IFX_CharIter* pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf); int32_t nCount = 0; uint32_t dwBreakStatus = FX_TXTBREAK_None; diff --git a/xfa/fee/fde_txtedtparag.h b/xfa/fee/fde_txtedtparag.h index 39921d5ef7..24ecbc7bf0 100644 --- a/xfa/fee/fde_txtedtparag.h +++ b/xfa/fee/fde_txtedtparag.h @@ -7,29 +7,35 @@ #ifndef XFA_FEE_FDE_TXTEDTPARAG_H_ #define XFA_FEE_FDE_TXTEDTPARAG_H_ -#include "xfa/fee/ifde_txtedtengine.h" +#include <stdint.h> class CFDE_TxtEdtEngine; -class CFDE_TxtEdtParag : public IFDE_TxtEdtParag { +class CFDE_TxtEdtParag { public: explicit CFDE_TxtEdtParag(CFDE_TxtEdtEngine* pEngine); ~CFDE_TxtEdtParag(); - virtual int32_t GetTextLength() const { return m_nCharCount; } - virtual int32_t GetStartIndex() const { return m_nCharStart; } - virtual int32_t CountLines() const { return m_nLineCount; } - virtual void GetLineRange(int32_t nLineIndex, - int32_t& nStart, - int32_t& nCount) const; + int32_t GetTextLength() const { return m_nCharCount; } + int32_t GetStartIndex() const { return m_nCharStart; } + int32_t GetLineCount() const { return m_nLineCount; } + + void SetTextLength(int32_t len) { m_nCharCount = len; } + void IncrementTextLength(int32_t len) { m_nCharCount += len; } + void SetStartIndex(int32_t idx) { m_nCharStart = idx; } + void IncrementStartIndex(int32_t val) { m_nCharStart += val; } + void DecrementStartIndex(int32_t val) { m_nCharStart -= val; } + void SetLineCount(int32_t count) { m_nLineCount = count; } + + void GetLineRange(int32_t nLineIndex, int32_t& nStart, int32_t& nCount) const; void LoadParag(); void UnloadParag(); void CalcLines(); + + private: int32_t m_nCharStart; int32_t m_nCharCount; int32_t m_nLineCount; - - private: void* m_lpData; CFDE_TxtEdtEngine* m_pEngine; }; diff --git a/xfa/fee/ifde_txtedtbuf.h b/xfa/fee/ifde_txtedtbuf.h deleted file mode 100644 index db744b1b54..0000000000 --- a/xfa/fee/ifde_txtedtbuf.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 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_FEE_IFDE_TXTEDTBUF_H_ -#define XFA_FEE_IFDE_TXTEDTBUF_H_ - -#include "core/fxcrt/include/fx_basic.h" - -#define FDE_DEFCHUNKLENGTH (1024) - -class IFDE_TxtEdtBuf { - public: - virtual ~IFDE_TxtEdtBuf() {} - virtual void Release() = 0; - - virtual FX_BOOL SetChunkSize(int32_t nChunkSize) = 0; - virtual int32_t GetChunkSize() const = 0; - virtual int32_t GetTextLength() const = 0; - virtual void SetText(const CFX_WideString& wsText) = 0; - virtual void GetText(CFX_WideString& wsText) const = 0; - virtual FX_WCHAR GetCharByIndex(int32_t nIndex) const = 0; - virtual void GetRange(CFX_WideString& wsText, - int32_t nBegin, - int32_t nCount = -1) const = 0; - - virtual void Insert(int32_t nPos, - const FX_WCHAR* lpText, - int32_t nLength = 1) = 0; - virtual void Delete(int32_t nIndex, int32_t nLength = 1) = 0; - - virtual void Clear(FX_BOOL bRelease = TRUE) = 0; - - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL) = 0; -}; - -#endif // XFA_FEE_IFDE_TXTEDTBUF_H_ diff --git a/xfa/fee/ifde_txtedtengine.h b/xfa/fee/ifde_txtedtengine.h index e03a53e1ab..1855f6f769 100644 --- a/xfa/fee/ifde_txtedtengine.h +++ b/xfa/fee/ifde_txtedtengine.h @@ -10,10 +10,9 @@ #include "core/fxge/include/fx_dib.h" #include "xfa/fgas/font/fgas_font.h" +class CFDE_TxtEdtEngine; +class CFWL_EditImp; class IFDE_TxtEdtPage; -class IFDE_TxtEdtEngine; -class IFDE_TxtEdtEventSink; -class IFDE_TxtEdtParag; typedef struct FDE_HTXTEDTFIND_ { void* pData; } * FDE_HTXTEDTFIND; @@ -62,6 +61,7 @@ enum FDE_TXTEDTMOVECARET { MC_Home, MC_End, }; + enum FDE_TXTEDT_MODIFY_RET { FDE_TXTEDT_MODIFY_RET_F_Tab = -6, FDE_TXTEDT_MODIFY_RET_F_Locked = -5, @@ -75,21 +75,23 @@ enum FDE_TXTEDT_MODIFY_RET { FDE_TXTEDT_MODIFY_RET_S_Empty = 3, FDE_TXTEDT_MODIFY_RET_T_Tab = 4, }; + enum FDE_TXTEDIT_LINEEND { FDE_TXTEDIT_LINEEND_Auto, FDE_TXTEDIT_LINEEND_CRLF, FDE_TXTEDIT_LINEEND_CR, FDE_TXTEDIT_LINEEND_LF, }; -struct _FDE_TXTEDTPARAMS { - _FDE_TXTEDTPARAMS() + +struct FDE_TXTEDTPARAMS { + FDE_TXTEDTPARAMS() : fPlateWidth(0), fPlateHeight(0), nLineCount(0), dwLayoutStyles(0), dwAlignment(0), dwMode(0), - pFont(NULL), + pFont(nullptr), fFontSize(10.0f), dwFontColor(0xff000000), fLineSpace(10.0f), @@ -101,7 +103,8 @@ struct _FDE_TXTEDTPARAMS { nLineEnd(0), nHorzScale(100), fCharSpace(0), - pEventSink(NULL) {} + pEventSink(nullptr) {} + FX_FLOAT fPlateWidth; FX_FLOAT fPlateHeight; int32_t nLineCount; @@ -120,56 +123,22 @@ struct _FDE_TXTEDTPARAMS { int32_t nLineEnd; int32_t nHorzScale; FX_FLOAT fCharSpace; - IFDE_TxtEdtEventSink* pEventSink; + CFWL_EditImp* pEventSink; }; -typedef _FDE_TXTEDTPARAMS FDE_TXTEDTPARAMS; -typedef _FDE_TXTEDTPARAMS* FDE_LPTXTEDTPARAMS; + enum FDE_TXTEDT_TEXTCHANGE_TYPE { FDE_TXTEDT_TEXTCHANGE_TYPE_Insert = 0, FDE_TXTEDT_TEXTCHANGE_TYPE_Delete, FDE_TXTEDT_TEXTCHANGE_TYPE_Replace, }; -struct _FDE_TXTEDT_TEXTCHANGE_INFO { + +struct FDE_TXTEDT_TEXTCHANGE_INFO { int32_t nChangeType; CFX_WideString wsInsert; CFX_WideString wsDelete; CFX_WideString wsPrevText; }; -typedef _FDE_TXTEDT_TEXTCHANGE_INFO FDE_TXTEDT_TEXTCHANGE_INFO; -typedef _FDE_TXTEDT_TEXTCHANGE_INFO* FDE_LPTXTEDT_TEXTCHANGE_INFO; -class IFDE_TxtEdtEventSink { - public: - virtual ~IFDE_TxtEdtEventSink() {} - virtual void On_CaretChanged(IFDE_TxtEdtEngine* pEdit, - int32_t nPage, - FX_BOOL bVisible = TRUE) = 0; - virtual void On_TextChanged(IFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) = 0; - virtual void On_PageCountChanged(IFDE_TxtEdtEngine* pEdit) = 0; - virtual void On_SelChanged(IFDE_TxtEdtEngine* pEdit) = 0; - virtual FX_BOOL On_PageLoad(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) = 0; - virtual FX_BOOL On_PageUnload(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) = 0; - virtual FX_BOOL On_PageChange(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex) = 0; - virtual void On_AddDoRecord(IFDE_TxtEdtEngine* pEdit, - const CFX_ByteStringC& bsDoRecord) = 0; - virtual FX_BOOL On_ValidateField(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - int32_t nFieldIndex, - const CFX_WideString& wsFieldText, - int32_t nCharIndex) = 0; - virtual FX_BOOL On_ValidateBlock(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex) = 0; - virtual FX_BOOL On_GetBlockFormatText(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - CFX_WideString& wsBlockText) = 0; - virtual FX_BOOL On_Validate(IFDE_TxtEdtEngine* pEdit, - CFX_WideString& wsText) = 0; -}; + class IFX_CharIter { public: virtual ~IFX_CharIter() {} @@ -181,73 +150,5 @@ class IFX_CharIter { virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const = 0; virtual IFX_CharIter* Clone() = 0; }; -class IFDE_TxtEdtEngine { - public: - static IFDE_TxtEdtEngine* Create(); - - virtual ~IFDE_TxtEdtEngine() {} - virtual void Release() = 0; - virtual void SetEditParams(const FDE_TXTEDTPARAMS& params) = 0; - virtual const FDE_TXTEDTPARAMS* GetEditParams() const = 0; - - virtual int32_t CountPages() const = 0; - virtual IFDE_TxtEdtPage* GetPage(int32_t nIndex) = 0; - virtual FX_BOOL SetBufChunkSize(int32_t nChunkSize) = 0; - virtual void SetTextByStream(IFX_Stream* pStream) = 0; - virtual void SetText(const CFX_WideString& wsText) = 0; - virtual int32_t GetTextLength() const = 0; - virtual void GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount = -1) = 0; - virtual void ClearText() = 0; - - virtual int32_t GetCaretRect(CFX_RectF& rtCaret) const = 0; - virtual int32_t GetCaretPos() const = 0; - virtual int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore = TRUE) = 0; - virtual int32_t MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, - FX_BOOL bShift = FALSE, - FX_BOOL bCtrl = FALSE) = 0; - - virtual void Lock() = 0; - virtual void Unlock() = 0; - virtual FX_BOOL IsLocked() const = 0; - - virtual int32_t Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLength) = 0; - virtual int32_t Delete(int32_t nStart, FX_BOOL bBackspace = FALSE) = 0; - virtual int32_t DeleteRange(int32_t nStart, int32_t nCount = -1) = 0; - virtual int32_t Replace(int32_t nStart, - int32_t nLength, - const CFX_WideString& wsReplace) = 0; - virtual void SetLimit(int32_t nLimit) = 0; - virtual void SetAliasChar(FX_WCHAR wAlias) = 0; - virtual void AddSelRange(int32_t nStart, int32_t nCount = -1) = 0; - virtual int32_t CountSelRanges() = 0; - virtual int32_t GetSelRange(int32_t nIndex, int32_t& nStart) = 0; - virtual void ClearSelection() = 0; - - virtual FX_BOOL Redo(const CFX_ByteStringC& bsRedo) = 0; - virtual FX_BOOL Undo(const CFX_ByteStringC& bsUndo) = 0; - - virtual int32_t StartLayout() = 0; - virtual int32_t DoLayout(IFX_Pause* pPause) = 0; - virtual void EndLayout() = 0; - - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL) = 0; - virtual int32_t CountParags() const = 0; - virtual IFDE_TxtEdtParag* GetParag(int32_t nParagIndex) const = 0; - virtual IFX_CharIter* CreateCharIter() = 0; -}; -class IFDE_TxtEdtParag { - public: - virtual ~IFDE_TxtEdtParag() {} - virtual int32_t GetTextLength() const = 0; - virtual int32_t GetStartIndex() const = 0; - virtual int32_t CountLines() const = 0; - virtual void GetLineRange(int32_t nLineIndex, - int32_t& nStart, - int32_t& nCount) const = 0; -}; #endif // XFA_FEE_IFDE_TXTEDTENGINE_H_ diff --git a/xfa/fee/ifde_txtedtpage.h b/xfa/fee/ifde_txtedtpage.h index 094568834a..695b442b99 100644 --- a/xfa/fee/ifde_txtedtpage.h +++ b/xfa/fee/ifde_txtedtpage.h @@ -11,14 +11,15 @@ #include "xfa/fde/fde_visualset.h" #include "xfa/fgas/layout/fgas_textbreak.h" -class IFDE_TxtEdtEngine; +class CFDE_TxtEdtEngine; + class IFDE_TxtEdtPage : public IFDE_CanvasSet, public IFX_TxtAccess { public: - static IFDE_TxtEdtPage* Create(IFDE_TxtEdtEngine* pEngine, int32_t nIndex); + static IFDE_TxtEdtPage* Create(CFDE_TxtEdtEngine* pEngine, int32_t nIndex); virtual void Release() = 0; - virtual IFDE_TxtEdtEngine* GetEngine() const = 0; + virtual CFDE_TxtEdtEngine* GetEngine() const = 0; virtual int32_t GetCharRect(int32_t nIndex, CFX_RectF& rect, FX_BOOL bBBox = FALSE) const = 0; |