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