| Index: xfa/fde/cfde_txtedtengine.cpp
|
| diff --git a/xfa/fde/cfde_txtedtengine.cpp b/xfa/fde/cfde_txtedtengine.cpp
|
| index d9e321f3824e7bcb51e6a8c40d93a8f1250cfd9e..6e113e1738e45ab3aaf8b4264c39160e29ca33cd 100644
|
| --- a/xfa/fde/cfde_txtedtengine.cpp
|
| +++ b/xfa/fde/cfde_txtedtengine.cpp
|
| @@ -8,6 +8,7 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "third_party/base/ptr_util.h"
|
| #include "xfa/fde/cfde_txtedtbuf.h"
|
| #include "xfa/fde/cfde_txtedtbufiter.h"
|
| #include "xfa/fde/cfde_txtedtdorecord_deleterange.h"
|
| @@ -207,7 +208,7 @@ int32_t CFDE_TxtEdtEngine::SetCaretPos(int32_t nIndex, bool bBefore) {
|
| m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
|
| ? m_rtCaret.top
|
| : m_rtCaret.left;
|
| - m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnCaretChanged();
|
| m_nAnchorPos = -1;
|
| return m_nCaret;
|
| }
|
| @@ -323,11 +324,11 @@ int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret,
|
| if (bShift && m_nAnchorPos != -1 && (m_nAnchorPos != m_nCaret)) {
|
| AddSelRange(std::min(m_nAnchorPos, m_nCaret),
|
| FXSYS_abs(m_nAnchorPos - m_nCaret));
|
| - m_Param.pEventSink->On_SelChanged(this);
|
| - }
|
| - if (bSelChange) {
|
| - m_Param.pEventSink->On_SelChanged(this);
|
| + m_Param.pEventSink->OnSelChanged();
|
| }
|
| + if (bSelChange)
|
| + m_Param.pEventSink->OnSelChanged();
|
| +
|
| return m_nCaret;
|
| }
|
|
|
| @@ -406,19 +407,18 @@ int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart,
|
| }
|
| if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
|
| CFX_WideString wsText = GetPreInsertText(m_nCaret, lpBuffer, nLength);
|
| - if (!m_Param.pEventSink->On_Validate(this, wsText)) {
|
| + if (!m_Param.pEventSink->OnValidate(wsText))
|
| return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
|
| - }
|
| }
|
| if (IsSelect()) {
|
| DeleteSelect();
|
| }
|
| if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo))
|
| - m_Param.pEventSink->On_AddDoRecord(
|
| - this,
|
| - new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength));
|
| + m_Param.pEventSink->OnAddDoRecord(
|
| + pdfium::MakeUnique<CFDE_TxtEdtDoRecord_Insert>(this, m_nCaret, lpBuffer,
|
| + nLength));
|
|
|
| - m_ChangeInfo.wsPrevText = GetText(0);
|
| + m_ChangeInfo.wsPrevText = GetText(0, -1);
|
| Inner_Insert(m_nCaret, lpBuffer, nLength);
|
| m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
|
| m_ChangeInfo.wsInsert = CFX_WideString(lpBuffer, nLength);
|
| @@ -431,7 +431,7 @@ int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart,
|
| bBefore = false;
|
| }
|
| SetCaretPos(nStart, bBefore);
|
| - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
|
| + m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
|
| return bPart ? FDE_TXTEDT_MODIFY_RET_S_Part : FDE_TXTEDT_MODIFY_RET_S_Normal;
|
| }
|
|
|
| @@ -467,43 +467,38 @@ int32_t CFDE_TxtEdtEngine::Delete(int32_t nStart, bool bBackspace) {
|
| }
|
| if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
|
| CFX_WideString wsText = GetPreDeleteText(nStart, nCount);
|
| - if (!m_Param.pEventSink->On_Validate(this, wsText)) {
|
| + if (!m_Param.pEventSink->OnValidate(wsText))
|
| return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
|
| - }
|
| }
|
| if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
|
| CFX_WideString wsRange = m_pTxtBuf->GetRange(nStart, nCount);
|
| - m_Param.pEventSink->On_AddDoRecord(
|
| - this,
|
| - new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, wsRange));
|
| + m_Param.pEventSink->OnAddDoRecord(
|
| + pdfium::MakeUnique<CFDE_TxtEdtDoRecord_DeleteRange>(this, nStart,
|
| + m_nCaret, wsRange));
|
| }
|
| m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
|
| m_ChangeInfo.wsDelete = GetText(nStart, nCount);
|
| Inner_DeleteRange(nStart, nCount);
|
| SetCaretPos(nStart + ((!bBackspace && nStart > 0) ? -1 : 0),
|
| (bBackspace || nStart == 0));
|
| - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
|
| + m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
|
| return FDE_TXTEDT_MODIFY_RET_S_Normal;
|
| }
|
|
|
| int32_t CFDE_TxtEdtEngine::DeleteRange(int32_t nStart, int32_t nCount) {
|
| - if (IsLocked()) {
|
| + if (IsLocked())
|
| return FDE_TXTEDT_MODIFY_RET_F_Locked;
|
| - }
|
| - if (nCount == -1) {
|
| + if (nCount == -1)
|
| nCount = GetTextBufLength();
|
| - }
|
| - if (nCount == 0) {
|
| + if (nCount == 0)
|
| return FDE_TXTEDT_MODIFY_RET_S_Normal;
|
| - }
|
| if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
|
| CFX_WideString wsText = GetPreDeleteText(nStart, nCount);
|
| - if (!m_Param.pEventSink->On_Validate(this, wsText)) {
|
| + if (!m_Param.pEventSink->OnValidate(wsText))
|
| return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
|
| - }
|
| }
|
| DeleteRange_DoRecord(nStart, nCount);
|
| - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
|
| + m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
|
| SetCaretPos(nStart, true);
|
| return FDE_TXTEDT_MODIFY_RET_S_Normal;
|
| }
|
| @@ -511,31 +506,28 @@ int32_t CFDE_TxtEdtEngine::DeleteRange(int32_t nStart, int32_t nCount) {
|
| int32_t CFDE_TxtEdtEngine::Replace(int32_t nStart,
|
| int32_t nLength,
|
| const CFX_WideString& wsReplace) {
|
| - if (IsLocked()) {
|
| + if (IsLocked())
|
| return FDE_TXTEDT_MODIFY_RET_F_Locked;
|
| - }
|
| - if (nStart < 0 || (nStart + nLength > GetTextBufLength())) {
|
| + if (nStart < 0 || (nStart + nLength > GetTextBufLength()))
|
| return FDE_TXTEDT_MODIFY_RET_F_Boundary;
|
| - }
|
| if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
|
| CFX_WideString wsText = GetPreReplaceText(
|
| nStart, nLength, wsReplace.c_str(), wsReplace.GetLength());
|
| - if (!m_Param.pEventSink->On_Validate(this, wsText)) {
|
| + if (!m_Param.pEventSink->OnValidate(wsText))
|
| return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
|
| - }
|
| }
|
| - if (IsSelect()) {
|
| + if (IsSelect())
|
| ClearSelection();
|
| - }
|
| +
|
| m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Replace;
|
| m_ChangeInfo.wsDelete = GetText(nStart, nLength);
|
| - if (nLength > 0) {
|
| + if (nLength > 0)
|
| Inner_DeleteRange(nStart, nLength);
|
| - }
|
| +
|
| int32_t nTextLength = wsReplace.GetLength();
|
| - if (nTextLength > 0) {
|
| + if (nTextLength > 0)
|
| Inner_Insert(nStart, wsReplace.c_str(), nTextLength);
|
| - }
|
| +
|
| m_ChangeInfo.wsInsert = CFX_WideString(wsReplace.c_str(), nTextLength);
|
| nStart += nTextLength;
|
| FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1);
|
| @@ -545,9 +537,9 @@ int32_t CFDE_TxtEdtEngine::Replace(int32_t nStart,
|
| bBefore = false;
|
| }
|
| SetCaretPos(nStart, bBefore);
|
| - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
|
| - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
|
| - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
|
| + m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| + m_Param.pEventSink->OnPageLoad(m_nCaretPage);
|
| + m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
|
| return FDE_TXTEDT_MODIFY_RET_S_Normal;
|
| }
|
|
|
| @@ -583,7 +575,7 @@ void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) {
|
| lpSelRange->nStart = nStart;
|
| lpSelRange->nCount = nCount;
|
| m_SelRangePtrArr.Add(lpSelRange);
|
| - m_Param.pEventSink->On_SelChanged(this);
|
| + m_Param.pEventSink->OnSelChanged();
|
| return;
|
| }
|
| FDE_TXTEDTSELRANGE* lpTemp = nullptr;
|
| @@ -593,7 +585,7 @@ void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) {
|
| lpSelRange->nStart = nStart;
|
| lpSelRange->nCount = nCount;
|
| m_SelRangePtrArr.Add(lpSelRange);
|
| - m_Param.pEventSink->On_SelChanged(this);
|
| + m_Param.pEventSink->OnSelChanged();
|
| return;
|
| }
|
| int32_t nEnd = nStart + nCount - 1;
|
| @@ -639,15 +631,16 @@ void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) {
|
| m_SelRangePtrArr.RemoveAt(nRangeBgn);
|
| }
|
| }
|
| - m_Param.pEventSink->On_SelChanged(this);
|
| + m_Param.pEventSink->OnSelChanged();
|
| }
|
|
|
| int32_t CFDE_TxtEdtEngine::CountSelRanges() const {
|
| return m_SelRangePtrArr.GetSize();
|
| }
|
|
|
| -int32_t CFDE_TxtEdtEngine::GetSelRange(int32_t nIndex, int32_t& nStart) const {
|
| - nStart = m_SelRangePtrArr[nIndex]->nStart;
|
| +int32_t CFDE_TxtEdtEngine::GetSelRange(int32_t nIndex, int32_t* nStart) const {
|
| + if (nStart)
|
| + *nStart = m_SelRangePtrArr[nIndex]->nStart;
|
| return m_SelRangePtrArr[nIndex]->nCount;
|
| }
|
|
|
| @@ -657,7 +650,7 @@ void CFDE_TxtEdtEngine::ClearSelection() {
|
| delete m_SelRangePtrArr[i];
|
| m_SelRangePtrArr.RemoveAll();
|
| if (nCount && m_Param.pEventSink)
|
| - m_Param.pEventSink->On_SelChanged(this);
|
| + m_Param.pEventSink->OnSelChanged();
|
| }
|
|
|
| bool CFDE_TxtEdtEngine::Redo(const IFDE_TxtEdtDoRecord* pDoRecord) {
|
| @@ -787,7 +780,7 @@ CFX_WideString CFDE_TxtEdtEngine::GetPreInsertText(int32_t nIndex,
|
| int32_t nSelLength = 0;
|
| int32_t nSelCount = CountSelRanges();
|
| while (nSelCount--) {
|
| - nSelLength = GetSelRange(nSelCount, nSelIndex);
|
| + nSelLength = GetSelRange(nSelCount, &nSelIndex);
|
| wsText.Delete(nSelIndex, nSelLength);
|
| nIndex = nSelIndex;
|
| }
|
| @@ -813,7 +806,7 @@ CFX_WideString CFDE_TxtEdtEngine::GetPreReplaceText(int32_t nIndex,
|
| int32_t nSelLength = 0;
|
| int32_t nSelCount = CountSelRanges();
|
| while (nSelCount--) {
|
| - nSelLength = GetSelRange(nSelCount, nSelIndex);
|
| + nSelLength = GetSelRange(nSelCount, &nSelIndex);
|
| wsText.Delete(nSelIndex, nSelLength);
|
| }
|
| wsText.Delete(nIndex, nOriginLength);
|
| @@ -830,7 +823,7 @@ void CFDE_TxtEdtEngine::Inner_Insert(int32_t nStart,
|
| ASSERT(nLength > 0);
|
| FDE_TXTEDTPARAGPOS ParagPos;
|
| TextPos2ParagPos(nStart, ParagPos);
|
| - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| int32_t nParagCount = m_ParagPtrArray.GetSize();
|
| int32_t i = 0;
|
| for (i = ParagPos.nParagIndex + 1; i < nParagCount; i++)
|
| @@ -884,7 +877,7 @@ void CFDE_TxtEdtEngine::Inner_Insert(int32_t nStart,
|
| nTotalLineCount += pParag->GetLineCount();
|
| }
|
| m_nLineCount += nTotalLineCount - nReserveLineCount;
|
| - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageLoad(m_nCaretPage);
|
| UpdatePages();
|
| }
|
|
|
| @@ -894,7 +887,7 @@ void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) {
|
| }
|
| int32_t nEnd = nStart + nCount - 1;
|
| ASSERT(nStart >= 0 && nEnd < m_pTxtBuf->GetTextLength());
|
| - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| FDE_TXTEDTPARAGPOS ParagPosBgn, ParagPosEnd;
|
| TextPos2ParagPos(nStart, ParagPosBgn);
|
| TextPos2ParagPos(nEnd, ParagPosEnd);
|
| @@ -940,7 +933,7 @@ void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) {
|
| if (m_nCaretPage >= nPageCount) {
|
| m_nCaretPage = nPageCount - 1;
|
| }
|
| - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageLoad(m_nCaretPage);
|
| }
|
|
|
| void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart,
|
| @@ -954,9 +947,9 @@ void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart,
|
|
|
| if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
|
| CFX_WideString wsRange = m_pTxtBuf->GetRange(nStart, nCount);
|
| - m_Param.pEventSink->On_AddDoRecord(
|
| - this, new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret,
|
| - wsRange, bSel));
|
| + m_Param.pEventSink->OnAddDoRecord(
|
| + pdfium::MakeUnique<CFDE_TxtEdtDoRecord_DeleteRange>(
|
| + this, nStart, m_nCaret, wsRange, bSel));
|
| }
|
| m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
|
| m_ChangeInfo.wsDelete = GetText(nStart, nCount);
|
| @@ -1235,14 +1228,14 @@ int32_t CFDE_TxtEdtEngine::MovePage2Char(int32_t nIndex) {
|
| ASSERT(nIndex <= m_pTxtBuf->GetTextLength());
|
| if (m_nCaretPage >= 0) {
|
| IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
|
| - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageLoad(m_nCaretPage);
|
| int32_t nPageCharStart = pPage->GetCharStart();
|
| int32_t nPageCharCount = pPage->GetCharCount();
|
| if (nIndex >= nPageCharStart && nIndex < nPageCharStart + nPageCharCount) {
|
| - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| return m_nCaretPage;
|
| }
|
| - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| }
|
| CFDE_TxtEdtParag* pParag = nullptr;
|
| int32_t nLineCount = 0;
|
| @@ -1552,7 +1545,7 @@ void CFDE_TxtEdtEngine::UpdateCaretRect(int32_t nIndex, bool bBefore) {
|
| m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
|
| ? m_rtCaret.top
|
| : m_rtCaret.left;
|
| - m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnCaretChanged();
|
| }
|
|
|
| void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret,
|
| @@ -1560,7 +1553,7 @@ void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret,
|
| int32_t nCaret,
|
| bool bBefore) {
|
| IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
|
| - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageLoad(m_nCaretPage);
|
| bool bCombText = !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText);
|
| int32_t nIndexInpage = nCaret - pPage->GetCharStart();
|
| if (bBefore && bCombText && nIndexInpage > 0) {
|
| @@ -1587,20 +1580,20 @@ void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret,
|
|
|
| rtCaret.width = 1.0f;
|
| }
|
| - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| }
|
|
|
| void CFDE_TxtEdtEngine::UpdateCaretIndex(const CFX_PointF& ptCaret) {
|
| IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
|
| - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnPageLoad(m_nCaretPage);
|
| m_nCaret = pPage->GetCharIndex(ptCaret, m_bBefore);
|
| GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore);
|
| if (!m_bBefore) {
|
| m_nCaret++;
|
| m_bBefore = true;
|
| }
|
| - m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage);
|
| - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
|
| + m_Param.pEventSink->OnCaretChanged();
|
| + m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| }
|
|
|
| bool CFDE_TxtEdtEngine::IsSelect() {
|
| @@ -1612,14 +1605,14 @@ void CFDE_TxtEdtEngine::DeleteSelect() {
|
| if (nCountRange > 0) {
|
| int32_t nSelStart = 0;
|
| while (nCountRange > 0) {
|
| - int32_t nSelCount = GetSelRange(--nCountRange, nSelStart);
|
| + int32_t nSelCount = GetSelRange(--nCountRange, &nSelStart);
|
| delete m_SelRangePtrArr[nCountRange];
|
| m_SelRangePtrArr.RemoveAt(nCountRange);
|
| DeleteRange_DoRecord(nSelStart, nSelCount, true);
|
| }
|
| ClearSelection();
|
| - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
|
| - m_Param.pEventSink->On_SelChanged(this);
|
| + m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
|
| + m_Param.pEventSink->OnSelChanged();
|
| SetCaretPos(nSelStart, true);
|
| return;
|
| }
|
|
|