John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 1 | // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 4 | |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
dsinclair | 89bdd08 | 2016-04-06 10:47:54 -0700 | [diff] [blame] | 7 | #ifndef FPDFSDK_FXEDIT_INCLUDE_FXET_EDIT_H_ |
| 8 | #define FPDFSDK_FXEDIT_INCLUDE_FXET_EDIT_H_ |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 9 | |
thestig | 821d59e | 2016-05-11 12:59:22 -0700 | [diff] [blame] | 10 | #include <memory> |
| 11 | |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 12 | #include "core/fpdfdoc/include/cpvt_secprops.h" |
| 13 | #include "core/fpdfdoc/include/cpvt_wordprops.h" |
dsinclair | 89bdd08 | 2016-04-06 10:47:54 -0700 | [diff] [blame] | 14 | #include "fpdfsdk/fxedit/include/fx_edit.h" |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 15 | |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 16 | class CPDF_PageObjectHolder; |
| 17 | class CPDF_TextObject; |
| 18 | class CPWL_Edit; |
| 19 | class CPWL_EditCtrl; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 20 | class CFX_Edit; |
| 21 | class CFX_Edit_Iterator; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 22 | class CFX_Edit_Provider; |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 23 | class CFX_RenderDevice; |
| 24 | class CFX_SystemHandler; |
| 25 | class IFX_Edit_UndoItem; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 26 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 27 | struct CFX_Edit_LineRect { |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 28 | CFX_Edit_LineRect(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine) |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 29 | : m_wrLine(wrLine), m_rcLine(rcLine) {} |
| 30 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 31 | CPVT_WordRange m_wrLine; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 32 | CFX_FloatRect m_rcLine; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 33 | }; |
| 34 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 35 | class CFX_Edit_LineRectArray { |
| 36 | public: |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 37 | CFX_Edit_LineRectArray(); |
| 38 | virtual ~CFX_Edit_LineRectArray(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 39 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 40 | void Empty(); |
| 41 | void RemoveAll(); |
| 42 | void operator=(CFX_Edit_LineRectArray& rects); |
| 43 | void Add(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 44 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 45 | int32_t GetSize() const; |
| 46 | CFX_Edit_LineRect* GetAt(int32_t nIndex) const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 47 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 48 | private: |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 49 | CFX_ArrayTemplate<CFX_Edit_LineRect*> m_LineRects; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 50 | }; |
| 51 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 52 | class CFX_Edit_RectArray { |
| 53 | public: |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 54 | CFX_Edit_RectArray(); |
| 55 | virtual ~CFX_Edit_RectArray(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 56 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 57 | void Empty(); |
| 58 | void Add(const CFX_FloatRect& rect); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 59 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 60 | int32_t GetSize() const; |
| 61 | CFX_FloatRect* GetAt(int32_t nIndex) const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 62 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 63 | private: |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 64 | CFX_ArrayTemplate<CFX_FloatRect*> m_Rects; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 65 | }; |
| 66 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 67 | class CFX_Edit_Refresh { |
| 68 | public: |
| 69 | CFX_Edit_Refresh(); |
| 70 | virtual ~CFX_Edit_Refresh(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 71 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 72 | void BeginRefresh(); |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 73 | void Push(const CPVT_WordRange& linerange, const CFX_FloatRect& rect); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 74 | void NoAnalyse(); |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 75 | void AddRefresh(const CFX_FloatRect& rect); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 76 | const CFX_Edit_RectArray* GetRefreshRects() const; |
| 77 | void EndRefresh(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 78 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 79 | private: |
| 80 | CFX_Edit_LineRectArray m_NewLineRects; |
| 81 | CFX_Edit_LineRectArray m_OldLineRects; |
| 82 | CFX_Edit_RectArray m_RefreshRects; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 83 | }; |
| 84 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 85 | class CFX_Edit_Select { |
| 86 | public: |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 87 | CFX_Edit_Select(); |
| 88 | CFX_Edit_Select(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); |
| 89 | explicit CFX_Edit_Select(const CPVT_WordRange& range); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 90 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 91 | void Default(); |
| 92 | void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); |
| 93 | void SetBeginPos(const CPVT_WordPlace& begin); |
| 94 | void SetEndPos(const CPVT_WordPlace& end); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 95 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 96 | CPVT_WordRange ConvertToWordRange() const; |
| 97 | FX_BOOL IsExist() const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 98 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 99 | CPVT_WordPlace BeginPos, EndPos; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 100 | }; |
| 101 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 102 | class CFX_Edit_Undo { |
| 103 | public: |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 104 | explicit CFX_Edit_Undo(int32_t nBufsize); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 105 | virtual ~CFX_Edit_Undo(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 106 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 107 | void Undo(); |
| 108 | void Redo(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 109 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 110 | void AddItem(IFX_Edit_UndoItem* pItem); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 111 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 112 | FX_BOOL CanUndo() const; |
| 113 | FX_BOOL CanRedo() const; |
| 114 | FX_BOOL IsModified() const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 115 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 116 | void Reset(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 117 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 118 | private: |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 119 | void RemoveHeads(); |
| 120 | void RemoveTails(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 121 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 122 | private: |
| 123 | CFX_ArrayTemplate<IFX_Edit_UndoItem*> m_UndoItemStack; |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 124 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 125 | int32_t m_nCurUndoPos; |
| 126 | int32_t m_nBufSize; |
| 127 | FX_BOOL m_bModified; |
| 128 | FX_BOOL m_bVirgin; |
| 129 | FX_BOOL m_bWorking; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 130 | }; |
| 131 | |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 132 | class IFX_Edit_UndoItem { |
| 133 | public: |
| 134 | virtual ~IFX_Edit_UndoItem() {} |
| 135 | |
| 136 | virtual void Undo() = 0; |
| 137 | virtual void Redo() = 0; |
| 138 | virtual CFX_WideString GetUndoTitle() = 0; |
| 139 | }; |
| 140 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 141 | class CFX_Edit_UndoItem : public IFX_Edit_UndoItem { |
| 142 | public: |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 143 | CFX_Edit_UndoItem(); |
| 144 | ~CFX_Edit_UndoItem() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 145 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 146 | CFX_WideString GetUndoTitle() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 147 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 148 | void SetFirst(FX_BOOL bFirst); |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 149 | void SetLast(FX_BOOL bLast); |
| 150 | FX_BOOL IsLast(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 151 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 152 | private: |
| 153 | FX_BOOL m_bFirst; |
| 154 | FX_BOOL m_bLast; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 155 | }; |
| 156 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 157 | class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem { |
| 158 | public: |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 159 | explicit CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 160 | ~CFX_Edit_GroupUndoItem() override; |
Tom Sepez | ced4c2b | 2015-04-20 16:33:30 -0700 | [diff] [blame] | 161 | |
weili | 625ad66 | 2016-06-15 11:21:33 -0700 | [diff] [blame] | 162 | // IFX_Edit_UndoItem |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 163 | void Undo() override; |
| 164 | void Redo() override; |
| 165 | CFX_WideString GetUndoTitle() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 166 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 167 | void AddUndoItem(CFX_Edit_UndoItem* pUndoItem); |
| 168 | void UpdateItems(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 169 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 170 | private: |
| 171 | CFX_WideString m_sTitle; |
| 172 | CFX_ArrayTemplate<CFX_Edit_UndoItem*> m_Items; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 173 | }; |
| 174 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 175 | class CFXEU_InsertWord : public CFX_Edit_UndoItem { |
| 176 | public: |
| 177 | CFXEU_InsertWord(CFX_Edit* pEdit, |
| 178 | const CPVT_WordPlace& wpOldPlace, |
| 179 | const CPVT_WordPlace& wpNewPlace, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 180 | uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 181 | int32_t charset, |
| 182 | const CPVT_WordProps* pWordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 183 | ~CFXEU_InsertWord() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 184 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 185 | // CFX_Edit_UndoItem |
| 186 | void Redo() override; |
| 187 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 188 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 189 | private: |
| 190 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 191 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 192 | CPVT_WordPlace m_wpOld; |
| 193 | CPVT_WordPlace m_wpNew; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 194 | uint16_t m_Word; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 195 | int32_t m_nCharset; |
| 196 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 197 | }; |
| 198 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 199 | class CFXEU_InsertReturn : public CFX_Edit_UndoItem { |
| 200 | public: |
| 201 | CFXEU_InsertReturn(CFX_Edit* pEdit, |
| 202 | const CPVT_WordPlace& wpOldPlace, |
| 203 | const CPVT_WordPlace& wpNewPlace, |
| 204 | const CPVT_SecProps* pSecProps, |
| 205 | const CPVT_WordProps* pWordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 206 | ~CFXEU_InsertReturn() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 207 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 208 | // CFX_Edit_UndoItem |
| 209 | void Redo() override; |
| 210 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 211 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 212 | private: |
| 213 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 214 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 215 | CPVT_WordPlace m_wpOld; |
| 216 | CPVT_WordPlace m_wpNew; |
| 217 | CPVT_SecProps m_SecProps; |
| 218 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 219 | }; |
| 220 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 221 | class CFXEU_Backspace : public CFX_Edit_UndoItem { |
| 222 | public: |
| 223 | CFXEU_Backspace(CFX_Edit* pEdit, |
| 224 | const CPVT_WordPlace& wpOldPlace, |
| 225 | const CPVT_WordPlace& wpNewPlace, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 226 | uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 227 | int32_t charset, |
| 228 | const CPVT_SecProps& SecProps, |
| 229 | const CPVT_WordProps& WordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 230 | ~CFXEU_Backspace() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 231 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 232 | // CFX_Edit_UndoItem |
| 233 | void Redo() override; |
| 234 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 235 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 236 | private: |
| 237 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 238 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 239 | CPVT_WordPlace m_wpOld; |
| 240 | CPVT_WordPlace m_wpNew; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 241 | uint16_t m_Word; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 242 | int32_t m_nCharset; |
| 243 | CPVT_SecProps m_SecProps; |
| 244 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 245 | }; |
| 246 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 247 | class CFXEU_Delete : public CFX_Edit_UndoItem { |
| 248 | public: |
| 249 | CFXEU_Delete(CFX_Edit* pEdit, |
| 250 | const CPVT_WordPlace& wpOldPlace, |
| 251 | const CPVT_WordPlace& wpNewPlace, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 252 | uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 253 | int32_t charset, |
| 254 | const CPVT_SecProps& SecProps, |
| 255 | const CPVT_WordProps& WordProps, |
| 256 | FX_BOOL bSecEnd); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 257 | ~CFXEU_Delete() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 258 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 259 | // CFX_Edit_UndoItem |
| 260 | void Redo() override; |
| 261 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 262 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 263 | private: |
| 264 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 265 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 266 | CPVT_WordPlace m_wpOld; |
| 267 | CPVT_WordPlace m_wpNew; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 268 | uint16_t m_Word; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 269 | int32_t m_nCharset; |
| 270 | CPVT_SecProps m_SecProps; |
| 271 | CPVT_WordProps m_WordProps; |
| 272 | FX_BOOL m_bSecEnd; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 273 | }; |
| 274 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 275 | class CFXEU_Clear : public CFX_Edit_UndoItem { |
| 276 | public: |
| 277 | CFXEU_Clear(CFX_Edit* pEdit, |
| 278 | const CPVT_WordRange& wrSel, |
| 279 | const CFX_WideString& swText); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 280 | ~CFXEU_Clear() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 281 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 282 | // CFX_Edit_UndoItem |
| 283 | void Redo() override; |
| 284 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 285 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 286 | private: |
| 287 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 288 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 289 | CPVT_WordRange m_wrSel; |
| 290 | CFX_WideString m_swText; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 291 | }; |
| 292 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 293 | class CFXEU_InsertText : public CFX_Edit_UndoItem { |
| 294 | public: |
| 295 | CFXEU_InsertText(CFX_Edit* pEdit, |
| 296 | const CPVT_WordPlace& wpOldPlace, |
| 297 | const CPVT_WordPlace& wpNewPlace, |
| 298 | const CFX_WideString& swText, |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 299 | int32_t charset); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 300 | ~CFXEU_InsertText() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 301 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 302 | // CFX_Edit_UndoItem |
| 303 | void Redo() override; |
| 304 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 305 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 306 | private: |
| 307 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 308 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 309 | CPVT_WordPlace m_wpOld; |
| 310 | CPVT_WordPlace m_wpNew; |
| 311 | CFX_WideString m_swText; |
| 312 | int32_t m_nCharset; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 313 | }; |
| 314 | |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 315 | class CFX_Edit { |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 316 | public: |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 317 | static CFX_ByteString GetEditAppearanceStream(CFX_Edit* pEdit, |
| 318 | const CFX_FloatPoint& ptOffset, |
| 319 | const CPVT_WordRange* pRange, |
| 320 | FX_BOOL bContinuous, |
| 321 | uint16_t SubWord); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 322 | static CFX_ByteString GetSelectAppearanceStream( |
| 323 | CFX_Edit* pEdit, |
| 324 | const CFX_FloatPoint& ptOffset, |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 325 | const CPVT_WordRange* pRange); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 326 | static void DrawEdit(CFX_RenderDevice* pDevice, |
| 327 | CFX_Matrix* pUser2Device, |
| 328 | CFX_Edit* pEdit, |
| 329 | FX_COLORREF crTextFill, |
| 330 | FX_COLORREF crTextStroke, |
| 331 | const CFX_FloatRect& rcClip, |
| 332 | const CFX_FloatPoint& ptOffset, |
| 333 | const CPVT_WordRange* pRange, |
| 334 | CFX_SystemHandler* pSystemHandler, |
| 335 | void* pFFLData); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 336 | static void GeneratePageObjects( |
| 337 | CPDF_PageObjectHolder* pObjectHolder, |
| 338 | CFX_Edit* pEdit, |
| 339 | const CFX_FloatPoint& ptOffset, |
| 340 | const CPVT_WordRange* pRange, |
| 341 | FX_COLORREF crText, |
| 342 | CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 343 | |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 344 | CFX_Edit(); |
| 345 | ~CFX_Edit(); |
| 346 | |
| 347 | void SetFontMap(IPVT_FontMap* pFontMap); |
| 348 | void SetNotify(CPWL_EditCtrl* pNotify); |
| 349 | void SetOprNotify(CPWL_Edit* pOprNotify); |
| 350 | |
| 351 | // Returns an iterator for the contents. Should not be released. |
| 352 | CFX_Edit_Iterator* GetIterator(); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 353 | IPVT_FontMap* GetFontMap(); |
| 354 | void Initialize(); |
| 355 | |
| 356 | // Set the bounding box of the text area. |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 357 | void SetPlateRect(const CFX_FloatRect& rect); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 358 | void SetScrollPos(const CFX_FloatPoint& point); |
| 359 | |
| 360 | // Set the horizontal text alignment. (nFormat [0:left, 1:middle, 2:right]) |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 361 | void SetAlignmentH(int32_t nFormat, FX_BOOL bPaint); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 362 | // Set the vertical text alignment. (nFormat [0:left, 1:middle, 2:right]) |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 363 | void SetAlignmentV(int32_t nFormat, FX_BOOL bPaint); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 364 | |
| 365 | // Set the substitution character for hidden text. |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 366 | void SetPasswordChar(uint16_t wSubWord, FX_BOOL bPaint); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 367 | |
| 368 | // Set the maximum number of words in the text. |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 369 | void SetLimitChar(int32_t nLimitChar); |
| 370 | void SetCharArray(int32_t nCharArray); |
| 371 | void SetCharSpace(FX_FLOAT fCharSpace); |
| 372 | void SetMultiLine(FX_BOOL bMultiLine, FX_BOOL bPaint); |
| 373 | void SetAutoReturn(FX_BOOL bAuto, FX_BOOL bPaint); |
| 374 | void SetAutoFontSize(FX_BOOL bAuto, FX_BOOL bPaint); |
| 375 | void SetAutoScroll(FX_BOOL bAuto, FX_BOOL bPaint); |
| 376 | void SetFontSize(FX_FLOAT fFontSize); |
| 377 | void SetTextOverflow(FX_BOOL bAllowed, FX_BOOL bPaint); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 378 | void OnMouseDown(const CFX_FloatPoint& point, FX_BOOL bShift, FX_BOOL bCtrl); |
| 379 | void OnMouseMove(const CFX_FloatPoint& point, FX_BOOL bShift, FX_BOOL bCtrl); |
| 380 | void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl); |
| 381 | void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl); |
| 382 | void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl); |
| 383 | void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl); |
| 384 | void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl); |
| 385 | void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl); |
tsepez | a31da74 | 2016-09-08 11:28:14 -0700 | [diff] [blame] | 386 | void SetText(const CFX_WideString& sText); |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 387 | FX_BOOL InsertWord(uint16_t word, int32_t charset); |
| 388 | FX_BOOL InsertReturn(); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 389 | FX_BOOL Backspace(); |
| 390 | FX_BOOL Delete(); |
| 391 | FX_BOOL Clear(); |
tsepez | a31da74 | 2016-09-08 11:28:14 -0700 | [diff] [blame] | 392 | FX_BOOL InsertText(const CFX_WideString& sText, int32_t charset); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 393 | FX_BOOL Redo(); |
| 394 | FX_BOOL Undo(); |
| 395 | int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const; |
| 396 | CPVT_WordPlace WordIndexToWordPlace(int32_t index) const; |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 397 | CPVT_WordPlace SearchWordPlace(const CFX_FloatPoint& point) const; |
| 398 | int32_t GetCaret() const; |
| 399 | CPVT_WordPlace GetCaretWordPlace() const; |
| 400 | CFX_WideString GetSelText() const; |
| 401 | CFX_WideString GetText() const; |
| 402 | FX_FLOAT GetFontSize() const; |
| 403 | uint16_t GetPasswordChar() const; |
| 404 | CFX_FloatPoint GetScrollPos() const; |
| 405 | int32_t GetCharArray() const; |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 406 | CFX_FloatRect GetContentRect() const; |
| 407 | CFX_WideString GetRangeText(const CPVT_WordRange& range) const; |
| 408 | int32_t GetHorzScale() const; |
| 409 | FX_FLOAT GetCharSpace() const; |
| 410 | int32_t GetTotalWords() const; |
| 411 | void SetSel(int32_t nStartChar, int32_t nEndChar); |
| 412 | void GetSel(int32_t& nStartChar, int32_t& nEndChar) const; |
| 413 | void SelectAll(); |
| 414 | void SelectNone(); |
| 415 | FX_BOOL IsSelected() const; |
| 416 | void Paint(); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 417 | void EnableRefresh(FX_BOOL bRefresh); |
| 418 | void RefreshWordRange(const CPVT_WordRange& wr); |
| 419 | void SetCaret(int32_t nPos); |
| 420 | CPVT_WordRange GetWholeWordRange() const; |
| 421 | CPVT_WordRange GetSelectWordRange() const; |
| 422 | void EnableUndo(FX_BOOL bUndo); |
| 423 | void EnableOprNotify(FX_BOOL bNotify); |
| 424 | FX_BOOL IsTextFull() const; |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 425 | FX_BOOL IsTextOverflow() const; |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 426 | FX_BOOL CanUndo() const; |
| 427 | FX_BOOL CanRedo() const; |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 428 | CPVT_WordRange GetVisibleWordRange() const; |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 429 | |
| 430 | FX_BOOL Empty(); |
| 431 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 432 | CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place, |
tsepez | a31da74 | 2016-09-08 11:28:14 -0700 | [diff] [blame] | 433 | const CFX_WideString& sText, |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 434 | int32_t charset); |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 435 | int32_t GetCharSetFromUnicode(uint16_t word, int32_t nOldCharset); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 436 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 437 | int32_t GetTotalLines() const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 438 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 439 | private: |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 440 | friend class CFX_Edit_Iterator; |
| 441 | friend class CFXEU_InsertWord; |
| 442 | friend class CFXEU_InsertReturn; |
| 443 | friend class CFXEU_Backspace; |
| 444 | friend class CFXEU_Delete; |
| 445 | friend class CFXEU_Clear; |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 446 | friend class CFXEU_InsertText; |
| 447 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 448 | void SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 449 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 450 | void RearrangeAll(); |
| 451 | void RearrangePart(const CPVT_WordRange& range); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 452 | void ScrollToCaret(); |
| 453 | void SetScrollInfo(); |
| 454 | void SetScrollPosX(FX_FLOAT fx); |
| 455 | void SetScrollPosY(FX_FLOAT fy); |
| 456 | void SetScrollLimit(); |
| 457 | void SetContentChanged(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 458 | |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 459 | FX_BOOL InsertWord(uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 460 | int32_t charset, |
| 461 | const CPVT_WordProps* pWordProps, |
| 462 | FX_BOOL bAddUndo, |
| 463 | FX_BOOL bPaint); |
| 464 | FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps, |
| 465 | const CPVT_WordProps* pWordProps, |
| 466 | FX_BOOL bAddUndo, |
| 467 | FX_BOOL bPaint); |
| 468 | FX_BOOL Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint); |
| 469 | FX_BOOL Delete(FX_BOOL bAddUndo, FX_BOOL bPaint); |
| 470 | FX_BOOL Clear(FX_BOOL bAddUndo, FX_BOOL bPaint); |
tsepez | a31da74 | 2016-09-08 11:28:14 -0700 | [diff] [blame] | 471 | FX_BOOL InsertText(const CFX_WideString& sText, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 472 | int32_t charset, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 473 | FX_BOOL bAddUndo, |
| 474 | FX_BOOL bPaint); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 475 | void PaintInsertText(const CPVT_WordPlace& wpOld, |
| 476 | const CPVT_WordPlace& wpNew); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 477 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 478 | inline CFX_FloatPoint VTToEdit(const CFX_FloatPoint& point) const; |
| 479 | inline CFX_FloatPoint EditToVT(const CFX_FloatPoint& point) const; |
| 480 | inline CFX_FloatRect VTToEdit(const CFX_FloatRect& rect) const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 481 | |
dsinclair | efd5a99 | 2016-07-18 10:04:07 -0700 | [diff] [blame] | 482 | void Refresh(); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 483 | void RefreshPushLineRects(const CPVT_WordRange& wr); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 484 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 485 | void SetCaret(const CPVT_WordPlace& place); |
| 486 | void SetCaretInfo(); |
| 487 | void SetCaretOrigin(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 488 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 489 | void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 490 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 491 | private: |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 492 | std::unique_ptr<CPDF_VariableText> m_pVT; |
| 493 | CPWL_EditCtrl* m_pNotify; |
| 494 | CPWL_Edit* m_pOprNotify; |
thestig | 821d59e | 2016-05-11 12:59:22 -0700 | [diff] [blame] | 495 | std::unique_ptr<CFX_Edit_Provider> m_pVTProvider; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 496 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 497 | CPVT_WordPlace m_wpCaret; |
| 498 | CPVT_WordPlace m_wpOldCaret; |
| 499 | CFX_Edit_Select m_SelState; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 500 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 501 | CFX_FloatPoint m_ptScrollPos; |
| 502 | CFX_FloatPoint m_ptRefreshScrollPos; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 503 | FX_BOOL m_bEnableScroll; |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 504 | std::unique_ptr<CFX_Edit_Iterator> m_pIterator; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 505 | CFX_Edit_Refresh m_Refresh; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 506 | CFX_FloatPoint m_ptCaret; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 507 | CFX_Edit_Undo m_Undo; |
| 508 | int32_t m_nAlignment; |
| 509 | FX_BOOL m_bNotifyFlag; |
| 510 | FX_BOOL m_bEnableOverflow; |
| 511 | FX_BOOL m_bEnableRefresh; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 512 | CFX_FloatRect m_rcOldContent; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 513 | FX_BOOL m_bEnableUndo; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 514 | FX_BOOL m_bOprNotify; |
| 515 | CFX_Edit_GroupUndoItem* m_pGroupUndoItem; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 516 | }; |
| 517 | |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 518 | class CFX_Edit_Iterator { |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 519 | public: |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 520 | CFX_Edit_Iterator(CFX_Edit* pEdit, CPDF_VariableText::Iterator* pVTIterator); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 521 | ~CFX_Edit_Iterator(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 522 | |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 523 | FX_BOOL NextWord(); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 524 | FX_BOOL PrevWord(); |
dsinclair | e35af1e | 2016-07-13 11:26:20 -0700 | [diff] [blame] | 525 | FX_BOOL GetWord(CPVT_Word& word) const; |
| 526 | FX_BOOL GetLine(CPVT_Line& line) const; |
| 527 | FX_BOOL GetSection(CPVT_Section& section) const; |
| 528 | void SetAt(int32_t nWordIndex); |
| 529 | void SetAt(const CPVT_WordPlace& place); |
| 530 | const CPVT_WordPlace& GetAt() const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 531 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 532 | private: |
| 533 | CFX_Edit* m_pEdit; |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 534 | CPDF_VariableText::Iterator* m_pVTIterator; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 535 | }; |
| 536 | |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 537 | class CFX_Edit_Provider : public CPDF_VariableText::Provider { |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 538 | public: |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 539 | explicit CFX_Edit_Provider(IPVT_FontMap* pFontMap); |
Lei Zhang | 5fd907b | 2015-11-19 22:20:59 -0800 | [diff] [blame] | 540 | ~CFX_Edit_Provider() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 541 | |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 542 | IPVT_FontMap* GetFontMap(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 543 | |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 544 | // CPDF_VariableText::Provider: |
npm | 41d6bbe | 2016-09-14 11:54:44 -0700 | [diff] [blame^] | 545 | int32_t GetCharWidth(int32_t nFontIndex, uint16_t word) override; |
Lei Zhang | 5fd907b | 2015-11-19 22:20:59 -0800 | [diff] [blame] | 546 | int32_t GetTypeAscent(int32_t nFontIndex) override; |
| 547 | int32_t GetTypeDescent(int32_t nFontIndex) override; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 548 | int32_t GetWordFontIndex(uint16_t word, |
Lei Zhang | 5fd907b | 2015-11-19 22:20:59 -0800 | [diff] [blame] | 549 | int32_t charset, |
| 550 | int32_t nFontIndex) override; |
| 551 | int32_t GetDefaultFontIndex() override; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame] | 552 | FX_BOOL IsLatinWord(uint16_t word) override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 553 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 554 | private: |
dsinclair | c7a7349 | 2016-04-05 12:01:42 -0700 | [diff] [blame] | 555 | IPVT_FontMap* m_pFontMap; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 556 | }; |
| 557 | |
dsinclair | 89bdd08 | 2016-04-06 10:47:54 -0700 | [diff] [blame] | 558 | #endif // FPDFSDK_FXEDIT_INCLUDE_FXET_EDIT_H_ |