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

Side by Side Diff: xfa/fee/fde_txtedtengine.cpp

Issue 1927973003: Remove IFDE_TxtEdt interfaces where possible. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 7 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
OLDNEW
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
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, &params, sizeof(FDE_TXTEDTPARAMS)); 65 FXSYS_memcpy(&m_Param, &params, 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
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698