OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fde/cfde_txtedtengine.h" | 7 #include "xfa/fde/cfde_txtedtengine.h" |
8 | 8 |
9 #include "xfa/fde/cfde_txtedtbuf.h" | 9 #include "xfa/fde/cfde_txtedtbuf.h" |
10 #include "xfa/fde/cfde_txtedtbufiter.h" | 10 #include "xfa/fde/cfde_txtedtbufiter.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 nLineEnd(0), | 43 nLineEnd(0), |
44 nHorzScale(100), | 44 nHorzScale(100), |
45 fCharSpace(0), | 45 fCharSpace(0), |
46 pEventSink(nullptr) {} | 46 pEventSink(nullptr) {} |
47 | 47 |
48 FDE_TXTEDT_TEXTCHANGE_INFO::FDE_TXTEDT_TEXTCHANGE_INFO() {} | 48 FDE_TXTEDT_TEXTCHANGE_INFO::FDE_TXTEDT_TEXTCHANGE_INFO() {} |
49 | 49 |
50 FDE_TXTEDT_TEXTCHANGE_INFO::~FDE_TXTEDT_TEXTCHANGE_INFO() {} | 50 FDE_TXTEDT_TEXTCHANGE_INFO::~FDE_TXTEDT_TEXTCHANGE_INFO() {} |
51 | 51 |
52 CFDE_TxtEdtEngine::CFDE_TxtEdtEngine() | 52 CFDE_TxtEdtEngine::CFDE_TxtEdtEngine() |
53 : m_pTextBreak(nullptr), | 53 : m_pTxtBuf(new CFDE_TxtEdtBuf()), |
54 m_nPageLineCount(20), | 54 m_nPageLineCount(20), |
55 m_nLineCount(0), | 55 m_nLineCount(0), |
56 m_nAnchorPos(-1), | 56 m_nAnchorPos(-1), |
57 m_nLayoutPos(0), | 57 m_nLayoutPos(0), |
58 m_fCaretPosReserve(0.0), | 58 m_fCaretPosReserve(0.0), |
59 m_nCaret(0), | 59 m_nCaret(0), |
60 m_bBefore(TRUE), | 60 m_bBefore(TRUE), |
61 m_nCaretPage(0), | 61 m_nCaretPage(0), |
62 m_dwFindFlags(0), | 62 m_dwFindFlags(0), |
63 m_bLock(FALSE), | 63 m_bLock(FALSE), |
64 m_nLimit(0), | 64 m_nLimit(0), |
65 m_wcAliasChar(L'*'), | 65 m_wcAliasChar(L'*'), |
66 m_nFirstLineEnd(FDE_TXTEDIT_LINEEND_Auto), | 66 m_nFirstLineEnd(FDE_TXTEDIT_LINEEND_Auto), |
67 m_bAutoLineEnd(TRUE), | 67 m_bAutoLineEnd(TRUE), |
68 m_wLineEnd(kUnicodeParagraphSeparator) { | 68 m_wLineEnd(kUnicodeParagraphSeparator) { |
69 FXSYS_memset(&m_rtCaret, 0, sizeof(CFX_RectF)); | 69 FXSYS_memset(&m_rtCaret, 0, sizeof(CFX_RectF)); |
70 m_pTxtBuf = new CFDE_TxtEdtBuf(); | |
71 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); | 70 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); |
72 } | 71 } |
73 | 72 |
74 CFDE_TxtEdtEngine::~CFDE_TxtEdtEngine() { | 73 CFDE_TxtEdtEngine::~CFDE_TxtEdtEngine() { |
75 delete m_pTxtBuf; | |
76 delete m_pTextBreak; | |
77 RemoveAllParags(); | 74 RemoveAllParags(); |
78 RemoveAllPages(); | 75 RemoveAllPages(); |
79 m_Param.pEventSink = nullptr; | 76 m_Param.pEventSink = nullptr; |
80 ClearSelection(); | 77 ClearSelection(); |
81 } | 78 } |
82 | 79 |
83 void CFDE_TxtEdtEngine::SetEditParams(const FDE_TXTEDTPARAMS& params) { | 80 void CFDE_TxtEdtEngine::SetEditParams(const FDE_TXTEDTPARAMS& params) { |
84 if (!m_pTextBreak) | 81 if (!m_pTextBreak) |
85 m_pTextBreak = new CFX_TxtBreak(FX_TXTBREAKPOLICY_None); | 82 m_pTextBreak.reset(new CFX_TxtBreak(FX_TXTBREAKPOLICY_None)); |
86 | 83 |
87 FXSYS_memcpy(&m_Param, ¶ms, sizeof(FDE_TXTEDTPARAMS)); | 84 FXSYS_memcpy(&m_Param, ¶ms, sizeof(FDE_TXTEDTPARAMS)); |
88 m_wLineEnd = params.wLineBreakChar; | 85 m_wLineEnd = params.wLineBreakChar; |
89 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); | 86 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); |
90 UpdateTxtBreak(); | 87 UpdateTxtBreak(); |
91 } | 88 } |
92 | 89 |
93 FDE_TXTEDTPARAMS* CFDE_TxtEdtEngine::GetEditParams() { | 90 FDE_TXTEDTPARAMS* CFDE_TxtEdtEngine::GetEditParams() { |
94 return &m_Param; | 91 return &m_Param; |
95 } | 92 } |
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 } | 717 } |
721 m_rtCaret.Set(0, 0, 1, m_Param.fFontSize); | 718 m_rtCaret.Set(0, 0, 1, m_Param.fFontSize); |
722 Unlock(); | 719 Unlock(); |
723 } | 720 } |
724 | 721 |
725 FX_BOOL CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) { | 722 FX_BOOL CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) { |
726 return m_pTxtBuf->Optimize(pPause); | 723 return m_pTxtBuf->Optimize(pPause); |
727 } | 724 } |
728 | 725 |
729 CFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { | 726 CFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { |
730 return m_pTxtBuf; | 727 return m_pTxtBuf.get(); |
731 } | 728 } |
732 | 729 |
733 int32_t CFDE_TxtEdtEngine::GetTextBufLength() const { | 730 int32_t CFDE_TxtEdtEngine::GetTextBufLength() const { |
734 return m_pTxtBuf->GetTextLength() - 1; | 731 return m_pTxtBuf->GetTextLength() - 1; |
735 } | 732 } |
736 | 733 |
737 CFX_TxtBreak* CFDE_TxtEdtEngine::GetTextBreak() const { | 734 CFX_TxtBreak* CFDE_TxtEdtEngine::GetTextBreak() const { |
738 return m_pTextBreak; | 735 return m_pTextBreak.get(); |
739 } | 736 } |
740 | 737 |
741 int32_t CFDE_TxtEdtEngine::GetLineCount() const { | 738 int32_t CFDE_TxtEdtEngine::GetLineCount() const { |
742 return m_nLineCount; | 739 return m_nLineCount; |
743 } | 740 } |
744 | 741 |
745 int32_t CFDE_TxtEdtEngine::GetPageLineCount() const { | 742 int32_t CFDE_TxtEdtEngine::GetPageLineCount() const { |
746 return m_nPageLineCount; | 743 return m_nPageLineCount; |
747 } | 744 } |
748 | 745 |
749 int32_t CFDE_TxtEdtEngine::CountParags() const { | 746 int32_t CFDE_TxtEdtEngine::CountParags() const { |
750 return m_ParagPtrArray.GetSize(); | 747 return m_ParagPtrArray.GetSize(); |
751 } | 748 } |
752 | 749 |
753 CFDE_TxtEdtParag* CFDE_TxtEdtEngine::GetParag(int32_t nParagIndex) const { | 750 CFDE_TxtEdtParag* CFDE_TxtEdtEngine::GetParag(int32_t nParagIndex) const { |
754 return m_ParagPtrArray[nParagIndex]; | 751 return m_ParagPtrArray[nParagIndex]; |
755 } | 752 } |
756 | 753 |
757 IFX_CharIter* CFDE_TxtEdtEngine::CreateCharIter() { | 754 IFX_CharIter* CFDE_TxtEdtEngine::CreateCharIter() { |
758 if (!m_pTxtBuf) { | 755 if (!m_pTxtBuf) |
759 return nullptr; | 756 return nullptr; |
760 } | 757 return new CFDE_TxtEdtBufIter(m_pTxtBuf.get()); |
761 return new CFDE_TxtEdtBufIter(static_cast<CFDE_TxtEdtBuf*>(m_pTxtBuf)); | |
762 } | 758 } |
763 | 759 |
764 int32_t CFDE_TxtEdtEngine::Line2Parag(int32_t nStartParag, | 760 int32_t CFDE_TxtEdtEngine::Line2Parag(int32_t nStartParag, |
765 int32_t nStartLineofParag, | 761 int32_t nStartLineofParag, |
766 int32_t nLineIndex, | 762 int32_t nLineIndex, |
767 int32_t& nStartLine) const { | 763 int32_t& nStartLine) const { |
768 int32_t nLineTotal = nStartLineofParag; | 764 int32_t nLineTotal = nStartLineofParag; |
769 int32_t nCount = m_ParagPtrArray.GetSize(); | 765 int32_t nCount = m_ParagPtrArray.GetSize(); |
770 CFDE_TxtEdtParag* pParag = nullptr; | 766 CFDE_TxtEdtParag* pParag = nullptr; |
771 int32_t i = nStartParag; | 767 int32_t i = nStartParag; |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
979 m_nCaret = 0; | 975 m_nCaret = 0; |
980 m_pTxtBuf->Clear(FALSE); | 976 m_pTxtBuf->Clear(FALSE); |
981 m_nCaret = 0; | 977 m_nCaret = 0; |
982 } | 978 } |
983 | 979 |
984 void CFDE_TxtEdtEngine::RebuildParagraphs() { | 980 void CFDE_TxtEdtEngine::RebuildParagraphs() { |
985 RemoveAllParags(); | 981 RemoveAllParags(); |
986 FX_WCHAR wChar = L' '; | 982 FX_WCHAR wChar = L' '; |
987 int32_t nParagStart = 0; | 983 int32_t nParagStart = 0; |
988 int32_t nIndex = 0; | 984 int32_t nIndex = 0; |
989 std::unique_ptr<IFX_CharIter> pIter( | 985 std::unique_ptr<IFX_CharIter> pIter(new CFDE_TxtEdtBufIter(m_pTxtBuf.get())); |
990 new CFDE_TxtEdtBufIter(static_cast<CFDE_TxtEdtBuf*>(m_pTxtBuf))); | |
991 pIter->SetAt(0); | 986 pIter->SetAt(0); |
992 do { | 987 do { |
993 wChar = pIter->GetChar(); | 988 wChar = pIter->GetChar(); |
994 nIndex = pIter->GetAt(); | 989 nIndex = pIter->GetAt(); |
995 if (wChar == m_wLineEnd) { | 990 if (wChar == m_wLineEnd) { |
996 CFDE_TxtEdtParag* pParag = new CFDE_TxtEdtParag(this); | 991 CFDE_TxtEdtParag* pParag = new CFDE_TxtEdtParag(this); |
997 pParag->SetStartIndex(nParagStart); | 992 pParag->SetStartIndex(nParagStart); |
998 pParag->SetTextLength(nIndex - nParagStart + 1); | 993 pParag->SetTextLength(nIndex - nParagStart + 1); |
999 pParag->SetLineCount(-1); | 994 pParag->SetLineCount(-1); |
1000 m_ParagPtrArray.Add(pParag); | 995 m_ParagPtrArray.Add(pParag); |
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1627 m_SelRangePtrArr.RemoveAt(nCountRange); | 1622 m_SelRangePtrArr.RemoveAt(nCountRange); |
1628 DeleteRange_DoRecord(nSelStart, nSelCount, TRUE); | 1623 DeleteRange_DoRecord(nSelStart, nSelCount, TRUE); |
1629 } | 1624 } |
1630 ClearSelection(); | 1625 ClearSelection(); |
1631 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); | 1626 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); |
1632 m_Param.pEventSink->On_SelChanged(this); | 1627 m_Param.pEventSink->On_SelChanged(this); |
1633 SetCaretPos(nSelStart, TRUE); | 1628 SetCaretPos(nSelStart, TRUE); |
1634 return; | 1629 return; |
1635 } | 1630 } |
1636 } | 1631 } |
OLD | NEW |