| Index: xfa/fde/cfde_txtedtengine.cpp
|
| diff --git a/xfa/fde/cfde_txtedtengine.cpp b/xfa/fde/cfde_txtedtengine.cpp
|
| index 7df4e0fb96cacdc2e608383f85a94746d7594920..1d357e928fddda33bd69a3059b702950fe475240 100644
|
| --- a/xfa/fde/cfde_txtedtengine.cpp
|
| +++ b/xfa/fde/cfde_txtedtengine.cpp
|
| @@ -205,9 +205,7 @@ int32_t CFDE_TxtEdtEngine::SetCaretPos(int32_t nIndex, bool bBefore) {
|
| m_nCaret++;
|
| m_bBefore = true;
|
| }
|
| - m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
|
| - ? m_rtCaret.top
|
| - : m_rtCaret.left;
|
| + m_fCaretPosReserve = m_rtCaret.left;
|
| m_Param.pEventSink->OnCaretChanged();
|
| m_nAnchorPos = -1;
|
| return m_nCaret;
|
| @@ -234,64 +232,38 @@ int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret,
|
| } else {
|
| m_nAnchorPos = -1;
|
| }
|
| - bool bVertical = m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical;
|
| +
|
| switch (eMoveCaret) {
|
| case MC_Left: {
|
| - if (bVertical) {
|
| - CFX_PointF ptCaret;
|
| - if (MoveUp(ptCaret)) {
|
| - UpdateCaretIndex(ptCaret);
|
| - }
|
| - } else {
|
| - bool bBefore = true;
|
| - int32_t nIndex = MoveBackward(bBefore);
|
| - if (nIndex >= 0) {
|
| - UpdateCaretRect(nIndex, bBefore);
|
| - }
|
| + bool bBefore = true;
|
| + int32_t nIndex = MoveBackward(bBefore);
|
| + if (nIndex >= 0) {
|
| + UpdateCaretRect(nIndex, bBefore);
|
| }
|
| - } break;
|
| + break;
|
| + }
|
| case MC_Right: {
|
| - if (bVertical) {
|
| - CFX_PointF ptCaret;
|
| - if (MoveDown(ptCaret)) {
|
| - UpdateCaretIndex(ptCaret);
|
| - }
|
| - } else {
|
| - bool bBefore = true;
|
| - int32_t nIndex = MoveForward(bBefore);
|
| - if (nIndex >= 0) {
|
| - UpdateCaretRect(nIndex, bBefore);
|
| - }
|
| + bool bBefore = true;
|
| + int32_t nIndex = MoveForward(bBefore);
|
| + if (nIndex >= 0) {
|
| + UpdateCaretRect(nIndex, bBefore);
|
| }
|
| - } break;
|
| + break;
|
| + }
|
| case MC_Up: {
|
| - if (bVertical) {
|
| - bool bBefore = true;
|
| - int32_t nIndex = MoveBackward(bBefore);
|
| - if (nIndex >= 0) {
|
| - UpdateCaretRect(nIndex, bBefore);
|
| - }
|
| - } else {
|
| - CFX_PointF ptCaret;
|
| - if (MoveUp(ptCaret)) {
|
| - UpdateCaretIndex(ptCaret);
|
| - }
|
| + CFX_PointF ptCaret;
|
| + if (MoveUp(ptCaret)) {
|
| + UpdateCaretIndex(ptCaret);
|
| }
|
| - } break;
|
| + break;
|
| + }
|
| case MC_Down: {
|
| - if (bVertical) {
|
| - bool bBefore = true;
|
| - int32_t nIndex = MoveForward(bBefore);
|
| - if (nIndex >= 0) {
|
| - UpdateCaretRect(nIndex, bBefore);
|
| - }
|
| - } else {
|
| - CFX_PointF ptCaret;
|
| - if (MoveDown(ptCaret)) {
|
| - UpdateCaretIndex(ptCaret);
|
| - }
|
| + CFX_PointF ptCaret;
|
| + if (MoveDown(ptCaret)) {
|
| + UpdateCaretIndex(ptCaret);
|
| }
|
| - } break;
|
| + break;
|
| + }
|
| case MC_WordBackward:
|
| break;
|
| case MC_WordForward:
|
| @@ -413,10 +385,9 @@ int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart,
|
| if (IsSelect()) {
|
| DeleteSelect();
|
| }
|
| - if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo))
|
| - m_Param.pEventSink->OnAddDoRecord(
|
| - pdfium::MakeUnique<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, -1);
|
| Inner_Insert(m_nCaret, lpBuffer, nLength);
|
| @@ -470,12 +441,11 @@ int32_t CFDE_TxtEdtEngine::Delete(int32_t nStart, bool bBackspace) {
|
| 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->OnAddDoRecord(
|
| - pdfium::MakeUnique<CFDE_TxtEdtDoRecord_DeleteRange>(this, nStart,
|
| - m_nCaret, wsRange));
|
| - }
|
| + CFX_WideString wsRange = m_pTxtBuf->GetRange(nStart, nCount);
|
| + 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);
|
| @@ -656,16 +626,12 @@ void CFDE_TxtEdtEngine::ClearSelection() {
|
| bool CFDE_TxtEdtEngine::Redo(const IFDE_TxtEdtDoRecord* pDoRecord) {
|
| if (IsLocked())
|
| return false;
|
| - if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
|
| - return false;
|
| return pDoRecord->Redo();
|
| }
|
|
|
| bool CFDE_TxtEdtEngine::Undo(const IFDE_TxtEdtDoRecord* pDoRecord) {
|
| if (IsLocked())
|
| return false;
|
| - if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
|
| - return false;
|
| return pDoRecord->Undo();
|
| }
|
|
|
| @@ -945,12 +911,11 @@ void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart,
|
| }
|
| ASSERT((nStart + nCount) <= m_pTxtBuf->GetTextLength());
|
|
|
| - if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
|
| - CFX_WideString wsRange = m_pTxtBuf->GetRange(nStart, nCount);
|
| - m_Param.pEventSink->OnAddDoRecord(
|
| - pdfium::MakeUnique<CFDE_TxtEdtDoRecord_DeleteRange>(
|
| - this, nStart, m_nCaret, wsRange, bSel));
|
| - }
|
| + CFX_WideString wsRange = m_pTxtBuf->GetRange(nStart, nCount);
|
| + 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);
|
| Inner_DeleteRange(nStart, nCount);
|
| @@ -1046,52 +1011,25 @@ void CFDE_TxtEdtEngine::UpdateTxtBreak() {
|
| } else {
|
| dwStyle |= FX_TXTLAYOUTSTYLE_SingleLine;
|
| }
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
|
| - dwStyle |= FX_TXTLAYOUTSTYLE_VerticalLayout;
|
| - } else {
|
| - dwStyle &= ~FX_TXTLAYOUTSTYLE_VerticalLayout;
|
| - }
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve) {
|
| - dwStyle |= FX_TXTLAYOUTSTYLE_ReverseLine;
|
| - } else {
|
| - dwStyle &= ~FX_TXTLAYOUTSTYLE_ReverseLine;
|
| - }
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_RTL) {
|
| - dwStyle |= FX_TXTLAYOUTSTYLE_RTLReadingOrder;
|
| - } else {
|
| - dwStyle &= ~FX_TXTLAYOUTSTYLE_RTLReadingOrder;
|
| - }
|
| + dwStyle &= ~FX_TXTLAYOUTSTYLE_VerticalLayout;
|
| + dwStyle &= ~FX_TXTLAYOUTSTYLE_ReverseLine;
|
| + dwStyle &= ~FX_TXTLAYOUTSTYLE_RTLReadingOrder;
|
| +
|
| if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText) {
|
| dwStyle |= FX_TXTLAYOUTSTYLE_CombText;
|
| } else {
|
| dwStyle &= ~FX_TXTLAYOUTSTYLE_CombText;
|
| }
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CharVertial) {
|
| - dwStyle |= FX_TXTLAYOUTSTYLE_VerticalChars;
|
| - } else {
|
| - dwStyle &= ~FX_TXTLAYOUTSTYLE_VerticalChars;
|
| - }
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_ExpandTab) {
|
| - dwStyle |= FX_TXTLAYOUTSTYLE_ExpandTab;
|
| - } else {
|
| - dwStyle &= ~FX_TXTLAYOUTSTYLE_ExpandTab;
|
| - }
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_ArabicContext) {
|
| - dwStyle |= FX_TXTLAYOUTSTYLE_ArabicContext;
|
| - } else {
|
| - dwStyle &= ~FX_TXTLAYOUTSTYLE_ArabicContext;
|
| - }
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_ArabicShapes) {
|
| - dwStyle |= FX_TXTLAYOUTSTYLE_ArabicShapes;
|
| - } else {
|
| - dwStyle &= ~FX_TXTLAYOUTSTYLE_ArabicShapes;
|
| - }
|
| +
|
| + dwStyle &= ~FX_TXTLAYOUTSTYLE_VerticalChars;
|
| + dwStyle &= ~FX_TXTLAYOUTSTYLE_ExpandTab;
|
| + dwStyle &= ~FX_TXTLAYOUTSTYLE_ArabicContext;
|
| + dwStyle &= ~FX_TXTLAYOUTSTYLE_ArabicShapes;
|
| +
|
| m_pTextBreak->SetLayoutStyles(dwStyle);
|
| uint32_t dwAligment = 0;
|
| if (m_Param.dwAlignment & FDE_TEXTEDITALIGN_Justified) {
|
| dwAligment |= FX_TXTLINEALIGNMENT_Justified;
|
| - } else if (m_Param.dwAlignment & FDE_TEXTEDITALIGN_Distributed) {
|
| - dwAligment |= FX_TXTLINEALIGNMENT_Distributed;
|
| }
|
| if (m_Param.dwAlignment & FDE_TEXTEDITALIGN_Center) {
|
| dwAligment |= FX_TXTLINEALIGNMENT_Center;
|
| @@ -1099,25 +1037,16 @@ void CFDE_TxtEdtEngine::UpdateTxtBreak() {
|
| dwAligment |= FX_TXTLINEALIGNMENT_Right;
|
| }
|
| m_pTextBreak->SetAlignment(dwAligment);
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
|
| - if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) {
|
| - m_pTextBreak->SetLineWidth(m_Param.fPlateHeight);
|
| - } else {
|
| - m_pTextBreak->SetLineWidth(kPageWidthMax);
|
| - }
|
| +
|
| + if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) {
|
| + m_pTextBreak->SetLineWidth(m_Param.fPlateWidth);
|
| } else {
|
| - if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) {
|
| - m_pTextBreak->SetLineWidth(m_Param.fPlateWidth);
|
| - } else {
|
| - m_pTextBreak->SetLineWidth(kPageWidthMax);
|
| - }
|
| + m_pTextBreak->SetLineWidth(kPageWidthMax);
|
| }
|
| +
|
| m_nPageLineCount = m_Param.nLineCount;
|
| if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText) {
|
| - FX_FLOAT fCombWidth =
|
| - m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical
|
| - ? m_Param.fPlateHeight
|
| - : m_Param.fPlateWidth;
|
| + FX_FLOAT fCombWidth = m_Param.fPlateWidth;
|
| if (m_nLimit > 0) {
|
| fCombWidth /= m_nLimit;
|
| }
|
| @@ -1323,85 +1252,34 @@ int32_t CFDE_TxtEdtEngine::MoveBackward(bool& bBefore) {
|
| bool CFDE_TxtEdtEngine::MoveUp(CFX_PointF& ptCaret) {
|
| IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage);
|
| const CFX_RectF& rtContent = pPage->GetContentsBox();
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
|
| - ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 - m_Param.fLineSpace;
|
| - ptCaret.y = m_fCaretPosReserve;
|
| - bool bLineReserve =
|
| - !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve);
|
| - if (ptCaret.x < rtContent.left) {
|
| - if (bLineReserve) {
|
| - if (m_nCaretPage == CountPages() - 1) {
|
| - return false;
|
| - }
|
| - } else {
|
| - if (m_nCaretPage == 0) {
|
| - return false;
|
| - }
|
| - }
|
| - if (bLineReserve) {
|
| - m_nCaretPage++;
|
| - } else {
|
| - m_nCaretPage--;
|
| - }
|
| - ptCaret.x -= rtContent.left;
|
| - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
|
| - ptCaret.x += pCurPage->GetContentsBox().right();
|
| - }
|
| - } else {
|
| - ptCaret.x = m_fCaretPosReserve;
|
| - ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 - m_Param.fLineSpace;
|
| - if (ptCaret.y < rtContent.top) {
|
| - if (m_nCaretPage == 0) {
|
| - return false;
|
| - }
|
| - ptCaret.y -= rtContent.top;
|
| - m_nCaretPage--;
|
| - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
|
| - ptCaret.y += pCurPage->GetContentsBox().bottom();
|
| + ptCaret.x = m_fCaretPosReserve;
|
| + ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 - m_Param.fLineSpace;
|
| + if (ptCaret.y < rtContent.top) {
|
| + if (m_nCaretPage == 0) {
|
| + return false;
|
| }
|
| + ptCaret.y -= rtContent.top;
|
| + m_nCaretPage--;
|
| + IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
|
| + ptCaret.y += pCurPage->GetContentsBox().bottom();
|
| }
|
| +
|
| return true;
|
| }
|
|
|
| bool CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) {
|
| IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage);
|
| const CFX_RectF& rtContent = pPage->GetContentsBox();
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
|
| - ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 + m_Param.fLineSpace;
|
| - ptCaret.y = m_fCaretPosReserve;
|
| - if (ptCaret.x >= rtContent.right()) {
|
| - bool bLineReserve =
|
| - !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve);
|
| - if (bLineReserve) {
|
| - if (m_nCaretPage == 0) {
|
| - return false;
|
| - }
|
| - } else {
|
| - if (m_nCaretPage == CountPages() - 1) {
|
| - return false;
|
| - }
|
| - }
|
| - if (bLineReserve) {
|
| - m_nCaretPage--;
|
| - } else {
|
| - m_nCaretPage++;
|
| - }
|
| - ptCaret.x -= rtContent.right();
|
| - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
|
| - ptCaret.x += pCurPage->GetContentsBox().left;
|
| - }
|
| - } else {
|
| - ptCaret.x = m_fCaretPosReserve;
|
| - ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace;
|
| - if (ptCaret.y >= rtContent.bottom()) {
|
| - if (m_nCaretPage == CountPages() - 1) {
|
| - return false;
|
| - }
|
| - ptCaret.y -= rtContent.bottom();
|
| - m_nCaretPage++;
|
| - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
|
| - ptCaret.y += pCurPage->GetContentsBox().top;
|
| + ptCaret.x = m_fCaretPosReserve;
|
| + ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace;
|
| + if (ptCaret.y >= rtContent.bottom()) {
|
| + if (m_nCaretPage == CountPages() - 1) {
|
| + return false;
|
| }
|
| + ptCaret.y -= rtContent.bottom();
|
| + m_nCaretPage++;
|
| + IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
|
| + ptCaret.y += pCurPage->GetContentsBox().top;
|
| }
|
| return true;
|
| }
|
| @@ -1542,9 +1420,7 @@ void CFDE_TxtEdtEngine::UpdateCaretRect(int32_t nIndex, bool bBefore) {
|
| m_nCaret++;
|
| m_bBefore = true;
|
| }
|
| - m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
|
| - ? m_rtCaret.top
|
| - : m_rtCaret.left;
|
| + m_fCaretPosReserve = m_rtCaret.left;
|
| m_Param.pEventSink->OnCaretChanged();
|
| }
|
|
|
| @@ -1561,25 +1437,15 @@ void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret,
|
| bBefore = false;
|
| }
|
| int32_t nBIDILevel = pPage->GetCharRect(nIndexInpage, rtCaret, bCombText);
|
| - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
|
| - if ((!FX_IsOdd(nBIDILevel) && !bBefore) ||
|
| - (FX_IsOdd(nBIDILevel) && bBefore)) {
|
| - rtCaret.Offset(0, rtCaret.height - 1.0f);
|
| - }
|
| - if (rtCaret.height == 0 && rtCaret.top > 1.0f)
|
| - rtCaret.top -= 1.0f;
|
| + if ((!FX_IsOdd(nBIDILevel) && !bBefore) ||
|
| + (FX_IsOdd(nBIDILevel) && bBefore)) {
|
| + rtCaret.Offset(rtCaret.width - 1.0f, 0);
|
| + }
|
| + if (rtCaret.width == 0 && rtCaret.left > 1.0f)
|
| + rtCaret.left -= 1.0f;
|
|
|
| - rtCaret.height = 1.0f;
|
| - } else {
|
| - if ((!FX_IsOdd(nBIDILevel) && !bBefore) ||
|
| - (FX_IsOdd(nBIDILevel) && bBefore)) {
|
| - rtCaret.Offset(rtCaret.width - 1.0f, 0);
|
| - }
|
| - if (rtCaret.width == 0 && rtCaret.left > 1.0f)
|
| - rtCaret.left -= 1.0f;
|
| + rtCaret.width = 1.0f;
|
|
|
| - rtCaret.width = 1.0f;
|
| - }
|
| m_Param.pEventSink->OnPageUnload(m_nCaretPage);
|
| }
|
|
|
|
|