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

Side by Side Diff: fpdfsdk/fxedit/fxet_edit.cpp

Issue 2146503002: Remove RichText support from fpdfsdk/fxedit. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 5 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 | « core/fpdfdoc/include/cpdf_variabletext.h ('k') | fpdfsdk/fxedit/fxet_pageobjs.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "fpdfsdk/fxedit/include/fxet_edit.h" 7 #include "fpdfsdk/fxedit/include/fxet_edit.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 void CFXEU_Clear::Undo() { 599 void CFXEU_Clear::Undo() {
600 if (m_pEdit) { 600 if (m_pEdit) {
601 m_pEdit->SelectNone(); 601 m_pEdit->SelectNone();
602 m_pEdit->SetCaret(m_wrSel.BeginPos); 602 m_pEdit->SetCaret(m_wrSel.BeginPos);
603 m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, nullptr, nullptr, 603 m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, nullptr, nullptr,
604 FALSE, TRUE); 604 FALSE, TRUE);
605 m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos); 605 m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
606 } 606 }
607 } 607 }
608 608
609 CFXEU_ClearRich::CFXEU_ClearRich(CFX_Edit* pEdit,
610 const CPVT_WordPlace& wpOldPlace,
611 const CPVT_WordPlace& wpNewPlace,
612 const CPVT_WordRange& wrSel,
613 uint16_t word,
614 int32_t charset,
615 const CPVT_SecProps& SecProps,
616 const CPVT_WordProps& WordProps)
617 : m_pEdit(pEdit),
618 m_wpOld(wpOldPlace),
619 m_wpNew(wpNewPlace),
620 m_wrSel(wrSel),
621 m_Word(word),
622 m_nCharset(charset),
623 m_SecProps(SecProps),
624 m_WordProps(WordProps) {}
625
626 CFXEU_ClearRich::~CFXEU_ClearRich() {}
627
628 void CFXEU_ClearRich::Redo() {
629 if (m_pEdit && IsLast()) {
630 m_pEdit->SelectNone();
631 m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
632 m_pEdit->Clear(FALSE, TRUE);
633 }
634 }
635
636 void CFXEU_ClearRich::Undo() {
637 if (m_pEdit) {
638 m_pEdit->SelectNone();
639 m_pEdit->SetCaret(m_wpOld);
640 if (m_wpNew.SecCmp(m_wpOld) != 0) {
641 m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, FALSE);
642 } else {
643 m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, FALSE);
644 }
645
646 if (IsFirst()) {
647 m_pEdit->PaintInsertText(m_wrSel.BeginPos, m_wrSel.EndPos);
648 m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
649 }
650 }
651 }
652 CFXEU_InsertText::CFXEU_InsertText(CFX_Edit* pEdit, 609 CFXEU_InsertText::CFXEU_InsertText(CFX_Edit* pEdit,
653 const CPVT_WordPlace& wpOldPlace, 610 const CPVT_WordPlace& wpOldPlace,
654 const CPVT_WordPlace& wpNewPlace, 611 const CPVT_WordPlace& wpNewPlace,
655 const CFX_WideString& swText, 612 const CFX_WideString& swText,
656 int32_t charset, 613 int32_t charset,
657 const CPVT_SecProps* pSecProps, 614 const CPVT_SecProps* pSecProps,
658 const CPVT_WordProps* pWordProps) 615 const CPVT_WordProps* pWordProps)
659 : m_pEdit(pEdit), 616 : m_pEdit(pEdit),
660 m_wpOld(wpOldPlace), 617 m_wpOld(wpOldPlace),
661 m_wpNew(wpNewPlace), 618 m_wpNew(wpNewPlace),
(...skipping 19 matching lines...) Expand all
681 } 638 }
682 639
683 void CFXEU_InsertText::Undo() { 640 void CFXEU_InsertText::Undo() {
684 if (m_pEdit) { 641 if (m_pEdit) {
685 m_pEdit->SelectNone(); 642 m_pEdit->SelectNone();
686 m_pEdit->SetSel(m_wpOld, m_wpNew); 643 m_pEdit->SetSel(m_wpOld, m_wpNew);
687 m_pEdit->Clear(FALSE, TRUE); 644 m_pEdit->Clear(FALSE, TRUE);
688 } 645 }
689 } 646 }
690 647
691 CFXEU_SetSecProps::CFXEU_SetSecProps(CFX_Edit* pEdit,
692 const CPVT_WordPlace& place,
693 EDIT_PROPS_E ep,
694 const CPVT_SecProps& oldsecprops,
695 const CPVT_WordProps& oldwordprops,
696 const CPVT_SecProps& newsecprops,
697 const CPVT_WordProps& newwordprops,
698 const CPVT_WordRange& range)
699 : m_pEdit(pEdit),
700 m_wpPlace(place),
701 m_wrPlace(range),
702 m_eProps(ep),
703 m_OldSecProps(oldsecprops),
704 m_NewSecProps(newsecprops),
705 m_OldWordProps(oldwordprops),
706 m_NewWordProps(newwordprops) {}
707
708 CFXEU_SetSecProps::~CFXEU_SetSecProps() {}
709
710 void CFXEU_SetSecProps::Redo() {
711 if (m_pEdit) {
712 m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_NewSecProps, &m_NewWordProps,
713 m_wrPlace, FALSE);
714 if (IsLast()) {
715 m_pEdit->SelectNone();
716 m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
717 m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
718 }
719 }
720 }
721
722 void CFXEU_SetSecProps::Undo() {
723 if (m_pEdit) {
724 m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_OldSecProps, &m_OldWordProps,
725 m_wrPlace, FALSE);
726 if (IsFirst()) {
727 m_pEdit->SelectNone();
728 m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
729 m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
730 }
731 }
732 }
733
734 CFXEU_SetWordProps::CFXEU_SetWordProps(CFX_Edit* pEdit,
735 const CPVT_WordPlace& place,
736 EDIT_PROPS_E ep,
737 const CPVT_WordProps& oldprops,
738 const CPVT_WordProps& newprops,
739 const CPVT_WordRange& range)
740 : m_pEdit(pEdit),
741 m_wpPlace(place),
742 m_wrPlace(range),
743 m_eProps(ep),
744 m_OldWordProps(oldprops),
745 m_NewWordProps(newprops) {}
746
747 CFXEU_SetWordProps::~CFXEU_SetWordProps() {}
748
749 void CFXEU_SetWordProps::Redo() {
750 if (m_pEdit) {
751 m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_NewWordProps, m_wrPlace,
752 FALSE);
753 if (IsLast()) {
754 m_pEdit->SelectNone();
755 m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
756 m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
757 }
758 }
759 }
760
761 void CFXEU_SetWordProps::Undo() {
762 if (m_pEdit) {
763 m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_OldWordProps, m_wrPlace,
764 FALSE);
765 if (IsFirst()) {
766 m_pEdit->SelectNone();
767 m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
768 m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
769 }
770 }
771 }
772
773 CFX_Edit::CFX_Edit(CPDF_VariableText* pVT) 648 CFX_Edit::CFX_Edit(CPDF_VariableText* pVT)
774 : m_pVT(pVT), 649 : m_pVT(pVT),
775 m_pNotify(nullptr), 650 m_pNotify(nullptr),
776 m_pOprNotify(nullptr), 651 m_pOprNotify(nullptr),
777 m_wpCaret(-1, -1, -1), 652 m_wpCaret(-1, -1, -1),
778 m_wpOldCaret(-1, -1, -1), 653 m_wpOldCaret(-1, -1, -1),
779 m_SelState(), 654 m_SelState(),
780 m_ptScrollPos(0, 0), 655 m_ptScrollPos(0, 0),
781 m_ptRefreshScrollPos(0, 0), 656 m_ptRefreshScrollPos(0, 0),
782 m_bEnableScroll(FALSE), 657 m_bEnableScroll(FALSE),
783 m_ptCaret(0.0f, 0.0f), 658 m_ptCaret(0.0f, 0.0f),
784 m_Undo(kEditUndoMaxItems), 659 m_Undo(kEditUndoMaxItems),
785 m_nAlignment(0), 660 m_nAlignment(0),
786 m_bNotifyFlag(FALSE), 661 m_bNotifyFlag(FALSE),
787 m_bEnableOverflow(FALSE), 662 m_bEnableOverflow(FALSE),
788 m_bEnableRefresh(TRUE), 663 m_bEnableRefresh(TRUE),
789 m_rcOldContent(0.0f, 0.0f, 0.0f, 0.0f), 664 m_rcOldContent(0.0f, 0.0f, 0.0f, 0.0f),
790 m_bEnableUndo(TRUE), 665 m_bEnableUndo(TRUE),
791 m_bNotify(TRUE),
792 m_bOprNotify(FALSE), 666 m_bOprNotify(FALSE),
793 m_pGroupUndoItem(nullptr) { 667 m_pGroupUndoItem(nullptr) {
794 ASSERT(pVT); 668 ASSERT(pVT);
795 } 669 }
796 670
797 CFX_Edit::~CFX_Edit() { 671 CFX_Edit::~CFX_Edit() {
798 ASSERT(!m_pGroupUndoItem); 672 ASSERT(!m_pGroupUndoItem);
799 } 673 }
800 674
801 void CFX_Edit::Initialize() { 675 void CFX_Edit::Initialize() {
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 957
1084 if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) { 958 if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) {
1085 wrRet.EndPos = wr2.EndPos; 959 wrRet.EndPos = wr2.EndPos;
1086 } else { 960 } else {
1087 wrRet.EndPos = wr1.EndPos; 961 wrRet.EndPos = wr1.EndPos;
1088 } 962 }
1089 963
1090 return wrRet; 964 return wrRet;
1091 } 965 }
1092 966
1093 FX_BOOL CFX_Edit::IsRichText() const {
1094 return m_pVT->IsRichText();
1095 }
1096
1097 void CFX_Edit::SetRichText(FX_BOOL bRichText, FX_BOOL bPaint) {
1098 m_pVT->SetRichText(bRichText);
1099 if (bPaint)
1100 Paint();
1101 }
1102
1103 FX_BOOL CFX_Edit::SetRichFontIndex(int32_t nFontIndex) {
1104 CPVT_WordProps WordProps;
1105 WordProps.nFontIndex = nFontIndex;
1106 return SetRichTextProps(EP_FONTINDEX, nullptr, &WordProps);
1107 }
1108
1109 FX_BOOL CFX_Edit::SetRichFontSize(FX_FLOAT fFontSize) {
1110 CPVT_WordProps WordProps;
1111 WordProps.fFontSize = fFontSize;
1112 return SetRichTextProps(EP_FONTSIZE, nullptr, &WordProps);
1113 }
1114
1115 FX_BOOL CFX_Edit::SetRichTextColor(FX_COLORREF dwColor) {
1116 CPVT_WordProps WordProps;
1117 WordProps.dwWordColor = dwColor;
1118 return SetRichTextProps(EP_WORDCOLOR, nullptr, &WordProps);
1119 }
1120
1121 FX_BOOL CFX_Edit::SetRichTextScript(CPDF_VariableText::ScriptType nScriptType) {
1122 CPVT_WordProps WordProps;
1123 WordProps.nScriptType = nScriptType;
1124 return SetRichTextProps(EP_SCRIPTTYPE, nullptr, &WordProps);
1125 }
1126
1127 FX_BOOL CFX_Edit::SetRichTextBold(FX_BOOL bBold) {
1128 CPVT_WordProps WordProps;
1129 if (bBold)
1130 WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
1131 return SetRichTextProps(EP_BOLD, nullptr, &WordProps);
1132 }
1133
1134 FX_BOOL CFX_Edit::SetRichTextItalic(FX_BOOL bItalic) {
1135 CPVT_WordProps WordProps;
1136 if (bItalic)
1137 WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
1138 return SetRichTextProps(EP_ITALIC, nullptr, &WordProps);
1139 }
1140
1141 FX_BOOL CFX_Edit::SetRichTextUnderline(FX_BOOL bUnderline) {
1142 CPVT_WordProps WordProps;
1143 if (bUnderline)
1144 WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
1145 return SetRichTextProps(EP_UNDERLINE, nullptr, &WordProps);
1146 }
1147
1148 FX_BOOL CFX_Edit::SetRichTextCrossout(FX_BOOL bCrossout) {
1149 CPVT_WordProps WordProps;
1150 if (bCrossout)
1151 WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
1152 return SetRichTextProps(EP_CROSSOUT, nullptr, &WordProps);
1153 }
1154
1155 FX_BOOL CFX_Edit::SetRichTextCharSpace(FX_FLOAT fCharSpace) {
1156 CPVT_WordProps WordProps;
1157 WordProps.fCharSpace = fCharSpace;
1158 return SetRichTextProps(EP_CHARSPACE, nullptr, &WordProps);
1159 }
1160
1161 FX_BOOL CFX_Edit::SetRichTextHorzScale(int32_t nHorzScale) {
1162 CPVT_WordProps WordProps;
1163 WordProps.nHorzScale = nHorzScale;
1164 return SetRichTextProps(EP_HORZSCALE, nullptr, &WordProps);
1165 }
1166
1167 FX_BOOL CFX_Edit::SetRichTextLineLeading(FX_FLOAT fLineLeading) {
1168 CPVT_SecProps SecProps;
1169 SecProps.fLineLeading = fLineLeading;
1170 return SetRichTextProps(EP_LINELEADING, &SecProps, nullptr);
1171 }
1172
1173 FX_BOOL CFX_Edit::SetRichTextLineIndent(FX_FLOAT fLineIndent) {
1174 CPVT_SecProps SecProps;
1175 SecProps.fLineIndent = fLineIndent;
1176 return SetRichTextProps(EP_LINEINDENT, &SecProps, nullptr);
1177 }
1178
1179 FX_BOOL CFX_Edit::SetRichTextAlignment(int32_t nAlignment) {
1180 CPVT_SecProps SecProps;
1181 SecProps.nAlignment = nAlignment;
1182 return SetRichTextProps(EP_ALIGNMENT, &SecProps, nullptr);
1183 }
1184
1185 FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps,
1186 const CPVT_SecProps* pSecProps,
1187 const CPVT_WordProps* pWordProps) {
1188 if (!m_pVT->IsValid() || !m_pVT->IsRichText())
1189 return FALSE;
1190
1191 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
1192 CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
1193
1194 m_pVT->UpdateWordPlace(wrTemp.BeginPos);
1195 m_pVT->UpdateWordPlace(wrTemp.EndPos);
1196 pIterator->SetAt(wrTemp.BeginPos);
1197
1198 BeginGroupUndo(L"");
1199 FX_BOOL bSet =
1200 SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp, TRUE);
1201
1202 while (pIterator->NextWord()) {
1203 CPVT_WordPlace place = pIterator->GetAt();
1204 if (place.WordCmp(wrTemp.EndPos) > 0)
1205 break;
1206 FX_BOOL bSet1 =
1207 SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE);
1208 FX_BOOL bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE);
1209
1210 if (!bSet)
1211 bSet = (bSet1 || bSet2);
1212 }
1213
1214 EndGroupUndo();
1215
1216 if (bSet)
1217 PaintSetProps(eProps, wrTemp);
1218
1219 return bSet;
1220 }
1221
1222 void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr) {
1223 switch (eProps) {
1224 case EP_LINELEADING:
1225 case EP_LINEINDENT:
1226 case EP_ALIGNMENT:
1227 RearrangePart(wr);
1228 ScrollToCaret();
1229 Refresh(RP_ANALYSE);
1230 SetCaretOrigin();
1231 SetCaretInfo();
1232 break;
1233 case EP_WORDCOLOR:
1234 case EP_UNDERLINE:
1235 case EP_CROSSOUT:
1236 Refresh(RP_OPTIONAL, &wr);
1237 break;
1238 case EP_FONTINDEX:
1239 case EP_FONTSIZE:
1240 case EP_SCRIPTTYPE:
1241 case EP_CHARSPACE:
1242 case EP_HORZSCALE:
1243 case EP_BOLD:
1244 case EP_ITALIC:
1245 RearrangePart(wr);
1246 ScrollToCaret();
1247
1248 CPVT_WordRange wrRefresh(m_pVT->GetSectionBeginPlace(wr.BeginPos),
1249 m_pVT->GetSectionEndPlace(wr.EndPos));
1250 Refresh(RP_ANALYSE, &wrRefresh);
1251
1252 SetCaretOrigin();
1253 SetCaretInfo();
1254 break;
1255 }
1256 }
1257
1258 FX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps,
1259 const CPVT_WordPlace& place,
1260 const CPVT_SecProps* pSecProps,
1261 const CPVT_WordProps* pWordProps,
1262 const CPVT_WordRange& wr,
1263 FX_BOOL bAddUndo) {
1264 if (!m_pVT->IsValid() || !m_pVT->IsRichText())
1265 return FALSE;
1266
1267 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
1268 FX_BOOL bSet = FALSE;
1269 CPVT_Section secinfo;
1270 CPVT_Section OldSecinfo;
1271
1272 CPVT_WordPlace oldplace = pIterator->GetAt();
1273
1274 if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT ||
1275 eProps == EP_ALIGNMENT) {
1276 if (pSecProps) {
1277 pIterator->SetAt(place);
1278 if (pIterator->GetSection(secinfo)) {
1279 if (bAddUndo)
1280 OldSecinfo = secinfo;
1281
1282 switch (eProps) {
1283 case EP_LINELEADING:
1284 if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,
1285 pSecProps->fLineLeading)) {
1286 secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
1287 bSet = TRUE;
1288 }
1289 break;
1290 case EP_LINEINDENT:
1291 if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,
1292 pSecProps->fLineIndent)) {
1293 secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
1294 bSet = TRUE;
1295 }
1296 break;
1297 case EP_ALIGNMENT:
1298 if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) {
1299 secinfo.SecProps.nAlignment = pSecProps->nAlignment;
1300 bSet = TRUE;
1301 }
1302 break;
1303 default:
1304 break;
1305 }
1306 }
1307 }
1308 } else {
1309 if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) {
1310 pIterator->SetAt(place);
1311 if (pIterator->GetSection(secinfo)) {
1312 if (bAddUndo)
1313 OldSecinfo = secinfo;
1314
1315 switch (eProps) {
1316 case EP_FONTINDEX:
1317 if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
1318 secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
1319 bSet = TRUE;
1320 }
1321 break;
1322 case EP_FONTSIZE:
1323 if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,
1324 pWordProps->fFontSize)) {
1325 secinfo.WordProps.fFontSize = pWordProps->fFontSize;
1326 bSet = TRUE;
1327 }
1328 break;
1329 case EP_WORDCOLOR:
1330 if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
1331 secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
1332 bSet = TRUE;
1333 }
1334 break;
1335 case EP_SCRIPTTYPE:
1336 if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) {
1337 secinfo.WordProps.nScriptType = pWordProps->nScriptType;
1338 bSet = TRUE;
1339 }
1340 break;
1341 case EP_CHARSPACE:
1342 if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,
1343 pWordProps->fCharSpace)) {
1344 secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
1345 bSet = TRUE;
1346 }
1347 break;
1348 case EP_HORZSCALE:
1349 if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
1350 secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
1351 bSet = TRUE;
1352 }
1353 break;
1354 case EP_UNDERLINE:
1355 if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
1356 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
1357 0) {
1358 secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
1359 bSet = TRUE;
1360 }
1361 } else {
1362 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
1363 0) {
1364 secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
1365 bSet = TRUE;
1366 }
1367 }
1368 break;
1369 case EP_CROSSOUT:
1370 if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
1371 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
1372 0) {
1373 secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
1374 bSet = TRUE;
1375 }
1376 } else {
1377 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
1378 0) {
1379 secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
1380 bSet = TRUE;
1381 }
1382 }
1383 break;
1384 case EP_BOLD:
1385 if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
1386 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
1387 secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
1388 bSet = TRUE;
1389 }
1390 } else {
1391 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
1392 secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
1393 bSet = TRUE;
1394 }
1395 }
1396 break;
1397 case EP_ITALIC:
1398 if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
1399 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) {
1400 secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
1401 bSet = TRUE;
1402 }
1403 } else {
1404 if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) {
1405 secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
1406 bSet = TRUE;
1407 }
1408 }
1409 break;
1410 default:
1411 break;
1412 }
1413 }
1414 }
1415 }
1416
1417 if (bSet) {
1418 pIterator->SetSection(secinfo);
1419
1420 if (bAddUndo && m_bEnableUndo) {
1421 AddEditUndoItem(new CFXEU_SetSecProps(
1422 this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps,
1423 secinfo.SecProps, secinfo.WordProps, wr));
1424 }
1425 }
1426
1427 pIterator->SetAt(oldplace);
1428
1429 return bSet;
1430 }
1431
1432 FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps,
1433 const CPVT_WordPlace& place,
1434 const CPVT_WordProps* pWordProps,
1435 const CPVT_WordRange& wr,
1436 FX_BOOL bAddUndo) {
1437 if (!m_pVT->IsValid() || !m_pVT->IsRichText())
1438 return FALSE;
1439
1440 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
1441 FX_BOOL bSet = FALSE;
1442 CPVT_Word wordinfo;
1443 CPVT_Word OldWordinfo;
1444
1445 CPVT_WordPlace oldplace = pIterator->GetAt();
1446
1447 if (pWordProps) {
1448 pIterator->SetAt(place);
1449 if (pIterator->GetWord(wordinfo)) {
1450 if (bAddUndo)
1451 OldWordinfo = wordinfo;
1452
1453 switch (eProps) {
1454 case EP_FONTINDEX:
1455 if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
1456 if (IPVT_FontMap* pFontMap = GetFontMap()) {
1457 wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(
1458 wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex);
1459 }
1460 bSet = TRUE;
1461 }
1462 break;
1463 case EP_FONTSIZE:
1464 if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,
1465 pWordProps->fFontSize)) {
1466 wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
1467 bSet = TRUE;
1468 }
1469 break;
1470 case EP_WORDCOLOR:
1471 if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
1472 wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
1473 bSet = TRUE;
1474 }
1475 break;
1476 case EP_SCRIPTTYPE:
1477 if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) {
1478 wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
1479 bSet = TRUE;
1480 }
1481 break;
1482 case EP_CHARSPACE:
1483 if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,
1484 pWordProps->fCharSpace)) {
1485 wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
1486 bSet = TRUE;
1487 }
1488 break;
1489 case EP_HORZSCALE:
1490 if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
1491 wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
1492 bSet = TRUE;
1493 }
1494 break;
1495 case EP_UNDERLINE:
1496 if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
1497 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
1498 0) {
1499 wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
1500 bSet = TRUE;
1501 }
1502 } else {
1503 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
1504 0) {
1505 wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
1506 bSet = TRUE;
1507 }
1508 }
1509 break;
1510 case EP_CROSSOUT:
1511 if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
1512 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0) {
1513 wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
1514 bSet = TRUE;
1515 }
1516 } else {
1517 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0) {
1518 wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
1519 bSet = TRUE;
1520 }
1521 }
1522 break;
1523 case EP_BOLD:
1524 if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
1525 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
1526 wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
1527 bSet = TRUE;
1528 }
1529 } else {
1530 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
1531 wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
1532 bSet = TRUE;
1533 }
1534 }
1535 break;
1536 case EP_ITALIC:
1537 if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
1538 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) {
1539 wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
1540 bSet = TRUE;
1541 }
1542 } else {
1543 if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) {
1544 wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
1545 bSet = TRUE;
1546 }
1547 }
1548 break;
1549 default:
1550 break;
1551 }
1552 }
1553 }
1554
1555 if (bSet) {
1556 pIterator->SetWord(wordinfo);
1557
1558 if (bAddUndo && m_bEnableUndo) {
1559 AddEditUndoItem(new CFXEU_SetWordProps(
1560 this, place, eProps, OldWordinfo.WordProps, wordinfo.WordProps, wr));
1561 }
1562 }
1563
1564 pIterator->SetAt(oldplace);
1565 return bSet;
1566 }
1567
1568 void CFX_Edit::SetText(const FX_WCHAR* text, 967 void CFX_Edit::SetText(const FX_WCHAR* text,
1569 int32_t charset, 968 int32_t charset,
1570 const CPVT_SecProps* pSecProps, 969 const CPVT_SecProps* pSecProps,
1571 const CPVT_WordProps* pWordProps) { 970 const CPVT_WordProps* pWordProps) {
1572 SetText(text, charset, pSecProps, pWordProps, TRUE, TRUE); 971 SetText(text, charset, pSecProps, pWordProps, TRUE, TRUE);
1573 } 972 }
1574 973
1575 FX_BOOL CFX_Edit::InsertWord(uint16_t word, 974 FX_BOOL CFX_Edit::InsertWord(uint16_t word,
1576 int32_t charset, 975 int32_t charset,
1577 const CPVT_WordProps* pWordProps) { 976 const CPVT_WordProps* pWordProps) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 if (m_pVT->IsValid()) { 1086 if (m_pVT->IsValid()) {
1688 m_pVT->UpdateWordPlace(m_wpCaret); 1087 m_pVT->UpdateWordPlace(m_wpCaret);
1689 m_pVT->RearrangePart(range); 1088 m_pVT->RearrangePart(range);
1690 m_pVT->UpdateWordPlace(m_wpCaret); 1089 m_pVT->UpdateWordPlace(m_wpCaret);
1691 SetScrollInfo(); 1090 SetScrollInfo();
1692 SetContentChanged(); 1091 SetContentChanged();
1693 } 1092 }
1694 } 1093 }
1695 1094
1696 void CFX_Edit::SetContentChanged() { 1095 void CFX_Edit::SetContentChanged() {
1697 if (m_bNotify && m_pNotify) { 1096 if (m_pNotify) {
1698 CFX_FloatRect rcContent = m_pVT->GetContentRect(); 1097 CFX_FloatRect rcContent = m_pVT->GetContentRect();
1699 if (rcContent.Width() != m_rcOldContent.Width() || 1098 if (rcContent.Width() != m_rcOldContent.Width() ||
1700 rcContent.Height() != m_rcOldContent.Height()) { 1099 rcContent.Height() != m_rcOldContent.Height()) {
1701 if (!m_bNotifyFlag) { 1100 if (!m_bNotifyFlag) {
1702 m_bNotifyFlag = TRUE; 1101 m_bNotifyFlag = TRUE;
1703 m_pNotify->IOnContentChange(rcContent); 1102 m_pNotify->IOnContentChange(rcContent);
1704 m_bNotifyFlag = FALSE; 1103 m_bNotifyFlag = FALSE;
1705 } 1104 }
1706 m_rcOldContent = rcContent; 1105 m_rcOldContent = rcContent;
1707 } 1106 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1790 CFX_FloatRect CFX_Edit::EditToVT(const CFX_FloatRect& rect) const { 1189 CFX_FloatRect CFX_Edit::EditToVT(const CFX_FloatRect& rect) const {
1791 CFX_FloatPoint ptLeftBottom = 1190 CFX_FloatPoint ptLeftBottom =
1792 EditToVT(CFX_FloatPoint(rect.left, rect.bottom)); 1191 EditToVT(CFX_FloatPoint(rect.left, rect.bottom));
1793 CFX_FloatPoint ptRightTop = EditToVT(CFX_FloatPoint(rect.right, rect.top)); 1192 CFX_FloatPoint ptRightTop = EditToVT(CFX_FloatPoint(rect.right, rect.top));
1794 1193
1795 return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, 1194 return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x,
1796 ptRightTop.y); 1195 ptRightTop.y);
1797 } 1196 }
1798 1197
1799 void CFX_Edit::SetScrollInfo() { 1198 void CFX_Edit::SetScrollInfo() {
1800 if (m_bNotify && m_pNotify) { 1199 if (m_pNotify) {
1801 CFX_FloatRect rcPlate = m_pVT->GetPlateRect(); 1200 CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
1802 CFX_FloatRect rcContent = m_pVT->GetContentRect(); 1201 CFX_FloatRect rcContent = m_pVT->GetContentRect();
1803 1202
1804 if (!m_bNotifyFlag) { 1203 if (!m_bNotifyFlag) {
1805 m_bNotifyFlag = TRUE; 1204 m_bNotifyFlag = TRUE;
1806 m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right, rcContent.left, 1205 m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right, rcContent.left,
1807 rcContent.right, rcPlate.Width() / 3, 1206 rcContent.right, rcPlate.Width() / 3,
1808 rcPlate.Width()); 1207 rcPlate.Width());
1809 1208
1810 m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top, 1209 m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
1811 rcContent.bottom, rcContent.top, 1210 rcContent.bottom, rcContent.top,
1812 rcPlate.Height() / 3, rcPlate.Height()); 1211 rcPlate.Height() / 3, rcPlate.Height());
1813 m_bNotifyFlag = FALSE; 1212 m_bNotifyFlag = FALSE;
1814 } 1213 }
1815 } 1214 }
1816 } 1215 }
1817 1216
1818 void CFX_Edit::SetScrollPosX(FX_FLOAT fx) { 1217 void CFX_Edit::SetScrollPosX(FX_FLOAT fx) {
1819 if (!m_bEnableScroll) 1218 if (!m_bEnableScroll)
1820 return; 1219 return;
1821 1220
1822 if (m_pVT->IsValid()) { 1221 if (m_pVT->IsValid()) {
1823 if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x, fx)) { 1222 if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x, fx)) {
1824 m_ptScrollPos.x = fx; 1223 m_ptScrollPos.x = fx;
1825 Refresh(RP_NOANALYSE); 1224 Refresh(RP_NOANALYSE);
1826 1225
1827 if (m_bNotify && m_pNotify) { 1226 if (m_pNotify) {
1828 if (!m_bNotifyFlag) { 1227 if (!m_bNotifyFlag) {
1829 m_bNotifyFlag = TRUE; 1228 m_bNotifyFlag = TRUE;
1830 m_pNotify->IOnSetScrollPosX(fx); 1229 m_pNotify->IOnSetScrollPosX(fx);
1831 m_bNotifyFlag = FALSE; 1230 m_bNotifyFlag = FALSE;
1832 } 1231 }
1833 } 1232 }
1834 } 1233 }
1835 } 1234 }
1836 } 1235 }
1837 1236
1838 void CFX_Edit::SetScrollPosY(FX_FLOAT fy) { 1237 void CFX_Edit::SetScrollPosY(FX_FLOAT fy) {
1839 if (!m_bEnableScroll) 1238 if (!m_bEnableScroll)
1840 return; 1239 return;
1841 1240
1842 if (m_pVT->IsValid()) { 1241 if (m_pVT->IsValid()) {
1843 if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) { 1242 if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) {
1844 m_ptScrollPos.y = fy; 1243 m_ptScrollPos.y = fy;
1845 Refresh(RP_NOANALYSE); 1244 Refresh(RP_NOANALYSE);
1846 1245
1847 if (m_bNotify && m_pNotify) { 1246 if (m_pNotify) {
1848 if (!m_bNotifyFlag) { 1247 if (!m_bNotifyFlag) {
1849 m_bNotifyFlag = TRUE; 1248 m_bNotifyFlag = TRUE;
1850 m_pNotify->IOnSetScrollPosY(fy); 1249 m_pNotify->IOnSetScrollPosY(fy);
1851 m_bNotifyFlag = FALSE; 1250 m_bNotifyFlag = FALSE;
1852 } 1251 }
1853 } 1252 }
1854 } 1253 }
1855 } 1254 }
1856 } 1255 }
1857 1256
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan, 1351 void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan,
1953 const CPVT_WordRange* pRange1, 1352 const CPVT_WordRange* pRange1,
1954 const CPVT_WordRange* pRange2) { 1353 const CPVT_WordRange* pRange2) {
1955 if (m_bEnableRefresh && m_pVT->IsValid()) { 1354 if (m_bEnableRefresh && m_pVT->IsValid()) {
1956 m_Refresh.BeginRefresh(); 1355 m_Refresh.BeginRefresh();
1957 RefreshPushLineRects(GetVisibleWordRange()); 1356 RefreshPushLineRects(GetVisibleWordRange());
1958 1357
1959 m_Refresh.NoAnalyse(); 1358 m_Refresh.NoAnalyse();
1960 m_ptRefreshScrollPos = m_ptScrollPos; 1359 m_ptRefreshScrollPos = m_ptScrollPos;
1961 1360
1962 if (m_bNotify && m_pNotify) { 1361 if (m_pNotify) {
1963 if (!m_bNotifyFlag) { 1362 if (!m_bNotifyFlag) {
1964 m_bNotifyFlag = TRUE; 1363 m_bNotifyFlag = TRUE;
1965 if (const CFX_Edit_RectArray* pRects = m_Refresh.GetRefreshRects()) { 1364 if (const CFX_Edit_RectArray* pRects = m_Refresh.GetRefreshRects()) {
1966 for (int32_t i = 0, sz = pRects->GetSize(); i < sz; i++) 1365 for (int32_t i = 0, sz = pRects->GetSize(); i < sz; i++)
1967 m_pNotify->IOnInvalidateRect(pRects->GetAt(i)); 1366 m_pNotify->IOnInvalidateRect(pRects->GetAt(i));
1968 } 1367 }
1969 m_bNotifyFlag = FALSE; 1368 m_bNotifyFlag = FALSE;
1970 } 1369 }
1971 } 1370 }
1972 1371
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
2066 pIterator->GetWord(wordinfo); 1465 pIterator->GetWord(wordinfo);
2067 pIterator->GetLine(lineinfo); 1466 pIterator->GetLine(lineinfo);
2068 1467
2069 if (place.LineCmp(wrTemp.BeginPos) == 0 || 1468 if (place.LineCmp(wrTemp.BeginPos) == 0 ||
2070 place.LineCmp(wrTemp.EndPos) == 0) { 1469 place.LineCmp(wrTemp.EndPos) == 0) {
2071 CFX_FloatRect rcWord(wordinfo.ptWord.x, 1470 CFX_FloatRect rcWord(wordinfo.ptWord.x,
2072 lineinfo.ptLine.y + lineinfo.fLineDescent, 1471 lineinfo.ptLine.y + lineinfo.fLineDescent,
2073 wordinfo.ptWord.x + wordinfo.fWidth, 1472 wordinfo.ptWord.x + wordinfo.fWidth,
2074 lineinfo.ptLine.y + lineinfo.fLineAscent); 1473 lineinfo.ptLine.y + lineinfo.fLineAscent);
2075 1474
2076 if (m_bNotify && m_pNotify) { 1475 if (m_pNotify) {
2077 if (!m_bNotifyFlag) { 1476 if (!m_bNotifyFlag) {
2078 m_bNotifyFlag = TRUE; 1477 m_bNotifyFlag = TRUE;
2079 CFX_FloatRect rcRefresh = VTToEdit(rcWord); 1478 CFX_FloatRect rcRefresh = VTToEdit(rcWord);
2080 m_pNotify->IOnInvalidateRect(&rcRefresh); 1479 m_pNotify->IOnInvalidateRect(&rcRefresh);
2081 m_bNotifyFlag = FALSE; 1480 m_bNotifyFlag = FALSE;
2082 } 1481 }
2083 } 1482 }
2084 } else { 1483 } else {
2085 CFX_FloatRect rcLine(lineinfo.ptLine.x, 1484 CFX_FloatRect rcLine(lineinfo.ptLine.x,
2086 lineinfo.ptLine.y + lineinfo.fLineDescent, 1485 lineinfo.ptLine.y + lineinfo.fLineDescent,
2087 lineinfo.ptLine.x + lineinfo.fLineWidth, 1486 lineinfo.ptLine.x + lineinfo.fLineWidth,
2088 lineinfo.ptLine.y + lineinfo.fLineAscent); 1487 lineinfo.ptLine.y + lineinfo.fLineAscent);
2089 1488
2090 if (m_bNotify && m_pNotify) { 1489 if (m_pNotify) {
2091 if (!m_bNotifyFlag) { 1490 if (!m_bNotifyFlag) {
2092 m_bNotifyFlag = TRUE; 1491 m_bNotifyFlag = TRUE;
2093 CFX_FloatRect rcRefresh = VTToEdit(rcLine); 1492 CFX_FloatRect rcRefresh = VTToEdit(rcLine);
2094 m_pNotify->IOnInvalidateRect(&rcRefresh); 1493 m_pNotify->IOnInvalidateRect(&rcRefresh);
2095 m_bNotifyFlag = FALSE; 1494 m_bNotifyFlag = FALSE;
2096 } 1495 }
2097 } 1496 }
2098 1497
2099 pIterator->NextLine(); 1498 pIterator->NextLine();
2100 } 1499 }
2101 } 1500 }
2102 } 1501 }
2103 1502
2104 void CFX_Edit::SetCaret(const CPVT_WordPlace& place) { 1503 void CFX_Edit::SetCaret(const CPVT_WordPlace& place) {
2105 m_wpOldCaret = m_wpCaret; 1504 m_wpOldCaret = m_wpCaret;
2106 m_wpCaret = place; 1505 m_wpCaret = place;
2107 } 1506 }
2108 1507
2109 void CFX_Edit::SetCaretInfo() { 1508 void CFX_Edit::SetCaretInfo() {
2110 if (m_bNotify && m_pNotify) { 1509 if (m_pNotify) {
2111 if (!m_bNotifyFlag) { 1510 if (!m_bNotifyFlag) {
2112 CFX_FloatPoint ptHead(0.0f, 0.0f), ptFoot(0.0f, 0.0f); 1511 CFX_FloatPoint ptHead(0.0f, 0.0f), ptFoot(0.0f, 0.0f);
2113 1512
2114 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator(); 1513 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
2115 pIterator->SetAt(m_wpCaret); 1514 pIterator->SetAt(m_wpCaret);
2116 CPVT_Word word; 1515 CPVT_Word word;
2117 CPVT_Line line; 1516 CPVT_Line line;
2118 if (pIterator->GetWord(word)) { 1517 if (pIterator->GetWord(word)) {
2119 ptHead.x = word.ptWord.x + word.fWidth; 1518 ptHead.x = word.ptWord.x + word.fWidth;
2120 ptHead.y = word.ptWord.y + word.fAscent; 1519 ptHead.y = word.ptWord.y + word.fAscent;
2121 ptFoot.x = word.ptWord.x + word.fWidth; 1520 ptFoot.x = word.ptWord.x + word.fWidth;
2122 ptFoot.y = word.ptWord.y + word.fDescent; 1521 ptFoot.y = word.ptWord.y + word.fDescent;
2123 } else if (pIterator->GetLine(line)) { 1522 } else if (pIterator->GetLine(line)) {
2124 ptHead.x = line.ptLine.x; 1523 ptHead.x = line.ptLine.x;
2125 ptHead.y = line.ptLine.y + line.fLineAscent; 1524 ptHead.y = line.ptLine.y + line.fLineAscent;
2126 ptFoot.x = line.ptLine.x; 1525 ptFoot.x = line.ptLine.x;
2127 ptFoot.y = line.ptLine.y + line.fLineDescent; 1526 ptFoot.y = line.ptLine.y + line.fLineDescent;
2128 } 1527 }
2129 1528
2130 m_bNotifyFlag = TRUE; 1529 m_bNotifyFlag = TRUE;
2131 m_pNotify->IOnSetCaret(!m_SelState.IsExist(), VTToEdit(ptHead), 1530 m_pNotify->IOnSetCaret(!m_SelState.IsExist(), VTToEdit(ptHead),
2132 VTToEdit(ptFoot), m_wpCaret); 1531 VTToEdit(ptFoot), m_wpCaret);
2133 m_bNotifyFlag = FALSE; 1532 m_bNotifyFlag = FALSE;
2134 } 1533 }
2135 } 1534 }
2136
2137 SetCaretChange();
2138 }
2139
2140 void CFX_Edit::SetCaretChange() {
2141 if (m_wpCaret == m_wpOldCaret)
2142 return;
2143
2144 if (!m_bNotify || !m_pVT->IsRichText() || !m_pNotify)
2145 return;
2146
2147 CPVT_SecProps SecProps;
2148 CPVT_WordProps WordProps;
2149
2150 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
2151 pIterator->SetAt(m_wpCaret);
2152 CPVT_Word word;
2153 CPVT_Section section;
2154
2155 if (pIterator->GetSection(section)) {
2156 SecProps = section.SecProps;
2157 WordProps = section.WordProps;
2158 }
2159
2160 if (pIterator->GetWord(word))
2161 WordProps = word.WordProps;
2162
2163 if (!m_bNotifyFlag) {
2164 m_bNotifyFlag = TRUE;
2165 m_pNotify->IOnCaretChange(SecProps, WordProps);
2166 m_bNotifyFlag = FALSE;
2167 }
2168 } 1535 }
2169 1536
2170 void CFX_Edit::SetCaret(int32_t nPos) { 1537 void CFX_Edit::SetCaret(int32_t nPos) {
2171 if (m_pVT->IsValid()) { 1538 if (m_pVT->IsValid()) {
2172 SelectNone(); 1539 SelectNone();
2173 SetCaret(m_pVT->WordIndexToWordPlace(nPos)); 1540 SetCaret(m_pVT->WordIndexToWordPlace(nPos));
2174 m_SelState.Set(m_wpCaret, m_wpCaret); 1541 m_SelState.Set(m_wpCaret, m_wpCaret);
2175 1542
2176 ScrollToCaret(); 1543 ScrollToCaret();
2177 SetCaretOrigin(); 1544 SetCaretOrigin();
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
2655 2022
2656 FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) { 2023 FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) {
2657 if (!m_pVT->IsValid()) 2024 if (!m_pVT->IsValid())
2658 return FALSE; 2025 return FALSE;
2659 2026
2660 if (!m_SelState.IsExist()) 2027 if (!m_SelState.IsExist())
2661 return FALSE; 2028 return FALSE;
2662 2029
2663 CPVT_WordRange range = m_SelState.ConvertToWordRange(); 2030 CPVT_WordRange range = m_SelState.ConvertToWordRange();
2664 2031
2665 if (bAddUndo && m_bEnableUndo) { 2032 if (bAddUndo && m_bEnableUndo)
2666 if (m_pVT->IsRichText()) { 2033 AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
2667 BeginGroupUndo(L"");
2668
2669 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
2670 pIterator->SetAt(range.EndPos);
2671
2672 CPVT_Word wordinfo;
2673 CPVT_Section secinfo;
2674 do {
2675 CPVT_WordPlace place = pIterator->GetAt();
2676 if (place.WordCmp(range.BeginPos) <= 0)
2677 break;
2678
2679 CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
2680
2681 if (oldplace.SecCmp(place) != 0) {
2682 if (pIterator->GetSection(secinfo)) {
2683 AddEditUndoItem(new CFXEU_ClearRich(
2684 this, oldplace, place, range, wordinfo.Word, wordinfo.nCharset,
2685 secinfo.SecProps, secinfo.WordProps));
2686 }
2687 } else {
2688 if (pIterator->GetWord(wordinfo)) {
2689 oldplace = m_pVT->AdjustLineHeader(oldplace, TRUE);
2690 place = m_pVT->AdjustLineHeader(place, TRUE);
2691
2692 AddEditUndoItem(new CFXEU_ClearRich(
2693 this, oldplace, place, range, wordinfo.Word, wordinfo.nCharset,
2694 secinfo.SecProps, wordinfo.WordProps));
2695 }
2696 }
2697 } while (pIterator->PrevWord());
2698 EndGroupUndo();
2699 } else {
2700 AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
2701 }
2702 }
2703 2034
2704 SelectNone(); 2035 SelectNone();
2705 SetCaret(m_pVT->DeleteWords(range)); 2036 SetCaret(m_pVT->DeleteWords(range));
2706 m_SelState.Set(m_wpCaret, m_wpCaret); 2037 m_SelState.Set(m_wpCaret, m_wpCaret);
2707 2038
2708 if (bPaint) { 2039 if (bPaint) {
2709 RearrangePart(range); 2040 RearrangePart(range);
2710 ScrollToCaret(); 2041 ScrollToCaret();
2711 2042
2712 CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos); 2043 CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
2891 } 2222 }
2892 2223
2893 void CFX_Edit::EnableRefresh(FX_BOOL bRefresh) { 2224 void CFX_Edit::EnableRefresh(FX_BOOL bRefresh) {
2894 m_bEnableRefresh = bRefresh; 2225 m_bEnableRefresh = bRefresh;
2895 } 2226 }
2896 2227
2897 void CFX_Edit::EnableUndo(FX_BOOL bUndo) { 2228 void CFX_Edit::EnableUndo(FX_BOOL bUndo) {
2898 m_bEnableUndo = bUndo; 2229 m_bEnableUndo = bUndo;
2899 } 2230 }
2900 2231
2901 void CFX_Edit::EnableNotify(FX_BOOL bNotify) {
2902 m_bNotify = bNotify;
2903 }
2904
2905 void CFX_Edit::EnableOprNotify(FX_BOOL bNotify) { 2232 void CFX_Edit::EnableOprNotify(FX_BOOL bNotify) {
2906 m_bOprNotify = bNotify; 2233 m_bOprNotify = bNotify;
2907 } 2234 }
2908 2235
2909 FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const { 2236 FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const {
2910 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator(); 2237 CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
2911 CPVT_WordPlace wpOld = pIterator->GetAt(); 2238 CPVT_WordPlace wpOld = pIterator->GetAt();
2912 2239
2913 pIterator->SetAt(place); 2240 pIterator->SetAt(place);
2914 CPVT_Line line; 2241 CPVT_Line line;
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
3114 int32_t CFX_Edit_RectArray::GetSize() const { 2441 int32_t CFX_Edit_RectArray::GetSize() const {
3115 return m_Rects.GetSize(); 2442 return m_Rects.GetSize();
3116 } 2443 }
3117 2444
3118 CFX_FloatRect* CFX_Edit_RectArray::GetAt(int32_t nIndex) const { 2445 CFX_FloatRect* CFX_Edit_RectArray::GetAt(int32_t nIndex) const {
3119 if (nIndex < 0 || nIndex >= m_Rects.GetSize()) 2446 if (nIndex < 0 || nIndex >= m_Rects.GetSize())
3120 return nullptr; 2447 return nullptr;
3121 2448
3122 return m_Rects.GetAt(nIndex); 2449 return m_Rects.GetAt(nIndex);
3123 } 2450 }
OLDNEW
« no previous file with comments | « core/fpdfdoc/include/cpdf_variabletext.h ('k') | fpdfsdk/fxedit/fxet_pageobjs.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698