From 68eefa6a6f6bbab73000a29e2cac3e104be1cc81 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Wed, 30 Aug 2017 12:16:16 -0400 Subject: Rebuild CFDE_TextEditEngine. This CL rebuilds the text edit engine in a simpler fashion. Instead of depending on multiple pages, paragraphs and buffer fields there is a single text edit engine which contains a gap buffer. This makes the code easier to understand and follow. Change-Id: I10fe85603fa9ed15a647eaac2d931f113cd0c7b0 Reviewed-on: https://pdfium-review.googlesource.com/11990 Commit-Queue: dsinclair Reviewed-by: Henrique Nakashima Reviewed-by: Ryan Harrison --- xfa/fde/cfde_txtedtengine.h | 223 -------------------------------------------- 1 file changed, 223 deletions(-) delete mode 100644 xfa/fde/cfde_txtedtengine.h (limited to 'xfa/fde/cfde_txtedtengine.h') diff --git a/xfa/fde/cfde_txtedtengine.h b/xfa/fde/cfde_txtedtengine.h deleted file mode 100644 index f2bc62cd42..0000000000 --- a/xfa/fde/cfde_txtedtengine.h +++ /dev/null @@ -1,223 +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_FDE_CFDE_TXTEDTENGINE_H_ -#define XFA_FDE_CFDE_TXTEDTENGINE_H_ - -#include -#include - -#include "core/fxcrt/cfx_retain_ptr.h" -#include "core/fxcrt/fx_coordinates.h" -#include "core/fxge/fx_dib.h" -#include "xfa/fde/cfde_txtedtbuf.h" -#include "xfa/fde/cfde_txtedtpage.h" -#include "xfa/fde/cfde_txtedtparag.h" -#include "xfa/fgas/layout/cfx_txtbreak.h" - -class CFGAS_GEFont; -class CFWL_Edit; -class IFDE_TxtEdtDoRecord; -class IFX_CharIter; - -#define FDE_TEXTEDITMODE_MultiLines (1L << 0) -#define FDE_TEXTEDITMODE_AutoLineWrap (1L << 1) -#define FDE_TEXTEDITMODE_LimitArea_Vert (1L << 3) -#define FDE_TEXTEDITMODE_LimitArea_Horz (1L << 4) -#define FDE_TEXTEDITMODE_Validate (1L << 8) -#define FDE_TEXTEDITMODE_Password (1L << 9) - -#define FDE_TEXTEDITALIGN_Left 0 -#define FDE_TEXTEDITALIGN_Center (1L << 0) -#define FDE_TEXTEDITALIGN_Right (1L << 1) -#define FDE_TEXTEDITALIGN_Justified (1L << 4) - -#define FDE_TEXTEDITLAYOUT_CombText (1L << 4) -#define FDE_TEXTEDITLAYOUT_LastLineHeight (1L << 8) - -enum class FDE_CaretMove { - Left, - Right, - Up, - Down, - LineStart, - LineEnd, - Home, - End, -}; - -enum class FDE_EditResult { - kLocked = -5, - kInvalidate = -4, - kFull = -2, - kSuccess = 0, -}; - -struct FDE_TXTEDTPARAMS { - FDE_TXTEDTPARAMS(); - ~FDE_TXTEDTPARAMS(); - - float fPlateWidth; - float fPlateHeight; - - int32_t nLineCount; - uint32_t dwLayoutStyles; - uint32_t dwAlignment; - uint32_t dwMode; - - CFX_RetainPtr pFont; - float fFontSize; - FX_ARGB dwFontColor; - - float fLineSpace; - float fTabWidth; - - CFWL_Edit* pEventSink; -}; - -class CFDE_TxtEdtEngine { - public: - CFDE_TxtEdtEngine(); - ~CFDE_TxtEdtEngine(); - - void SetEditParams(const FDE_TXTEDTPARAMS& params); - FDE_TXTEDTPARAMS* GetEditParams() { return &m_Param; } - - CFDE_TxtEdtPage* GetPage(int32_t nIndex); - - void SetText(const CFX_WideString& wsText); - int32_t GetTextLength() const { return m_pTxtBuf->GetTextLength() - 1; } - CFX_WideString GetText(int32_t nStart, int32_t nCount) const; - void ClearText(); - - CFX_RectF GetCaretRect() const { return m_rtCaret; } - int32_t GetCaretPos() const { - return IsLocked() ? 0 : m_nCaret + (m_bBefore ? 0 : 1); - } - int32_t SetCaretPos(int32_t nIndex, bool bBefore); - int32_t MoveCaretPos(FDE_CaretMove eMoveCaret, bool bShift); - - FDE_EditResult Insert(const CFX_WideString& str); - void Delete(bool bBackspace); - - void SetLimit(int32_t nLimit) { m_nLimit = nLimit; } - int32_t GetLimit() const { return m_nLimit; } - void SetAliasChar(wchar_t wcAlias) { m_wcAliasChar = wcAlias; } - - void RemoveSelRange(int32_t nStart, int32_t nCount); - void AddSelRange(int32_t nStart, int32_t nCount); - int32_t CountSelRanges() const { - return pdfium::CollectionSize(m_SelRangePtrArr); - } - int32_t GetSelRange(int32_t nIndex, int32_t* nStart) const; - void ClearSelection(); - - bool Redo(const IFDE_TxtEdtDoRecord* pRecord); - bool Undo(const IFDE_TxtEdtDoRecord* pRecord); - - void Layout(); - - CFDE_TxtEdtParag* GetParag(int32_t nParagIndex) const { - return m_ParagPtrArray[nParagIndex].get(); - } - CFDE_TxtEdtBuf* GetTextBuf() const { return m_pTxtBuf.get(); } - - CFX_TxtBreak* GetTextBreak() { return &m_TextBreak; } - int32_t GetLineCount() const { return m_nLineCount; } - int32_t GetPageLineCount() const { return m_nPageLineCount; } - - int32_t Line2Parag(int32_t nStartParag, - int32_t nStartLineofParag, - int32_t nLineIndex, - int32_t& nStartLine) const; - wchar_t GetAliasChar() const { return m_wcAliasChar; } - - bool IsSelect() const { return !m_SelRangePtrArr.empty(); } - void Inner_DeleteRange(int32_t nStart, int32_t nCount); - void Inner_Insert(int32_t nStart, const CFX_WideString& wsText); - const FDE_TXTEDTPARAMS* GetParams() const { return &m_Param; } - - private: - struct FDE_TXTEDTSELRANGE { - int32_t nStart; - int32_t nCount; - }; - - struct FDE_TXTEDTPARAGPOS { - int32_t nParagIndex; - int32_t nCharIndex; - }; - - enum class LineEnding : uint8_t { - kAuto, - kCRLF, - kCR, - kLF, - }; - - int32_t CountPages() const { - return m_nLineCount == 0 ? 0 : ((m_nLineCount - 1) / m_nPageLineCount) + 1; - } - - bool IsLocked() const { return m_bLock; } - - CFX_WideString InsertIntoTextCopy(int32_t nIndex, - const wchar_t* lpText, - int32_t nLength); - - void DeleteRange_DoRecord(int32_t nStart, int32_t nCount, bool bSel); - void ResetEngine(); - void RebuildParagraphs(); - void RemoveAllParags() { m_ParagPtrArray.clear(); } - void RemoveAllPages() { m_PagePtrArray.clear(); } - void UpdateLineCounts(); - void UpdatePages(); - void UpdateTxtBreak(); - - bool ReplaceParagEnd(wchar_t*& lpText, int32_t& nLength, bool bPreIsCR); - void RecoverParagEnd(CFX_WideString& wsText) const; - int32_t MovePage2Char(int32_t nIndex); - void TextPos2ParagPos(int32_t nIndex, FDE_TXTEDTPARAGPOS& ParagPos) const; - int32_t MoveForward(bool& bBefore); - int32_t MoveBackward(bool& bBefore); - bool MoveUp(CFX_PointF& ptCaret); - bool MoveDown(CFX_PointF& ptCaret); - bool MoveLineStart(); - bool MoveLineEnd(); - bool MoveHome(); - bool MoveEnd(); - bool IsFitArea(CFX_WideString& wsText); - void UpdateCaretRect(int32_t nIndex, bool bBefore); - void GetCaretRect(CFX_RectF& rtCaret, - int32_t nPageIndex, - int32_t nCaret, - bool bBefore); - void UpdateCaretIndex(const CFX_PointF& ptCaret); - - void DeleteSelect(); - - std::unique_ptr m_pTxtBuf; - CFX_TxtBreak m_TextBreak; - FDE_TXTEDTPARAMS m_Param; - std::vector> m_PagePtrArray; - std::vector> m_ParagPtrArray; - std::vector> m_SelRangePtrArr; - int32_t m_nPageLineCount; - int32_t m_nLineCount; - int32_t m_nAnchorPos; - float m_fCaretPosReserve; - int32_t m_nCaret; - int32_t m_nCaretPage; - CFX_RectF m_rtCaret; - int32_t m_nLimit; - wchar_t m_wcAliasChar; - LineEnding m_FirstLineEnding; - bool m_bBefore; - bool m_bLock; - bool m_bAutoLineEnd; -}; - -#endif // XFA_FDE_CFDE_TXTEDTENGINE_H_ -- cgit v1.2.3