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

Side by Side Diff: fpdfsdk/src/fpdfformfill.cpp

Issue 1701883004: Banish CFX_ByteStringArray and CFX_WideStringArray to the XFA side. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Nits Created 4 years, 10 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 | « fpdfsdk/include/pdfwindow/PWL_Wnd.h ('k') | fpdfsdk/src/fsdk_mgr.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 "public/fpdf_formfill.h" 7 #include "public/fpdf_formfill.h"
8 8
9 #include <memory> 9 #include <memory>
10 #include <vector>
10 11
11 #include "fpdfsdk/include/fsdk_define.h" 12 #include "fpdfsdk/include/fsdk_define.h"
12 #include "fpdfsdk/include/fsdk_mgr.h" 13 #include "fpdfsdk/include/fsdk_mgr.h"
13 #include "public/fpdfview.h" 14 #include "public/fpdfview.h"
15 #include "third_party/base/stl_util.h"
14 16
15 #ifdef PDF_ENABLE_XFA 17 #ifdef PDF_ENABLE_XFA
16 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h" 18 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
17 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h" 19 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
18 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h" 20 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
19 #endif // PDF_ENABLE_XFA 21 #endif // PDF_ENABLE_XFA
20 22
21 namespace { 23 namespace {
22 24
23 CPDFSDK_InterForm* FormHandleToInterForm(FPDF_FORMHANDLE hHandle) { 25 CPDFSDK_InterForm* FormHandleToInterForm(FPDF_FORMHANDLE hHandle) {
24 CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle); 26 CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
25 return pSDKDoc ? pSDKDoc->GetInterForm() : nullptr; 27 return pSDKDoc ? pSDKDoc->GetInterForm() : nullptr;
26 } 28 }
27 29
28 CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle, 30 CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle,
29 FPDF_PAGE page) { 31 FPDF_PAGE page) {
30 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page); 32 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
31 if (!pPage) 33 if (!pPage)
32 return nullptr; 34 return nullptr;
33 35
34 CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle); 36 CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
35 return pSDKDoc ? pSDKDoc->GetPageView(pPage, TRUE) : nullptr; 37 return pSDKDoc ? pSDKDoc->GetPageView(pPage, TRUE) : nullptr;
36 } 38 }
37 39
40 #ifdef PDF_ENABLE_XFA
41 std::vector<CFX_ByteString>* FromFPDFStringHandle(FPDF_STRINGHANDLE handle) {
42 return reinterpret_cast<std::vector<CFX_ByteString>*>(handle);
43 }
44
45 FPDF_STRINGHANDLE ToFPDFStringHandle(std::vector<CFX_ByteString>* strings) {
46 return reinterpret_cast<FPDF_STRINGHANDLE>(strings);
47 }
48 #endif // PDF_ENABLE_XFA
49
38 } // namespace 50 } // namespace
39 51
40 DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle, 52 DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
41 FPDF_PAGE page, 53 FPDF_PAGE page,
42 double page_x, 54 double page_x,
43 double page_y) { 55 double page_y) {
44 if (!hHandle) 56 if (!hHandle)
45 return -1; 57 return -1;
46 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); 58 CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
47 #ifdef PDF_ENABLE_XFA 59 #ifdef PDF_ENABLE_XFA
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 472
461 int real_size = len < *size ? len : *size; 473 int real_size = len < *size ? len : *size;
462 if (real_size > 0) { 474 if (real_size > 0) {
463 FXSYS_memcpy((void*)wsText, 475 FXSYS_memcpy((void*)wsText,
464 bsCpText.GetBuffer(real_size * sizeof(unsigned short)), 476 bsCpText.GetBuffer(real_size * sizeof(unsigned short)),
465 real_size * sizeof(unsigned short)); 477 real_size * sizeof(unsigned short));
466 bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short)); 478 bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short));
467 } 479 }
468 *size = real_size; 480 *size = real_size;
469 } 481 }
482
470 DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document, 483 DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document,
471 FPDF_WIDGET hWidget, 484 FPDF_WIDGET hWidget,
472 FPDF_WIDESTRING wsText, 485 FPDF_WIDESTRING wsText,
473 FPDF_DWORD* size) { 486 FPDF_DWORD* size) {
474 if (NULL == hWidget || NULL == document) 487 if (NULL == hWidget || NULL == document)
475 return; 488 return;
476 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; 489 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
477 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && 490 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
478 pDocument->GetDocType() != XFA_DOCTYPE_Static) 491 pDocument->GetDocType() != XFA_DOCTYPE_Static)
479 return; 492 return;
(...skipping 15 matching lines...) Expand all
495 508
496 int real_size = len < *size ? len : *size; 509 int real_size = len < *size ? len : *size;
497 if (real_size > 0) { 510 if (real_size > 0) {
498 FXSYS_memcpy((void*)wsText, 511 FXSYS_memcpy((void*)wsText,
499 bsCpText.GetBuffer(real_size * sizeof(unsigned short)), 512 bsCpText.GetBuffer(real_size * sizeof(unsigned short)),
500 real_size * sizeof(unsigned short)); 513 real_size * sizeof(unsigned short));
501 bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short)); 514 bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short));
502 } 515 }
503 *size = real_size; 516 *size = real_size;
504 } 517 }
518
505 DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document, 519 DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document,
506 FPDF_WIDGET hWidget, 520 FPDF_WIDGET hWidget,
507 FPDF_WIDESTRING wsText, 521 FPDF_WIDESTRING wsText,
508 FPDF_DWORD size) { 522 FPDF_DWORD size) {
509 if (NULL == hWidget || NULL == document) 523 if (NULL == hWidget || NULL == document)
510 return; 524 return;
511 525
512 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; 526 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
513 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && 527 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
514 pDocument->GetDocType() != XFA_DOCTYPE_Static) 528 pDocument->GetDocType() != XFA_DOCTYPE_Static)
515 return; 529 return;
516 530
517 IXFA_MenuHandler* pXFAMenuHander = 531 IXFA_MenuHandler* pXFAMenuHander =
518 CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); 532 CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
519 if (pXFAMenuHander == NULL) 533 if (pXFAMenuHander == NULL)
520 return; 534 return;
521 535
522 CFX_WideString wstr = CFX_WideString::FromUTF16LE(wsText, size); 536 CFX_WideString wstr = CFX_WideString::FromUTF16LE(wsText, size);
523 pXFAMenuHander->Paste((IXFA_Widget*)hWidget, wstr); 537 pXFAMenuHander->Paste((IXFA_Widget*)hWidget, wstr);
524 } 538 }
539
525 DLLEXPORT void STDCALL 540 DLLEXPORT void STDCALL
526 FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document, 541 FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document,
527 FPDF_WIDGET hWidget, 542 FPDF_WIDGET hWidget,
528 float x, 543 float x,
529 float y, 544 float y,
530 FPDF_BYTESTRING bsText) { 545 FPDF_BYTESTRING bsText) {
531 if (NULL == hWidget || NULL == document) 546 if (NULL == hWidget || NULL == document)
532 return; 547 return;
533 548
534 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; 549 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
535 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && 550 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
536 pDocument->GetDocType() != XFA_DOCTYPE_Static) 551 pDocument->GetDocType() != XFA_DOCTYPE_Static)
537 return; 552 return;
538 553
539 IXFA_MenuHandler* pXFAMenuHander = 554 IXFA_MenuHandler* pXFAMenuHander =
540 CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); 555 CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
541 if (pXFAMenuHander == NULL) 556 if (pXFAMenuHander == NULL)
542 return; 557 return;
543 558
544 CFX_PointF ptPopup; 559 CFX_PointF ptPopup;
545 ptPopup.x = x; 560 ptPopup.x = x;
546 ptPopup.y = y; 561 ptPopup.y = y;
547 CFX_ByteStringC bs(bsText); 562 CFX_ByteStringC bs(bsText);
548 pXFAMenuHander->ReplaceSpellCheckWord((IXFA_Widget*)hWidget, ptPopup, bs); 563 pXFAMenuHander->ReplaceSpellCheckWord((IXFA_Widget*)hWidget, ptPopup, bs);
549 } 564 }
565
550 DLLEXPORT void STDCALL 566 DLLEXPORT void STDCALL
551 FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document, 567 FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document,
552 FPDF_WIDGET hWidget, 568 FPDF_WIDGET hWidget,
553 float x, 569 float x,
554 float y, 570 float y,
555 FPDF_STRINGHANDLE* stringHandle) { 571 FPDF_STRINGHANDLE* stringHandle) {
556 if (NULL == hWidget || NULL == document) 572 if (!hWidget || !document)
557 return; 573 return;
558 574
559 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; 575 CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
560 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && 576 if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
561 pDocument->GetDocType() != XFA_DOCTYPE_Static) 577 pDocument->GetDocType() != XFA_DOCTYPE_Static)
562 return; 578 return;
563 579
564 IXFA_MenuHandler* pXFAMenuHander = 580 IXFA_MenuHandler* pXFAMenuHander =
565 CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); 581 CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
566 if (pXFAMenuHander == NULL) 582 if (!pXFAMenuHander)
567 return; 583 return;
568 584
569 CFX_ByteStringArray* sSuggestWords = new CFX_ByteStringArray; 585 std::vector<CFX_ByteString>* sSuggestWords = new std::vector<CFX_ByteString>;
570 CFX_PointF ptPopup; 586 CFX_PointF ptPopup;
571 ptPopup.x = x; 587 ptPopup.x = x;
572 ptPopup.y = y; 588 ptPopup.y = y;
573 pXFAMenuHander->GetSuggestWords((IXFA_Widget*)hWidget, ptPopup, 589 pXFAMenuHander->GetSuggestWords(reinterpret_cast<IXFA_Widget*>(hWidget),
574 *sSuggestWords); 590 ptPopup, *sSuggestWords);
575 *stringHandle = (FPDF_STRINGHANDLE)sSuggestWords; 591 *stringHandle = ToFPDFStringHandle(sSuggestWords);
576 } 592 }
577 DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE stringHandle) { 593
578 if (stringHandle == NULL) 594 DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE sHandle) {
579 return -1; 595 std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
580 CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle; 596 return sSuggestWords ? pdfium::CollectionSize<int>(*sSuggestWords) : -1;
581 return sSuggestWords->GetSize();
582 } 597 }
598
583 DLLEXPORT FPDF_BOOL STDCALL 599 DLLEXPORT FPDF_BOOL STDCALL
584 FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE stringHandle, 600 FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE sHandle,
585 int index, 601 int index,
586 FPDF_BYTESTRING bsText, 602 FPDF_BYTESTRING bsText,
587 FPDF_DWORD* size) { 603 FPDF_DWORD* size) {
588 if (stringHandle == NULL || size == NULL) 604 if (!sHandle || !size)
589 return FALSE; 605 return FALSE;
590 int count = FPDF_StringHandleCounts(stringHandle); 606
607 int count = FPDF_StringHandleCounts(sHandle);
591 if (index < 0 || index >= count) 608 if (index < 0 || index >= count)
592 return FALSE; 609 return FALSE;
593 610
594 CFX_ByteStringArray sSuggestWords = *(CFX_ByteStringArray*)stringHandle; 611 std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
595 int len = sSuggestWords[index].GetLength(); 612 int len = (*sSuggestWords)[index].GetLength();
596 613 if (!bsText) {
597 if (bsText == NULL) {
598 *size = len; 614 *size = len;
599 return TRUE; 615 return TRUE;
600 } 616 }
601 617
602 int real_size = len < *size ? len : *size; 618 int real_size = len < *size ? len : *size;
603 if (real_size > 0) 619 if (real_size > 0)
604 FXSYS_memcpy((void*)bsText, (const FX_CHAR*)(sSuggestWords[index]), 620 FXSYS_memcpy((void*)bsText, (const FX_CHAR*)(*sSuggestWords)[index],
605 real_size); 621 real_size);
606 *size = real_size; 622 *size = real_size;
607
608 return TRUE; 623 return TRUE;
609 } 624 }
625
610 DLLEXPORT void STDCALL 626 DLLEXPORT void STDCALL
611 FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle) { 627 FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle) {
612 if (stringHandle == NULL) 628 delete FromFPDFStringHandle(stringHandle);
613 return;
614 CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle;
615 delete sSuggestWords;
616 } 629 }
617 630
618 DLLEXPORT FPDF_BOOL STDCALL 631 DLLEXPORT FPDF_BOOL STDCALL
619 FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle, 632 FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle,
620 FPDF_BYTESTRING bsText, 633 FPDF_BYTESTRING bsText,
621 FPDF_DWORD size) { 634 FPDF_DWORD size) {
622 if (stringHandle == NULL || bsText == NULL || size <= 0) 635 if (!stringHandle || !bsText || size == 0)
623 return FALSE; 636 return FALSE;
624 637
625 CFX_ByteStringArray* stringArr = (CFX_ByteStringArray*)stringHandle; 638 FromFPDFStringHandle(stringHandle)->push_back(CFX_ByteString(bsText, size));
626 CFX_ByteString bsStr(bsText, size);
627
628 stringArr->Add(bsStr);
629 return TRUE; 639 return TRUE;
630 } 640 }
631 #endif // PDF_ENABLE_XFA 641 #endif // PDF_ENABLE_XFA
632 642
633 DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, 643 DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
634 int fieldType, 644 int fieldType,
635 unsigned long color) { 645 unsigned long color) {
636 if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle)) 646 if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
637 pInterForm->SetHighlightColor(color, fieldType); 647 pInterForm->SetHighlightColor(color, fieldType);
638 } 648 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc); 739 pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc);
730 } 740 }
731 } else { 741 } else {
732 if (aa.ActionExist(CPDF_AAction::ClosePage)) { 742 if (aa.ActionExist(CPDF_AAction::ClosePage)) {
733 CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage); 743 CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage);
734 pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc); 744 pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc);
735 } 745 }
736 } 746 }
737 } 747 }
738 } 748 }
OLDNEW
« no previous file with comments | « fpdfsdk/include/pdfwindow/PWL_Wnd.h ('k') | fpdfsdk/src/fsdk_mgr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698