1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FPDFSDK_PWL_CPWL_EDIT_IMPL_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FPDFSDK_PWL_CPWL_EDIT_IMPL_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <deque> 11*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 12*3ac0a46fSAndroid Build Coastguard Worker #include <utility> 13*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 14*3ac0a46fSAndroid Build Coastguard Worker 15*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfdoc/cpvt_variabletext.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfdoc/cpvt_wordrange.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/bytestring.h" 18*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_codepage_forward.h" 19*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 20*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxge/dib/fx_dib.h" 21*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/pwl/ipwl_fillernotify.h" 22*3ac0a46fSAndroid Build Coastguard Worker 23*3ac0a46fSAndroid Build Coastguard Worker class CFX_RenderDevice; 24*3ac0a46fSAndroid Build Coastguard Worker class CPWL_Edit; 25*3ac0a46fSAndroid Build Coastguard Worker 26*3ac0a46fSAndroid Build Coastguard Worker class CPWL_EditImpl { 27*3ac0a46fSAndroid Build Coastguard Worker public: 28*3ac0a46fSAndroid Build Coastguard Worker class Iterator { 29*3ac0a46fSAndroid Build Coastguard Worker public: 30*3ac0a46fSAndroid Build Coastguard Worker Iterator(CPWL_EditImpl* pEdit, CPVT_VariableText::Iterator* pVTIterator); 31*3ac0a46fSAndroid Build Coastguard Worker ~Iterator(); 32*3ac0a46fSAndroid Build Coastguard Worker 33*3ac0a46fSAndroid Build Coastguard Worker bool NextWord(); 34*3ac0a46fSAndroid Build Coastguard Worker bool GetWord(CPVT_Word& word) const; 35*3ac0a46fSAndroid Build Coastguard Worker bool GetLine(CPVT_Line& line) const; 36*3ac0a46fSAndroid Build Coastguard Worker void SetAt(int32_t nWordIndex); 37*3ac0a46fSAndroid Build Coastguard Worker void SetAt(const CPVT_WordPlace& place); 38*3ac0a46fSAndroid Build Coastguard Worker const CPVT_WordPlace& GetAt() const; 39*3ac0a46fSAndroid Build Coastguard Worker 40*3ac0a46fSAndroid Build Coastguard Worker private: 41*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CPWL_EditImpl> m_pEdit; 42*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CPVT_VariableText::Iterator> m_pVTIterator; 43*3ac0a46fSAndroid Build Coastguard Worker }; 44*3ac0a46fSAndroid Build Coastguard Worker 45*3ac0a46fSAndroid Build Coastguard Worker CPWL_EditImpl(); 46*3ac0a46fSAndroid Build Coastguard Worker ~CPWL_EditImpl(); 47*3ac0a46fSAndroid Build Coastguard Worker 48*3ac0a46fSAndroid Build Coastguard Worker void DrawEdit(CFX_RenderDevice* pDevice, 49*3ac0a46fSAndroid Build Coastguard Worker const CFX_Matrix& mtUser2Device, 50*3ac0a46fSAndroid Build Coastguard Worker FX_COLORREF crTextFill, 51*3ac0a46fSAndroid Build Coastguard Worker const CFX_FloatRect& rcClip, 52*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& ptOffset, 53*3ac0a46fSAndroid Build Coastguard Worker const CPVT_WordRange* pRange, 54*3ac0a46fSAndroid Build Coastguard Worker IPWL_FillerNotify* pFillerNotify, 55*3ac0a46fSAndroid Build Coastguard Worker IPWL_FillerNotify::PerWindowData* pSystemData); 56*3ac0a46fSAndroid Build Coastguard Worker 57*3ac0a46fSAndroid Build Coastguard Worker void SetFontMap(IPVT_FontMap* pFontMap); 58*3ac0a46fSAndroid Build Coastguard Worker void SetNotify(CPWL_Edit* pNotify); 59*3ac0a46fSAndroid Build Coastguard Worker 60*3ac0a46fSAndroid Build Coastguard Worker // Returns an iterator for the contents. Should not be released. 61*3ac0a46fSAndroid Build Coastguard Worker Iterator* GetIterator(); 62*3ac0a46fSAndroid Build Coastguard Worker IPVT_FontMap* GetFontMap(); 63*3ac0a46fSAndroid Build Coastguard Worker void Initialize(); 64*3ac0a46fSAndroid Build Coastguard Worker 65*3ac0a46fSAndroid Build Coastguard Worker // Set the bounding box of the text area. 66*3ac0a46fSAndroid Build Coastguard Worker void SetPlateRect(const CFX_FloatRect& rect); 67*3ac0a46fSAndroid Build Coastguard Worker void SetScrollPos(const CFX_PointF& point); 68*3ac0a46fSAndroid Build Coastguard Worker 69*3ac0a46fSAndroid Build Coastguard Worker // Set the horizontal text alignment. (nFormat [0:left, 1:middle, 2:right]) 70*3ac0a46fSAndroid Build Coastguard Worker void SetAlignmentH(int32_t nFormat); 71*3ac0a46fSAndroid Build Coastguard Worker 72*3ac0a46fSAndroid Build Coastguard Worker // Set the vertical text alignment. (nFormat [0:left, 1:middle, 2:right]) 73*3ac0a46fSAndroid Build Coastguard Worker void SetAlignmentV(int32_t nFormat); 74*3ac0a46fSAndroid Build Coastguard Worker 75*3ac0a46fSAndroid Build Coastguard Worker // Set the substitution character for hidden text. 76*3ac0a46fSAndroid Build Coastguard Worker void SetPasswordChar(uint16_t wSubWord); 77*3ac0a46fSAndroid Build Coastguard Worker 78*3ac0a46fSAndroid Build Coastguard Worker // Set the maximum number of words in the text. 79*3ac0a46fSAndroid Build Coastguard Worker void SetLimitChar(int32_t nLimitChar); 80*3ac0a46fSAndroid Build Coastguard Worker void SetCharArray(int32_t nCharArray); 81*3ac0a46fSAndroid Build Coastguard Worker void SetMultiLine(bool bMultiLine); 82*3ac0a46fSAndroid Build Coastguard Worker void SetAutoReturn(bool bAuto); 83*3ac0a46fSAndroid Build Coastguard Worker void SetAutoFontSize(bool bAuto); 84*3ac0a46fSAndroid Build Coastguard Worker void SetAutoScroll(bool bAuto); 85*3ac0a46fSAndroid Build Coastguard Worker void SetFontSize(float fFontSize); 86*3ac0a46fSAndroid Build Coastguard Worker void SetTextOverflow(bool bAllowed); 87*3ac0a46fSAndroid Build Coastguard Worker void OnMouseDown(const CFX_PointF& point, bool bShift, bool bCtrl); 88*3ac0a46fSAndroid Build Coastguard Worker void OnMouseMove(const CFX_PointF& point, bool bShift, bool bCtrl); 89*3ac0a46fSAndroid Build Coastguard Worker void OnVK_UP(bool bShift); 90*3ac0a46fSAndroid Build Coastguard Worker void OnVK_DOWN(bool bShift); 91*3ac0a46fSAndroid Build Coastguard Worker void OnVK_LEFT(bool bShift); 92*3ac0a46fSAndroid Build Coastguard Worker void OnVK_RIGHT(bool bShift); 93*3ac0a46fSAndroid Build Coastguard Worker void OnVK_HOME(bool bShift, bool bCtrl); 94*3ac0a46fSAndroid Build Coastguard Worker void OnVK_END(bool bShift, bool bCtrl); 95*3ac0a46fSAndroid Build Coastguard Worker void SetText(const WideString& sText); 96*3ac0a46fSAndroid Build Coastguard Worker bool InsertWord(uint16_t word, FX_Charset charset); 97*3ac0a46fSAndroid Build Coastguard Worker bool InsertReturn(); 98*3ac0a46fSAndroid Build Coastguard Worker bool Backspace(); 99*3ac0a46fSAndroid Build Coastguard Worker bool Delete(); 100*3ac0a46fSAndroid Build Coastguard Worker bool ClearSelection(); 101*3ac0a46fSAndroid Build Coastguard Worker bool InsertText(const WideString& sText, FX_Charset charset); 102*3ac0a46fSAndroid Build Coastguard Worker void ReplaceAndKeepSelection(const WideString& text); 103*3ac0a46fSAndroid Build Coastguard Worker void ReplaceSelection(const WideString& text); 104*3ac0a46fSAndroid Build Coastguard Worker bool Redo(); 105*3ac0a46fSAndroid Build Coastguard Worker bool Undo(); 106*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace WordIndexToWordPlace(int32_t index) const; 107*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace SearchWordPlace(const CFX_PointF& point) const; 108*3ac0a46fSAndroid Build Coastguard Worker int32_t GetCaret() const; 109*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace GetCaretWordPlace() const; 110*3ac0a46fSAndroid Build Coastguard Worker WideString GetSelectedText() const; 111*3ac0a46fSAndroid Build Coastguard Worker WideString GetText() const; 112*3ac0a46fSAndroid Build Coastguard Worker float GetFontSize() const; 113*3ac0a46fSAndroid Build Coastguard Worker uint16_t GetPasswordChar() const; 114*3ac0a46fSAndroid Build Coastguard Worker CFX_PointF GetScrollPos() const; 115*3ac0a46fSAndroid Build Coastguard Worker int32_t GetCharArray() const; 116*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect GetContentRect() const; 117*3ac0a46fSAndroid Build Coastguard Worker WideString GetRangeText(const CPVT_WordRange& range) const; 118*3ac0a46fSAndroid Build Coastguard Worker void SetSelection(int32_t nStartChar, int32_t nEndChar); 119*3ac0a46fSAndroid Build Coastguard Worker std::pair<int32_t, int32_t> GetSelection() const; 120*3ac0a46fSAndroid Build Coastguard Worker void SelectAll(); 121*3ac0a46fSAndroid Build Coastguard Worker void SelectNone(); 122*3ac0a46fSAndroid Build Coastguard Worker bool IsSelected() const; 123*3ac0a46fSAndroid Build Coastguard Worker void Paint(); 124*3ac0a46fSAndroid Build Coastguard Worker void EnableRefresh(bool bRefresh); 125*3ac0a46fSAndroid Build Coastguard Worker void RefreshWordRange(const CPVT_WordRange& wr); 126*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordRange GetWholeWordRange() const; 127*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordRange GetSelectWordRange() const; 128*3ac0a46fSAndroid Build Coastguard Worker void EnableUndo(bool bUndo); 129*3ac0a46fSAndroid Build Coastguard Worker bool IsTextFull() const; 130*3ac0a46fSAndroid Build Coastguard Worker bool CanUndo() const; 131*3ac0a46fSAndroid Build Coastguard Worker bool CanRedo() const; 132*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordRange GetVisibleWordRange() const; 133*3ac0a46fSAndroid Build Coastguard Worker 134*3ac0a46fSAndroid Build Coastguard Worker ByteString GetPDFWordString(int32_t nFontIndex, 135*3ac0a46fSAndroid Build Coastguard Worker uint16_t Word, 136*3ac0a46fSAndroid Build Coastguard Worker uint16_t SubWord); 137*3ac0a46fSAndroid Build Coastguard Worker 138*3ac0a46fSAndroid Build Coastguard Worker private: 139*3ac0a46fSAndroid Build Coastguard Worker class RefreshState { 140*3ac0a46fSAndroid Build Coastguard Worker public: 141*3ac0a46fSAndroid Build Coastguard Worker RefreshState(); 142*3ac0a46fSAndroid Build Coastguard Worker ~RefreshState(); 143*3ac0a46fSAndroid Build Coastguard Worker 144*3ac0a46fSAndroid Build Coastguard Worker void BeginRefresh(); 145*3ac0a46fSAndroid Build Coastguard Worker void Push(const CPVT_WordRange& linerange, const CFX_FloatRect& rect); 146*3ac0a46fSAndroid Build Coastguard Worker void NoAnalyse(); 147*3ac0a46fSAndroid Build Coastguard Worker std::vector<CFX_FloatRect>* GetRefreshRects(); 148*3ac0a46fSAndroid Build Coastguard Worker void EndRefresh(); 149*3ac0a46fSAndroid Build Coastguard Worker 150*3ac0a46fSAndroid Build Coastguard Worker private: 151*3ac0a46fSAndroid Build Coastguard Worker struct LineRect { LineRectLineRect152*3ac0a46fSAndroid Build Coastguard Worker LineRect(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine) 153*3ac0a46fSAndroid Build Coastguard Worker : m_wrLine(wrLine), m_rcLine(rcLine) {} 154*3ac0a46fSAndroid Build Coastguard Worker 155*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordRange m_wrLine; 156*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect m_rcLine; 157*3ac0a46fSAndroid Build Coastguard Worker }; 158*3ac0a46fSAndroid Build Coastguard Worker 159*3ac0a46fSAndroid Build Coastguard Worker void Add(const CFX_FloatRect& new_rect); 160*3ac0a46fSAndroid Build Coastguard Worker 161*3ac0a46fSAndroid Build Coastguard Worker std::vector<LineRect> m_NewLineRects; 162*3ac0a46fSAndroid Build Coastguard Worker std::vector<LineRect> m_OldLineRects; 163*3ac0a46fSAndroid Build Coastguard Worker std::vector<CFX_FloatRect> m_RefreshRects; 164*3ac0a46fSAndroid Build Coastguard Worker }; 165*3ac0a46fSAndroid Build Coastguard Worker 166*3ac0a46fSAndroid Build Coastguard Worker class SelectState { 167*3ac0a46fSAndroid Build Coastguard Worker public: 168*3ac0a46fSAndroid Build Coastguard Worker SelectState(); 169*3ac0a46fSAndroid Build Coastguard Worker explicit SelectState(const CPVT_WordRange& range); 170*3ac0a46fSAndroid Build Coastguard Worker 171*3ac0a46fSAndroid Build Coastguard Worker void Reset(); 172*3ac0a46fSAndroid Build Coastguard Worker void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); 173*3ac0a46fSAndroid Build Coastguard Worker void SetEndPos(const CPVT_WordPlace& end); 174*3ac0a46fSAndroid Build Coastguard Worker 175*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordRange ConvertToWordRange() const; 176*3ac0a46fSAndroid Build Coastguard Worker bool IsEmpty() const; 177*3ac0a46fSAndroid Build Coastguard Worker 178*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace BeginPos; 179*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace EndPos; 180*3ac0a46fSAndroid Build Coastguard Worker }; 181*3ac0a46fSAndroid Build Coastguard Worker 182*3ac0a46fSAndroid Build Coastguard Worker class UndoItemIface { 183*3ac0a46fSAndroid Build Coastguard Worker public: 184*3ac0a46fSAndroid Build Coastguard Worker virtual ~UndoItemIface() = default; 185*3ac0a46fSAndroid Build Coastguard Worker 186*3ac0a46fSAndroid Build Coastguard Worker // Undo/Redo the current undo item and returns the number of additional 187*3ac0a46fSAndroid Build Coastguard Worker // items to be processed in |m_UndoItemStack| to fully undo/redo the action. 188*3ac0a46fSAndroid Build Coastguard Worker // (An example is UndoReplaceSelection::Undo(), if UndoReplaceSelection 189*3ac0a46fSAndroid Build Coastguard Worker // marks the end of a replace action, UndoReplaceSelection::Undo() returns 3 190*3ac0a46fSAndroid Build Coastguard Worker // because 3 more undo items need to be processed to revert the replace 191*3ac0a46fSAndroid Build Coastguard Worker // action: insert text, clear selection and the UndoReplaceSelection which 192*3ac0a46fSAndroid Build Coastguard Worker // marks the beginning of replace action.) Implementations should return 0 193*3ac0a46fSAndroid Build Coastguard Worker // by default. 194*3ac0a46fSAndroid Build Coastguard Worker virtual int Undo() = 0; 195*3ac0a46fSAndroid Build Coastguard Worker virtual int Redo() = 0; 196*3ac0a46fSAndroid Build Coastguard Worker }; 197*3ac0a46fSAndroid Build Coastguard Worker 198*3ac0a46fSAndroid Build Coastguard Worker class UndoStack { 199*3ac0a46fSAndroid Build Coastguard Worker public: 200*3ac0a46fSAndroid Build Coastguard Worker UndoStack(); 201*3ac0a46fSAndroid Build Coastguard Worker ~UndoStack(); 202*3ac0a46fSAndroid Build Coastguard Worker 203*3ac0a46fSAndroid Build Coastguard Worker void AddItem(std::unique_ptr<UndoItemIface> pItem); 204*3ac0a46fSAndroid Build Coastguard Worker void Undo(); 205*3ac0a46fSAndroid Build Coastguard Worker void Redo(); 206*3ac0a46fSAndroid Build Coastguard Worker bool CanUndo() const; 207*3ac0a46fSAndroid Build Coastguard Worker bool CanRedo() const; 208*3ac0a46fSAndroid Build Coastguard Worker 209*3ac0a46fSAndroid Build Coastguard Worker private: 210*3ac0a46fSAndroid Build Coastguard Worker void RemoveHeads(); 211*3ac0a46fSAndroid Build Coastguard Worker void RemoveTails(); 212*3ac0a46fSAndroid Build Coastguard Worker 213*3ac0a46fSAndroid Build Coastguard Worker std::deque<std::unique_ptr<UndoItemIface>> m_UndoItemStack; 214*3ac0a46fSAndroid Build Coastguard Worker size_t m_nCurUndoPos = 0; 215*3ac0a46fSAndroid Build Coastguard Worker bool m_bWorking = false; 216*3ac0a46fSAndroid Build Coastguard Worker }; 217*3ac0a46fSAndroid Build Coastguard Worker 218*3ac0a46fSAndroid Build Coastguard Worker class Provider; 219*3ac0a46fSAndroid Build Coastguard Worker class UndoBackspace; 220*3ac0a46fSAndroid Build Coastguard Worker class UndoClear; 221*3ac0a46fSAndroid Build Coastguard Worker class UndoDelete; 222*3ac0a46fSAndroid Build Coastguard Worker class UndoInsertReturn; 223*3ac0a46fSAndroid Build Coastguard Worker class UndoInsertText; 224*3ac0a46fSAndroid Build Coastguard Worker class UndoInsertWord; 225*3ac0a46fSAndroid Build Coastguard Worker class UndoReplaceSelection; 226*3ac0a46fSAndroid Build Coastguard Worker 227*3ac0a46fSAndroid Build Coastguard Worker bool IsTextOverflow() const; 228*3ac0a46fSAndroid Build Coastguard Worker bool Clear(); 229*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place, 230*3ac0a46fSAndroid Build Coastguard Worker const WideString& sText, 231*3ac0a46fSAndroid Build Coastguard Worker FX_Charset charset); 232*3ac0a46fSAndroid Build Coastguard Worker FX_Charset GetCharSetFromUnicode(uint16_t word, FX_Charset nOldCharset); 233*3ac0a46fSAndroid Build Coastguard Worker int32_t GetTotalLines() const; 234*3ac0a46fSAndroid Build Coastguard Worker void SetSelection(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); 235*3ac0a46fSAndroid Build Coastguard Worker bool Delete(bool bAddUndo); 236*3ac0a46fSAndroid Build Coastguard Worker bool Clear(bool bAddUndo); 237*3ac0a46fSAndroid Build Coastguard Worker bool InsertText(const WideString& sText, FX_Charset charset, bool bAddUndo); 238*3ac0a46fSAndroid Build Coastguard Worker bool InsertWord(uint16_t word, FX_Charset charset, bool bAddUndo); 239*3ac0a46fSAndroid Build Coastguard Worker bool InsertReturn(bool bAddUndo); 240*3ac0a46fSAndroid Build Coastguard Worker bool Backspace(bool bAddUndo); 241*3ac0a46fSAndroid Build Coastguard Worker void SetCaret(const CPVT_WordPlace& place); 242*3ac0a46fSAndroid Build Coastguard Worker 243*3ac0a46fSAndroid Build Coastguard Worker CFX_PointF VTToEdit(const CFX_PointF& point) const; 244*3ac0a46fSAndroid Build Coastguard Worker 245*3ac0a46fSAndroid Build Coastguard Worker void RearrangeAll(); 246*3ac0a46fSAndroid Build Coastguard Worker void RearrangePart(const CPVT_WordRange& range); 247*3ac0a46fSAndroid Build Coastguard Worker void ScrollToCaret(); 248*3ac0a46fSAndroid Build Coastguard Worker void SetScrollInfo(); 249*3ac0a46fSAndroid Build Coastguard Worker void SetScrollPosX(float fx); 250*3ac0a46fSAndroid Build Coastguard Worker void SetScrollPosY(float fy); 251*3ac0a46fSAndroid Build Coastguard Worker void SetScrollLimit(); 252*3ac0a46fSAndroid Build Coastguard Worker void SetContentChanged(); 253*3ac0a46fSAndroid Build Coastguard Worker 254*3ac0a46fSAndroid Build Coastguard Worker void PaintInsertText(const CPVT_WordPlace& wpOld, 255*3ac0a46fSAndroid Build Coastguard Worker const CPVT_WordPlace& wpNew); 256*3ac0a46fSAndroid Build Coastguard Worker 257*3ac0a46fSAndroid Build Coastguard Worker CFX_PointF EditToVT(const CFX_PointF& point) const; 258*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect VTToEdit(const CFX_FloatRect& rect) const; 259*3ac0a46fSAndroid Build Coastguard Worker 260*3ac0a46fSAndroid Build Coastguard Worker void Refresh(); 261*3ac0a46fSAndroid Build Coastguard Worker void RefreshPushLineRects(const CPVT_WordRange& wr); 262*3ac0a46fSAndroid Build Coastguard Worker 263*3ac0a46fSAndroid Build Coastguard Worker void SetCaretInfo(); 264*3ac0a46fSAndroid Build Coastguard Worker void SetCaretOrigin(); 265*3ac0a46fSAndroid Build Coastguard Worker 266*3ac0a46fSAndroid Build Coastguard Worker void AddEditUndoItem(std::unique_ptr<UndoItemIface> pEditUndoItem); 267*3ac0a46fSAndroid Build Coastguard Worker 268*3ac0a46fSAndroid Build Coastguard Worker bool m_bEnableScroll = false; 269*3ac0a46fSAndroid Build Coastguard Worker bool m_bNotifyFlag = false; 270*3ac0a46fSAndroid Build Coastguard Worker bool m_bEnableOverflow = false; 271*3ac0a46fSAndroid Build Coastguard Worker bool m_bEnableRefresh = true; 272*3ac0a46fSAndroid Build Coastguard Worker bool m_bEnableUndo = true; 273*3ac0a46fSAndroid Build Coastguard Worker int32_t m_nAlignment = 0; 274*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<Provider> m_pVTProvider; 275*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CPVT_VariableText> m_pVT; // Must outlive |m_pVTProvider|. 276*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CPWL_Edit> m_pNotify; 277*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace m_wpCaret; 278*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordPlace m_wpOldCaret; 279*3ac0a46fSAndroid Build Coastguard Worker SelectState m_SelState; 280*3ac0a46fSAndroid Build Coastguard Worker CFX_PointF m_ptScrollPos; 281*3ac0a46fSAndroid Build Coastguard Worker CFX_PointF m_ptRefreshScrollPos; 282*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<Iterator> m_pIterator; 283*3ac0a46fSAndroid Build Coastguard Worker RefreshState m_Refresh; 284*3ac0a46fSAndroid Build Coastguard Worker CFX_PointF m_ptCaret; 285*3ac0a46fSAndroid Build Coastguard Worker UndoStack m_Undo; 286*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect m_rcOldContent; 287*3ac0a46fSAndroid Build Coastguard Worker }; 288*3ac0a46fSAndroid Build Coastguard Worker 289*3ac0a46fSAndroid Build Coastguard Worker #endif // FPDFSDK_PWL_CPWL_EDIT_IMPL_H_ 290