| 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/fwl/cfwl_edit.h" | 7 #include "xfa/fwl/cfwl_edit.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 int32_t iError = | 366 int32_t iError = |
| 367 m_EdtEngine.Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength()); | 367 m_EdtEngine.Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength()); |
| 368 if (iError < 0) { | 368 if (iError < 0) { |
| 369 ProcessInsertError(iError); | 369 ProcessInsertError(iError); |
| 370 return false; | 370 return false; |
| 371 } | 371 } |
| 372 return true; | 372 return true; |
| 373 } | 373 } |
| 374 | 374 |
| 375 bool CFWL_Edit::Redo(const IFDE_TxtEdtDoRecord* pRecord) { | 375 bool CFWL_Edit::Redo(const IFDE_TxtEdtDoRecord* pRecord) { |
| 376 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo) | |
| 377 return true; | |
| 378 return m_EdtEngine.Redo(pRecord); | 376 return m_EdtEngine.Redo(pRecord); |
| 379 } | 377 } |
| 380 | 378 |
| 381 bool CFWL_Edit::Undo(const IFDE_TxtEdtDoRecord* pRecord) { | 379 bool CFWL_Edit::Undo(const IFDE_TxtEdtDoRecord* pRecord) { |
| 382 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo) | |
| 383 return true; | |
| 384 return m_EdtEngine.Undo(pRecord); | 380 return m_EdtEngine.Undo(pRecord); |
| 385 } | 381 } |
| 386 | 382 |
| 387 bool CFWL_Edit::Undo() { | 383 bool CFWL_Edit::Undo() { |
| 388 if (!CanUndo()) | 384 if (!CanUndo()) |
| 389 return false; | 385 return false; |
| 390 return Undo(m_DoRecords[m_iCurRecord--].get()); | 386 return Undo(m_DoRecords[m_iCurRecord--].get()); |
| 391 } | 387 } |
| 392 | 388 |
| 393 bool CFWL_Edit::Redo() { | 389 bool CFWL_Edit::Redo() { |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 CFX_RectF rtClip = m_rtEngine; | 530 CFX_RectF rtClip = m_rtEngine; |
| 535 FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; | 531 FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; |
| 536 FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; | 532 FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; |
| 537 CFX_Matrix mt; | 533 CFX_Matrix mt; |
| 538 mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); | 534 mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); |
| 539 if (pMatrix) { | 535 if (pMatrix) { |
| 540 pMatrix->TransformRect(rtClip); | 536 pMatrix->TransformRect(rtClip); |
| 541 mt.Concat(*pMatrix); | 537 mt.Concat(*pMatrix); |
| 542 } | 538 } |
| 543 | 539 |
| 544 bool bShowSel = (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoHideSel) || | 540 bool bShowSel = !!(m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); |
| 545 (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); | |
| 546 if (bShowSel) { | 541 if (bShowSel) { |
| 547 CFWL_Widget* pForm = m_pWidgetMgr->GetSystemFormWidget(this); | 542 CFWL_Widget* pForm = m_pWidgetMgr->GetSystemFormWidget(this); |
| 548 if (pForm) { | 543 if (pForm) { |
| 549 bShowSel = (pForm->GetStates() & FWL_WGTSTATE_Deactivated) != | 544 bShowSel = (pForm->GetStates() & FWL_WGTSTATE_Deactivated) != |
| 550 FWL_WGTSTATE_Deactivated; | 545 FWL_WGTSTATE_Deactivated; |
| 551 } | 546 } |
| 552 } | 547 } |
| 553 | 548 |
| 554 int32_t nSelCount = m_EdtEngine.CountSelRanges(); | 549 int32_t nSelCount = m_EdtEngine.CountSelRanges(); |
| 555 if (bShowSel && nSelCount > 0) { | 550 if (bShowSel && nSelCount > 0) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 UpdateEditLayout(); | 626 UpdateEditLayout(); |
| 632 if (m_nLimit > -1) | 627 if (m_nLimit > -1) |
| 633 m_EdtEngine.SetLimit(m_nLimit); | 628 m_EdtEngine.SetLimit(m_nLimit); |
| 634 } | 629 } |
| 635 | 630 |
| 636 void CFWL_Edit::UpdateEditParams() { | 631 void CFWL_Edit::UpdateEditParams() { |
| 637 FDE_TXTEDTPARAMS params; | 632 FDE_TXTEDTPARAMS params; |
| 638 params.nHorzScale = 100; | 633 params.nHorzScale = 100; |
| 639 params.fPlateWidth = m_rtEngine.width; | 634 params.fPlateWidth = m_rtEngine.width; |
| 640 params.fPlateHeight = m_rtEngine.height; | 635 params.fPlateHeight = m_rtEngine.height; |
| 641 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_RTLLayout) | |
| 642 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_RTL; | |
| 643 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalLayout) | |
| 644 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_DocVertical; | |
| 645 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalChars) | |
| 646 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CharVertial; | |
| 647 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReverseLine) | |
| 648 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LineReserve; | |
| 649 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ArabicShapes) | |
| 650 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ArabicShapes; | |
| 651 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ExpandTab) | |
| 652 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ExpandTab; | |
| 653 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) | 636 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) |
| 654 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CombText; | 637 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CombText; |
| 655 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_LastLineHeight) | 638 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_LastLineHeight) |
| 656 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LastLineHeight; | 639 params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LastLineHeight; |
| 657 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate) | 640 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate) |
| 658 params.dwMode |= FDE_TEXTEDITMODE_Validate; | 641 params.dwMode |= FDE_TEXTEDITMODE_Validate; |
| 659 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Password) | 642 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Password) |
| 660 params.dwMode |= FDE_TEXTEDITMODE_Password; | 643 params.dwMode |= FDE_TEXTEDITMODE_Password; |
| 661 | 644 |
| 662 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) { | 645 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 673 break; | 656 break; |
| 674 } | 657 } |
| 675 default: | 658 default: |
| 676 break; | 659 break; |
| 677 } | 660 } |
| 678 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) { | 661 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) { |
| 679 case FWL_STYLEEXT_EDT_Justified: { | 662 case FWL_STYLEEXT_EDT_Justified: { |
| 680 params.dwAlignment |= FDE_TEXTEDITALIGN_Justified; | 663 params.dwAlignment |= FDE_TEXTEDITALIGN_Justified; |
| 681 break; | 664 break; |
| 682 } | 665 } |
| 683 case FWL_STYLEEXT_EDT_Distributed: { | |
| 684 params.dwAlignment |= FDE_TEXTEDITALIGN_Distributed; | |
| 685 break; | |
| 686 } | |
| 687 default: { | 666 default: { |
| 688 params.dwAlignment |= FDE_TEXTEDITALIGN_Normal; | 667 params.dwAlignment |= FDE_TEXTEDITALIGN_Normal; |
| 689 break; | 668 break; |
| 690 } | 669 } |
| 691 } | 670 } |
| 692 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { | 671 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { |
| 693 params.dwMode |= FDE_TEXTEDITMODE_MultiLines; | 672 params.dwMode |= FDE_TEXTEDITMODE_MultiLines; |
| 694 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) == 0 && | 673 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) == 0 && |
| 695 (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { | 674 (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { |
| 696 params.dwMode |= | 675 params.dwMode |= |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1232 return true; | 1211 return true; |
| 1233 return false; | 1212 return false; |
| 1234 } | 1213 } |
| 1235 | 1214 |
| 1236 if (wsText.GetInteger() <= m_iMax) | 1215 if (wsText.GetInteger() <= m_iMax) |
| 1237 return true; | 1216 return true; |
| 1238 return false; | 1217 return false; |
| 1239 } | 1218 } |
| 1240 | 1219 |
| 1241 void CFWL_Edit::InitCaret() { | 1220 void CFWL_Edit::InitCaret() { |
| 1242 if (!m_pCaret) { | 1221 if (!m_pCaret) |
| 1243 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret)) { | 1222 return; |
| 1244 m_pCaret = pdfium::MakeUnique<CFWL_Caret>( | 1223 m_pCaret.reset(); |
| 1245 m_pOwnerApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), this); | |
| 1246 m_pCaret->SetParent(this); | |
| 1247 m_pCaret->SetStates(m_pProperties->m_dwStates); | |
| 1248 } | |
| 1249 } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret) == | |
| 1250 0) { | |
| 1251 m_pCaret.reset(); | |
| 1252 } | |
| 1253 } | 1224 } |
| 1254 | 1225 |
| 1255 void CFWL_Edit::ClearRecord() { | 1226 void CFWL_Edit::ClearRecord() { |
| 1256 m_iCurRecord = -1; | 1227 m_iCurRecord = -1; |
| 1257 m_DoRecords.clear(); | 1228 m_DoRecords.clear(); |
| 1258 } | 1229 } |
| 1259 | 1230 |
| 1260 void CFWL_Edit::ProcessInsertError(int32_t iError) { | 1231 void CFWL_Edit::ProcessInsertError(int32_t iError) { |
| 1261 if (iError != -2) | 1232 if (iError != -2) |
| 1262 return; | 1233 return; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1345 DeviceToEngine(pt); | 1316 DeviceToEngine(pt); |
| 1346 bool bBefore = true; | 1317 bool bBefore = true; |
| 1347 int32_t nIndex = pPage->GetCharIndex(pt, bBefore); | 1318 int32_t nIndex = pPage->GetCharIndex(pt, bBefore); |
| 1348 if (nIndex < 0) | 1319 if (nIndex < 0) |
| 1349 nIndex = 0; | 1320 nIndex = 0; |
| 1350 | 1321 |
| 1351 m_EdtEngine.SetCaretPos(nIndex, bBefore); | 1322 m_EdtEngine.SetCaretPos(nIndex, bBefore); |
| 1352 } | 1323 } |
| 1353 | 1324 |
| 1354 void CFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) { | 1325 void CFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) { |
| 1355 uint32_t dwStyleEx = GetStylesEx(); | 1326 bool bRepaint = false; |
| 1356 bool bRepaint = !!(dwStyleEx & FWL_STYLEEXT_EDT_InnerCaret); | |
| 1357 if (bSet) { | 1327 if (bSet) { |
| 1358 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; | 1328 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; |
| 1359 | 1329 |
| 1360 UpdateVAlignment(); | 1330 UpdateVAlignment(); |
| 1361 UpdateOffset(); | 1331 UpdateOffset(); |
| 1362 UpdateCaret(); | 1332 UpdateCaret(); |
| 1363 } else if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { | 1333 } else if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { |
| 1364 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; | 1334 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; |
| 1365 HideCaret(nullptr); | 1335 HideCaret(nullptr); |
| 1366 if ((dwStyleEx & FWL_STYLEEXT_EDT_NoHideSel) == 0) { | 1336 |
| 1367 int32_t nSel = CountSelRanges(); | 1337 int32_t nSel = CountSelRanges(); |
| 1368 if (nSel > 0) { | 1338 if (nSel > 0) { |
| 1369 ClearSelections(); | 1339 ClearSelections(); |
| 1370 bRepaint = true; | 1340 bRepaint = true; |
| 1371 } | |
| 1372 m_EdtEngine.SetCaretPos(0, true); | |
| 1373 UpdateOffset(); | |
| 1374 } | 1341 } |
| 1342 m_EdtEngine.SetCaretPos(0, true); |
| 1343 UpdateOffset(); |
| 1344 |
| 1375 ClearRecord(); | 1345 ClearRecord(); |
| 1376 } | 1346 } |
| 1377 | 1347 |
| 1378 LayoutScrollBar(); | 1348 LayoutScrollBar(); |
| 1379 if (!bRepaint) | 1349 if (!bRepaint) |
| 1380 return; | 1350 return; |
| 1381 | 1351 |
| 1382 CFX_RectF rtInvalidate; | 1352 CFX_RectF rtInvalidate; |
| 1383 rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, | 1353 rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, |
| 1384 m_pProperties->m_rtWidget.height); | 1354 m_pProperties->m_rtWidget.height); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1626 pScrollBar->SetTrackPos(fPos); | 1596 pScrollBar->SetTrackPos(fPos); |
| 1627 UpdateOffset(pScrollBar, fPos - iCurPos); | 1597 UpdateOffset(pScrollBar, fPos - iCurPos); |
| 1628 UpdateCaret(); | 1598 UpdateCaret(); |
| 1629 | 1599 |
| 1630 CFX_RectF rect = GetWidgetRect(); | 1600 CFX_RectF rect = GetWidgetRect(); |
| 1631 CFX_RectF rtInvalidate; | 1601 CFX_RectF rtInvalidate; |
| 1632 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); | 1602 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); |
| 1633 RepaintRect(rtInvalidate); | 1603 RepaintRect(rtInvalidate); |
| 1634 return true; | 1604 return true; |
| 1635 } | 1605 } |
| OLD | NEW |