Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: fpdfsdk/fxedit/include/fxet_edit.h

Issue 2375963006: Move fpdfsdk/fxedit/include to fpdfsdk/fxedit (Closed)
Patch Set: Rebase to master Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fpdfsdk/fxedit/include/fx_edit.h ('k') | fpdfsdk/fxedit/include/fxet_list.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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_
OLDNEW
« no previous file with comments | « fpdfsdk/fxedit/include/fx_edit.h ('k') | fpdfsdk/fxedit/include/fxet_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698