| 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_INCLUDE_FXEDIT_FXET_EDIT_H_ | |
| 8 #define FPDFSDK_INCLUDE_FXEDIT_FXET_EDIT_H_ | |
| 9 | |
| 10 #include "core/fpdfdoc/include/cpvt_secprops.h" | |
| 11 #include "core/fpdfdoc/include/cpvt_wordprops.h" | |
| 12 #include "fpdfsdk/include/fxedit/fx_edit.h" | |
| 13 | |
| 14 class CFX_Edit; | |
| 15 class CFX_Edit_Iterator; | |
| 16 class CFX_Edit_Provider; | |
| 17 | |
| 18 #define FX_EDIT_IsFloatZero(f) (f < 0.0001 && f > -0.0001) | |
| 19 #define FX_EDIT_IsFloatEqual(fa, fb) FX_EDIT_IsFloatZero(fa - fb) | |
| 20 #define FX_EDIT_IsFloatBigger(fa, fb) (fa > fb && !FX_EDIT_IsFloatEqual(fa, fb)) | |
| 21 #define FX_EDIT_IsFloatSmaller(fa, fb) \ | |
| 22 (fa < fb && !FX_EDIT_IsFloatEqual(fa, fb)) | |
| 23 | |
| 24 enum REFRESH_PLAN_E { RP_ANALYSE, RP_NOANALYSE, RP_OPTIONAL }; | |
| 25 | |
| 26 enum EDIT_PROPS_E { | |
| 27 EP_LINELEADING, | |
| 28 EP_LINEINDENT, | |
| 29 EP_ALIGNMENT, | |
| 30 EP_FONTINDEX, | |
| 31 EP_FONTSIZE, | |
| 32 EP_WORDCOLOR, | |
| 33 EP_SCRIPTTYPE, | |
| 34 EP_UNDERLINE, | |
| 35 EP_CROSSOUT, | |
| 36 EP_CHARSPACE, | |
| 37 EP_HORZSCALE, | |
| 38 EP_BOLD, | |
| 39 EP_ITALIC | |
| 40 }; | |
| 41 | |
| 42 struct CFX_Edit_LineRect { | |
| 43 CFX_Edit_LineRect(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine) | |
| 44 : m_wrLine(wrLine), m_rcLine(rcLine) {} | |
| 45 | |
| 46 FX_BOOL operator!=(const CFX_Edit_LineRect& linerect) const { | |
| 47 return FXSYS_memcmp(this, &linerect, sizeof(CFX_Edit_LineRect)) != 0; | |
| 48 } | |
| 49 | |
| 50 FX_BOOL IsSameHeight(const CFX_Edit_LineRect& linerect) const { | |
| 51 return FX_EDIT_IsFloatZero( | |
| 52 (m_rcLine.top - m_rcLine.bottom) - | |
| 53 (linerect.m_rcLine.top - linerect.m_rcLine.bottom)); | |
| 54 } | |
| 55 | |
| 56 FX_BOOL IsSameTop(const CFX_Edit_LineRect& linerect) const { | |
| 57 return FX_EDIT_IsFloatZero(m_rcLine.top - linerect.m_rcLine.top); | |
| 58 } | |
| 59 | |
| 60 FX_BOOL IsSameLeft(const CFX_Edit_LineRect& linerect) const { | |
| 61 return FX_EDIT_IsFloatZero(m_rcLine.left - linerect.m_rcLine.left); | |
| 62 } | |
| 63 | |
| 64 FX_BOOL IsSameRight(const CFX_Edit_LineRect& linerect) const { | |
| 65 return FX_EDIT_IsFloatZero(m_rcLine.right - linerect.m_rcLine.right); | |
| 66 } | |
| 67 | |
| 68 CPVT_WordRange m_wrLine; | |
| 69 CFX_FloatRect m_rcLine; | |
| 70 }; | |
| 71 | |
| 72 class CFX_Edit_LineRectArray { | |
| 73 public: | |
| 74 CFX_Edit_LineRectArray() {} | |
| 75 | |
| 76 virtual ~CFX_Edit_LineRectArray() { Empty(); } | |
| 77 | |
| 78 void Empty() { | |
| 79 for (int32_t i = 0, sz = m_LineRects.GetSize(); i < sz; i++) | |
| 80 delete m_LineRects.GetAt(i); | |
| 81 | |
| 82 m_LineRects.RemoveAll(); | |
| 83 } | |
| 84 | |
| 85 void RemoveAll() { m_LineRects.RemoveAll(); } | |
| 86 | |
| 87 void operator=(CFX_Edit_LineRectArray& rects) { | |
| 88 Empty(); | |
| 89 for (int32_t i = 0, sz = rects.GetSize(); i < sz; i++) | |
| 90 m_LineRects.Add(rects.GetAt(i)); | |
| 91 | |
| 92 rects.RemoveAll(); | |
| 93 } | |
| 94 | |
| 95 void Add(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine) { | |
| 96 m_LineRects.Add(new CFX_Edit_LineRect(wrLine, rcLine)); | |
| 97 } | |
| 98 | |
| 99 int32_t GetSize() const { return m_LineRects.GetSize(); } | |
| 100 | |
| 101 CFX_Edit_LineRect* GetAt(int32_t nIndex) const { | |
| 102 if (nIndex < 0 || nIndex >= m_LineRects.GetSize()) | |
| 103 return NULL; | |
| 104 | |
| 105 return m_LineRects.GetAt(nIndex); | |
| 106 } | |
| 107 | |
| 108 CFX_ArrayTemplate<CFX_Edit_LineRect*> m_LineRects; | |
| 109 }; | |
| 110 | |
| 111 class CFX_Edit_RectArray { | |
| 112 public: | |
| 113 CFX_Edit_RectArray() {} | |
| 114 | |
| 115 virtual ~CFX_Edit_RectArray() { Empty(); } | |
| 116 | |
| 117 void Empty() { | |
| 118 for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) | |
| 119 delete m_Rects.GetAt(i); | |
| 120 | |
| 121 m_Rects.RemoveAll(); | |
| 122 } | |
| 123 | |
| 124 void Add(const CFX_FloatRect& rect) { | |
| 125 // check for overlapped area | |
| 126 for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) { | |
| 127 CFX_FloatRect* pRect = m_Rects.GetAt(i); | |
| 128 if (pRect && pRect->Contains(rect)) | |
| 129 return; | |
| 130 } | |
| 131 | |
| 132 m_Rects.Add(new CFX_FloatRect(rect)); | |
| 133 } | |
| 134 | |
| 135 int32_t GetSize() const { return m_Rects.GetSize(); } | |
| 136 | |
| 137 CFX_FloatRect* GetAt(int32_t nIndex) const { | |
| 138 if (nIndex < 0 || nIndex >= m_Rects.GetSize()) | |
| 139 return NULL; | |
| 140 | |
| 141 return m_Rects.GetAt(nIndex); | |
| 142 } | |
| 143 | |
| 144 CFX_ArrayTemplate<CFX_FloatRect*> m_Rects; | |
| 145 }; | |
| 146 | |
| 147 class CFX_Edit_Refresh { | |
| 148 public: | |
| 149 CFX_Edit_Refresh(); | |
| 150 virtual ~CFX_Edit_Refresh(); | |
| 151 | |
| 152 void BeginRefresh(); | |
| 153 void Push(const CPVT_WordRange& linerange, const CFX_FloatRect& rect); | |
| 154 void NoAnalyse(); | |
| 155 void Analyse(int32_t nAlignment); | |
| 156 void AddRefresh(const CFX_FloatRect& rect); | |
| 157 const CFX_Edit_RectArray* GetRefreshRects() const; | |
| 158 void EndRefresh(); | |
| 159 | |
| 160 private: | |
| 161 CFX_Edit_LineRectArray m_NewLineRects; | |
| 162 CFX_Edit_LineRectArray m_OldLineRects; | |
| 163 CFX_Edit_RectArray m_RefreshRects; | |
| 164 }; | |
| 165 | |
| 166 class CFX_Edit_Select { | |
| 167 public: | |
| 168 CFX_Edit_Select() {} | |
| 169 | |
| 170 CFX_Edit_Select(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) { | |
| 171 Set(begin, end); | |
| 172 } | |
| 173 | |
| 174 explicit CFX_Edit_Select(const CPVT_WordRange& range) { | |
| 175 Set(range.BeginPos, range.EndPos); | |
| 176 } | |
| 177 | |
| 178 CPVT_WordRange ConvertToWordRange() const { | |
| 179 return CPVT_WordRange(BeginPos, EndPos); | |
| 180 } | |
| 181 | |
| 182 void Default() { | |
| 183 BeginPos.Default(); | |
| 184 EndPos.Default(); | |
| 185 } | |
| 186 | |
| 187 void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) { | |
| 188 BeginPos = begin; | |
| 189 EndPos = end; | |
| 190 } | |
| 191 | |
| 192 void SetBeginPos(const CPVT_WordPlace& begin) { BeginPos = begin; } | |
| 193 | |
| 194 void SetEndPos(const CPVT_WordPlace& end) { EndPos = end; } | |
| 195 | |
| 196 FX_BOOL IsExist() const { return BeginPos != EndPos; } | |
| 197 | |
| 198 FX_BOOL operator!=(const CPVT_WordRange& wr) const { | |
| 199 return wr.BeginPos != BeginPos || wr.EndPos != EndPos; | |
| 200 } | |
| 201 | |
| 202 CPVT_WordPlace BeginPos, EndPos; | |
| 203 }; | |
| 204 | |
| 205 class CFX_Edit_Undo { | |
| 206 public: | |
| 207 explicit CFX_Edit_Undo(int32_t nBufsize); | |
| 208 virtual ~CFX_Edit_Undo(); | |
| 209 | |
| 210 void Undo(); | |
| 211 void Redo(); | |
| 212 | |
| 213 void AddItem(IFX_Edit_UndoItem* pItem); | |
| 214 | |
| 215 FX_BOOL CanUndo() const; | |
| 216 FX_BOOL CanRedo() const; | |
| 217 FX_BOOL IsModified() const; | |
| 218 FX_BOOL IsWorking() const; | |
| 219 | |
| 220 void Reset(); | |
| 221 | |
| 222 IFX_Edit_UndoItem* GetItem(int32_t nIndex); | |
| 223 int32_t GetItemCount() { return m_UndoItemStack.GetSize(); } | |
| 224 int32_t GetCurUndoPos() { return m_nCurUndoPos; } | |
| 225 | |
| 226 private: | |
| 227 void SetBufSize(int32_t nSize) { m_nBufSize = nSize; } | |
| 228 int32_t GetBufSize() { return m_nBufSize; } | |
| 229 | |
| 230 void RemoveHeads(); | |
| 231 void RemoveTails(); | |
| 232 | |
| 233 private: | |
| 234 CFX_ArrayTemplate<IFX_Edit_UndoItem*> m_UndoItemStack; | |
| 235 | |
| 236 int32_t m_nCurUndoPos; | |
| 237 int32_t m_nBufSize; | |
| 238 FX_BOOL m_bModified; | |
| 239 FX_BOOL m_bVirgin; | |
| 240 FX_BOOL m_bWorking; | |
| 241 }; | |
| 242 | |
| 243 class CFX_Edit_UndoItem : public IFX_Edit_UndoItem { | |
| 244 public: | |
| 245 CFX_Edit_UndoItem() : m_bFirst(TRUE), m_bLast(TRUE) {} | |
| 246 ~CFX_Edit_UndoItem() override {} | |
| 247 | |
| 248 CFX_WideString GetUndoTitle() override { return L""; } | |
| 249 | |
| 250 void SetFirst(FX_BOOL bFirst) { m_bFirst = bFirst; } | |
| 251 FX_BOOL IsFirst() { return m_bFirst; } | |
| 252 void SetLast(FX_BOOL bLast) { m_bLast = bLast; } | |
| 253 FX_BOOL IsLast() { return m_bLast; } | |
| 254 | |
| 255 private: | |
| 256 FX_BOOL m_bFirst; | |
| 257 FX_BOOL m_bLast; | |
| 258 }; | |
| 259 | |
| 260 class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem { | |
| 261 public: | |
| 262 explicit CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle); | |
| 263 ~CFX_Edit_GroupUndoItem() override; | |
| 264 | |
| 265 void Undo() override; | |
| 266 void Redo() override; | |
| 267 CFX_WideString GetUndoTitle() override; | |
| 268 | |
| 269 void AddUndoItem(CFX_Edit_UndoItem* pUndoItem); | |
| 270 void UpdateItems(); | |
| 271 | |
| 272 private: | |
| 273 CFX_WideString m_sTitle; | |
| 274 CFX_ArrayTemplate<CFX_Edit_UndoItem*> m_Items; | |
| 275 }; | |
| 276 | |
| 277 class CFXEU_InsertWord : public CFX_Edit_UndoItem { | |
| 278 public: | |
| 279 CFXEU_InsertWord(CFX_Edit* pEdit, | |
| 280 const CPVT_WordPlace& wpOldPlace, | |
| 281 const CPVT_WordPlace& wpNewPlace, | |
| 282 uint16_t word, | |
| 283 int32_t charset, | |
| 284 const CPVT_WordProps* pWordProps); | |
| 285 ~CFXEU_InsertWord() override; | |
| 286 | |
| 287 // CFX_Edit_UndoItem | |
| 288 void Redo() override; | |
| 289 void Undo() override; | |
| 290 | |
| 291 private: | |
| 292 CFX_Edit* m_pEdit; | |
| 293 | |
| 294 CPVT_WordPlace m_wpOld; | |
| 295 CPVT_WordPlace m_wpNew; | |
| 296 uint16_t m_Word; | |
| 297 int32_t m_nCharset; | |
| 298 CPVT_WordProps m_WordProps; | |
| 299 }; | |
| 300 | |
| 301 class CFXEU_InsertReturn : public CFX_Edit_UndoItem { | |
| 302 public: | |
| 303 CFXEU_InsertReturn(CFX_Edit* pEdit, | |
| 304 const CPVT_WordPlace& wpOldPlace, | |
| 305 const CPVT_WordPlace& wpNewPlace, | |
| 306 const CPVT_SecProps* pSecProps, | |
| 307 const CPVT_WordProps* pWordProps); | |
| 308 ~CFXEU_InsertReturn() override; | |
| 309 | |
| 310 // CFX_Edit_UndoItem | |
| 311 void Redo() override; | |
| 312 void Undo() override; | |
| 313 | |
| 314 private: | |
| 315 CFX_Edit* m_pEdit; | |
| 316 | |
| 317 CPVT_WordPlace m_wpOld; | |
| 318 CPVT_WordPlace m_wpNew; | |
| 319 CPVT_SecProps m_SecProps; | |
| 320 CPVT_WordProps m_WordProps; | |
| 321 }; | |
| 322 | |
| 323 class CFXEU_Backspace : public CFX_Edit_UndoItem { | |
| 324 public: | |
| 325 CFXEU_Backspace(CFX_Edit* pEdit, | |
| 326 const CPVT_WordPlace& wpOldPlace, | |
| 327 const CPVT_WordPlace& wpNewPlace, | |
| 328 uint16_t word, | |
| 329 int32_t charset, | |
| 330 const CPVT_SecProps& SecProps, | |
| 331 const CPVT_WordProps& WordProps); | |
| 332 ~CFXEU_Backspace() override; | |
| 333 | |
| 334 // CFX_Edit_UndoItem | |
| 335 void Redo() override; | |
| 336 void Undo() override; | |
| 337 | |
| 338 private: | |
| 339 CFX_Edit* m_pEdit; | |
| 340 | |
| 341 CPVT_WordPlace m_wpOld; | |
| 342 CPVT_WordPlace m_wpNew; | |
| 343 uint16_t m_Word; | |
| 344 int32_t m_nCharset; | |
| 345 CPVT_SecProps m_SecProps; | |
| 346 CPVT_WordProps m_WordProps; | |
| 347 }; | |
| 348 | |
| 349 class CFXEU_Delete : public CFX_Edit_UndoItem { | |
| 350 public: | |
| 351 CFXEU_Delete(CFX_Edit* pEdit, | |
| 352 const CPVT_WordPlace& wpOldPlace, | |
| 353 const CPVT_WordPlace& wpNewPlace, | |
| 354 uint16_t word, | |
| 355 int32_t charset, | |
| 356 const CPVT_SecProps& SecProps, | |
| 357 const CPVT_WordProps& WordProps, | |
| 358 FX_BOOL bSecEnd); | |
| 359 ~CFXEU_Delete() override; | |
| 360 | |
| 361 // CFX_Edit_UndoItem | |
| 362 void Redo() override; | |
| 363 void Undo() override; | |
| 364 | |
| 365 private: | |
| 366 CFX_Edit* m_pEdit; | |
| 367 | |
| 368 CPVT_WordPlace m_wpOld; | |
| 369 CPVT_WordPlace m_wpNew; | |
| 370 uint16_t m_Word; | |
| 371 int32_t m_nCharset; | |
| 372 CPVT_SecProps m_SecProps; | |
| 373 CPVT_WordProps m_WordProps; | |
| 374 FX_BOOL m_bSecEnd; | |
| 375 }; | |
| 376 | |
| 377 class CFXEU_Clear : public CFX_Edit_UndoItem { | |
| 378 public: | |
| 379 CFXEU_Clear(CFX_Edit* pEdit, | |
| 380 const CPVT_WordRange& wrSel, | |
| 381 const CFX_WideString& swText); | |
| 382 ~CFXEU_Clear() override; | |
| 383 | |
| 384 // CFX_Edit_UndoItem | |
| 385 void Redo() override; | |
| 386 void Undo() override; | |
| 387 | |
| 388 private: | |
| 389 CFX_Edit* m_pEdit; | |
| 390 | |
| 391 CPVT_WordRange m_wrSel; | |
| 392 CFX_WideString m_swText; | |
| 393 }; | |
| 394 | |
| 395 class CFXEU_ClearRich : public CFX_Edit_UndoItem { | |
| 396 public: | |
| 397 CFXEU_ClearRich(CFX_Edit* pEdit, | |
| 398 const CPVT_WordPlace& wpOldPlace, | |
| 399 const CPVT_WordPlace& wpNewPlace, | |
| 400 const CPVT_WordRange& wrSel, | |
| 401 uint16_t word, | |
| 402 int32_t charset, | |
| 403 const CPVT_SecProps& SecProps, | |
| 404 const CPVT_WordProps& WordProps); | |
| 405 ~CFXEU_ClearRich() override; | |
| 406 | |
| 407 // CFX_Edit_UndoItem | |
| 408 void Redo() override; | |
| 409 void Undo() override; | |
| 410 | |
| 411 private: | |
| 412 CFX_Edit* m_pEdit; | |
| 413 | |
| 414 CPVT_WordPlace m_wpOld; | |
| 415 CPVT_WordPlace m_wpNew; | |
| 416 CPVT_WordRange m_wrSel; | |
| 417 uint16_t m_Word; | |
| 418 int32_t m_nCharset; | |
| 419 CPVT_SecProps m_SecProps; | |
| 420 CPVT_WordProps m_WordProps; | |
| 421 }; | |
| 422 | |
| 423 class CFXEU_InsertText : public CFX_Edit_UndoItem { | |
| 424 public: | |
| 425 CFXEU_InsertText(CFX_Edit* pEdit, | |
| 426 const CPVT_WordPlace& wpOldPlace, | |
| 427 const CPVT_WordPlace& wpNewPlace, | |
| 428 const CFX_WideString& swText, | |
| 429 int32_t charset, | |
| 430 const CPVT_SecProps* pSecProps, | |
| 431 const CPVT_WordProps* pWordProps); | |
| 432 ~CFXEU_InsertText() override; | |
| 433 | |
| 434 // CFX_Edit_UndoItem | |
| 435 void Redo() override; | |
| 436 void Undo() override; | |
| 437 | |
| 438 private: | |
| 439 CFX_Edit* m_pEdit; | |
| 440 | |
| 441 CPVT_WordPlace m_wpOld; | |
| 442 CPVT_WordPlace m_wpNew; | |
| 443 CFX_WideString m_swText; | |
| 444 int32_t m_nCharset; | |
| 445 CPVT_SecProps m_SecProps; | |
| 446 CPVT_WordProps m_WordProps; | |
| 447 }; | |
| 448 | |
| 449 class CFXEU_SetSecProps : public CFX_Edit_UndoItem { | |
| 450 public: | |
| 451 CFXEU_SetSecProps(CFX_Edit* pEdit, | |
| 452 const CPVT_WordPlace& place, | |
| 453 EDIT_PROPS_E ep, | |
| 454 const CPVT_SecProps& oldsecprops, | |
| 455 const CPVT_WordProps& oldwordprops, | |
| 456 const CPVT_SecProps& newsecprops, | |
| 457 const CPVT_WordProps& newwordprops, | |
| 458 const CPVT_WordRange& range); | |
| 459 ~CFXEU_SetSecProps() override; | |
| 460 | |
| 461 // CFX_Edit_UndoItem | |
| 462 void Redo() override; | |
| 463 void Undo() override; | |
| 464 | |
| 465 private: | |
| 466 CFX_Edit* m_pEdit; | |
| 467 CPVT_WordPlace m_wpPlace; | |
| 468 CPVT_WordRange m_wrPlace; | |
| 469 EDIT_PROPS_E m_eProps; | |
| 470 | |
| 471 CPVT_SecProps m_OldSecProps; | |
| 472 CPVT_SecProps m_NewSecProps; | |
| 473 CPVT_WordProps m_OldWordProps; | |
| 474 CPVT_WordProps m_NewWordProps; | |
| 475 }; | |
| 476 | |
| 477 class CFXEU_SetWordProps : public CFX_Edit_UndoItem { | |
| 478 public: | |
| 479 CFXEU_SetWordProps(CFX_Edit* pEdit, | |
| 480 const CPVT_WordPlace& place, | |
| 481 EDIT_PROPS_E ep, | |
| 482 const CPVT_WordProps& oldprops, | |
| 483 const CPVT_WordProps& newprops, | |
| 484 const CPVT_WordRange& range); | |
| 485 ~CFXEU_SetWordProps() override; | |
| 486 | |
| 487 // CFX_Edit_UndoItem | |
| 488 void Redo() override; | |
| 489 void Undo() override; | |
| 490 | |
| 491 private: | |
| 492 CFX_Edit* m_pEdit; | |
| 493 CPVT_WordPlace m_wpPlace; | |
| 494 CPVT_WordRange m_wrPlace; | |
| 495 EDIT_PROPS_E m_eProps; | |
| 496 | |
| 497 CPVT_WordProps m_OldWordProps; | |
| 498 CPVT_WordProps m_NewWordProps; | |
| 499 }; | |
| 500 | |
| 501 class CFX_Edit : public IFX_Edit { | |
| 502 friend class CFX_Edit_Iterator; | |
| 503 friend class CFXEU_InsertWord; | |
| 504 friend class CFXEU_InsertReturn; | |
| 505 friend class CFXEU_Backspace; | |
| 506 friend class CFXEU_Delete; | |
| 507 friend class CFXEU_Clear; | |
| 508 friend class CFXEU_ClearRich; | |
| 509 friend class CFXEU_SetSecProps; | |
| 510 friend class CFXEU_SetWordProps; | |
| 511 friend class CFXEU_InsertText; | |
| 512 | |
| 513 public: | |
| 514 explicit CFX_Edit(CPDF_VariableText* pVT); | |
| 515 ~CFX_Edit() override; | |
| 516 | |
| 517 // IFX_Edit | |
| 518 void SetFontMap(IPVT_FontMap* pFontMap) override; | |
| 519 void SetVTProvider(CPDF_VariableText::Provider* pProvider) override; | |
| 520 void SetNotify(IFX_Edit_Notify* pNotify) override; | |
| 521 void SetOprNotify(IFX_Edit_OprNotify* pOprNotify) override; | |
| 522 IFX_Edit_Iterator* GetIterator() override; | |
| 523 CPDF_VariableText* GetVariableText() override; | |
| 524 IPVT_FontMap* GetFontMap() override; | |
| 525 void Initialize() override; | |
| 526 void SetPlateRect(const CFX_FloatRect& rect, FX_BOOL bPaint = TRUE) override; | |
| 527 void SetScrollPos(const CFX_FloatPoint& point) override; | |
| 528 void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) override; | |
| 529 void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) override; | |
| 530 void SetPasswordChar(uint16_t wSubWord = '*', FX_BOOL bPaint = TRUE) override; | |
| 531 void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE) override; | |
| 532 void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE) override; | |
| 533 void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE) override; | |
| 534 void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE) override; | |
| 535 void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE) override; | |
| 536 void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE) override; | |
| 537 void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) override; | |
| 538 void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) override; | |
| 539 void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) override; | |
| 540 void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE) override; | |
| 541 void SetTextOverflow(FX_BOOL bAllowed = FALSE, | |
| 542 FX_BOOL bPaint = TRUE) override; | |
| 543 FX_BOOL IsRichText() const override; | |
| 544 void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE) override; | |
| 545 FX_BOOL SetRichFontSize(FX_FLOAT fFontSize) override; | |
| 546 FX_BOOL SetRichFontIndex(int32_t nFontIndex) override; | |
| 547 FX_BOOL SetRichTextColor(FX_COLORREF dwColor) override; | |
| 548 FX_BOOL SetRichTextScript(CPDF_VariableText::ScriptType nScriptType) override; | |
| 549 FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE) override; | |
| 550 FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE) override; | |
| 551 FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE) override; | |
| 552 FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE) override; | |
| 553 FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace) override; | |
| 554 FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100) override; | |
| 555 FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading) override; | |
| 556 FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent) override; | |
| 557 FX_BOOL SetRichTextAlignment(int32_t nAlignment) override; | |
| 558 void OnMouseDown(const CFX_FloatPoint& point, | |
| 559 FX_BOOL bShift, | |
| 560 FX_BOOL bCtrl) override; | |
| 561 void OnMouseMove(const CFX_FloatPoint& point, | |
| 562 FX_BOOL bShift, | |
| 563 FX_BOOL bCtrl) override; | |
| 564 void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) override; | |
| 565 void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) override; | |
| 566 void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) override; | |
| 567 void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) override; | |
| 568 void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) override; | |
| 569 void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) override; | |
| 570 void SetText(const FX_WCHAR* text, | |
| 571 int32_t charset = DEFAULT_CHARSET, | |
| 572 const CPVT_SecProps* pSecProps = NULL, | |
| 573 const CPVT_WordProps* pWordProps = NULL) override; | |
| 574 FX_BOOL InsertWord(uint16_t word, | |
| 575 int32_t charset = DEFAULT_CHARSET, | |
| 576 const CPVT_WordProps* pWordProps = NULL) override; | |
| 577 FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps = NULL, | |
| 578 const CPVT_WordProps* pWordProps = NULL) override; | |
| 579 FX_BOOL Backspace() override; | |
| 580 FX_BOOL Delete() override; | |
| 581 FX_BOOL Clear() override; | |
| 582 FX_BOOL InsertText(const FX_WCHAR* text, | |
| 583 int32_t charset = DEFAULT_CHARSET, | |
| 584 const CPVT_SecProps* pSecProps = NULL, | |
| 585 const CPVT_WordProps* pWordProps = NULL) override; | |
| 586 FX_BOOL Redo() override; | |
| 587 FX_BOOL Undo() override; | |
| 588 int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const override; | |
| 589 CPVT_WordPlace WordIndexToWordPlace(int32_t index) const override; | |
| 590 CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const override; | |
| 591 CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const override; | |
| 592 CPVT_WordPlace GetSectionBeginPlace( | |
| 593 const CPVT_WordPlace& place) const override; | |
| 594 CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const override; | |
| 595 CPVT_WordPlace SearchWordPlace(const CFX_FloatPoint& point) const override; | |
| 596 int32_t GetCaret() const override; | |
| 597 CPVT_WordPlace GetCaretWordPlace() const override; | |
| 598 CFX_WideString GetSelText() const override; | |
| 599 CFX_WideString GetText() const override; | |
| 600 FX_FLOAT GetFontSize() const override; | |
| 601 uint16_t GetPasswordChar() const override; | |
| 602 CFX_FloatPoint GetScrollPos() const override; | |
| 603 int32_t GetCharArray() const override; | |
| 604 CFX_FloatRect GetPlateRect() const override; | |
| 605 CFX_FloatRect GetContentRect() const override; | |
| 606 CFX_WideString GetRangeText(const CPVT_WordRange& range) const override; | |
| 607 int32_t GetHorzScale() const override; | |
| 608 FX_FLOAT GetCharSpace() const override; | |
| 609 int32_t GetTotalWords() const override; | |
| 610 void SetSel(int32_t nStartChar, int32_t nEndChar) override; | |
| 611 void GetSel(int32_t& nStartChar, int32_t& nEndChar) const override; | |
| 612 void SelectAll() override; | |
| 613 void SelectNone() override; | |
| 614 FX_BOOL IsSelected() const override; | |
| 615 void Paint() override; | |
| 616 void EnableNotify(FX_BOOL bNotify) override; | |
| 617 void EnableRefresh(FX_BOOL bRefresh) override; | |
| 618 void RefreshWordRange(const CPVT_WordRange& wr) override; | |
| 619 void SetCaret(int32_t nPos) override; | |
| 620 CPVT_WordRange GetWholeWordRange() const override; | |
| 621 CPVT_WordRange GetSelectWordRange() const override; | |
| 622 void EnableUndo(FX_BOOL bUndo) override; | |
| 623 void EnableOprNotify(FX_BOOL bNotify) override; | |
| 624 FX_BOOL IsTextFull() const override; | |
| 625 FX_BOOL IsTextOverflow() const; | |
| 626 FX_BOOL CanUndo() const override; | |
| 627 FX_BOOL CanRedo() const override; | |
| 628 FX_BOOL IsModified() const override; | |
| 629 CPVT_WordRange GetVisibleWordRange() const override; | |
| 630 void AddUndoItem(IFX_Edit_UndoItem* pUndoItem) override; | |
| 631 | |
| 632 FX_BOOL Empty(); | |
| 633 | |
| 634 CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place, | |
| 635 const FX_WCHAR* text, | |
| 636 int32_t charset, | |
| 637 const CPVT_SecProps* pSecProps, | |
| 638 const CPVT_WordProps* pWordProps); | |
| 639 int32_t GetCharSetFromUnicode(uint16_t word, int32_t nOldCharset); | |
| 640 | |
| 641 int32_t GetTotalLines() const; | |
| 642 | |
| 643 private: | |
| 644 void SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); | |
| 645 | |
| 646 void RearrangeAll(); | |
| 647 void RearrangePart(const CPVT_WordRange& range); | |
| 648 void ScrollToCaret(); | |
| 649 void SetScrollInfo(); | |
| 650 void SetScrollPosX(FX_FLOAT fx); | |
| 651 void SetScrollPosY(FX_FLOAT fy); | |
| 652 void SetScrollLimit(); | |
| 653 void SetContentChanged(); | |
| 654 | |
| 655 void SetText(const FX_WCHAR* text, | |
| 656 int32_t charset, | |
| 657 const CPVT_SecProps* pSecProps, | |
| 658 const CPVT_WordProps* pWordProps, | |
| 659 FX_BOOL bAddUndo, | |
| 660 FX_BOOL bPaint); | |
| 661 FX_BOOL InsertWord(uint16_t word, | |
| 662 int32_t charset, | |
| 663 const CPVT_WordProps* pWordProps, | |
| 664 FX_BOOL bAddUndo, | |
| 665 FX_BOOL bPaint); | |
| 666 FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps, | |
| 667 const CPVT_WordProps* pWordProps, | |
| 668 FX_BOOL bAddUndo, | |
| 669 FX_BOOL bPaint); | |
| 670 FX_BOOL Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint); | |
| 671 FX_BOOL Delete(FX_BOOL bAddUndo, FX_BOOL bPaint); | |
| 672 FX_BOOL Clear(FX_BOOL bAddUndo, FX_BOOL bPaint); | |
| 673 FX_BOOL InsertText(const FX_WCHAR* text, | |
| 674 int32_t charset, | |
| 675 const CPVT_SecProps* pSecProps, | |
| 676 const CPVT_WordProps* pWordProps, | |
| 677 FX_BOOL bAddUndo, | |
| 678 FX_BOOL bPaint); | |
| 679 FX_BOOL SetRichTextProps(EDIT_PROPS_E eProps, | |
| 680 const CPVT_SecProps* pSecProps, | |
| 681 const CPVT_WordProps* pWordProps); | |
| 682 FX_BOOL SetSecProps(EDIT_PROPS_E eProps, | |
| 683 const CPVT_WordPlace& place, | |
| 684 const CPVT_SecProps* pSecProps, | |
| 685 const CPVT_WordProps* pWordProps, | |
| 686 const CPVT_WordRange& wr, | |
| 687 FX_BOOL bAddUndo); | |
| 688 FX_BOOL SetWordProps(EDIT_PROPS_E eProps, | |
| 689 const CPVT_WordPlace& place, | |
| 690 const CPVT_WordProps* pWordProps, | |
| 691 const CPVT_WordRange& wr, | |
| 692 FX_BOOL bAddUndo); | |
| 693 void PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr); | |
| 694 void PaintInsertText(const CPVT_WordPlace& wpOld, | |
| 695 const CPVT_WordPlace& wpNew); | |
| 696 | |
| 697 inline CFX_FloatPoint VTToEdit(const CFX_FloatPoint& point) const; | |
| 698 inline CFX_FloatPoint EditToVT(const CFX_FloatPoint& point) const; | |
| 699 inline CFX_FloatRect VTToEdit(const CFX_FloatRect& rect) const; | |
| 700 inline CFX_FloatRect EditToVT(const CFX_FloatRect& rect) const; | |
| 701 | |
| 702 void Refresh(REFRESH_PLAN_E ePlan, | |
| 703 const CPVT_WordRange* pRange1 = NULL, | |
| 704 const CPVT_WordRange* pRange2 = NULL); | |
| 705 void RefreshPushLineRects(const CPVT_WordRange& wr); | |
| 706 void RefreshPushRandomRects(const CPVT_WordRange& wr); | |
| 707 | |
| 708 void SetCaret(const CPVT_WordPlace& place); | |
| 709 void SetCaretInfo(); | |
| 710 void SetCaretOrigin(); | |
| 711 void SetCaretChange(); | |
| 712 | |
| 713 CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const; | |
| 714 CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1, | |
| 715 const CPVT_WordRange& wr2); | |
| 716 | |
| 717 | |
| 718 void BeginGroupUndo(const CFX_WideString& sTitle); | |
| 719 void EndGroupUndo(); | |
| 720 void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem); | |
| 721 | |
| 722 void SetPageInfo(const CPVT_WordPlace& place); | |
| 723 CPVT_WordPlace SearchPageEndPlace(const CPVT_WordPlace& wpPageBegin, | |
| 724 const CFX_FloatPoint& point) const; | |
| 725 FX_FLOAT GetLineTop(const CPVT_WordPlace& place) const; | |
| 726 FX_FLOAT GetLineBottom(const CPVT_WordPlace& place) const; | |
| 727 | |
| 728 private: | |
| 729 CPDF_VariableText* m_pVT; | |
| 730 IFX_Edit_Notify* m_pNotify; | |
| 731 IFX_Edit_OprNotify* m_pOprNotify; | |
| 732 CFX_Edit_Provider* m_pVTProvide; | |
| 733 | |
| 734 CPVT_WordPlace m_wpCaret; | |
| 735 CPVT_WordPlace m_wpOldCaret; | |
| 736 CFX_Edit_Select m_SelState; | |
| 737 | |
| 738 CFX_FloatPoint m_ptScrollPos; | |
| 739 CFX_FloatPoint m_ptRefreshScrollPos; | |
| 740 FX_BOOL m_bEnableScroll; | |
| 741 IFX_Edit_Iterator* m_pIterator; | |
| 742 CFX_Edit_Refresh m_Refresh; | |
| 743 CFX_FloatPoint m_ptCaret; | |
| 744 CFX_Edit_Undo m_Undo; | |
| 745 int32_t m_nAlignment; | |
| 746 FX_BOOL m_bNotifyFlag; | |
| 747 FX_BOOL m_bEnableOverflow; | |
| 748 FX_BOOL m_bEnableRefresh; | |
| 749 CFX_FloatRect m_rcOldContent; | |
| 750 FX_BOOL m_bEnableUndo; | |
| 751 FX_BOOL m_bNotify; | |
| 752 FX_BOOL m_bOprNotify; | |
| 753 CFX_Edit_GroupUndoItem* m_pGroupUndoItem; | |
| 754 }; | |
| 755 | |
| 756 class CFX_Edit_Iterator : public IFX_Edit_Iterator { | |
| 757 public: | |
| 758 CFX_Edit_Iterator(CFX_Edit* pEdit, CPDF_VariableText::Iterator* pVTIterator); | |
| 759 ~CFX_Edit_Iterator() override; | |
| 760 | |
| 761 // IFX_Edit_Iterator | |
| 762 FX_BOOL NextWord() override; | |
| 763 FX_BOOL NextLine() override; | |
| 764 FX_BOOL NextSection() override; | |
| 765 FX_BOOL PrevWord() override; | |
| 766 FX_BOOL PrevLine() override; | |
| 767 FX_BOOL PrevSection() override; | |
| 768 FX_BOOL GetWord(CPVT_Word& word) const override; | |
| 769 FX_BOOL GetLine(CPVT_Line& line) const override; | |
| 770 FX_BOOL GetSection(CPVT_Section& section) const override; | |
| 771 void SetAt(int32_t nWordIndex) override; | |
| 772 void SetAt(const CPVT_WordPlace& place) override; | |
| 773 const CPVT_WordPlace& GetAt() const override; | |
| 774 IFX_Edit* GetEdit() const override; | |
| 775 | |
| 776 private: | |
| 777 CFX_Edit* m_pEdit; | |
| 778 CPDF_VariableText::Iterator* m_pVTIterator; | |
| 779 }; | |
| 780 | |
| 781 class CFX_Edit_Provider : public CPDF_VariableText::Provider { | |
| 782 public: | |
| 783 explicit CFX_Edit_Provider(IPVT_FontMap* pFontMap); | |
| 784 ~CFX_Edit_Provider() override; | |
| 785 | |
| 786 IPVT_FontMap* GetFontMap(); | |
| 787 | |
| 788 // CPDF_VariableText::Provider: | |
| 789 int32_t GetCharWidth(int32_t nFontIndex, | |
| 790 uint16_t word, | |
| 791 int32_t nWordStyle) override; | |
| 792 int32_t GetTypeAscent(int32_t nFontIndex) override; | |
| 793 int32_t GetTypeDescent(int32_t nFontIndex) override; | |
| 794 int32_t GetWordFontIndex(uint16_t word, | |
| 795 int32_t charset, | |
| 796 int32_t nFontIndex) override; | |
| 797 int32_t GetDefaultFontIndex() override; | |
| 798 FX_BOOL IsLatinWord(uint16_t word) override; | |
| 799 | |
| 800 private: | |
| 801 IPVT_FontMap* m_pFontMap; | |
| 802 }; | |
| 803 | |
| 804 #endif // FPDFSDK_INCLUDE_FXEDIT_FXET_EDIT_H_ | |
| OLD | NEW |