| 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/fee/fde_txtedtengine.h" | 7 #include "xfa/fee/fde_txtedtengine.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| 11 #include "xfa/fde/tto/fde_textout.h" | 11 #include "xfa/fde/tto/fde_textout.h" |
| 12 #include "xfa/fee/fde_txtedtbuf.h" | |
| 13 #include "xfa/fee/fde_txtedtparag.h" | 12 #include "xfa/fee/fde_txtedtparag.h" |
| 14 #include "xfa/fee/ifde_txtedtbuf.h" | |
| 15 #include "xfa/fee/ifde_txtedtengine.h" | 13 #include "xfa/fee/ifde_txtedtengine.h" |
| 16 #include "xfa/fee/ifde_txtedtpage.h" | 14 #include "xfa/fee/ifde_txtedtpage.h" |
| 15 #include "xfa/fwl/basewidget/fwl_editimp.h" |
| 17 | 16 |
| 18 #define FDE_PAGEWIDTH_MAX 0xFFFF | 17 #define FDE_PAGEWIDTH_MAX 0xFFFF |
| 19 #define FDE_TXTPLATESIZE (1024 * 12) | 18 #define FDE_TXTPLATESIZE (1024 * 12) |
| 20 #define FDE_UNICODE_PARAGRAPH_SPERATOR (0x2029) | 19 #define FDE_UNICODE_PARAGRAPH_SPERATOR (0x2029) |
| 21 #define FDE_TXTEDT_DORECORD_INS 0 | 20 #define FDE_TXTEDT_DORECORD_INS 0 |
| 22 #define FDE_TXTEDT_DORECORD_DEL 1 | 21 #define FDE_TXTEDT_DORECORD_DEL 1 |
| 23 | 22 |
| 24 IFDE_TxtEdtEngine* IFDE_TxtEdtEngine::Create() { | |
| 25 return new CFDE_TxtEdtEngine(); | |
| 26 } | |
| 27 CFDE_TxtEdtEngine::CFDE_TxtEdtEngine() | 23 CFDE_TxtEdtEngine::CFDE_TxtEdtEngine() |
| 28 : m_pTextBreak(nullptr), | 24 : m_pTextBreak(nullptr), |
| 29 m_nPageLineCount(20), | 25 m_nPageLineCount(20), |
| 30 m_nLineCount(0), | 26 m_nLineCount(0), |
| 31 m_nAnchorPos(-1), | 27 m_nAnchorPos(-1), |
| 32 m_nLayoutPos(0), | 28 m_nLayoutPos(0), |
| 33 m_fCaretPosReserve(0.0), | 29 m_fCaretPosReserve(0.0), |
| 34 m_nCaret(0), | 30 m_nCaret(0), |
| 35 m_bBefore(TRUE), | 31 m_bBefore(TRUE), |
| 36 m_nCaretPage(0), | 32 m_nCaretPage(0), |
| (...skipping 27 matching lines...) Expand all Loading... |
| 64 } | 60 } |
| 65 void CFDE_TxtEdtEngine::SetEditParams(const FDE_TXTEDTPARAMS& params) { | 61 void CFDE_TxtEdtEngine::SetEditParams(const FDE_TXTEDTPARAMS& params) { |
| 66 if (!m_pTextBreak) | 62 if (!m_pTextBreak) |
| 67 m_pTextBreak = new CFX_TxtBreak(FX_TXTBREAKPOLICY_None); | 63 m_pTextBreak = new CFX_TxtBreak(FX_TXTBREAKPOLICY_None); |
| 68 | 64 |
| 69 FXSYS_memcpy(&m_Param, ¶ms, sizeof(FDE_TXTEDTPARAMS)); | 65 FXSYS_memcpy(&m_Param, ¶ms, sizeof(FDE_TXTEDTPARAMS)); |
| 70 m_wLineEnd = params.wLineBreakChar; | 66 m_wLineEnd = params.wLineBreakChar; |
| 71 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); | 67 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); |
| 72 UpdateTxtBreak(); | 68 UpdateTxtBreak(); |
| 73 } | 69 } |
| 74 const FDE_TXTEDTPARAMS* CFDE_TxtEdtEngine::GetEditParams() const { | 70 FDE_TXTEDTPARAMS* CFDE_TxtEdtEngine::GetEditParams() { |
| 75 return &m_Param; | 71 return &m_Param; |
| 76 } | 72 } |
| 77 int32_t CFDE_TxtEdtEngine::CountPages() const { | 73 int32_t CFDE_TxtEdtEngine::CountPages() const { |
| 78 if (m_nLineCount == 0) { | 74 if (m_nLineCount == 0) { |
| 79 return 0; | 75 return 0; |
| 80 } | 76 } |
| 81 return ((m_nLineCount - 1) / m_nPageLineCount) + 1; | 77 return ((m_nLineCount - 1) / m_nPageLineCount) + 1; |
| 82 } | 78 } |
| 83 IFDE_TxtEdtPage* CFDE_TxtEdtEngine::GetPage(int32_t nIndex) { | 79 IFDE_TxtEdtPage* CFDE_TxtEdtEngine::GetPage(int32_t nIndex) { |
| 84 if (m_PagePtrArray.GetSize() <= nIndex) { | 80 if (m_PagePtrArray.GetSize() <= nIndex) { |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 CFX_WideString wsTemp; | 318 CFX_WideString wsTemp; |
| 323 FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength); | 319 FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength); |
| 324 FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR)); | 320 FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR)); |
| 325 ReplaceParagEnd(lpBuffer, nLength, FALSE); | 321 ReplaceParagEnd(lpBuffer, nLength, FALSE); |
| 326 wsTemp.ReleaseBuffer(nLength); | 322 wsTemp.ReleaseBuffer(nLength); |
| 327 FX_BOOL bPart = FALSE; | 323 FX_BOOL bPart = FALSE; |
| 328 if (m_nLimit > 0) { | 324 if (m_nLimit > 0) { |
| 329 int32_t nTotalLength = GetTextBufLength(); | 325 int32_t nTotalLength = GetTextBufLength(); |
| 330 int32_t nCount = m_SelRangePtrArr.GetSize(); | 326 int32_t nCount = m_SelRangePtrArr.GetSize(); |
| 331 for (int32_t i = 0; i < nCount; i++) { | 327 for (int32_t i = 0; i < nCount; i++) { |
| 332 FDE_LPTXTEDTSELRANGE lpSelRange = m_SelRangePtrArr.GetAt(i); | 328 FDE_TXTEDTSELRANGE* lpSelRange = m_SelRangePtrArr.GetAt(i); |
| 333 nTotalLength -= lpSelRange->nCount; | 329 nTotalLength -= lpSelRange->nCount; |
| 334 } | 330 } |
| 335 int32_t nExpectLength = nTotalLength + nLength; | 331 int32_t nExpectLength = nTotalLength + nLength; |
| 336 if (nTotalLength == m_nLimit) { | 332 if (nTotalLength == m_nLimit) { |
| 337 return FDE_TXTEDT_MODIFY_RET_F_Full; | 333 return FDE_TXTEDT_MODIFY_RET_F_Full; |
| 338 } | 334 } |
| 339 if (nExpectLength > m_nLimit) { | 335 if (nExpectLength > m_nLimit) { |
| 340 nLength -= (nExpectLength - m_nLimit); | 336 nLength -= (nExpectLength - m_nLimit); |
| 341 bPart = TRUE; | 337 bPart = TRUE; |
| 342 } | 338 } |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 return FDE_TXTEDT_MODIFY_RET_S_Normal; | 527 return FDE_TXTEDT_MODIFY_RET_S_Normal; |
| 532 } | 528 } |
| 533 void CFDE_TxtEdtEngine::SetLimit(int32_t nLimit) { | 529 void CFDE_TxtEdtEngine::SetLimit(int32_t nLimit) { |
| 534 m_nLimit = nLimit; | 530 m_nLimit = nLimit; |
| 535 } | 531 } |
| 536 void CFDE_TxtEdtEngine::SetAliasChar(FX_WCHAR wcAlias) { | 532 void CFDE_TxtEdtEngine::SetAliasChar(FX_WCHAR wcAlias) { |
| 537 m_wcAliasChar = wcAlias; | 533 m_wcAliasChar = wcAlias; |
| 538 } | 534 } |
| 539 | 535 |
| 540 void CFDE_TxtEdtEngine::RemoveSelRange(int32_t nStart, int32_t nCount) { | 536 void CFDE_TxtEdtEngine::RemoveSelRange(int32_t nStart, int32_t nCount) { |
| 541 FDE_LPTXTEDTSELRANGE lpTemp = NULL; | 537 FDE_TXTEDTSELRANGE* lpTemp = nullptr; |
| 542 int32_t nRangeCount = m_SelRangePtrArr.GetSize(); | 538 int32_t nRangeCount = m_SelRangePtrArr.GetSize(); |
| 543 int32_t i = 0; | 539 int32_t i = 0; |
| 544 for (i = 0; i < nRangeCount; i++) { | 540 for (i = 0; i < nRangeCount; i++) { |
| 545 lpTemp = m_SelRangePtrArr[i]; | 541 lpTemp = m_SelRangePtrArr[i]; |
| 546 if (lpTemp->nStart == nStart && lpTemp->nCount == nCount) { | 542 if (lpTemp->nStart == nStart && lpTemp->nCount == nCount) { |
| 547 delete lpTemp; | 543 delete lpTemp; |
| 548 m_SelRangePtrArr.RemoveAt(i); | 544 m_SelRangePtrArr.RemoveAt(i); |
| 549 return; | 545 return; |
| 550 } | 546 } |
| 551 } | 547 } |
| 552 } | 548 } |
| 553 | 549 |
| 554 void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) { | 550 void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) { |
| 555 if (nCount == -1) { | 551 if (nCount == -1) { |
| 556 nCount = GetTextLength() - nStart; | 552 nCount = GetTextLength() - nStart; |
| 557 } | 553 } |
| 558 int32_t nSize = m_SelRangePtrArr.GetSize(); | 554 int32_t nSize = m_SelRangePtrArr.GetSize(); |
| 559 if (nSize <= 0) { | 555 if (nSize <= 0) { |
| 560 FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; | 556 FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; |
| 561 lpSelRange->nStart = nStart; | 557 lpSelRange->nStart = nStart; |
| 562 lpSelRange->nCount = nCount; | 558 lpSelRange->nCount = nCount; |
| 563 m_SelRangePtrArr.Add(lpSelRange); | 559 m_SelRangePtrArr.Add(lpSelRange); |
| 564 m_Param.pEventSink->On_SelChanged(this); | 560 m_Param.pEventSink->On_SelChanged(this); |
| 565 return; | 561 return; |
| 566 } | 562 } |
| 567 FDE_LPTXTEDTSELRANGE lpTemp = NULL; | 563 FDE_TXTEDTSELRANGE* lpTemp = nullptr; |
| 568 lpTemp = m_SelRangePtrArr[nSize - 1]; | 564 lpTemp = m_SelRangePtrArr[nSize - 1]; |
| 569 if (nStart >= lpTemp->nStart + lpTemp->nCount) { | 565 if (nStart >= lpTemp->nStart + lpTemp->nCount) { |
| 570 FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; | 566 FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; |
| 571 lpSelRange->nStart = nStart; | 567 lpSelRange->nStart = nStart; |
| 572 lpSelRange->nCount = nCount; | 568 lpSelRange->nCount = nCount; |
| 573 m_SelRangePtrArr.Add(lpSelRange); | 569 m_SelRangePtrArr.Add(lpSelRange); |
| 574 m_Param.pEventSink->On_SelChanged(this); | 570 m_Param.pEventSink->On_SelChanged(this); |
| 575 return; | 571 return; |
| 576 } | 572 } |
| 577 int32_t nEnd = nStart + nCount - 1; | 573 int32_t nEnd = nStart + nCount - 1; |
| 578 FX_BOOL bBegin = FALSE; | 574 FX_BOOL bBegin = FALSE; |
| 579 int32_t nRangeBgn = 0; | 575 int32_t nRangeBgn = 0; |
| 580 int32_t nRangeCnt = 0; | 576 int32_t nRangeCnt = 0; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 595 nRangeBgn = i; | 591 nRangeBgn = i; |
| 596 if (nEnd < nTempBgn) { | 592 if (nEnd < nTempBgn) { |
| 597 break; | 593 break; |
| 598 } | 594 } |
| 599 nRangeCnt = 1; | 595 nRangeCnt = 1; |
| 600 bBegin = TRUE; | 596 bBegin = TRUE; |
| 601 } | 597 } |
| 602 } | 598 } |
| 603 } | 599 } |
| 604 if (nRangeCnt == 0) { | 600 if (nRangeCnt == 0) { |
| 605 FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; | 601 FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; |
| 606 lpSelRange->nStart = nStart; | 602 lpSelRange->nStart = nStart; |
| 607 lpSelRange->nCount = nCount; | 603 lpSelRange->nCount = nCount; |
| 608 m_SelRangePtrArr.InsertAt(nRangeBgn, lpSelRange); | 604 m_SelRangePtrArr.InsertAt(nRangeBgn, lpSelRange); |
| 609 } else { | 605 } else { |
| 610 lpTemp = m_SelRangePtrArr[nRangeBgn]; | 606 lpTemp = m_SelRangePtrArr[nRangeBgn]; |
| 611 lpTemp->nStart = nStart; | 607 lpTemp->nStart = nStart; |
| 612 lpTemp->nCount = nCount; | 608 lpTemp->nCount = nCount; |
| 613 nRangeCnt--; | 609 nRangeCnt--; |
| 614 nRangeBgn++; | 610 nRangeBgn++; |
| 615 while (nRangeCnt--) { | 611 while (nRangeCnt--) { |
| 616 delete m_SelRangePtrArr[nRangeBgn]; | 612 delete m_SelRangePtrArr[nRangeBgn]; |
| 617 m_SelRangePtrArr.RemoveAt(nRangeBgn); | 613 m_SelRangePtrArr.RemoveAt(nRangeBgn); |
| 618 } | 614 } |
| 619 } | 615 } |
| 620 m_Param.pEventSink->On_SelChanged(this); | 616 m_Param.pEventSink->On_SelChanged(this); |
| 621 } | 617 } |
| 622 | 618 |
| 623 int32_t CFDE_TxtEdtEngine::CountSelRanges() { | 619 int32_t CFDE_TxtEdtEngine::CountSelRanges() { |
| 624 return m_SelRangePtrArr.GetSize(); | 620 return m_SelRangePtrArr.GetSize(); |
| 625 } | 621 } |
| 626 int32_t CFDE_TxtEdtEngine::GetSelRange(int32_t nIndex, int32_t& nStart) { | 622 int32_t CFDE_TxtEdtEngine::GetSelRange(int32_t nIndex, int32_t& nStart) { |
| 627 nStart = m_SelRangePtrArr[nIndex]->nStart; | 623 nStart = m_SelRangePtrArr[nIndex]->nStart; |
| 628 return m_SelRangePtrArr[nIndex]->nCount; | 624 return m_SelRangePtrArr[nIndex]->nCount; |
| 629 } | 625 } |
| 630 void CFDE_TxtEdtEngine::ClearSelection() { | 626 void CFDE_TxtEdtEngine::ClearSelection() { |
| 631 int32_t nCount = m_SelRangePtrArr.GetSize(); | 627 int32_t nCount = m_SelRangePtrArr.GetSize(); |
| 632 FDE_LPTXTEDTSELRANGE lpRange = NULL; | 628 FDE_TXTEDTSELRANGE* lpRange = nullptr; |
| 633 int32_t i = 0; | 629 int32_t i = 0; |
| 634 for (i = 0; i < nCount; i++) { | 630 for (i = 0; i < nCount; i++) { |
| 635 lpRange = m_SelRangePtrArr[i]; | 631 lpRange = m_SelRangePtrArr[i]; |
| 636 if (lpRange != NULL) { | 632 if (lpRange) { |
| 637 delete lpRange; | 633 delete lpRange; |
| 638 lpRange = NULL; | 634 lpRange = nullptr; |
| 639 } | 635 } |
| 640 } | 636 } |
| 641 m_SelRangePtrArr.RemoveAll(); | 637 m_SelRangePtrArr.RemoveAll(); |
| 642 if (nCount && m_Param.pEventSink) { | 638 if (nCount && m_Param.pEventSink) { |
| 643 m_Param.pEventSink->On_SelChanged(this); | 639 m_Param.pEventSink->On_SelChanged(this); |
| 644 } | 640 } |
| 645 } | 641 } |
| 646 FX_BOOL CFDE_TxtEdtEngine::Redo(const CFX_ByteStringC& bsRedo) { | 642 FX_BOOL CFDE_TxtEdtEngine::Redo(const CFX_ByteStringC& bsRedo) { |
| 647 if (IsLocked()) { | 643 if (IsLocked()) { |
| 648 return FALSE; | 644 return FALSE; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 int32_t nIndex = m_nCaret; | 704 int32_t nIndex = m_nCaret; |
| 709 if (!m_bBefore) { | 705 if (!m_bBefore) { |
| 710 nIndex--; | 706 nIndex--; |
| 711 } | 707 } |
| 712 m_rtCaret.Set(0, 0, 1, m_Param.fFontSize); | 708 m_rtCaret.Set(0, 0, 1, m_Param.fFontSize); |
| 713 Unlock(); | 709 Unlock(); |
| 714 } | 710 } |
| 715 FX_BOOL CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) { | 711 FX_BOOL CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) { |
| 716 return m_pTxtBuf->Optimize(pPause); | 712 return m_pTxtBuf->Optimize(pPause); |
| 717 } | 713 } |
| 718 IFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { | 714 CFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { |
| 719 return (IFDE_TxtEdtBuf*)m_pTxtBuf; | 715 return m_pTxtBuf; |
| 720 } | 716 } |
| 721 int32_t CFDE_TxtEdtEngine::GetTextBufLength() const { | 717 int32_t CFDE_TxtEdtEngine::GetTextBufLength() const { |
| 722 return m_pTxtBuf->GetTextLength() - 1; | 718 return m_pTxtBuf->GetTextLength() - 1; |
| 723 } | 719 } |
| 724 CFX_TxtBreak* CFDE_TxtEdtEngine::GetTextBreak() const { | 720 CFX_TxtBreak* CFDE_TxtEdtEngine::GetTextBreak() const { |
| 725 return m_pTextBreak; | 721 return m_pTextBreak; |
| 726 } | 722 } |
| 727 int32_t CFDE_TxtEdtEngine::GetLineCount() const { | 723 int32_t CFDE_TxtEdtEngine::GetLineCount() const { |
| 728 return m_nLineCount; | 724 return m_nLineCount; |
| 729 } | 725 } |
| 730 int32_t CFDE_TxtEdtEngine::GetPageLineCount() const { | 726 int32_t CFDE_TxtEdtEngine::GetPageLineCount() const { |
| 731 return m_nPageLineCount; | 727 return m_nPageLineCount; |
| 732 } | 728 } |
| 733 int32_t CFDE_TxtEdtEngine::CountParags() const { | 729 int32_t CFDE_TxtEdtEngine::CountParags() const { |
| 734 return m_ParagPtrArray.GetSize(); | 730 return m_ParagPtrArray.GetSize(); |
| 735 } | 731 } |
| 736 IFDE_TxtEdtParag* CFDE_TxtEdtEngine::GetParag(int32_t nParagIndex) const { | 732 CFDE_TxtEdtParag* CFDE_TxtEdtEngine::GetParag(int32_t nParagIndex) const { |
| 737 return m_ParagPtrArray[nParagIndex]; | 733 return m_ParagPtrArray[nParagIndex]; |
| 738 } | 734 } |
| 739 IFX_CharIter* CFDE_TxtEdtEngine::CreateCharIter() { | 735 IFX_CharIter* CFDE_TxtEdtEngine::CreateCharIter() { |
| 740 if (!m_pTxtBuf) { | 736 if (!m_pTxtBuf) { |
| 741 return NULL; | 737 return NULL; |
| 742 } | 738 } |
| 743 return new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf); | 739 return new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf); |
| 744 } | 740 } |
| 745 int32_t CFDE_TxtEdtEngine::Line2Parag(int32_t nStartParag, | 741 int32_t CFDE_TxtEdtEngine::Line2Parag(int32_t nStartParag, |
| 746 int32_t nStartLineofParag, | 742 int32_t nStartLineofParag, |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1031 if (nSize > nPageCount) { | 1027 if (nSize > nPageCount) { |
| 1032 IFDE_TxtEdtPage* pPage = NULL; | 1028 IFDE_TxtEdtPage* pPage = NULL; |
| 1033 int32_t i = 0; | 1029 int32_t i = 0; |
| 1034 for (i = nSize - 1; i >= nPageCount; i--) { | 1030 for (i = nSize - 1; i >= nPageCount; i--) { |
| 1035 pPage = m_PagePtrArray[i]; | 1031 pPage = m_PagePtrArray[i]; |
| 1036 if (pPage) { | 1032 if (pPage) { |
| 1037 pPage->Release(); | 1033 pPage->Release(); |
| 1038 } | 1034 } |
| 1039 m_PagePtrArray.RemoveAt(i); | 1035 m_PagePtrArray.RemoveAt(i); |
| 1040 } | 1036 } |
| 1041 m_Param.pEventSink->On_PageCountChanged(this); | |
| 1042 return; | 1037 return; |
| 1043 } | 1038 } |
| 1044 if (nSize < nPageCount) { | 1039 if (nSize < nPageCount) { |
| 1045 IFDE_TxtEdtPage* pPage = NULL; | 1040 IFDE_TxtEdtPage* pPage = NULL; |
| 1046 int32_t i = 0; | 1041 int32_t i = 0; |
| 1047 for (i = nSize; i < nPageCount; i++) { | 1042 for (i = nSize; i < nPageCount; i++) { |
| 1048 pPage = IFDE_TxtEdtPage::Create(this, i); | 1043 pPage = IFDE_TxtEdtPage::Create(this, i); |
| 1049 m_PagePtrArray.Add(pPage); | 1044 m_PagePtrArray.Add(pPage); |
| 1050 } | 1045 } |
| 1051 m_Param.pEventSink->On_PageCountChanged(this); | |
| 1052 return; | 1046 return; |
| 1053 } | 1047 } |
| 1054 } | 1048 } |
| 1055 void CFDE_TxtEdtEngine::UpdateTxtBreak() { | 1049 void CFDE_TxtEdtEngine::UpdateTxtBreak() { |
| 1056 uint32_t dwStyle = m_pTextBreak->GetLayoutStyles(); | 1050 uint32_t dwStyle = m_pTextBreak->GetLayoutStyles(); |
| 1057 if (m_Param.dwMode & FDE_TEXTEDITMODE_MultiLines) { | 1051 if (m_Param.dwMode & FDE_TEXTEDITMODE_MultiLines) { |
| 1058 dwStyle &= ~FX_TXTLAYOUTSTYLE_SingleLine; | 1052 dwStyle &= ~FX_TXTLAYOUTSTYLE_SingleLine; |
| 1059 } else { | 1053 } else { |
| 1060 dwStyle |= FX_TXTLAYOUTSTYLE_SingleLine; | 1054 dwStyle |= FX_TXTLAYOUTSTYLE_SingleLine; |
| 1061 } | 1055 } |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 int32_t nLineCharCount = -1; | 1259 int32_t nLineCharCount = -1; |
| 1266 for (i = 0; i < pParag->m_nLineCount; i++) { | 1260 for (i = 0; i < pParag->m_nLineCount; i++) { |
| 1267 pParag->GetLineRange(i, nLineStart, nLineCharCount); | 1261 pParag->GetLineRange(i, nLineStart, nLineCharCount); |
| 1268 if (nLineStart <= nIndex && nIndex < (nLineStart + nLineCharCount)) { | 1262 if (nLineStart <= nIndex && nIndex < (nLineStart + nLineCharCount)) { |
| 1269 break; | 1263 break; |
| 1270 } | 1264 } |
| 1271 } | 1265 } |
| 1272 ASSERT(i < pParag->m_nLineCount); | 1266 ASSERT(i < pParag->m_nLineCount); |
| 1273 nLineCount += (i + 1); | 1267 nLineCount += (i + 1); |
| 1274 m_nCaretPage = (nLineCount - 1) / m_nPageLineCount + 1 - 1; | 1268 m_nCaretPage = (nLineCount - 1) / m_nPageLineCount + 1 - 1; |
| 1275 m_Param.pEventSink->On_PageChange(this, m_nCaretPage); | |
| 1276 pParag->UnloadParag(); | 1269 pParag->UnloadParag(); |
| 1277 return m_nCaretPage; | 1270 return m_nCaretPage; |
| 1278 } | 1271 } |
| 1279 void CFDE_TxtEdtEngine::TextPos2ParagPos(int32_t nIndex, | 1272 void CFDE_TxtEdtEngine::TextPos2ParagPos(int32_t nIndex, |
| 1280 FDE_TXTEDTPARAGPOS& ParagPos) const { | 1273 FDE_TXTEDTPARAGPOS& ParagPos) const { |
| 1281 ASSERT(nIndex >= 0 && nIndex < m_pTxtBuf->GetTextLength()); | 1274 ASSERT(nIndex >= 0 && nIndex < m_pTxtBuf->GetTextLength()); |
| 1282 int32_t nCount = m_ParagPtrArray.GetSize(); | 1275 int32_t nCount = m_ParagPtrArray.GetSize(); |
| 1283 int32_t nBgn = 0; | 1276 int32_t nBgn = 0; |
| 1284 int32_t nMid = 0; | 1277 int32_t nMid = 0; |
| 1285 int32_t nEnd = nCount - 1; | 1278 int32_t nEnd = nCount - 1; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1346 } else { | 1339 } else { |
| 1347 if (m_nCaretPage == 0) { | 1340 if (m_nCaretPage == 0) { |
| 1348 return FALSE; | 1341 return FALSE; |
| 1349 } | 1342 } |
| 1350 } | 1343 } |
| 1351 if (bLineReserve) { | 1344 if (bLineReserve) { |
| 1352 m_nCaretPage++; | 1345 m_nCaretPage++; |
| 1353 } else { | 1346 } else { |
| 1354 m_nCaretPage--; | 1347 m_nCaretPage--; |
| 1355 } | 1348 } |
| 1356 m_Param.pEventSink->On_PageChange(this, m_nCaretPage); | |
| 1357 ptCaret.x -= rtContent.left; | 1349 ptCaret.x -= rtContent.left; |
| 1358 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); | 1350 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
| 1359 ptCaret.x += pCurPage->GetContentsBox().right(); | 1351 ptCaret.x += pCurPage->GetContentsBox().right(); |
| 1360 } | 1352 } |
| 1361 } else { | 1353 } else { |
| 1362 ptCaret.x = m_fCaretPosReserve; | 1354 ptCaret.x = m_fCaretPosReserve; |
| 1363 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 - m_Param.fLineSpace; | 1355 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 - m_Param.fLineSpace; |
| 1364 if (ptCaret.y < rtContent.top) { | 1356 if (ptCaret.y < rtContent.top) { |
| 1365 if (m_nCaretPage == 0) { | 1357 if (m_nCaretPage == 0) { |
| 1366 return FALSE; | 1358 return FALSE; |
| 1367 } | 1359 } |
| 1368 ptCaret.y -= rtContent.top; | 1360 ptCaret.y -= rtContent.top; |
| 1369 m_nCaretPage--; | 1361 m_nCaretPage--; |
| 1370 m_Param.pEventSink->On_PageChange(this, m_nCaretPage); | |
| 1371 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); | 1362 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
| 1372 ptCaret.y += pCurPage->GetContentsBox().bottom(); | 1363 ptCaret.y += pCurPage->GetContentsBox().bottom(); |
| 1373 } | 1364 } |
| 1374 } | 1365 } |
| 1375 return TRUE; | 1366 return TRUE; |
| 1376 } | 1367 } |
| 1377 FX_BOOL CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) { | 1368 FX_BOOL CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) { |
| 1378 IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage); | 1369 IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage); |
| 1379 const CFX_RectF& rtContent = pPage->GetContentsBox(); | 1370 const CFX_RectF& rtContent = pPage->GetContentsBox(); |
| 1380 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { | 1371 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { |
| 1381 ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 + m_Param.fLineSpace; | 1372 ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 + m_Param.fLineSpace; |
| 1382 ptCaret.y = m_fCaretPosReserve; | 1373 ptCaret.y = m_fCaretPosReserve; |
| 1383 if (ptCaret.x >= rtContent.right()) { | 1374 if (ptCaret.x >= rtContent.right()) { |
| 1384 FX_BOOL bLineReserve = | 1375 FX_BOOL bLineReserve = |
| 1385 m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve; | 1376 m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve; |
| 1386 if (bLineReserve) { | 1377 if (bLineReserve) { |
| 1387 if (m_nCaretPage == 0) { | 1378 if (m_nCaretPage == 0) { |
| 1388 return FALSE; | 1379 return FALSE; |
| 1389 } | 1380 } |
| 1390 } else { | 1381 } else { |
| 1391 if (m_nCaretPage == CountPages() - 1) { | 1382 if (m_nCaretPage == CountPages() - 1) { |
| 1392 return FALSE; | 1383 return FALSE; |
| 1393 } | 1384 } |
| 1394 } | 1385 } |
| 1395 if (bLineReserve) { | 1386 if (bLineReserve) { |
| 1396 m_nCaretPage--; | 1387 m_nCaretPage--; |
| 1397 } else { | 1388 } else { |
| 1398 m_nCaretPage++; | 1389 m_nCaretPage++; |
| 1399 } | 1390 } |
| 1400 m_Param.pEventSink->On_PageChange(this, m_nCaretPage); | |
| 1401 ptCaret.x -= rtContent.right(); | 1391 ptCaret.x -= rtContent.right(); |
| 1402 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); | 1392 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
| 1403 ptCaret.x += pCurPage->GetContentsBox().left; | 1393 ptCaret.x += pCurPage->GetContentsBox().left; |
| 1404 } | 1394 } |
| 1405 } else { | 1395 } else { |
| 1406 ptCaret.x = m_fCaretPosReserve; | 1396 ptCaret.x = m_fCaretPosReserve; |
| 1407 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace; | 1397 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace; |
| 1408 if (ptCaret.y >= rtContent.bottom()) { | 1398 if (ptCaret.y >= rtContent.bottom()) { |
| 1409 if (m_nCaretPage == CountPages() - 1) { | 1399 if (m_nCaretPage == CountPages() - 1) { |
| 1410 return FALSE; | 1400 return FALSE; |
| 1411 } | 1401 } |
| 1412 ptCaret.y -= rtContent.bottom(); | 1402 ptCaret.y -= rtContent.bottom(); |
| 1413 m_nCaretPage++; | 1403 m_nCaretPage++; |
| 1414 m_Param.pEventSink->On_PageChange(this, m_nCaretPage); | |
| 1415 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); | 1404 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); |
| 1416 ptCaret.y += pCurPage->GetContentsBox().top; | 1405 ptCaret.y += pCurPage->GetContentsBox().top; |
| 1417 } | 1406 } |
| 1418 } | 1407 } |
| 1419 return TRUE; | 1408 return TRUE; |
| 1420 } | 1409 } |
| 1421 FX_BOOL CFDE_TxtEdtEngine::MoveLineStart() { | 1410 FX_BOOL CFDE_TxtEdtEngine::MoveLineStart() { |
| 1422 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; | 1411 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; |
| 1423 FDE_TXTEDTPARAGPOS ParagPos; | 1412 FDE_TXTEDTPARAGPOS ParagPos; |
| 1424 TextPos2ParagPos(nIndex, ParagPos); | 1413 TextPos2ParagPos(nIndex, ParagPos); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1603 FX_BOOL CFDE_TxtEdtEngine::IsSelect() { | 1592 FX_BOOL CFDE_TxtEdtEngine::IsSelect() { |
| 1604 return m_SelRangePtrArr.GetSize() > 0; | 1593 return m_SelRangePtrArr.GetSize() > 0; |
| 1605 } | 1594 } |
| 1606 void CFDE_TxtEdtEngine::DeleteSelect() { | 1595 void CFDE_TxtEdtEngine::DeleteSelect() { |
| 1607 int32_t nCountRange = CountSelRanges(); | 1596 int32_t nCountRange = CountSelRanges(); |
| 1608 if (nCountRange > 0) { | 1597 if (nCountRange > 0) { |
| 1609 int32_t nSelStart; | 1598 int32_t nSelStart; |
| 1610 int32_t nSelCount; | 1599 int32_t nSelCount; |
| 1611 while (nCountRange > 0) { | 1600 while (nCountRange > 0) { |
| 1612 nSelCount = GetSelRange(--nCountRange, nSelStart); | 1601 nSelCount = GetSelRange(--nCountRange, nSelStart); |
| 1613 FDE_LPTXTEDTSELRANGE lpTemp = m_SelRangePtrArr[nCountRange]; | 1602 FDE_TXTEDTSELRANGE* lpTemp = m_SelRangePtrArr[nCountRange]; |
| 1614 delete lpTemp; | 1603 delete lpTemp; |
| 1615 m_SelRangePtrArr.RemoveAt(nCountRange); | 1604 m_SelRangePtrArr.RemoveAt(nCountRange); |
| 1616 DeleteRange_DoRecord(nSelStart, nSelCount, TRUE); | 1605 DeleteRange_DoRecord(nSelStart, nSelCount, TRUE); |
| 1617 } | 1606 } |
| 1618 ClearSelection(); | 1607 ClearSelection(); |
| 1619 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); | 1608 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); |
| 1620 m_Param.pEventSink->On_SelChanged(this); | 1609 m_Param.pEventSink->On_SelChanged(this); |
| 1621 SetCaretPos(nSelStart, TRUE); | 1610 SetCaretPos(nSelStart, TRUE); |
| 1622 return; | 1611 return; |
| 1623 } | 1612 } |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1776 int32_t nEngine = 0; | 1765 int32_t nEngine = 0; |
| 1777 ArchiveLoader >> nEngine; | 1766 ArchiveLoader >> nEngine; |
| 1778 m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine; | 1767 m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine; |
| 1779 int32_t iSel = 0; | 1768 int32_t iSel = 0; |
| 1780 ArchiveLoader >> iSel; | 1769 ArchiveLoader >> iSel; |
| 1781 m_bSel = !!iSel; | 1770 m_bSel = !!iSel; |
| 1782 ArchiveLoader >> m_nIndex; | 1771 ArchiveLoader >> m_nIndex; |
| 1783 ArchiveLoader >> m_nCaret; | 1772 ArchiveLoader >> m_nCaret; |
| 1784 ArchiveLoader >> m_wsRange; | 1773 ArchiveLoader >> m_wsRange; |
| 1785 } | 1774 } |
| OLD | NEW |