xref: /aosp_15_r20/external/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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