summaryrefslogtreecommitdiff
path: root/fpdfsdk/src
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2016-03-14 13:51:24 -0400
committerDan Sinclair <dsinclair@chromium.org>2016-03-14 13:51:24 -0400
commitf766ad219f66543654520f6a1955836f519e26d1 (patch)
tree2edf8bc93b89503a3669f7add5b6c2a407b8a78c /fpdfsdk/src
parent54b0abed08048008498471e39b7c72b034474090 (diff)
downloadpdfium-f766ad219f66543654520f6a1955836f519e26d1.tar.xz
Move fpdfsdk/src up to fpdfsdk/.
This CL moves the files in fpdfsdk/src/ up one level to fpdfsdk/ and fixes up the include paths, include guards and build files. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1799773002 .
Diffstat (limited to 'fpdfsdk/src')
-rw-r--r--fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp259
-rw-r--r--fpdfsdk/src/formfiller/FFL_CheckBox.cpp116
-rw-r--r--fpdfsdk/src/formfiller/FFL_ComboBox.cpp302
-rw-r--r--fpdfsdk/src/formfiller/FFL_FormFiller.cpp727
-rw-r--r--fpdfsdk/src/formfiller/FFL_IFormFiller.cpp1015
-rw-r--r--fpdfsdk/src/formfiller/FFL_ListBox.cpp223
-rw-r--r--fpdfsdk/src/formfiller/FFL_PushButton.cpp38
-rw-r--r--fpdfsdk/src/formfiller/FFL_RadioButton.cpp121
-rw-r--r--fpdfsdk/src/formfiller/FFL_TextField.cpp292
-rw-r--r--fpdfsdk/src/fpdf_dataavail.cpp172
-rw-r--r--fpdfsdk/src/fpdf_dataavail_embeddertest.cpp22
-rw-r--r--fpdfsdk/src/fpdf_ext.cpp221
-rw-r--r--fpdfsdk/src/fpdf_flatten.cpp518
-rw-r--r--fpdfsdk/src/fpdf_progressive.cpp100
-rw-r--r--fpdfsdk/src/fpdf_searchex.cpp16
-rw-r--r--fpdfsdk/src/fpdf_sysfontinfo.cpp189
-rw-r--r--fpdfsdk/src/fpdf_transformpage.cpp327
-rw-r--r--fpdfsdk/src/fpdfdoc.cpp369
-rw-r--r--fpdfsdk/src/fpdfdoc_embeddertest.cpp140
-rw-r--r--fpdfsdk/src/fpdfdoc_unittest.cpp226
-rw-r--r--fpdfsdk/src/fpdfedit_embeddertest.cpp60
-rw-r--r--fpdfsdk/src/fpdfeditimg.cpp83
-rw-r--r--fpdfsdk/src/fpdfeditpage.cpp316
-rw-r--r--fpdfsdk/src/fpdfext_embeddertest.cpp24
-rw-r--r--fpdfsdk/src/fpdfformfill.cpp732
-rw-r--r--fpdfsdk/src/fpdfformfill_embeddertest.cpp87
-rw-r--r--fpdfsdk/src/fpdfppo.cpp415
-rw-r--r--fpdfsdk/src/fpdfsave.cpp328
-rw-r--r--fpdfsdk/src/fpdfsave_embeddertest.cpp52
-rw-r--r--fpdfsdk/src/fpdftext.cpp299
-rw-r--r--fpdfsdk/src/fpdftext_embeddertest.cpp391
-rw-r--r--fpdfsdk/src/fpdfview.cpp1145
-rw-r--r--fpdfsdk/src/fpdfview_c_api_test.c243
-rw-r--r--fpdfsdk/src/fpdfview_c_api_test.h20
-rw-r--r--fpdfsdk/src/fpdfview_embeddertest.cpp246
-rw-r--r--fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp540
-rw-r--r--fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp1258
-rw-r--r--fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp248
-rw-r--r--fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp58
-rw-r--r--fpdfsdk/src/fsdk_actionhandler.cpp640
-rw-r--r--fpdfsdk/src/fsdk_annothandler.cpp1111
-rw-r--r--fpdfsdk/src/fsdk_baseannot.cpp968
-rw-r--r--fpdfsdk/src/fsdk_baseform.cpp2872
-rw-r--r--fpdfsdk/src/fsdk_baseform_embeddertest.cpp115
-rw-r--r--fpdfsdk/src/fsdk_mgr.cpp1201
-rw-r--r--fpdfsdk/src/fsdk_rendercontext.cpp47
-rw-r--r--fpdfsdk/src/fxedit/fxet_ap.cpp206
-rw-r--r--fpdfsdk/src/fxedit/fxet_edit.cpp3034
-rw-r--r--fpdfsdk/src/fxedit/fxet_list.cpp822
-rw-r--r--fpdfsdk/src/fxedit/fxet_module.cpp31
-rw-r--r--fpdfsdk/src/fxedit/fxet_pageobjs.cpp640
-rw-r--r--fpdfsdk/src/javascript/Consts.cpp206
-rw-r--r--fpdfsdk/src/javascript/Consts.h116
-rw-r--r--fpdfsdk/src/javascript/Document.cpp1633
-rw-r--r--fpdfsdk/src/javascript/Document.h365
-rw-r--r--fpdfsdk/src/javascript/Field.cpp3600
-rw-r--r--fpdfsdk/src/javascript/Field.h585
-rw-r--r--fpdfsdk/src/javascript/Icon.cpp56
-rw-r--r--fpdfsdk/src/javascript/Icon.h37
-rw-r--r--fpdfsdk/src/javascript/JS_Context.cpp284
-rw-r--r--fpdfsdk/src/javascript/JS_Context.h137
-rw-r--r--fpdfsdk/src/javascript/JS_Define.h493
-rw-r--r--fpdfsdk/src/javascript/JS_EventHandler.cpp659
-rw-r--r--fpdfsdk/src/javascript/JS_EventHandler.h220
-rw-r--r--fpdfsdk/src/javascript/JS_GlobalData.cpp490
-rw-r--r--fpdfsdk/src/javascript/JS_GlobalData.h106
-rw-r--r--fpdfsdk/src/javascript/JS_Object.cpp159
-rw-r--r--fpdfsdk/src/javascript/JS_Object.h116
-rw-r--r--fpdfsdk/src/javascript/JS_Runtime.cpp345
-rw-r--r--fpdfsdk/src/javascript/JS_Runtime.h91
-rw-r--r--fpdfsdk/src/javascript/JS_Runtime_Stub.cpp168
-rw-r--r--fpdfsdk/src/javascript/JS_Value.cpp911
-rw-r--r--fpdfsdk/src/javascript/JS_Value.h230
-rw-r--r--fpdfsdk/src/javascript/PublicMethods.cpp1916
-rw-r--r--fpdfsdk/src/javascript/PublicMethods.h175
-rw-r--r--fpdfsdk/src/javascript/app.cpp750
-rw-r--r--fpdfsdk/src/javascript/app.h211
-rw-r--r--fpdfsdk/src/javascript/color.cpp224
-rw-r--r--fpdfsdk/src/javascript/color.h87
-rw-r--r--fpdfsdk/src/javascript/console.cpp68
-rw-r--r--fpdfsdk/src/javascript/console.h51
-rw-r--r--fpdfsdk/src/javascript/event.cpp327
-rw-r--r--fpdfsdk/src/javascript/event.h76
-rw-r--r--fpdfsdk/src/javascript/global.cpp520
-rw-r--r--fpdfsdk/src/javascript/global.h92
-rw-r--r--fpdfsdk/src/javascript/public_methods_embeddertest.cpp168
-rw-r--r--fpdfsdk/src/javascript/report.cpp49
-rw-r--r--fpdfsdk/src/javascript/report.h41
-rw-r--r--fpdfsdk/src/javascript/resource.cpp64
-rw-r--r--fpdfsdk/src/javascript/resource.h39
-rw-r--r--fpdfsdk/src/javascript/util.cpp531
-rw-r--r--fpdfsdk/src/javascript/util.h67
-rw-r--r--fpdfsdk/src/jsapi/fxjs_v8.cpp812
-rw-r--r--fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp31
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Button.cpp41
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Caret.cpp160
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp651
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Edit.cpp1190
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp629
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_FontMap.cpp499
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Icon.cpp223
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_IconList.cpp501
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Label.cpp150
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ListBox.cpp533
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp204
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Note.cpp1512
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp1197
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Signature.cpp177
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp82
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Utils.cpp3681
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Wnd.cpp1041
111 files changed, 0 insertions, 53402 deletions
diff --git a/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp b/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp
deleted file mode 100644
index 35c2be6319..0000000000
--- a/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h"
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_simple_parser.h"
-#include "core/include/fpdfapi/fpdf_page.h"
-#include "fpdfsdk/include/fsdk_baseannot.h"
-
-CBA_FontMap::CBA_FontMap(CPDFSDK_Annot* pAnnot,
- IFX_SystemHandler* pSystemHandler)
- : CPWL_FontMap(pSystemHandler),
- m_pDocument(NULL),
- m_pAnnotDict(NULL),
- m_pDefaultFont(NULL),
- m_sAPType("N") {
- CPDF_Page* pPage = pAnnot->GetPDFPage();
-
- m_pDocument = pPage->m_pDocument;
- m_pAnnotDict = pAnnot->GetPDFAnnot()->GetAnnotDict();
- Initialize();
-}
-
-CBA_FontMap::~CBA_FontMap() {}
-
-void CBA_FontMap::Reset() {
- Empty();
- m_pDefaultFont = NULL;
- m_sDefaultFontName = "";
-}
-
-void CBA_FontMap::Initialize() {
- int32_t nCharset = DEFAULT_CHARSET;
-
- if (!m_pDefaultFont) {
- m_pDefaultFont = GetAnnotDefaultFont(m_sDefaultFontName);
- if (m_pDefaultFont) {
- if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont()) {
- nCharset = pSubstFont->m_Charset;
- } else {
- if (m_sDefaultFontName == "Wingdings" ||
- m_sDefaultFontName == "Wingdings2" ||
- m_sDefaultFontName == "Wingdings3" ||
- m_sDefaultFontName == "Webdings")
- nCharset = SYMBOL_CHARSET;
- else
- nCharset = ANSI_CHARSET;
- }
- AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset);
- AddFontToAnnotDict(m_pDefaultFont, m_sDefaultFontName);
- }
- }
-
- if (nCharset != ANSI_CHARSET)
- CPWL_FontMap::Initialize();
-}
-
-void CBA_FontMap::SetDefaultFont(CPDF_Font* pFont,
- const CFX_ByteString& sFontName) {
- ASSERT(pFont);
-
- if (m_pDefaultFont)
- return;
-
- m_pDefaultFont = pFont;
- m_sDefaultFontName = sFontName;
-
- int32_t nCharset = DEFAULT_CHARSET;
- if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont())
- nCharset = pSubstFont->m_Charset;
- AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset);
-}
-
-CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias,
- int32_t nCharset) {
- if (m_pAnnotDict->GetStringBy("Subtype") == "Widget") {
- CPDF_Document* pDocument = GetDocument();
- CPDF_Dictionary* pRootDict = pDocument->GetRoot();
- if (!pRootDict)
- return NULL;
-
- CPDF_Dictionary* pAcroFormDict = pRootDict->GetDictBy("AcroForm");
- if (!pAcroFormDict)
- return NULL;
-
- CPDF_Dictionary* pDRDict = pAcroFormDict->GetDictBy("DR");
- if (!pDRDict)
- return NULL;
-
- return FindResFontSameCharset(pDRDict, sFontAlias, nCharset);
- }
-
- return NULL;
-}
-
-CPDF_Document* CBA_FontMap::GetDocument() {
- return m_pDocument;
-}
-
-CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict,
- CFX_ByteString& sFontAlias,
- int32_t nCharset) {
- if (!pResDict)
- return NULL;
-
- CPDF_Dictionary* pFonts = pResDict->GetDictBy("Font");
- if (!pFonts)
- return NULL;
-
- CPDF_Document* pDocument = GetDocument();
- CPDF_Font* pFind = NULL;
- for (const auto& it : *pFonts) {
- const CFX_ByteString& csKey = it.first;
- CPDF_Object* pObj = it.second;
- if (!pObj)
- continue;
-
- CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect());
- if (!pElement)
- continue;
- if (pElement->GetStringBy("Type") != "Font")
- continue;
-
- CPDF_Font* pFont = pDocument->LoadFont(pElement);
- if (!pFont)
- continue;
- const CFX_SubstFont* pSubst = pFont->GetSubstFont();
- if (!pSubst)
- continue;
- if (pSubst->m_Charset == nCharset) {
- sFontAlias = csKey;
- pFind = pFont;
- }
- }
- return pFind;
-}
-
-void CBA_FontMap::AddedFont(CPDF_Font* pFont,
- const CFX_ByteString& sFontAlias) {
- AddFontToAnnotDict(pFont, sFontAlias);
-}
-
-void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont,
- const CFX_ByteString& sAlias) {
- if (!pFont)
- return;
-
- CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDictBy("AP");
-
- if (!pAPDict) {
- pAPDict = new CPDF_Dictionary;
- m_pAnnotDict->SetAt("AP", pAPDict);
- }
-
- // to avoid checkbox and radiobutton
- CPDF_Object* pObject = pAPDict->GetElement(m_sAPType);
- if (ToDictionary(pObject))
- return;
-
- CPDF_Stream* pStream = pAPDict->GetStreamBy(m_sAPType);
- if (!pStream) {
- pStream = new CPDF_Stream(NULL, 0, NULL);
- int32_t objnum = m_pDocument->AddIndirectObject(pStream);
- pAPDict->SetAtReference(m_sAPType, m_pDocument, objnum);
- }
-
- CPDF_Dictionary* pStreamDict = pStream->GetDict();
-
- if (!pStreamDict) {
- pStreamDict = new CPDF_Dictionary;
- pStream->InitStream(NULL, 0, pStreamDict);
- }
-
- if (pStreamDict) {
- CPDF_Dictionary* pStreamResList = pStreamDict->GetDictBy("Resources");
- if (!pStreamResList) {
- pStreamResList = new CPDF_Dictionary();
- pStreamDict->SetAt("Resources", pStreamResList);
- }
-
- if (pStreamResList) {
- CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictBy("Font");
- if (!pStreamResFontList) {
- pStreamResFontList = new CPDF_Dictionary;
- int32_t objnum = m_pDocument->AddIndirectObject(pStreamResFontList);
- pStreamResList->SetAtReference("Font", m_pDocument, objnum);
- }
- if (!pStreamResFontList->KeyExist(sAlias))
- pStreamResFontList->SetAtReference(sAlias, m_pDocument,
- pFont->GetFontDict());
- }
- }
-}
-
-CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) {
- CPDF_Dictionary* pAcroFormDict = NULL;
- const bool bWidget = (m_pAnnotDict->GetStringBy("Subtype") == "Widget");
- if (bWidget) {
- if (CPDF_Dictionary* pRootDict = m_pDocument->GetRoot())
- pAcroFormDict = pRootDict->GetDictBy("AcroForm");
- }
-
- CFX_ByteString sDA;
- CPDF_Object* pObj;
- if ((pObj = FPDF_GetFieldAttr(m_pAnnotDict, "DA")))
- sDA = pObj->GetString();
-
- if (bWidget) {
- if (sDA.IsEmpty()) {
- pObj = FPDF_GetFieldAttr(pAcroFormDict, "DA");
- sDA = pObj ? pObj->GetString() : CFX_ByteString();
- }
- }
-
- CPDF_Dictionary* pFontDict = NULL;
-
- if (!sDA.IsEmpty()) {
- CPDF_SimpleParser syntax(sDA);
- syntax.FindTagParamFromStart("Tf", 2);
- CFX_ByteString sFontName = syntax.GetWord();
- sAlias = PDF_NameDecode(sFontName).Mid(1);
-
- if (CPDF_Dictionary* pDRDict = m_pAnnotDict->GetDictBy("DR"))
- if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDictBy("Font"))
- pFontDict = pDRFontDict->GetDictBy(sAlias);
-
- if (!pFontDict)
- if (CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDictBy("AP"))
- if (CPDF_Dictionary* pNormalDict = pAPDict->GetDictBy("N"))
- if (CPDF_Dictionary* pNormalResDict =
- pNormalDict->GetDictBy("Resources"))
- if (CPDF_Dictionary* pResFontDict =
- pNormalResDict->GetDictBy("Font"))
- pFontDict = pResFontDict->GetDictBy(sAlias);
-
- if (bWidget) {
- if (!pFontDict) {
- if (pAcroFormDict) {
- if (CPDF_Dictionary* pDRDict = pAcroFormDict->GetDictBy("DR"))
- if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDictBy("Font"))
- pFontDict = pDRFontDict->GetDictBy(sAlias);
- }
- }
- }
- }
-
- return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr;
-}
-
-void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType) {
- m_sAPType = sAPType;
-
- Reset();
- Initialize();
-}
diff --git a/fpdfsdk/src/formfiller/FFL_CheckBox.cpp b/fpdfsdk/src/formfiller/FFL_CheckBox.cpp
deleted file mode 100644
index 485f86ba75..0000000000
--- a/fpdfsdk/src/formfiller/FFL_CheckBox.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_CheckBox.h"
-
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/pdfwindow/PWL_SpecialButton.h"
-#include "public/fpdf_fwlevent.h"
-
-CFFL_CheckBox::CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget)
- : CFFL_Button(pApp, pWidget) {}
-
-CFFL_CheckBox::~CFFL_CheckBox() {}
-
-CPWL_Wnd* CFFL_CheckBox::NewPDFWindow(const PWL_CREATEPARAM& cp,
- CPDFSDK_PageView* pPageView) {
- CPWL_CheckBox* pWnd = new CPWL_CheckBox();
- pWnd->Create(cp);
- pWnd->SetCheck(m_pWidget->IsChecked());
- return pWnd;
-}
-
-FX_BOOL CFFL_CheckBox::OnKeyDown(CPDFSDK_Annot* pAnnot,
- FX_UINT nKeyCode,
- FX_UINT nFlags) {
- switch (nKeyCode) {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- return TRUE;
- default:
- return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags);
- }
-}
-FX_BOOL CFFL_CheckBox::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- switch (nChar) {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space: {
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- ASSERT(pIFormFiller);
-
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- ASSERT(pPageView);
-
- FX_BOOL bReset = FALSE;
- FX_BOOL bExit = FALSE;
-
- pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit, nFlags);
-
- if (bReset)
- return TRUE;
- if (bExit)
- return TRUE;
-
- CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-
- if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE))
- pWnd->SetCheck(!pWnd->IsChecked());
-
- CommitData(pPageView, nFlags);
- return TRUE;
- }
- default:
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
- }
-}
-
-FX_BOOL CFFL_CheckBox::OnLButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point);
-
- if (IsValid()) {
- if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- pWnd->SetCheck(!pWidget->IsChecked());
- }
-
- if (!CommitData(pPageView, nFlags))
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CFFL_CheckBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
- CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE);
- return pWnd && pWnd->IsChecked() != m_pWidget->IsChecked();
-}
-
-void CFFL_CheckBox::SaveData(CPDFSDK_PageView* pPageView) {
- if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) {
- bool bNewChecked = pWnd->IsChecked();
-
- if (bNewChecked) {
- CPDF_FormField* pField = m_pWidget->GetFormField();
- for (int32_t i = 0, sz = pField->CountControls(); i < sz; i++) {
- if (CPDF_FormControl* pCtrl = pField->GetControl(i)) {
- if (pCtrl->IsChecked()) {
- break;
- }
- }
- }
- }
-
- m_pWidget->SetCheck(bNewChecked, false);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
-}
diff --git a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp b/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
deleted file mode 100644
index 5e88a5d133..0000000000
--- a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_ComboBox.h"
-
-#include "fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h"
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/formfiller/FFL_IFormFiller.h"
-#include "fpdfsdk/include/fsdk_common.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ComboBox.h"
-
-CFFL_ComboBox::CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot)
- : CFFL_FormFiller(pApp, pAnnot), m_pFontMap(NULL) {
- m_State.nIndex = 0;
- m_State.nStart = 0;
- m_State.nEnd = 0;
-}
-
-CFFL_ComboBox::~CFFL_ComboBox() {
- for (const auto& it : m_Maps)
- it.second->InvalidateFocusHandler(this);
- delete m_pFontMap;
-}
-
-PWL_CREATEPARAM CFFL_ComboBox::GetCreateParam() {
- PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
-
- int nFlags = m_pWidget->GetFieldFlags();
- if (nFlags & FIELDFLAG_EDIT) {
- cp.dwFlags |= PCBS_ALLOWCUSTOMTEXT;
- }
-
- if (!m_pFontMap)
- m_pFontMap = new CBA_FontMap(m_pWidget, GetSystemHandler());
- cp.pFontMap = m_pFontMap;
- cp.pFocusHandler = this;
-
- return cp;
-}
-
-CPWL_Wnd* CFFL_ComboBox::NewPDFWindow(const PWL_CREATEPARAM& cp,
- CPDFSDK_PageView* pPageView) {
- CPWL_ComboBox* pWnd = new CPWL_ComboBox();
- pWnd->AttachFFLData(this);
- pWnd->Create(cp);
-
- CFFL_IFormFiller* pFormFiller = m_pApp->GetIFormFiller();
- pWnd->SetFillerNotify(pFormFiller);
-
- int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
- CFX_WideString swText;
- if (nCurSel < 0)
- swText = m_pWidget->GetValue();
- else
- swText = m_pWidget->GetOptionLabel(nCurSel);
-
- for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
- pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str());
- }
-
- pWnd->SetSelect(nCurSel);
- pWnd->SetText(swText.c_str());
- return pWnd;
-}
-
-FX_BOOL CFFL_ComboBox::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-}
-
-FX_BOOL CFFL_ComboBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
- CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE);
- if (!pWnd)
- return FALSE;
-
- int32_t nCurSel = pWnd->GetSelect();
- if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT))
- return nCurSel != m_pWidget->GetSelectedIndex(0);
-
- if (nCurSel >= 0)
- return nCurSel != m_pWidget->GetSelectedIndex(0);
-
- return pWnd->GetText() != m_pWidget->GetValue();
-}
-
-void CFFL_ComboBox::SaveData(CPDFSDK_PageView* pPageView) {
- CPWL_ComboBox* pWnd =
- static_cast<CPWL_ComboBox*>(GetPDFWindow(pPageView, FALSE));
- if (!pWnd)
- return;
-
- CFX_WideString swText = pWnd->GetText();
- int32_t nCurSel = pWnd->GetSelect();
-
- bool bSetValue = false;
-
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT)
- bSetValue = (nCurSel < 0) || (swText != m_pWidget->GetOptionLabel(nCurSel));
-
- if (bSetValue) {
- m_pWidget->SetValue(swText, FALSE);
- } else {
- m_pWidget->GetSelectedIndex(0);
- m_pWidget->SetOptionSelection(nCurSel, TRUE, FALSE);
- }
-
- m_pWidget->ResetFieldAppearance(TRUE);
- m_pWidget->UpdateField();
- SetChangeMark();
-
- m_pWidget->GetPDFPage();
-}
-
-void CFFL_ComboBox::GetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa) {
- switch (type) {
- case CPDF_AAction::KeyStroke:
- if (CPWL_ComboBox* pComboBox =
- static_cast<CPWL_ComboBox*>(GetPDFWindow(pPageView, FALSE))) {
- if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
- fa.bFieldFull = pEdit->IsTextFull();
- int nSelStart = 0;
- int nSelEnd = 0;
- pEdit->GetSel(nSelStart, nSelEnd);
- fa.nSelEnd = nSelEnd;
- fa.nSelStart = nSelStart;
- fa.sValue = pEdit->GetText();
- fa.sChangeEx = GetSelectExportText();
-
- if (fa.bFieldFull) {
- fa.sChange = L"";
- fa.sChangeEx = L"";
- }
- }
- }
- break;
- case CPDF_AAction::Validate:
- if (CPWL_ComboBox* pComboBox =
- static_cast<CPWL_ComboBox*>(GetPDFWindow(pPageView, FALSE))) {
- if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
- fa.sValue = pEdit->GetText();
- }
- }
- break;
- case CPDF_AAction::LoseFocus:
- case CPDF_AAction::GetFocus:
- fa.sValue = m_pWidget->GetValue();
- break;
- default:
- break;
- }
-}
-
-void CFFL_ComboBox::SetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa) {
- switch (type) {
- case CPDF_AAction::KeyStroke:
- if (CPWL_ComboBox* pComboBox =
- static_cast<CPWL_ComboBox*>(GetPDFWindow(pPageView, FALSE))) {
- if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
- pEdit->SetSel(fa.nSelStart, fa.nSelEnd);
- pEdit->ReplaceSel(fa.sChange.c_str());
- }
- }
- break;
- default:
- break;
- }
-}
-
-FX_BOOL CFFL_ComboBox::IsActionDataChanged(CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew) {
- switch (type) {
- case CPDF_AAction::KeyStroke:
- return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) ||
- faOld.nSelStart != faNew.nSelStart ||
- faOld.sChange != faNew.sChange;
- default:
- break;
- }
-
- return FALSE;
-}
-
-void CFFL_ComboBox::SaveState(CPDFSDK_PageView* pPageView) {
- ASSERT(pPageView);
-
- if (CPWL_ComboBox* pComboBox =
- static_cast<CPWL_ComboBox*>(GetPDFWindow(pPageView, FALSE))) {
- m_State.nIndex = pComboBox->GetSelect();
-
- if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
- pEdit->GetSel(m_State.nStart, m_State.nEnd);
- m_State.sValue = pEdit->GetText();
- }
- }
-}
-
-void CFFL_ComboBox::RestoreState(CPDFSDK_PageView* pPageView) {
- ASSERT(pPageView);
-
- if (CPWL_ComboBox* pComboBox =
- static_cast<CPWL_ComboBox*>(GetPDFWindow(pPageView, TRUE))) {
- if (m_State.nIndex >= 0) {
- pComboBox->SetSelect(m_State.nIndex);
- } else {
- if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
- pEdit->SetText(m_State.sValue.c_str());
- pEdit->SetSel(m_State.nStart, m_State.nEnd);
- }
- }
- }
-}
-
-CPWL_Wnd* CFFL_ComboBox::ResetPDFWindow(CPDFSDK_PageView* pPageView,
- FX_BOOL bRestoreValue) {
- if (bRestoreValue)
- SaveState(pPageView);
-
- DestroyPDFWindow(pPageView);
-
- CPWL_Wnd* pRet = NULL;
-
- if (bRestoreValue) {
- RestoreState(pPageView);
- pRet = GetPDFWindow(pPageView, FALSE);
- } else {
- pRet = GetPDFWindow(pPageView, TRUE);
- }
-
- m_pWidget->UpdateField();
-
- return pRet;
-}
-
-#ifdef PDF_ENABLE_XFA
-FX_BOOL CFFL_ComboBox::IsFieldFull(CPDFSDK_PageView* pPageView) {
- if (CPWL_ComboBox* pComboBox =
- static_cast<CPWL_ComboBox*>(GetPDFWindow(pPageView, FALSE))) {
- if (CPWL_Edit* pEdit = pComboBox->GetEdit())
- return pEdit->IsTextFull();
- }
- return FALSE;
-}
-#endif // PDF_ENABLE_XFA
-
-void CFFL_ComboBox::OnSetFocus(CPWL_Wnd* pWnd) {
- ASSERT(m_pApp);
-
- if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) {
- CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
- pEdit->SetCharSet(134);
- pEdit->SetCodePage(936);
-
- pEdit->SetReadyToInput();
- CFX_WideString wsText = pEdit->GetText();
- int nCharacters = wsText.GetLength();
- CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
- unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str();
- m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer,
- nCharacters, TRUE);
-
- pEdit->SetEditNotify(this);
- }
-}
-
-void CFFL_ComboBox::OnKillFocus(CPWL_Wnd* pWnd) {
- ASSERT(m_pApp);
-}
-
-void CFFL_ComboBox::OnAddUndo(CPWL_Edit* pEdit) {
- ASSERT(pEdit);
-}
-
-CFX_WideString CFFL_ComboBox::GetSelectExportText() {
- CFX_WideString swRet;
-
- int nExport = -1;
- CPDFSDK_PageView* pPageView = GetCurPageView();
- if (CPWL_ComboBox* pComboBox =
- (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) {
- nExport = pComboBox->GetSelect();
- }
-
- if (nExport >= 0) {
- if (CPDF_FormField* pFormField = m_pWidget->GetFormField()) {
- swRet = pFormField->GetOptionValue(nExport);
- if (swRet.IsEmpty())
- swRet = pFormField->GetOptionLabel(nExport);
- }
- }
-
- return swRet;
-}
diff --git a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
deleted file mode 100644
index e596ba08ba..0000000000
--- a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
+++ /dev/null
@@ -1,727 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-
-#include "fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h"
-#include "fpdfsdk/include/fsdk_common.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-
-#define GetRed(rgb) ((uint8_t)(rgb))
-#define GetGreen(rgb) ((uint8_t)(((FX_WORD)(rgb)) >> 8))
-#define GetBlue(rgb) ((uint8_t)((rgb) >> 16))
-
-#define FFL_HINT_ELAPSE 800
-
-CFFL_FormFiller::CFFL_FormFiller(CPDFDoc_Environment* pApp,
- CPDFSDK_Annot* pAnnot)
- : m_pApp(pApp), m_pAnnot(pAnnot), m_bValid(FALSE), m_ptOldPos(0, 0) {
- m_pWidget = (CPDFSDK_Widget*)pAnnot;
-}
-
-CFFL_FormFiller::~CFFL_FormFiller() {
- for (const auto& it : m_Maps) {
- CPWL_Wnd* pWnd = it.second;
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
- pWnd->InvalidateProvider(this);
- pWnd->Destroy();
- delete pWnd;
- delete pData;
- }
- m_Maps.clear();
-}
-
-void CFFL_FormFiller::SetWindowRect(CPDFSDK_PageView* pPageView,
- const CFX_FloatRect& rcWindow) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- pWnd->Move(CFX_FloatRect(rcWindow), TRUE, FALSE);
- }
-}
-
-CFX_FloatRect CFFL_FormFiller::GetWindowRect(CPDFSDK_PageView* pPageView) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- return pWnd->GetWindowRect();
- }
-
- return CFX_FloatRect(0, 0, 0, 0);
-}
-
-FX_RECT CFFL_FormFiller::GetViewBBox(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- ASSERT(pPageView);
- ASSERT(pAnnot);
-
- CFX_FloatRect rcAnnot = m_pWidget->GetRect();
-
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- CFX_FloatRect rcWindow = pWnd->GetWindowRect();
- rcAnnot = PWLtoFFL(rcWindow);
- }
-
- CFX_FloatRect rcWin = rcAnnot;
-
- CFX_FloatRect rcFocus = GetFocusBox(pPageView);
- if (!rcFocus.IsEmpty())
- rcWin.Union(rcFocus);
-
- CFX_FloatRect rect = CPWL_Utils::InflateRect(rcWin, 1);
-
- return rect.GetOutterRect();
-}
-
-void CFFL_FormFiller::OnDraw(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- CFX_Matrix mt = GetCurMatrix();
- mt.Concat(*pUser2Device);
- pWnd->DrawAppearance(pDevice, &mt);
- } else {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (CFFL_IFormFiller::IsVisible(pWidget))
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
-}
-
-void CFFL_FormFiller::OnDrawDeactive(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
-}
-
-void CFFL_FormFiller::OnCreate(CPDFSDK_Annot* pAnnot) {}
-
-void CFFL_FormFiller::OnLoad(CPDFSDK_Annot* pAnnot) {}
-
-void CFFL_FormFiller::OnDelete(CPDFSDK_Annot* pAnnot) {}
-
-void CFFL_FormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {}
-
-void CFFL_FormFiller::OnMouseExit(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- EndTimer();
- ASSERT(m_pWidget);
-}
-
-FX_BOOL CFFL_FormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) {
- m_bValid = TRUE;
- FX_RECT rect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
-
- if (!rect.Contains((int)point.x, (int)point.y))
- return FALSE;
-
- return pWnd->OnLButtonDown(WndtoPWL(pPageView, point), nFlags);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- FX_RECT rcFFL = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rcFFL.left, rcFFL.top, rcFFL.right, rcFFL.bottom);
- pWnd->OnLButtonUp(WndtoPWL(pPageView, point), nFlags);
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- pWnd->OnLButtonDblClk(WndtoPWL(pPageView, point), nFlags);
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnMouseMove(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- if ((m_ptOldPos.x != point.x) || (m_ptOldPos.y != point.y)) {
- m_ptOldPos = point;
- }
-
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- pWnd->OnMouseMove(WndtoPWL(pPageView, point), nFlags);
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- short zDelta,
- const CFX_FloatPoint& point) {
- if (!IsValid())
- return FALSE;
-
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) {
- return pWnd->OnMouseWheel(zDelta, WndtoPWL(pPageView, point), nFlags);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) {
- pWnd->OnRButtonDown(WndtoPWL(pPageView, point), nFlags);
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- pWnd->OnRButtonUp(WndtoPWL(pPageView, point), nFlags);
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot,
- FX_UINT nKeyCode,
- FX_UINT nFlags) {
- if (IsValid()) {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView);
-
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- return pWnd->OnKeyDown(nKeyCode, nFlags);
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_FormFiller::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- if (IsValid()) {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView);
-
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- return pWnd->OnChar(nChar, nFlags);
- }
- }
-
- return FALSE;
-}
-
-void CFFL_FormFiller::SetFocusForAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
- CPDFSDK_Document* pDoc = m_pApp->GetSDKDocument();
- CPDFSDK_PageView* pPageView = pDoc->GetPageView(pPage);
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE))
- pWnd->SetFocus();
-
- m_bValid = TRUE;
- FX_RECT rcRect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom);
-}
-
-void CFFL_FormFiller::KillFocusForAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
- if (!IsValid())
- return;
-
- CPDFSDK_PageView* pPageView = GetCurPageView();
- if (!pPageView)
- return;
-
- CommitData(pPageView, nFlag);
-
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE))
- pWnd->KillFocus();
-
- FX_BOOL bDestroyPDFWindow;
- switch (m_pWidget->GetFieldType()) {
- case FIELDTYPE_PUSHBUTTON:
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON:
- bDestroyPDFWindow = TRUE;
- break;
- default:
- bDestroyPDFWindow = FALSE;
- break;
- }
- EscapeFiller(pPageView, bDestroyPDFWindow);
-}
-
-FX_BOOL CFFL_FormFiller::IsValid() const {
- return m_bValid;
-}
-
-PWL_CREATEPARAM CFFL_FormFiller::GetCreateParam() {
- ASSERT(m_pApp);
-
- PWL_CREATEPARAM cp;
- cp.pParentWnd = NULL;
- cp.pProvider = this;
- cp.rcRectWnd = GetPDFWindowRect();
-
- FX_DWORD dwCreateFlags = PWS_BORDER | PWS_BACKGROUND | PWS_VISIBLE;
- FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags();
- if (dwFieldFlag & FIELDFLAG_READONLY) {
- dwCreateFlags |= PWS_READONLY;
- }
-
- FX_COLORREF color;
- if (m_pWidget->GetFillColor(color)) {
- cp.sBackgroundColor =
- CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
- }
-
- if (m_pWidget->GetBorderColor(color)) {
- cp.sBorderColor =
- CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
- }
-
- cp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
-
- if (m_pWidget->GetTextColor(color)) {
- cp.sTextColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
- }
-
- cp.fFontSize = m_pWidget->GetFontSize();
- cp.dwBorderWidth = m_pWidget->GetBorderWidth();
-
- int nBorderStyle = m_pWidget->GetBorderStyle();
-
- switch (nBorderStyle) {
- case BBS_SOLID:
- cp.nBorderStyle = PBS_SOLID;
- break;
- case BBS_DASH:
- cp.nBorderStyle = PBS_DASH;
- cp.sDash = CPWL_Dash(3, 3, 0);
- break;
- case BBS_BEVELED:
- cp.nBorderStyle = PBS_BEVELED;
- cp.dwBorderWidth *= 2;
- break;
- case BBS_INSET:
- cp.nBorderStyle = PBS_INSET;
- cp.dwBorderWidth *= 2;
- break;
- case BBS_UNDERLINE:
- cp.nBorderStyle = PBS_UNDERLINED;
- break;
- }
-
- if (cp.fFontSize <= 0) {
- dwCreateFlags |= PWS_AUTOFONTSIZE;
- }
-
- cp.dwFlags = dwCreateFlags;
- cp.pSystemHandler = m_pApp->GetSysHandler();
- return cp;
-}
-
-CPWL_Wnd* CFFL_FormFiller::GetPDFWindow(CPDFSDK_PageView* pPageView,
- FX_BOOL bNew) {
- ASSERT(pPageView);
-
- auto it = m_Maps.find(pPageView);
- const bool found = it != m_Maps.end();
- CPWL_Wnd* pWnd = found ? it->second : nullptr;
- if (!bNew)
- return pWnd;
-
- if (found) {
- CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pWnd->GetAttachedData();
- if (pPrivateData->nWidgetAge != m_pWidget->GetAppearanceAge()) {
- return ResetPDFWindow(
- pPageView, m_pWidget->GetValueAge() == pPrivateData->nValueAge);
- }
- } else {
- PWL_CREATEPARAM cp = GetCreateParam();
- cp.hAttachedWnd = (FX_HWND)m_pWidget;
-
- CFFL_PrivateData* pPrivateData = new CFFL_PrivateData;
- pPrivateData->pWidget = m_pWidget;
- pPrivateData->pPageView = pPageView;
- pPrivateData->nWidgetAge = m_pWidget->GetAppearanceAge();
- pPrivateData->nValueAge = 0;
-
- cp.pAttachedData = pPrivateData;
-
- pWnd = NewPDFWindow(cp, pPageView);
- m_Maps[pPageView] = pWnd;
- }
-
- return pWnd;
-}
-
-void CFFL_FormFiller::DestroyPDFWindow(CPDFSDK_PageView* pPageView) {
- auto it = m_Maps.find(pPageView);
- if (it == m_Maps.end())
- return;
-
- CPWL_Wnd* pWnd = it->second;
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
- pWnd->Destroy();
- delete pWnd;
- delete pData;
-
- m_Maps.erase(it);
-}
-
-CFX_Matrix CFFL_FormFiller::GetWindowMatrix(void* pAttachedData) {
- if (CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pAttachedData) {
- if (pPrivateData->pPageView) {
- CFX_Matrix mtPageView;
- pPrivateData->pPageView->GetCurrentMatrix(mtPageView);
- CFX_Matrix mt = GetCurMatrix();
- mt.Concat(mtPageView);
-
- return mt;
- }
- }
- return CFX_Matrix(1, 0, 0, 1, 0, 0);
-}
-
-CFX_Matrix CFFL_FormFiller::GetCurMatrix() {
- CFX_Matrix mt;
-
- CFX_FloatRect rcDA;
- m_pWidget->GetPDFAnnot()->GetRect(rcDA);
-
- switch (m_pWidget->GetRotate()) {
- default:
- case 0:
- mt = CFX_Matrix(1, 0, 0, 1, 0, 0);
- break;
- case 90:
- mt = CFX_Matrix(0, 1, -1, 0, rcDA.right - rcDA.left, 0);
- break;
- case 180:
- mt = CFX_Matrix(-1, 0, 0, -1, rcDA.right - rcDA.left,
- rcDA.top - rcDA.bottom);
- break;
- case 270:
- mt = CFX_Matrix(0, -1, 1, 0, 0, rcDA.top - rcDA.bottom);
- break;
- }
- mt.e += rcDA.left;
- mt.f += rcDA.bottom;
-
- return mt;
-}
-
-CFX_WideString CFFL_FormFiller::LoadPopupMenuString(int nIndex) {
- ASSERT(m_pApp);
-
- return L"";
-}
-
-CFX_FloatRect CFFL_FormFiller::GetPDFWindowRect() const {
- CFX_FloatRect rectAnnot;
- m_pWidget->GetPDFAnnot()->GetRect(rectAnnot);
-
- FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
- FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
- if ((m_pWidget->GetRotate() / 90) & 0x01)
- return CFX_FloatRect(0, 0, fHeight, fWidth);
-
- return CFX_FloatRect(0, 0, fWidth, fHeight);
-}
-
-CPDFSDK_PageView* CFFL_FormFiller::GetCurPageView() {
- UnderlyingPageType* pPage = m_pAnnot->GetUnderlyingPage();
- CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
- return pSDKDoc ? pSDKDoc->GetPageView(pPage) : nullptr;
-}
-
-CFX_FloatRect CFFL_FormFiller::GetFocusBox(CPDFSDK_PageView* pPageView) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
- CFX_FloatRect rcFocus = FFLtoWnd(pPageView, PWLtoFFL(pWnd->GetFocusRect()));
- CFX_FloatRect rcPage = pPageView->GetPDFPage()->GetPageBBox();
- if (rcPage.Contains(rcFocus))
- return rcFocus;
- }
- return CFX_FloatRect(0, 0, 0, 0);
-}
-
-CFX_FloatRect CFFL_FormFiller::FFLtoPWL(const CFX_FloatRect& rect) {
- CFX_Matrix mt;
- mt.SetReverse(GetCurMatrix());
-
- CFX_FloatRect temp = rect;
- mt.TransformRect(temp);
-
- return temp;
-}
-
-CFX_FloatRect CFFL_FormFiller::PWLtoFFL(const CFX_FloatRect& rect) {
- CFX_Matrix mt = GetCurMatrix();
-
- CFX_FloatRect temp = rect;
- mt.TransformRect(temp);
-
- return temp;
-}
-
-CFX_FloatPoint CFFL_FormFiller::FFLtoPWL(const CFX_FloatPoint& point) {
- CFX_Matrix mt;
- mt.SetReverse(GetCurMatrix());
-
- CFX_FloatPoint pt = point;
- mt.Transform(pt.x, pt.y);
-
- return pt;
-}
-
-CFX_FloatPoint CFFL_FormFiller::PWLtoFFL(const CFX_FloatPoint& point) {
- CFX_Matrix mt = GetCurMatrix();
-
- CFX_FloatPoint pt = point;
- mt.Transform(pt.x, pt.y);
-
- return pt;
-}
-
-CFX_FloatPoint CFFL_FormFiller::WndtoPWL(CPDFSDK_PageView* pPageView,
- const CFX_FloatPoint& pt) {
- return FFLtoPWL(pt);
-}
-
-CFX_FloatRect CFFL_FormFiller::FFLtoWnd(CPDFSDK_PageView* pPageView,
- const CFX_FloatRect& rect) {
- return rect;
-}
-
-FX_BOOL CFFL_FormFiller::CommitData(CPDFSDK_PageView* pPageView,
- FX_UINT nFlag) {
- if (IsDataChanged(pPageView)) {
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- pIFormFiller->OnKeyStrokeCommit(m_pWidget, pPageView, bRC, bExit, nFlag);
- if (bExit)
- return TRUE;
- if (!bRC) {
- ResetPDFWindow(pPageView, FALSE);
- return TRUE;
- }
-
- pIFormFiller->OnValidate(m_pWidget, pPageView, bRC, bExit, nFlag);
- if (bExit)
- return TRUE;
- if (!bRC) {
- ResetPDFWindow(pPageView, FALSE);
- return TRUE;
- }
-
- SaveData(pPageView);
- pIFormFiller->OnCalculate(m_pWidget, pPageView, bExit, nFlag);
- if (bExit)
- return TRUE;
-
- pIFormFiller->OnFormat(m_pWidget, pPageView, bExit, nFlag);
- }
- return TRUE;
-}
-
-FX_BOOL CFFL_FormFiller::IsDataChanged(CPDFSDK_PageView* pPageView) {
- return FALSE;
-}
-
-void CFFL_FormFiller::SaveData(CPDFSDK_PageView* pPageView) {}
-
-#ifdef PDF_ENABLE_XFA
-FX_BOOL CFFL_FormFiller::IsFieldFull(CPDFSDK_PageView* pPageView) {
- return FALSE;
-}
-#endif // PDF_ENABLE_XFA
-
-void CFFL_FormFiller::SetChangeMark() {
- m_pApp->FFI_OnChange();
-}
-
-void CFFL_FormFiller::GetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa) {
- fa.sValue = m_pWidget->GetValue();
-}
-
-void CFFL_FormFiller::SetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa) {}
-
-FX_BOOL CFFL_FormFiller::IsActionDataChanged(CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew) {
- return FALSE;
-}
-
-void CFFL_FormFiller::SaveState(CPDFSDK_PageView* pPageView) {}
-
-void CFFL_FormFiller::RestoreState(CPDFSDK_PageView* pPageView) {}
-
-CPWL_Wnd* CFFL_FormFiller::ResetPDFWindow(CPDFSDK_PageView* pPageView,
- FX_BOOL bRestoreValue) {
- return GetPDFWindow(pPageView, FALSE);
-}
-
-void CFFL_FormFiller::TimerProc() {}
-
-IFX_SystemHandler* CFFL_FormFiller::GetSystemHandler() const {
- return m_pApp->GetSysHandler();
-}
-
-void CFFL_FormFiller::EscapeFiller(CPDFSDK_PageView* pPageView,
- FX_BOOL bDestroyPDFWindow) {
- m_bValid = FALSE;
-
- FX_RECT rcRect = GetViewBBox(pPageView, m_pWidget);
- InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom);
-
- if (bDestroyPDFWindow)
- DestroyPDFWindow(pPageView);
-}
-
-void CFFL_FormFiller::InvalidateRect(double left,
- double top,
- double right,
- double bottom) {
- UnderlyingPageType* pPage = m_pWidget->GetUnderlyingPage();
- m_pApp->FFI_Invalidate(pPage, left, top, right, bottom);
-}
-
-CFFL_Button::CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget)
- : CFFL_FormFiller(pApp, pWidget), m_bMouseIn(FALSE), m_bMouseDown(FALSE) {}
-
-CFFL_Button::~CFFL_Button() {}
-
-void CFFL_Button::OnMouseEnter(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- m_bMouseIn = TRUE;
- FX_RECT rect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
-}
-
-void CFFL_Button::OnMouseExit(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- m_bMouseIn = FALSE;
-
- FX_RECT rect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
- EndTimer();
- ASSERT(m_pWidget);
-}
-
-FX_BOOL CFFL_Button::OnLButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- CFX_FloatRect rcAnnot = pAnnot->GetRect();
- if (!rcAnnot.Contains(point.x, point.y))
- return FALSE;
-
- m_bMouseDown = TRUE;
- m_bValid = TRUE;
- FX_RECT rect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
- return TRUE;
-}
-
-FX_BOOL CFFL_Button::OnLButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- CFX_FloatRect rcAnnot = pAnnot->GetRect();
- if (!rcAnnot.Contains(point.x, point.y))
- return FALSE;
-
- m_bMouseDown = FALSE;
- m_pWidget->GetPDFPage();
-
- FX_RECT rect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
- return TRUE;
-}
-
-FX_BOOL CFFL_Button::OnMouseMove(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(m_pApp);
-
- return TRUE;
-}
-
-void CFFL_Button::OnDraw(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- ASSERT(pPageView);
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- CPDF_FormControl* pCtrl = pWidget->GetFormControl();
- CPDF_FormControl::HighlightingMode eHM = pCtrl->GetHighlightingMode();
-
- if (eHM != CPDF_FormControl::Push) {
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- return;
- }
-
- if (m_bMouseDown) {
- if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Down))
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Down, NULL);
- else
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- } else if (m_bMouseIn) {
- if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Rollover))
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Rollover,
- NULL);
- else
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- } else {
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
-}
-
-void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
-}
diff --git a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
deleted file mode 100644
index 75f18e7c73..0000000000
--- a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
+++ /dev/null
@@ -1,1015 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_IFormFiller.h"
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/formfiller/FFL_CheckBox.h"
-#include "fpdfsdk/include/formfiller/FFL_ComboBox.h"
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/formfiller/FFL_ListBox.h"
-#include "fpdfsdk/include/formfiller/FFL_PushButton.h"
-#include "fpdfsdk/include/formfiller/FFL_RadioButton.h"
-#include "fpdfsdk/include/formfiller/FFL_TextField.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-
-#define FFL_MAXLISTBOXHEIGHT 140.0f
-
-CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp)
- : m_pApp(pApp), m_bNotifying(FALSE) {}
-
-CFFL_IFormFiller::~CFFL_IFormFiller() {
- for (auto& it : m_Maps)
- delete it.second;
- m_Maps.clear();
-}
-
-FX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_FloatPoint point) {
- CFX_FloatRect rc = pAnnot->GetRect();
- if (rc.Contains(point.x, point.y))
- return TRUE;
- return FALSE;
-}
-
-FX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- return pFormFiller->GetViewBBox(pPageView, pAnnot);
-
- ASSERT(pPageView);
-
- CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
- CFX_FloatRect rcAnnot;
- pPDFAnnot->GetRect(rcAnnot);
-
- CFX_FloatRect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1);
- return rcWin.GetOutterRect();
-}
-
-void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- ASSERT(pPageView);
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
-
- if (IsVisible(pWidget)) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- if (pFormFiller->IsValid()) {
- pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
- pAnnot->GetPDFPage();
-
- CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
- if (pDocument->GetFocusAnnot() == pAnnot) {
- CFX_FloatRect rcFocus = pFormFiller->GetFocusBox(pPageView);
- if (!rcFocus.IsEmpty()) {
- CFX_PathData path;
- path.SetPointCount(5);
- path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO);
- path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO);
- path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO);
- path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO);
- path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.SetDashCount(1);
- gsd.m_DashArray[0] = 1.0f;
- gsd.m_DashPhase = 0;
- gsd.m_LineWidth = 1.0f;
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0,
- ArgbEncode(255, 0, 0, 0), FXFILL_ALTERNATE);
- }
- }
- return;
- }
- }
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device,
- dwFlags);
- else
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
-
- if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget))
- pWidget->DrawShadow(pDevice, pPageView);
- }
-}
-
-void CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- pFormFiller->OnCreate(pAnnot);
- }
-}
-
-void CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- pFormFiller->OnLoad(pAnnot);
- }
-}
-
-void CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- pFormFiller->OnDelete(pAnnot);
- }
-
- UnRegisterFormFiller(pAnnot);
-}
-
-void CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlag) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (!m_bNotifying) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::CursorEnter).GetDict()) {
- m_bNotifying = TRUE;
-
- int nValueAge = pWidget->GetValueAge();
-
- pWidget->ClearAppModified();
-
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (pWidget->IsAppModified()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- pWidget->GetValueAge() == nValueAge);
- }
- }
- }
- }
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) {
- pFormFiller->OnMouseEnter(pPageView, pAnnot);
- }
-}
-
-void CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlag) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (!m_bNotifying) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::CursorExit).GetDict()) {
- m_bNotifying = TRUE;
- pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
- pWidget->ClearAppModified();
-
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (pWidget->IsAppModified()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
- }
- }
- }
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- pFormFiller->OnMouseExit(pPageView, pAnnot);
- }
-}
-
-FX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (!m_bNotifying) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (Annot_HitTest(pPageView, pAnnot, point) &&
- pWidget->GetAAction(CPDF_AAction::ButtonDown).GetDict()) {
- m_bNotifying = TRUE;
- pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
- pWidget->ClearAppModified();
-
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags);
- pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (!IsValidAnnot(pPageView, pAnnot))
- return TRUE;
-
- if (pWidget->IsAppModified()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
- }
- }
- }
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
-
- switch (pWidget->GetFieldType()) {
- case FIELDTYPE_PUSHBUTTON:
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON:
- if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y))
- pDocument->SetFocusAnnot(pAnnot);
- break;
- default:
- pDocument->SetFocusAnnot(pAnnot);
- break;
- }
-
- FX_BOOL bRet = FALSE;
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point);
- }
-
- if (pDocument->GetFocusAnnot() == pAnnot) {
- FX_BOOL bExit = FALSE;
- FX_BOOL bReset = FALSE;
- OnButtonUp(pWidget, pPageView, bReset, bExit, nFlags);
- if (bExit)
- return TRUE;
-#ifdef PDF_ENABLE_XFA
- OnClick(pWidget, pPageView, bReset, bExit, nFlags);
- if (bExit)
- return TRUE;
-#endif // PDF_ENABLE_XFA
- }
- return bRet;
-}
-
-void CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bReset,
- FX_BOOL& bExit,
- FX_UINT nFlag) {
- ASSERT(pWidget);
-
- if (!m_bNotifying) {
- if (pWidget->GetAAction(CPDF_AAction::ButtonUp).GetDict()) {
- m_bNotifying = TRUE;
- int nAge = pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
-
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (!IsValidAnnot(pPageView, pWidget)) {
- bExit = TRUE;
- return;
- }
-
- if (nAge != pWidget->GetAppearanceAge()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
-
- bReset = TRUE;
- }
- }
- }
-}
-
-FX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- // change cursor
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) {
- return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- short zDelta,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot,
- FX_UINT nKeyCode,
- FX_UINT nFlags) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags);
- }
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (nChar == FWL_VKEY_Tab)
- return TRUE;
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- return pFormFiller->OnChar(pAnnot, nChar, nFlags);
-
- return FALSE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
- if (!pAnnot)
- return FALSE;
-
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (!m_bNotifying) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::GetFocus).GetDict()) {
- m_bNotifying = TRUE;
- pWidget->GetAppearanceAge();
-
- int nValueAge = pWidget->GetValueAge();
- pWidget->ClearAppModified();
-
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE);
- if (!pFormFiller)
- return FALSE;
- pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa);
- pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (pWidget->IsAppModified()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
- }
- }
- }
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
- pFormFiller->SetFocusForAnnot(pAnnot, nFlag);
-
- return TRUE;
-}
-
-FX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
- if (!pAnnot)
- return FALSE;
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
- pFormFiller->KillFocusForAnnot(pAnnot, nFlag);
-
- if (!m_bNotifying) {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::LoseFocus).GetDict()) {
- m_bNotifying = TRUE;
- pWidget->ClearAppModified();
-
- CPDFSDK_PageView* pPageView = pWidget->GetPageView();
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa);
-
- pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView);
- m_bNotifying = FALSE;
- }
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget) {
- return pWidget->IsVisible();
-}
-
-FX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget) {
- int nFieldFlags = pWidget->GetFieldFlags();
- return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY;
-}
-
-FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) {
- if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return TRUE;
-
- CPDF_Page* pPage = pWidget->GetPDFPage();
- CPDF_Document* pDocument = pPage->m_pDocument;
- FX_DWORD dwPermissions = pDocument->GetUserPermissions();
- return (dwPermissions & FPDFPERM_FILL_FORM) ||
- (dwPermissions & FPDFPERM_ANNOT_FORM) ||
- (dwPermissions & FPDFPERM_MODIFY);
-}
-
-CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot,
- FX_BOOL bRegister) {
- auto it = m_Maps.find(pAnnot);
- if (it != m_Maps.end())
- return it->second;
-
- if (!bRegister)
- return nullptr;
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- int nFieldType = pWidget->GetFieldType();
- CFFL_FormFiller* pFormFiller;
- switch (nFieldType) {
- case FIELDTYPE_PUSHBUTTON:
- pFormFiller = new CFFL_PushButton(m_pApp, pWidget);
- break;
- case FIELDTYPE_CHECKBOX:
- pFormFiller = new CFFL_CheckBox(m_pApp, pWidget);
- break;
- case FIELDTYPE_RADIOBUTTON:
- pFormFiller = new CFFL_RadioButton(m_pApp, pWidget);
- break;
- case FIELDTYPE_TEXTFIELD:
- pFormFiller = new CFFL_TextField(m_pApp, pWidget);
- break;
- case FIELDTYPE_LISTBOX:
- pFormFiller = new CFFL_ListBox(m_pApp, pWidget);
- break;
- case FIELDTYPE_COMBOBOX:
- pFormFiller = new CFFL_ComboBox(m_pApp, pWidget);
- break;
- case FIELDTYPE_UNKNOWN:
- default:
- pFormFiller = nullptr;
- break;
- }
-
- if (!pFormFiller)
- return nullptr;
-
- m_Maps[pAnnot] = pFormFiller;
- return pFormFiller;
-}
-
-void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) {
- if (pAnnot) {
- UnRegisterFormFiller(pAnnot);
- }
-}
-
-void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot) {
- auto it = m_Maps.find(pAnnot);
- if (it == m_Maps.end())
- return;
-
- delete it->second;
- m_Maps.erase(it);
-}
-
-void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData,
- FX_FLOAT fPopupMin,
- FX_FLOAT fPopupMax,
- int32_t& nRet,
- FX_FLOAT& fPopupRet) {
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
-
- CFX_FloatRect rcPageView(0, 0, 0, 0);
- rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth();
- rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight();
- rcPageView.Normalize();
-
- CFX_FloatRect rcAnnot = pData->pWidget->GetRect();
-
- FX_FLOAT fTop = 0.0f;
- FX_FLOAT fBottom = 0.0f;
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pData->pWidget;
- switch (pWidget->GetRotate() / 90) {
- default:
- case 0:
- fTop = rcPageView.top - rcAnnot.top;
- fBottom = rcAnnot.bottom - rcPageView.bottom;
- break;
- case 1:
- fTop = rcAnnot.left - rcPageView.left;
- fBottom = rcPageView.right - rcAnnot.right;
- break;
- case 2:
- fTop = rcAnnot.bottom - rcPageView.bottom;
- fBottom = rcPageView.top - rcAnnot.top;
- break;
- case 3:
- fTop = rcPageView.right - rcAnnot.right;
- fBottom = rcAnnot.left - rcPageView.left;
- break;
- }
-
- FX_FLOAT fFactHeight = 0;
- FX_BOOL bBottom = TRUE;
- FX_FLOAT fMaxListBoxHeight = 0;
- if (fPopupMax > FFL_MAXLISTBOXHEIGHT) {
- if (fPopupMin > FFL_MAXLISTBOXHEIGHT) {
- fMaxListBoxHeight = fPopupMin;
- } else {
- fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT;
- }
- } else {
- fMaxListBoxHeight = fPopupMax;
- }
-
- if (fBottom > fMaxListBoxHeight) {
- fFactHeight = fMaxListBoxHeight;
- bBottom = TRUE;
- } else {
- if (fTop > fMaxListBoxHeight) {
- fFactHeight = fMaxListBoxHeight;
- bBottom = FALSE;
- } else {
- if (fTop > fBottom) {
- fFactHeight = fTop;
- bBottom = FALSE;
- } else {
- fFactHeight = fBottom;
- bBottom = TRUE;
- }
- }
- }
-
- nRet = bBottom ? 0 : 1;
- fPopupRet = fFactHeight;
-}
-
-void CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bRC,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- if (!m_bNotifying) {
- if (pWidget->GetAAction(CPDF_AAction::KeyStroke).GetDict()) {
- m_bNotifying = TRUE;
- pWidget->ClearAppModified();
-
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- fa.bWillCommit = TRUE;
- fa.bKeyDown = TRUE;
- fa.bRC = TRUE;
-
- CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
- pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa);
- pFormFiller->SaveState(pPageView);
-
- PDFSDK_FieldAction faOld = fa;
- pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView);
-
- bRC = fa.bRC;
- m_bNotifying = FALSE;
- }
- }
-}
-
-void CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bRC,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- if (!m_bNotifying) {
- if (pWidget->GetAAction(CPDF_AAction::Validate).GetDict()) {
- m_bNotifying = TRUE;
- pWidget->ClearAppModified();
-
- ASSERT(pPageView);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- fa.bKeyDown = TRUE;
- fa.bRC = TRUE;
-
- CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
- pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa);
- pFormFiller->SaveState(pPageView);
-
- PDFSDK_FieldAction faOld = fa;
- pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView);
-
- bRC = fa.bRC;
- m_bNotifying = FALSE;
- }
- }
-}
-
-void CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- if (!m_bNotifying) {
- ASSERT(pWidget);
- CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)pDocument->GetInterForm();
- pInterForm->OnCalculate(pWidget->GetFormField());
-
- m_bNotifying = FALSE;
- }
-}
-
-void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- if (!m_bNotifying) {
- ASSERT(pWidget);
- CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)pDocument->GetInterForm();
-
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue =
- pInterForm->OnFormat(pWidget->GetFormField(), bFormated);
-
- if (bExit)
- return;
-
- if (bFormated) {
- pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_str(),
- TRUE);
- pInterForm->UpdateField(pWidget->GetFormField());
- }
-
- m_bNotifying = FALSE;
- }
-}
-
-#ifdef PDF_ENABLE_XFA
-void CFFL_IFormFiller::OnClick(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bReset,
- FX_BOOL& bExit,
- FX_UINT nFlag) {
- if (!m_bNotifying) {
- if (pWidget->HasXFAAAction(PDFSDK_XFA_Click)) {
- m_bNotifying = TRUE;
- int nAge = pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pWidget->OnXFAAAction(PDFSDK_XFA_Click, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (!IsValidAnnot(pPageView, pWidget)) {
- bExit = TRUE;
- return;
- }
-
- if (nAge != pWidget->GetAppearanceAge()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
-
- bReset = TRUE;
- }
- }
- }
-}
-
-void CFFL_IFormFiller::OnFull(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bReset,
- FX_BOOL& bExit,
- FX_UINT nFlag) {
- if (!m_bNotifying) {
- if (pWidget->HasXFAAAction(PDFSDK_XFA_Full)) {
- m_bNotifying = TRUE;
- int nAge = pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pWidget->OnXFAAAction(PDFSDK_XFA_Full, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (!IsValidAnnot(pPageView, pWidget)) {
- bExit = TRUE;
- return;
- }
-
- if (nAge != pWidget->GetAppearanceAge()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
-
- bReset = TRUE;
- }
- }
- }
-}
-
-void CFFL_IFormFiller::OnPopupPreOpen(void* pPrivateData,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
- ASSERT(pData);
- ASSERT(pData->pWidget);
-
- FX_BOOL bTempReset = FALSE;
- FX_BOOL bTempExit = FALSE;
- OnPreOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, nFlag);
-
- if (bTempReset || bTempExit) {
- bExit = TRUE;
- }
-}
-
-void CFFL_IFormFiller::OnPopupPostOpen(void* pPrivateData,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
- ASSERT(pData);
- ASSERT(pData->pWidget);
-
- FX_BOOL bTempReset = FALSE;
- FX_BOOL bTempExit = FALSE;
- OnPostOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, nFlag);
-
- if (bTempReset || bTempExit) {
- bExit = TRUE;
- }
-}
-
-void CFFL_IFormFiller::OnPreOpen(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bReset,
- FX_BOOL& bExit,
- FX_UINT nFlag) {
- if (!m_bNotifying) {
- if (pWidget->HasXFAAAction(PDFSDK_XFA_PreOpen)) {
- m_bNotifying = TRUE;
- int nAge = pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pWidget->OnXFAAAction(PDFSDK_XFA_PreOpen, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (!IsValidAnnot(pPageView, pWidget)) {
- bExit = TRUE;
- return;
- }
-
- if (nAge != pWidget->GetAppearanceAge()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
-
- bReset = TRUE;
- }
- }
- }
-}
-
-void CFFL_IFormFiller::OnPostOpen(CPDFSDK_Widget* pWidget,
- CPDFSDK_PageView* pPageView,
- FX_BOOL& bReset,
- FX_BOOL& bExit,
- FX_UINT nFlag) {
- if (!m_bNotifying) {
- if (pWidget->HasXFAAAction(PDFSDK_XFA_PostOpen)) {
- m_bNotifying = TRUE;
- int nAge = pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pWidget->OnXFAAAction(PDFSDK_XFA_PostOpen, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (!IsValidAnnot(pPageView, pWidget)) {
- bExit = TRUE;
- return;
- }
-
- if (nAge != pWidget->GetAppearanceAge()) {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
- pFormFiller->ResetPDFWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
-
- bReset = TRUE;
- }
- }
- }
-}
-#endif // PDF_ENABLE_XFA
-
-FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- if (pPageView)
- return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot());
-
- return FALSE;
-}
-
-void CFFL_IFormFiller::OnBeforeKeyStroke(void* pPrivateData,
- CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- int nSelStart,
- int nSelEnd,
- FX_BOOL bKeyDown,
- FX_BOOL& bRC,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
- ASSERT(pData->pWidget);
-
- CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
-
-#ifdef PDF_ENABLE_XFA
- if (pFormFiller->IsFieldFull(pData->pPageView)) {
- FX_BOOL bFullExit = FALSE;
- FX_BOOL bFullReset = FALSE;
- OnFull(pData->pWidget, pData->pPageView, bFullReset, bFullExit, nFlag);
-
- if (bFullReset || bFullExit) {
- bExit = TRUE;
- return;
- }
- }
-#endif // PDF_ENABLE_XFA
-
- if (!m_bNotifying) {
- if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke).GetDict()) {
- m_bNotifying = TRUE;
- int nAge = pData->pWidget->GetAppearanceAge();
- int nValueAge = pData->pWidget->GetValueAge();
-
- CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument();
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- fa.sChange = strChange;
- fa.sChangeEx = strChangeEx;
- fa.bKeyDown = bKeyDown;
- fa.bWillCommit = FALSE;
- fa.bRC = TRUE;
- fa.nSelStart = nSelStart;
- fa.nSelEnd = nSelEnd;
-
- pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa);
- pFormFiller->SaveState(pData->pPageView);
-
- if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa,
- pData->pPageView)) {
- if (!IsValidAnnot(pData->pPageView, pData->pWidget)) {
- bExit = TRUE;
- m_bNotifying = FALSE;
- return;
- }
-
- if (nAge != pData->pWidget->GetAppearanceAge()) {
- CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow(
- pData->pPageView, nValueAge == pData->pWidget->GetValueAge());
- pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
- bExit = TRUE;
- }
-
- if (fa.bRC) {
- pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::KeyStroke,
- fa);
- bRC = FALSE;
- } else {
- pFormFiller->RestoreState(pData->pPageView);
- bRC = FALSE;
- }
-
- if (pDocument->GetFocusAnnot() != pData->pWidget) {
- pFormFiller->CommitData(pData->pPageView, nFlag);
- bExit = TRUE;
- }
- } else {
- if (!IsValidAnnot(pData->pPageView, pData->pWidget)) {
- bExit = TRUE;
- m_bNotifying = FALSE;
- return;
- }
- }
-
- m_bNotifying = FALSE;
- }
- }
-}
diff --git a/fpdfsdk/src/formfiller/FFL_ListBox.cpp b/fpdfsdk/src/formfiller/FFL_ListBox.cpp
deleted file mode 100644
index 638618f784..0000000000
--- a/fpdfsdk/src/formfiller/FFL_ListBox.cpp
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_ListBox.h"
-
-#include "fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h"
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/formfiller/FFL_IFormFiller.h"
-#include "fpdfsdk/include/fsdk_common.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ListBox.h"
-
-#define FFL_DEFAULTLISTBOXFONTSIZE 12.0f
-
-CFFL_ListBox::CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget)
- : CFFL_FormFiller(pApp, pWidget), m_pFontMap(NULL) {}
-
-CFFL_ListBox::~CFFL_ListBox() {
- delete m_pFontMap;
-}
-
-PWL_CREATEPARAM CFFL_ListBox::GetCreateParam() {
- PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
-
- FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags();
-
- if (dwFieldFlag & FIELDFLAG_MULTISELECT) {
- cp.dwFlags |= PLBS_MULTIPLESEL;
- }
-
- cp.dwFlags |= PWS_VSCROLL;
-
- if (cp.dwFlags & PWS_AUTOFONTSIZE)
- cp.fFontSize = FFL_DEFAULTLISTBOXFONTSIZE;
-
- if (!m_pFontMap)
- m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler());
- cp.pFontMap = m_pFontMap;
-
- return cp;
-}
-
-CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp,
- CPDFSDK_PageView* pPageView) {
- CPWL_ListBox* pWnd = new CPWL_ListBox();
- pWnd->AttachFFLData(this);
- pWnd->Create(cp);
-
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- pWnd->SetFillerNotify(pIFormFiller);
-
- for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++)
- pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str());
-
- if (pWnd->HasFlag(PLBS_MULTIPLESEL)) {
- m_OriginSelections.clear();
-
- FX_BOOL bSetCaret = FALSE;
- for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
- if (m_pWidget->IsOptionSelected(i)) {
- if (!bSetCaret) {
- pWnd->SetCaret(i);
- bSetCaret = TRUE;
- }
- pWnd->Select(i);
- m_OriginSelections.insert(i);
- }
- }
- } else {
- for (int i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
- if (m_pWidget->IsOptionSelected(i)) {
- pWnd->Select(i);
- break;
- }
- }
- }
-
- pWnd->SetTopVisibleIndex(m_pWidget->GetTopVisibleIndex());
-
- return pWnd;
-}
-
-FX_BOOL CFFL_ListBox::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-}
-
-FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
- CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE);
- if (!pListBox)
- return FALSE;
-
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
- size_t nSelCount = 0;
- for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; ++i) {
- if (pListBox->IsItemSelected(i)) {
- if (m_OriginSelections.count(i) == 0)
- return TRUE;
-
- ++nSelCount;
- }
- }
-
- return nSelCount != m_OriginSelections.size();
- }
- return pListBox->GetCurSel() != m_pWidget->GetSelectedIndex(0);
-}
-
-void CFFL_ListBox::SaveData(CPDFSDK_PageView* pPageView) {
- ASSERT(m_pWidget);
-
- if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
- CFX_IntArray aOldSelect, aNewSelect;
-
- {
- for (int i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
- if (m_pWidget->IsOptionSelected(i)) {
- aOldSelect.Add(i);
- }
- }
- }
-
- int32_t nNewTopIndex = pListBox->GetTopVisibleIndex();
-
- m_pWidget->ClearSelection(FALSE);
-
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
- for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) {
- if (pListBox->IsItemSelected(i)) {
- m_pWidget->SetOptionSelection(i, TRUE, FALSE);
- aNewSelect.Add(i);
- }
- }
- } else {
- m_pWidget->SetOptionSelection(pListBox->GetCurSel(), TRUE, FALSE);
- aNewSelect.Add(pListBox->GetCurSel());
- }
-
- m_pWidget->SetTopVisibleIndex(nNewTopIndex);
- m_pWidget->ResetFieldAppearance(TRUE);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
-}
-
-void CFFL_ListBox::GetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa) {
- switch (type) {
- case CPDF_AAction::Validate:
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
- fa.sValue = L"";
- } else {
- if (CPWL_ListBox* pListBox =
- (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
- int32_t nCurSel = pListBox->GetCurSel();
- if (nCurSel >= 0)
- fa.sValue = m_pWidget->GetOptionLabel(nCurSel);
- }
- }
- break;
- case CPDF_AAction::LoseFocus:
- case CPDF_AAction::GetFocus:
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
- fa.sValue = L"";
- } else {
- int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
- if (nCurSel >= 0)
- fa.sValue = m_pWidget->GetOptionLabel(nCurSel);
- }
- break;
- default:
- break;
- }
-}
-
-void CFFL_ListBox::SetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa) {}
-
-void CFFL_ListBox::SaveState(CPDFSDK_PageView* pPageView) {
- ASSERT(pPageView);
-
- if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
- for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) {
- if (pListBox->IsItemSelected(i)) {
- m_State.Add(i);
- }
- }
- }
-}
-
-void CFFL_ListBox::RestoreState(CPDFSDK_PageView* pPageView) {
- if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
- for (int i = 0, sz = m_State.GetSize(); i < sz; i++)
- pListBox->Select(m_State[i]);
- }
-}
-
-CPWL_Wnd* CFFL_ListBox::ResetPDFWindow(CPDFSDK_PageView* pPageView,
- FX_BOOL bRestoreValue) {
- if (bRestoreValue)
- SaveState(pPageView);
-
- DestroyPDFWindow(pPageView);
-
- CPWL_Wnd* pRet = NULL;
-
- if (bRestoreValue) {
- RestoreState(pPageView);
- pRet = GetPDFWindow(pPageView, FALSE);
- } else {
- pRet = GetPDFWindow(pPageView, TRUE);
- }
-
- m_pWidget->UpdateField();
-
- return pRet;
-}
diff --git a/fpdfsdk/src/formfiller/FFL_PushButton.cpp b/fpdfsdk/src/formfiller/FFL_PushButton.cpp
deleted file mode 100644
index d5bd509718..0000000000
--- a/fpdfsdk/src/formfiller/FFL_PushButton.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_PushButton.h"
-
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/pdfwindow/PWL_SpecialButton.h"
-
-CFFL_PushButton::CFFL_PushButton(CPDFDoc_Environment* pApp,
- CPDFSDK_Annot* pAnnot)
- : CFFL_Button(pApp, pAnnot) {}
-
-CFFL_PushButton::~CFFL_PushButton() {}
-
-CPWL_Wnd* CFFL_PushButton::NewPDFWindow(const PWL_CREATEPARAM& cp,
- CPDFSDK_PageView* pPageView) {
- CPWL_PushButton* pWnd = new CPWL_PushButton();
- pWnd->Create(cp);
-
- return pWnd;
-}
-
-FX_BOOL CFFL_PushButton::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-}
-
-void CFFL_PushButton::OnDraw(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- CFFL_Button::OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
-}
diff --git a/fpdfsdk/src/formfiller/FFL_RadioButton.cpp b/fpdfsdk/src/formfiller/FFL_RadioButton.cpp
deleted file mode 100644
index 029bcf1a17..0000000000
--- a/fpdfsdk/src/formfiller/FFL_RadioButton.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_RadioButton.h"
-
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/pdfwindow/PWL_SpecialButton.h"
-
-CFFL_RadioButton::CFFL_RadioButton(CPDFDoc_Environment* pApp,
- CPDFSDK_Annot* pWidget)
- : CFFL_Button(pApp, pWidget) {}
-
-CFFL_RadioButton::~CFFL_RadioButton() {}
-
-CPWL_Wnd* CFFL_RadioButton::NewPDFWindow(const PWL_CREATEPARAM& cp,
- CPDFSDK_PageView* pPageView) {
- CPWL_RadioButton* pWnd = new CPWL_RadioButton();
- pWnd->Create(cp);
-
- pWnd->SetCheck(m_pWidget->IsChecked());
-
- return pWnd;
-}
-
-FX_BOOL CFFL_RadioButton::OnKeyDown(CPDFSDK_Annot* pAnnot,
- FX_UINT nKeyCode,
- FX_UINT nFlags) {
- switch (nKeyCode) {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- return TRUE;
- default:
- return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags);
- }
-}
-
-FX_BOOL CFFL_RadioButton::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- switch (nChar) {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space: {
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- ASSERT(pPageView);
-
- FX_BOOL bReset = FALSE;
- FX_BOOL bExit = FALSE;
-
- pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit, nFlags);
-
- if (bReset)
- return TRUE;
- if (bExit)
- return TRUE;
-
- CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-
- if (CPWL_RadioButton* pWnd =
- (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE))
- pWnd->SetCheck(TRUE);
- CommitData(pPageView, nFlags);
- return TRUE;
- }
- default:
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
- }
-}
-
-FX_BOOL CFFL_RadioButton::OnLButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_UINT nFlags,
- const CFX_FloatPoint& point) {
- CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point);
-
- if (IsValid()) {
- if (CPWL_RadioButton* pWnd =
- (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE))
- pWnd->SetCheck(TRUE);
-
- if (!CommitData(pPageView, nFlags))
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CFFL_RadioButton::IsDataChanged(CPDFSDK_PageView* pPageView) {
- if (CPWL_RadioButton* pWnd =
- (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) {
- return pWnd->IsChecked() != m_pWidget->IsChecked();
- }
-
- return FALSE;
-}
-
-void CFFL_RadioButton::SaveData(CPDFSDK_PageView* pPageView) {
- if (CPWL_RadioButton* pWnd =
- (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) {
- bool bNewChecked = pWnd->IsChecked();
-
- if (bNewChecked) {
- CPDF_FormField* pField = m_pWidget->GetFormField();
- for (int32_t i = 0, sz = pField->CountControls(); i < sz; i++) {
- if (CPDF_FormControl* pCtrl = pField->GetControl(i)) {
- if (pCtrl->IsChecked()) {
- break;
- }
- }
- }
- }
-
- m_pWidget->SetCheck(bNewChecked, false);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
-}
diff --git a/fpdfsdk/src/formfiller/FFL_TextField.cpp b/fpdfsdk/src/formfiller/FFL_TextField.cpp
deleted file mode 100644
index 42f2aad48f..0000000000
--- a/fpdfsdk/src/formfiller/FFL_TextField.cpp
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/formfiller/FFL_TextField.h"
-
-#include "fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h"
-#include "fpdfsdk/include/fsdk_common.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-
-CFFL_TextField::CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot)
- : CFFL_FormFiller(pApp, pAnnot), m_pFontMap(NULL) {
- m_State.nStart = m_State.nEnd = 0;
-}
-
-CFFL_TextField::~CFFL_TextField() {
- for (const auto& it : m_Maps)
- it.second->InvalidateFocusHandler(this);
- delete m_pFontMap;
-}
-
-PWL_CREATEPARAM CFFL_TextField::GetCreateParam() {
- PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
-
- int nFlags = m_pWidget->GetFieldFlags();
-
- if (nFlags & FIELDFLAG_PASSWORD) {
- cp.dwFlags |= PES_PASSWORD;
- }
-
- if (!(nFlags & FIELDFLAG_DONOTSPELLCHECK)) {
- }
-
- if (nFlags & FIELDFLAG_MULTILINE) {
- cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP;
-
- if (!(nFlags & FIELDFLAG_DONOTSCROLL)) {
- cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL;
- }
- } else {
- cp.dwFlags |= PES_CENTER;
-
- if (!(nFlags & FIELDFLAG_DONOTSCROLL)) {
- cp.dwFlags |= PES_AUTOSCROLL;
- }
- }
-
- if (nFlags & FIELDFLAG_COMB) {
- cp.dwFlags |= PES_CHARARRAY;
- }
-
- if (nFlags & FIELDFLAG_RICHTEXT) {
- cp.dwFlags |= PES_RICH;
- }
-
- cp.dwFlags |= PES_UNDO;
-
- switch (m_pWidget->GetAlignment()) {
- default:
- case BF_ALIGN_LEFT:
- cp.dwFlags |= PES_LEFT;
- break;
- case BF_ALIGN_MIDDLE:
- cp.dwFlags |= PES_MIDDLE;
- break;
- case BF_ALIGN_RIGHT:
- cp.dwFlags |= PES_RIGHT;
- break;
- }
-
- if (!m_pFontMap)
- m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler());
- cp.pFontMap = m_pFontMap;
- cp.pFocusHandler = this;
-
- return cp;
-}
-
-CPWL_Wnd* CFFL_TextField::NewPDFWindow(const PWL_CREATEPARAM& cp,
- CPDFSDK_PageView* pPageView) {
- CPWL_Edit* pWnd = new CPWL_Edit();
- pWnd->AttachFFLData(this);
- pWnd->Create(cp);
-
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- pWnd->SetFillerNotify(pIFormFiller);
-
- int32_t nMaxLen = m_pWidget->GetMaxLen();
- CFX_WideString swValue = m_pWidget->GetValue();
-
- if (nMaxLen > 0) {
- if (pWnd->HasFlag(PES_CHARARRAY)) {
- pWnd->SetCharArray(nMaxLen);
- pWnd->SetAlignFormatV(PEAV_CENTER);
- } else {
- pWnd->SetLimitChar(nMaxLen);
- }
- }
-
- pWnd->SetText(swValue.c_str());
- return pWnd;
-}
-
-FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot,
- FX_UINT nChar,
- FX_UINT nFlags) {
- switch (nChar) {
- case FWL_VKEY_Return:
- if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView);
- m_bValid = !m_bValid;
- CFX_FloatRect rcAnnot = pAnnot->GetRect();
- m_pApp->FFI_Invalidate(pAnnot->GetUnderlyingPage(), rcAnnot.left,
- rcAnnot.top, rcAnnot.right, rcAnnot.bottom);
-
- if (m_bValid) {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE))
- pWnd->SetFocus();
- } else {
- if (CommitData(pPageView, nFlags)) {
- DestroyPDFWindow(pPageView);
- return TRUE;
- }
- return FALSE;
- }
- }
- break;
- case FWL_VKEY_Escape: {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView);
- EscapeFiller(pPageView, TRUE);
- return TRUE;
- }
- }
-
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-}
-
-FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) {
- if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
- return pEdit->GetText() != m_pWidget->GetValue();
-
- return FALSE;
-}
-
-void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) {
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
- CFX_WideString sOldValue = m_pWidget->GetValue();
- CFX_WideString sNewValue = pWnd->GetText();
-
- m_pWidget->SetValue(sNewValue, FALSE);
- m_pWidget->ResetFieldAppearance(TRUE);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
-}
-
-void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa) {
- switch (type) {
- case CPDF_AAction::KeyStroke:
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
- fa.bFieldFull = pWnd->IsTextFull();
-
- fa.sValue = pWnd->GetText();
-
- if (fa.bFieldFull) {
- fa.sChange = L"";
- fa.sChangeEx = L"";
- }
- }
- break;
- case CPDF_AAction::Validate:
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
- fa.sValue = pWnd->GetText();
- }
- break;
- case CPDF_AAction::LoseFocus:
- case CPDF_AAction::GetFocus:
- fa.sValue = m_pWidget->GetValue();
- break;
- default:
- break;
- }
-}
-
-void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa) {
- switch (type) {
- case CPDF_AAction::KeyStroke:
- if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
- pEdit->SetFocus();
- pEdit->SetSel(fa.nSelStart, fa.nSelEnd);
- pEdit->ReplaceSel(fa.sChange.c_str());
- }
- break;
- default:
- break;
- }
-}
-
-FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew) {
- switch (type) {
- case CPDF_AAction::KeyStroke:
- return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) ||
- faOld.nSelStart != faNew.nSelStart ||
- faOld.sChange != faNew.sChange;
- default:
- break;
- }
-
- return FALSE;
-}
-
-void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) {
- ASSERT(pPageView);
-
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
- pWnd->GetSel(m_State.nStart, m_State.nEnd);
- m_State.sValue = pWnd->GetText();
- }
-}
-
-void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) {
- ASSERT(pPageView);
-
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE)) {
- pWnd->SetText(m_State.sValue.c_str());
- pWnd->SetSel(m_State.nStart, m_State.nEnd);
- }
-}
-
-CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView,
- FX_BOOL bRestoreValue) {
- if (bRestoreValue)
- SaveState(pPageView);
-
- DestroyPDFWindow(pPageView);
-
- CPWL_Wnd* pRet = NULL;
-
- if (bRestoreValue) {
- RestoreState(pPageView);
- pRet = GetPDFWindow(pPageView, FALSE);
- } else {
- pRet = GetPDFWindow(pPageView, TRUE);
- }
-
- m_pWidget->UpdateField();
-
- return pRet;
-}
-
-#ifdef PDF_ENABLE_XFA
-FX_BOOL CFFL_TextField::IsFieldFull(CPDFSDK_PageView* pPageView) {
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
- return pWnd->IsTextFull();
- }
-
- return FALSE;
-}
-#endif // PDF_ENABLE_XFA
-
-void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) {
- ASSERT(m_pApp);
- if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) {
- CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
- pEdit->SetCharSet(134);
- pEdit->SetCodePage(936);
-
- pEdit->SetReadyToInput();
- CFX_WideString wsText = pEdit->GetText();
- int nCharacters = wsText.GetLength();
- CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
- unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str();
- m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer,
- nCharacters, TRUE);
-
- pEdit->SetEditNotify(this);
- }
-}
-
-void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd) {}
-
-void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit) {}
diff --git a/fpdfsdk/src/fpdf_dataavail.cpp b/fpdfsdk/src/fpdf_dataavail.cpp
deleted file mode 100644
index 6dc706a001..0000000000
--- a/fpdfsdk/src/fpdf_dataavail.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_dataavail.h"
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/ipdf_data_avail.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "public/fpdf_formfill.h"
-
-// These checks are here because core/ and public/ cannot depend on each other.
-static_assert(IPDF_DataAvail::DataError == PDF_DATA_ERROR,
- "IPDF_DataAvail::DataError value mismatch");
-static_assert(IPDF_DataAvail::DataNotAvailable == PDF_DATA_NOTAVAIL,
- "IPDF_DataAvail::DataNotAvailable value mismatch");
-static_assert(IPDF_DataAvail::DataAvailable == PDF_DATA_AVAIL,
- "IPDF_DataAvail::DataAvailable value mismatch");
-
-static_assert(IPDF_DataAvail::LinearizationUnknown == PDF_LINEARIZATION_UNKNOWN,
- "IPDF_DataAvail::LinearizationUnknown value mismatch");
-static_assert(IPDF_DataAvail::NotLinearized == PDF_NOT_LINEARIZED,
- "IPDF_DataAvail::NotLinearized value mismatch");
-static_assert(IPDF_DataAvail::Linearized == PDF_LINEARIZED,
- "IPDF_DataAvail::Linearized value mismatch");
-
-static_assert(IPDF_DataAvail::FormError == PDF_FORM_ERROR,
- "IPDF_DataAvail::FormError value mismatch");
-static_assert(IPDF_DataAvail::FormNotAvailable == PDF_FORM_NOTAVAIL,
- "IPDF_DataAvail::FormNotAvailable value mismatch");
-static_assert(IPDF_DataAvail::FormAvailable == PDF_FORM_AVAIL,
- "IPDF_DataAvail::FormAvailable value mismatch");
-static_assert(IPDF_DataAvail::FormNotExist == PDF_FORM_NOTEXIST,
- "IPDF_DataAvail::FormNotExist value mismatch");
-
-class CFPDF_FileAvailWrap : public IPDF_DataAvail::FileAvail {
- public:
- CFPDF_FileAvailWrap() { m_pfileAvail = NULL; }
- ~CFPDF_FileAvailWrap() override {}
-
- void Set(FX_FILEAVAIL* pfileAvail) { m_pfileAvail = pfileAvail; }
-
- // IPDF_DataAvail::FileAvail:
- FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) override {
- return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size);
- }
-
- private:
- FX_FILEAVAIL* m_pfileAvail;
-};
-
-class CFPDF_FileAccessWrap : public IFX_FileRead {
- public:
- CFPDF_FileAccessWrap() { m_pFileAccess = NULL; }
- ~CFPDF_FileAccessWrap() override {}
-
- void Set(FPDF_FILEACCESS* pFile) { m_pFileAccess = pFile; }
-
- // IFX_FileRead
- FX_FILESIZE GetSize() override { return m_pFileAccess->m_FileLen; }
-
- FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
- return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset,
- (uint8_t*)buffer, size);
- }
-
- void Release() override {}
-
- private:
- FPDF_FILEACCESS* m_pFileAccess;
-};
-
-class CFPDF_DownloadHintsWrap : public IPDF_DataAvail::DownloadHints {
- public:
- explicit CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints) {
- m_pDownloadHints = pDownloadHints;
- }
- ~CFPDF_DownloadHintsWrap() override {}
-
- public:
- // IFX_DownloadHints
- void AddSegment(FX_FILESIZE offset, FX_DWORD size) override {
- m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size);
- }
-
- private:
- FX_DOWNLOADHINTS* m_pDownloadHints;
-};
-
-class CFPDF_DataAvail {
- public:
- CFPDF_DataAvail() { m_pDataAvail = NULL; }
-
- ~CFPDF_DataAvail() { delete m_pDataAvail; }
-
- IPDF_DataAvail* m_pDataAvail;
- CFPDF_FileAvailWrap m_FileAvail;
- CFPDF_FileAccessWrap m_FileRead;
-};
-
-DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail,
- FPDF_FILEACCESS* file) {
- CFPDF_DataAvail* pAvail = new CFPDF_DataAvail;
- pAvail->m_FileAvail.Set(file_avail);
- pAvail->m_FileRead.Set(file);
- pAvail->m_pDataAvail =
- IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAvail->m_FileRead);
- return pAvail;
-}
-
-DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail) {
- delete (CFPDF_DataAvail*)avail;
-}
-
-DLLEXPORT int STDCALL
-FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints) {
- if (!avail || !hints)
- return PDF_DATA_ERROR;
- CFPDF_DownloadHintsWrap hints_wrap(hints);
- return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap);
-}
-
-DLLEXPORT FPDF_DOCUMENT STDCALL
-FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) {
- CFPDF_DataAvail* pDataAvail = static_cast<CFPDF_DataAvail*>(avail);
- if (!pDataAvail)
- return nullptr;
-
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
- CPDF_Parser::Error error =
- pParser->StartAsyncParse(pDataAvail->m_pDataAvail->GetFileRead());
- if (error != CPDF_Parser::SUCCESS) {
- delete pParser;
- ProcessParseError(error);
- return nullptr;
- }
- pDataAvail->m_pDataAvail->SetDocument(pParser->GetDocument());
- CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS);
- return FPDFDocumentFromCPDFDocument(pParser->GetDocument());
-}
-
-DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc);
- return pDoc ? pDoc->GetParser()->GetFirstPageNo() : 0;
-}
-
-DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail,
- int page_index,
- FX_DOWNLOADHINTS* hints) {
- if (!avail || !hints)
- return PDF_DATA_ERROR;
- CFPDF_DownloadHintsWrap hints_wrap(hints);
- return ((CFPDF_DataAvail*)avail)
- ->m_pDataAvail->IsPageAvail(page_index, &hints_wrap);
-}
-
-DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail,
- FX_DOWNLOADHINTS* hints) {
- if (!avail || !hints)
- return PDF_FORM_ERROR;
- CFPDF_DownloadHintsWrap hints_wrap(hints);
- return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap);
-}
-
-DLLEXPORT int STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail) {
- if (!avail)
- return PDF_LINEARIZATION_UNKNOWN;
- return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF();
-}
diff --git a/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp b/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp
deleted file mode 100644
index 222fdc4be2..0000000000
--- a/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "public/fpdf_doc.h"
-#include "public/fpdfview.h"
-#include "testing/embedder_test.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-class FPDFDataAvailEmbeddertest : public EmbedderTest {};
-
-TEST_F(FPDFDataAvailEmbeddertest, TrailerUnterminated) {
- // Document must load without crashing but is too malformed to be available.
- EXPECT_FALSE(OpenDocument("trailer_unterminated.pdf"));
- EXPECT_FALSE(FPDFAvail_IsDocAvail(avail_, &hints_));
-}
-
-TEST_F(FPDFDataAvailEmbeddertest, TrailerAsHexstring) {
- // Document must load without crashing but is too malformed to be available.
- EXPECT_FALSE(OpenDocument("trailer_as_hexstring.pdf"));
- EXPECT_FALSE(FPDFAvail_IsDocAvail(avail_, &hints_));
-}
diff --git a/fpdfsdk/src/fpdf_ext.cpp b/fpdfsdk/src/fpdf_ext.cpp
deleted file mode 100644
index bf35cecd9c..0000000000
--- a/fpdfsdk/src/fpdf_ext.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_ext.h"
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fxcrt/fx_xml.h"
-#include "fpdfsdk/include/fsdk_define.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#endif // PDF_ENABLE_XFA
-
-#define FPDFSDK_UNSUPPORT_CALL 100
-
-class CFSDK_UnsupportInfo_Adapter {
- public:
- CFSDK_UnsupportInfo_Adapter(UNSUPPORT_INFO* unsp_info) {
- m_unsp_info = unsp_info;
- }
- void ReportError(int nErrorType);
-
- private:
- UNSUPPORT_INFO* m_unsp_info;
-};
-
-void CFSDK_UnsupportInfo_Adapter::ReportError(int nErrorType) {
- if (m_unsp_info && m_unsp_info->FSDK_UnSupport_Handler) {
- m_unsp_info->FSDK_UnSupport_Handler(m_unsp_info, nErrorType);
- }
-}
-
-void FreeUnsupportInfo(void* pData) {
- CFSDK_UnsupportInfo_Adapter* pAdapter = (CFSDK_UnsupportInfo_Adapter*)pData;
- delete pAdapter;
-}
-
-FX_BOOL FPDF_UnSupportError(int nError) {
- CFSDK_UnsupportInfo_Adapter* pAdapter =
- (CFSDK_UnsupportInfo_Adapter*)CPDF_ModuleMgr::Get()->GetPrivateData(
- (void*)FPDFSDK_UNSUPPORT_CALL);
-
- if (!pAdapter)
- return FALSE;
- pAdapter->ReportError(nError);
- return TRUE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL
-FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info) {
- if (!unsp_info || unsp_info->version != 1)
- return FALSE;
- CFSDK_UnsupportInfo_Adapter* pAdapter =
- new CFSDK_UnsupportInfo_Adapter(unsp_info);
-
- CPDF_ModuleMgr::Get()->SetPrivateData((void*)FPDFSDK_UNSUPPORT_CALL, pAdapter,
- &FreeUnsupportInfo);
-
- return TRUE;
-}
-
-void CheckUnSupportAnnot(CPDF_Document* pDoc, const CPDF_Annot* pPDFAnnot) {
- CFX_ByteString cbSubType = pPDFAnnot->GetSubType();
- if (cbSubType.Compare("3D") == 0) {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT);
- } else if (cbSubType.Compare("Screen") == 0) {
- const CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
- CFX_ByteString cbString;
- if (pAnnotDict->KeyExist("IT"))
- cbString = pAnnotDict->GetStringBy("IT");
- if (cbString.Compare("Img") != 0)
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_MEDIA);
- } else if (cbSubType.Compare("Movie") == 0) {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_MOVIE);
- } else if (cbSubType.Compare("Sound") == 0) {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SOUND);
- } else if (cbSubType.Compare("RichMedia") == 0) {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA);
- } else if (cbSubType.Compare("FileAttachment") == 0) {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT);
- } else if (cbSubType.Compare("Widget") == 0) {
- const CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
- CFX_ByteString cbString;
- if (pAnnotDict->KeyExist("FT")) {
- cbString = pAnnotDict->GetStringBy("FT");
- }
- if (cbString.Compare("Sig") == 0) {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SIG);
- }
- }
-}
-
-FX_BOOL CheckSharedForm(const CXML_Element* pElement, CFX_ByteString cbName) {
- int count = pElement->CountAttrs();
- int i = 0;
- for (i = 0; i < count; i++) {
- CFX_ByteString space, name;
- CFX_WideString value;
- pElement->GetAttrByIndex(i, space, name, value);
- if (space == "xmlns" && name == "adhocwf" &&
- value == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") {
- CXML_Element* pVersion = pElement->GetElement("adhocwf", cbName);
- if (!pVersion)
- continue;
- CFX_WideString wsContent = pVersion->GetContent(0); // == 1.1
- int nType = wsContent.GetInteger();
- switch (nType) {
- case 1:
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_ACROBAT);
- break;
- case 2:
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM);
- break;
- case 0:
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_EMAIL);
- break;
- }
- }
- }
-
- FX_DWORD nCount = pElement->CountChildren();
- for (i = 0; i < (int)nCount; i++) {
- CXML_Element::ChildType childType = pElement->GetChildType(i);
- if (childType == CXML_Element::Element) {
- CXML_Element* pChild = pElement->GetElement(i);
- if (CheckSharedForm(pChild, cbName))
- return TRUE;
- }
- }
- return FALSE;
-}
-
-void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code) {
- // Security
- if (err_code == FPDF_ERR_SECURITY) {
- FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY);
- return;
- }
- if (!pDoc)
- return;
-
- // Portfolios and Packages
- CPDF_Dictionary* pRootDict = pDoc->GetRoot();
- if (pRootDict) {
- CFX_ByteString cbString;
- if (pRootDict->KeyExist("Collection")) {
- FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION);
- return;
- }
- if (pRootDict->KeyExist("Names")) {
- CPDF_Dictionary* pNameDict = pRootDict->GetDictBy("Names");
- if (pNameDict && pNameDict->KeyExist("EmbeddedFiles")) {
- FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT);
- return;
- }
- if (pNameDict && pNameDict->KeyExist("JavaScript")) {
- CPDF_Dictionary* pJSDict = pNameDict->GetDictBy("JavaScript");
- CPDF_Array* pArray = pJSDict ? pJSDict->GetArrayBy("Names") : NULL;
- if (pArray) {
- int nCount = pArray->GetCount();
- for (int i = 0; i < nCount; i++) {
- CFX_ByteString cbStr = pArray->GetStringAt(i);
- if (cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) {
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW);
- return;
- }
- }
- }
- }
- }
- }
-
- // SharedForm
- CPDF_Metadata metaData(pDoc);
- const CXML_Element* pElement = metaData.GetRoot();
- if (pElement)
- CheckSharedForm(pElement, "workflowType");
-
-#ifndef PDF_ENABLE_XFA
- // XFA Forms
- CPDF_InterForm* pInterForm = new CPDF_InterForm(pDoc, FALSE);
- if (pInterForm->HasXFAForm()) {
- FPDF_UnSupportError(FPDF_UNSP_DOC_XFAFORM);
- }
- delete pInterForm;
-#endif // PDF_ENABLE_XFA
-}
-
-DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return PAGEMODE_UNKNOWN;
-
- CPDF_Dictionary* pRoot = pDoc->GetRoot();
- if (!pRoot)
- return PAGEMODE_UNKNOWN;
-
- CPDF_Object* pName = pRoot->GetElement("PageMode");
- if (!pName)
- return PAGEMODE_USENONE;
-
- CFX_ByteString strPageMode = pName->GetString();
- if (strPageMode.IsEmpty() || strPageMode.EqualNoCase("UseNone"))
- return PAGEMODE_USENONE;
- if (strPageMode.EqualNoCase("UseOutlines"))
- return PAGEMODE_USEOUTLINES;
- if (strPageMode.EqualNoCase("UseThumbs"))
- return PAGEMODE_USETHUMBS;
- if (strPageMode.EqualNoCase("FullScreen"))
- return PAGEMODE_FULLSCREEN;
- if (strPageMode.EqualNoCase("UseOC"))
- return PAGEMODE_USEOC;
- if (strPageMode.EqualNoCase("UseAttachments"))
- return PAGEMODE_USEATTACHMENTS;
-
- return PAGEMODE_UNKNOWN;
-}
diff --git a/fpdfsdk/src/fpdf_flatten.cpp b/fpdfsdk/src/fpdf_flatten.cpp
deleted file mode 100644
index cca63d6b76..0000000000
--- a/fpdfsdk/src/fpdf_flatten.cpp
+++ /dev/null
@@ -1,518 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_flatten.h"
-
-#include <algorithm>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_number.h"
-#include "fpdfsdk/include/fsdk_define.h"
-
-typedef CFX_ArrayTemplate<CPDF_Dictionary*> CPDF_ObjectArray;
-typedef CFX_ArrayTemplate<CFX_FloatRect> CPDF_RectArray;
-
-enum FPDF_TYPE { MAX, MIN };
-enum FPDF_VALUE { TOP, LEFT, RIGHT, BOTTOM };
-
-FX_BOOL IsValiableRect(CFX_FloatRect rect, CFX_FloatRect rcPage) {
- if (rect.left - rect.right > 0.000001f || rect.bottom - rect.top > 0.000001f)
- return FALSE;
-
- if (rect.left == 0.0f && rect.top == 0.0f && rect.right == 0.0f &&
- rect.bottom == 0.0f)
- return FALSE;
-
- if (!rcPage.IsEmpty()) {
- if (rect.left - rcPage.left < -10.000001f ||
- rect.right - rcPage.right > 10.000001f ||
- rect.top - rcPage.top > 10.000001f ||
- rect.bottom - rcPage.bottom < -10.000001f)
- return FALSE;
- }
-
- return TRUE;
-}
-
-void GetContentsRect(CPDF_Document* pDoc,
- CPDF_Dictionary* pDict,
- CPDF_RectArray* pRectArray) {
- std::unique_ptr<CPDF_Page> pPDFPage(new CPDF_Page);
- pPDFPage->Load(pDoc, pDict, FALSE);
- pPDFPage->ParseContent(nullptr);
-
- for (auto& pPageObject : *pPDFPage->GetPageObjectList()) {
- if (!pPageObject)
- continue;
-
- CFX_FloatRect rc;
- rc.left = pPageObject->m_Left;
- rc.right = pPageObject->m_Right;
- rc.bottom = pPageObject->m_Bottom;
- rc.top = pPageObject->m_Top;
- if (IsValiableRect(rc, pDict->GetRectBy("MediaBox")))
- pRectArray->Add(rc);
- }
-}
-
-void ParserStream(CPDF_Dictionary* pPageDic,
- CPDF_Dictionary* pStream,
- CPDF_RectArray* pRectArray,
- CPDF_ObjectArray* pObjectArray) {
- if (!pStream)
- return;
- CFX_FloatRect rect;
- if (pStream->KeyExist("Rect"))
- rect = pStream->GetRectBy("Rect");
- else if (pStream->KeyExist("BBox"))
- rect = pStream->GetRectBy("BBox");
-
- if (IsValiableRect(rect, pPageDic->GetRectBy("MediaBox")))
- pRectArray->Add(rect);
-
- pObjectArray->Add(pStream);
-}
-
-int ParserAnnots(CPDF_Document* pSourceDoc,
- CPDF_Dictionary* pPageDic,
- CPDF_RectArray* pRectArray,
- CPDF_ObjectArray* pObjectArray,
- int nUsage) {
- if (!pSourceDoc || !pPageDic)
- return FLATTEN_FAIL;
-
- GetContentsRect(pSourceDoc, pPageDic, pRectArray);
- CPDF_Array* pAnnots = pPageDic->GetArrayBy("Annots");
- if (!pAnnots)
- return FLATTEN_NOTHINGTODO;
-
- FX_DWORD dwSize = pAnnots->GetCount();
- for (int i = 0; i < (int)dwSize; i++) {
- CPDF_Dictionary* pAnnotDic = ToDictionary(pAnnots->GetElementValue(i));
- if (!pAnnotDic)
- continue;
-
- CFX_ByteString sSubtype = pAnnotDic->GetStringBy("Subtype");
- if (sSubtype == "Popup")
- continue;
-
- int nAnnotFlag = pAnnotDic->GetIntegerBy("F");
- if (nAnnotFlag & ANNOTFLAG_HIDDEN)
- continue;
-
- if (nUsage == FLAT_NORMALDISPLAY) {
- if (nAnnotFlag & ANNOTFLAG_INVISIBLE)
- continue;
-
- ParserStream(pPageDic, pAnnotDic, pRectArray, pObjectArray);
- } else {
- if (nAnnotFlag & ANNOTFLAG_PRINT)
- ParserStream(pPageDic, pAnnotDic, pRectArray, pObjectArray);
- }
- }
- return FLATTEN_SUCCESS;
-}
-
-FX_FLOAT GetMinMaxValue(CPDF_RectArray& array,
- FPDF_TYPE type,
- FPDF_VALUE value) {
- int nRects = array.GetSize();
- FX_FLOAT fRet = 0.0f;
-
- if (nRects <= 0)
- return 0.0f;
-
- FX_FLOAT* pArray = new FX_FLOAT[nRects];
- switch (value) {
- case LEFT: {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CFX_FloatRect(array.GetAt(i)).left;
-
- break;
- }
- case TOP: {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CFX_FloatRect(array.GetAt(i)).top;
-
- break;
- }
- case RIGHT: {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CFX_FloatRect(array.GetAt(i)).right;
-
- break;
- }
- case BOTTOM: {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CFX_FloatRect(array.GetAt(i)).bottom;
-
- break;
- }
- default:
- break;
- }
- fRet = pArray[0];
- if (type == MAX) {
- for (int i = 1; i < nRects; i++)
- if (fRet <= pArray[i])
- fRet = pArray[i];
- } else {
- for (int i = 1; i < nRects; i++)
- if (fRet >= pArray[i])
- fRet = pArray[i];
- }
- delete[] pArray;
- return fRet;
-}
-
-CFX_FloatRect CalculateRect(CPDF_RectArray* pRectArray) {
- CFX_FloatRect rcRet;
-
- rcRet.left = GetMinMaxValue(*pRectArray, MIN, LEFT);
- rcRet.top = GetMinMaxValue(*pRectArray, MAX, TOP);
- rcRet.right = GetMinMaxValue(*pRectArray, MAX, RIGHT);
- rcRet.bottom = GetMinMaxValue(*pRectArray, MIN, BOTTOM);
-
- return rcRet;
-}
-
-void SetPageContents(CFX_ByteString key,
- CPDF_Dictionary* pPage,
- CPDF_Document* pDocument) {
- CPDF_Object* pContentsObj = pPage->GetStreamBy("Contents");
- if (!pContentsObj) {
- pContentsObj = pPage->GetArrayBy("Contents");
- }
-
- if (!pContentsObj) {
- // Create a new contents dictionary
- if (!key.IsEmpty()) {
- CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
- pPage->SetAtReference("Contents", pDocument,
- pDocument->AddIndirectObject(pNewContents));
-
- CFX_ByteString sStream;
- sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str());
- pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
- FALSE);
- }
- return;
- }
-
- CPDF_Array* pContentsArray = NULL;
-
- switch (pContentsObj->GetType()) {
- case CPDF_Object::STREAM: {
- pContentsArray = new CPDF_Array;
- CPDF_Stream* pContents = pContentsObj->AsStream();
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContents);
- CPDF_StreamAcc acc;
- acc.LoadAllData(pContents);
- CFX_ByteString sStream = "q\n";
- CFX_ByteString sBody =
- CFX_ByteString((const FX_CHAR*)acc.GetData(), acc.GetSize());
- sStream = sStream + sBody + "\nQ";
- pContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
- FALSE);
- pContentsArray->AddReference(pDocument, dwObjNum);
- break;
- }
-
- case CPDF_Object::ARRAY: {
- pContentsArray = pContentsObj->AsArray();
- break;
- }
- default:
- break;
- }
-
- if (!pContentsArray)
- return;
-
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContentsArray);
- pPage->SetAtReference("Contents", pDocument, dwObjNum);
-
- if (!key.IsEmpty()) {
- CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
- dwObjNum = pDocument->AddIndirectObject(pNewContents);
- pContentsArray->AddReference(pDocument, dwObjNum);
-
- CFX_ByteString sStream;
- sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str());
- pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
- FALSE);
- }
-}
-
-CFX_Matrix GetMatrix(CFX_FloatRect rcAnnot,
- CFX_FloatRect rcStream,
- const CFX_Matrix& matrix) {
- if (rcStream.IsEmpty())
- return CFX_Matrix();
-
- matrix.TransformRect(rcStream);
- rcStream.Normalize();
-
- FX_FLOAT a = rcAnnot.Width() / rcStream.Width();
- FX_FLOAT d = rcAnnot.Height() / rcStream.Height();
-
- FX_FLOAT e = rcAnnot.left - rcStream.left * a;
- FX_FLOAT f = rcAnnot.bottom - rcStream.bottom * d;
- return CFX_Matrix(a, 0, 0, d, e, f);
-}
-
-void GetOffset(FX_FLOAT& fa,
- FX_FLOAT& fd,
- FX_FLOAT& fe,
- FX_FLOAT& ff,
- CFX_FloatRect rcAnnot,
- CFX_FloatRect rcStream,
- const CFX_Matrix& matrix) {
- FX_FLOAT fStreamWidth = 0.0f;
- FX_FLOAT fStreamHeight = 0.0f;
-
- if (matrix.a != 0 && matrix.d != 0) {
- fStreamWidth = rcStream.right - rcStream.left;
- fStreamHeight = rcStream.top - rcStream.bottom;
- } else {
- fStreamWidth = rcStream.top - rcStream.bottom;
- fStreamHeight = rcStream.right - rcStream.left;
- }
-
- FX_FLOAT x1 =
- matrix.a * rcStream.left + matrix.c * rcStream.bottom + matrix.e;
- FX_FLOAT y1 =
- matrix.b * rcStream.left + matrix.d * rcStream.bottom + matrix.f;
- FX_FLOAT x2 = matrix.a * rcStream.left + matrix.c * rcStream.top + matrix.e;
- FX_FLOAT y2 = matrix.b * rcStream.left + matrix.d * rcStream.top + matrix.f;
- FX_FLOAT x3 =
- matrix.a * rcStream.right + matrix.c * rcStream.bottom + matrix.e;
- FX_FLOAT y3 =
- matrix.b * rcStream.right + matrix.d * rcStream.bottom + matrix.f;
- FX_FLOAT x4 = matrix.a * rcStream.right + matrix.c * rcStream.top + matrix.e;
- FX_FLOAT y4 = matrix.b * rcStream.right + matrix.d * rcStream.top + matrix.f;
-
- FX_FLOAT left = std::min(std::min(x1, x2), std::min(x3, x4));
- FX_FLOAT bottom = std::min(std::min(y1, y2), std::min(y3, y4));
-
- fa = (rcAnnot.right - rcAnnot.left) / fStreamWidth;
- fd = (rcAnnot.top - rcAnnot.bottom) / fStreamHeight;
- fe = rcAnnot.left - left * fa;
- ff = rcAnnot.bottom - bottom * fd;
-}
-
-DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!page) {
- return FLATTEN_FAIL;
- }
-
- CPDF_Document* pDocument = pPage->m_pDocument;
- CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
-
- if (!pDocument || !pPageDict) {
- return FLATTEN_FAIL;
- }
-
- CPDF_ObjectArray ObjectArray;
- CPDF_RectArray RectArray;
-
- int iRet = FLATTEN_FAIL;
- iRet = ParserAnnots(pDocument, pPageDict, &RectArray, &ObjectArray, nFlag);
- if (iRet == FLATTEN_NOTHINGTODO || iRet == FLATTEN_FAIL)
- return iRet;
-
- CFX_FloatRect rcOriginalCB;
- CFX_FloatRect rcMerger = CalculateRect(&RectArray);
- CFX_FloatRect rcOriginalMB = pPageDict->GetRectBy("MediaBox");
-
- if (pPageDict->KeyExist("CropBox"))
- rcOriginalMB = pPageDict->GetRectBy("CropBox");
-
- if (rcOriginalMB.IsEmpty()) {
- rcOriginalMB = CFX_FloatRect(0.0f, 0.0f, 612.0f, 792.0f);
- }
-
- rcMerger.left =
- rcMerger.left < rcOriginalMB.left ? rcOriginalMB.left : rcMerger.left;
- rcMerger.right =
- rcMerger.right > rcOriginalMB.right ? rcOriginalMB.right : rcMerger.right;
- rcMerger.top =
- rcMerger.top > rcOriginalMB.top ? rcOriginalMB.top : rcMerger.top;
- rcMerger.bottom = rcMerger.bottom < rcOriginalMB.bottom ? rcOriginalMB.bottom
- : rcMerger.bottom;
-
- if (pPageDict->KeyExist("ArtBox"))
- rcOriginalCB = pPageDict->GetRectBy("ArtBox");
- else
- rcOriginalCB = rcOriginalMB;
-
- if (!rcOriginalMB.IsEmpty()) {
- CPDF_Array* pMediaBox = new CPDF_Array();
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.left));
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.bottom));
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.right));
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.top));
- pPageDict->SetAt("MediaBox", pMediaBox);
- }
-
- if (!rcOriginalCB.IsEmpty()) {
- CPDF_Array* pCropBox = new CPDF_Array();
- pCropBox->Add(new CPDF_Number(rcOriginalCB.left));
- pCropBox->Add(new CPDF_Number(rcOriginalCB.bottom));
- pCropBox->Add(new CPDF_Number(rcOriginalCB.right));
- pCropBox->Add(new CPDF_Number(rcOriginalCB.top));
- pPageDict->SetAt("ArtBox", pCropBox);
- }
-
- CPDF_Dictionary* pRes = pPageDict->GetDictBy("Resources");
- if (!pRes) {
- pRes = new CPDF_Dictionary;
- pPageDict->SetAt("Resources", pRes);
- }
-
- CPDF_Stream* pNewXObject = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pNewXObject);
- CPDF_Dictionary* pPageXObject = pRes->GetDictBy("XObject");
- if (!pPageXObject) {
- pPageXObject = new CPDF_Dictionary;
- pRes->SetAt("XObject", pPageXObject);
- }
-
- CFX_ByteString key = "";
- int nStreams = ObjectArray.GetSize();
-
- if (nStreams > 0) {
- for (int iKey = 0; /*iKey < 100*/; iKey++) {
- char sExtend[5] = {};
- FXSYS_itoa(iKey, sExtend, 10);
- key = CFX_ByteString("FFT") + CFX_ByteString(sExtend);
-
- if (!pPageXObject->KeyExist(key))
- break;
- }
- }
-
- SetPageContents(key, pPageDict, pDocument);
-
- CPDF_Dictionary* pNewXORes = NULL;
-
- if (!key.IsEmpty()) {
- pPageXObject->SetAtReference(key, pDocument, dwObjNum);
- CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict();
- pNewXORes = new CPDF_Dictionary;
- pNewOXbjectDic->SetAt("Resources", pNewXORes);
- pNewOXbjectDic->SetAtName("Type", "XObject");
- pNewOXbjectDic->SetAtName("Subtype", "Form");
- pNewOXbjectDic->SetAtInteger("FormType", 1);
- pNewOXbjectDic->SetAtName("Name", "FRM");
- CFX_FloatRect rcBBox = pPageDict->GetRectBy("ArtBox");
- pNewOXbjectDic->SetAtRect("BBox", rcBBox);
- }
-
- for (int i = 0; i < nStreams; i++) {
- CPDF_Dictionary* pAnnotDic = ObjectArray.GetAt(i);
- if (!pAnnotDic)
- continue;
-
- CFX_FloatRect rcAnnot = pAnnotDic->GetRectBy("Rect");
- rcAnnot.Normalize();
-
- CFX_ByteString sAnnotState = pAnnotDic->GetStringBy("AS");
- CPDF_Dictionary* pAnnotAP = pAnnotDic->GetDictBy("AP");
- if (!pAnnotAP)
- continue;
-
- CPDF_Stream* pAPStream = pAnnotAP->GetStreamBy("N");
- if (!pAPStream) {
- CPDF_Dictionary* pAPDic = pAnnotAP->GetDictBy("N");
- if (!pAPDic)
- continue;
-
- if (!sAnnotState.IsEmpty()) {
- pAPStream = pAPDic->GetStreamBy(sAnnotState);
- } else {
- auto it = pAPDic->begin();
- if (it != pAPDic->end()) {
- CPDF_Object* pFirstObj = it->second;
- if (pFirstObj) {
- if (pFirstObj->IsReference())
- pFirstObj = pFirstObj->GetDirect();
- if (!pFirstObj->IsStream())
- continue;
- pAPStream = pFirstObj->AsStream();
- }
- }
- }
- }
- if (!pAPStream)
- continue;
-
- CPDF_Dictionary* pAPDic = pAPStream->GetDict();
- CFX_Matrix matrix = pAPDic->GetMatrixBy("Matrix");
-
- CFX_FloatRect rcStream;
- if (pAPDic->KeyExist("Rect"))
- rcStream = pAPDic->GetRectBy("Rect");
- else if (pAPDic->KeyExist("BBox"))
- rcStream = pAPDic->GetRectBy("BBox");
-
- if (rcStream.IsEmpty())
- continue;
-
- CPDF_Object* pObj = pAPStream;
-
- if (pObj) {
- CPDF_Dictionary* pObjDic = pObj->GetDict();
- if (pObjDic) {
- pObjDic->SetAtName("Type", "XObject");
- pObjDic->SetAtName("Subtype", "Form");
- }
- }
-
- CPDF_Dictionary* pXObject = pNewXORes->GetDictBy("XObject");
- if (!pXObject) {
- pXObject = new CPDF_Dictionary;
- pNewXORes->SetAt("XObject", pXObject);
- }
-
- CFX_ByteString sFormName;
- sFormName.Format("F%d", i);
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pObj);
- pXObject->SetAtReference(sFormName, pDocument, dwObjNum);
-
- CPDF_StreamAcc acc;
- acc.LoadAllData(pNewXObject);
-
- const uint8_t* pData = acc.GetData();
- CFX_ByteString sStream(pData, acc.GetSize());
- CFX_ByteString sTemp;
-
- if (matrix.IsIdentity()) {
- matrix.a = 1.0f;
- matrix.b = 0.0f;
- matrix.c = 0.0f;
- matrix.d = 1.0f;
- matrix.e = 0.0f;
- matrix.f = 0.0f;
- }
-
- CFX_Matrix m = GetMatrix(rcAnnot, rcStream, matrix);
- sTemp.Format("q %f 0 0 %f %f %f cm /%s Do Q\n", m.a, m.d, m.e, m.f,
- sFormName.c_str());
- sStream += sTemp;
-
- pNewXObject->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
- FALSE);
- }
- pPageDict->RemoveAt("Annots");
-
- ObjectArray.RemoveAll();
- RectArray.RemoveAll();
-
- return FLATTEN_SUCCESS;
-}
diff --git a/fpdfsdk/src/fpdf_progressive.cpp b/fpdfsdk/src/fpdf_progressive.cpp
deleted file mode 100644
index b6fd8e071e..0000000000
--- a/fpdfsdk/src/fpdf_progressive.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_progressive.h"
-
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_rendercontext.h"
-#include "public/fpdfview.h"
-
-// These checks are here because core/ and public/ cannot depend on each other.
-static_assert(CPDF_ProgressiveRenderer::Ready == FPDF_RENDER_READER,
- "CPDF_ProgressiveRenderer::Ready value mismatch");
-static_assert(CPDF_ProgressiveRenderer::ToBeContinued ==
- FPDF_RENDER_TOBECOUNTINUED,
- "CPDF_ProgressiveRenderer::ToBeContinued value mismatch");
-static_assert(CPDF_ProgressiveRenderer::Done == FPDF_RENDER_DONE,
- "CPDF_ProgressiveRenderer::Done value mismatch");
-static_assert(CPDF_ProgressiveRenderer::Failed == FPDF_RENDER_FAILED,
- "CPDF_ProgressiveRenderer::Failed value mismatch");
-
-DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags,
- IFSDK_PAUSE* pause) {
- if (!bitmap || !pause || pause->version != 1)
- return FPDF_RENDER_FAILED;
-
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return FPDF_RENDER_FAILED;
-
- CRenderContext* pContext = new CRenderContext;
- pPage->SetPrivateData((void*)1, pContext, DropContext);
-#ifdef _SKIA_SUPPORT_
- pContext->m_pDevice = new CFX_SkiaDevice;
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_SkiaDevice*)pContext->m_pDevice)
- ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
- else
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
-#else
- pContext->m_pDevice = new CFX_FxgeDevice;
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_FxgeDevice*)pContext->m_pDevice)
- ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
- else
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
-#endif
- IFSDK_PAUSE_Adapter IPauseAdapter(pause);
-
- FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
- rotate, flags, FALSE, &IPauseAdapter);
-
- if (pContext->m_pRenderer) {
- return CPDF_ProgressiveRenderer::ToFPDFStatus(
- pContext->m_pRenderer->GetStatus());
- }
- return FPDF_RENDER_FAILED;
-}
-
-DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,
- IFSDK_PAUSE* pause) {
- if (!pause || pause->version != 1)
- return FPDF_RENDER_FAILED;
-
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return FPDF_RENDER_FAILED;
-
- CRenderContext* pContext = (CRenderContext*)pPage->GetPrivateData((void*)1);
- if (pContext && pContext->m_pRenderer) {
- IFSDK_PAUSE_Adapter IPauseAdapter(pause);
- pContext->m_pRenderer->Continue(&IPauseAdapter);
- return CPDF_ProgressiveRenderer::ToFPDFStatus(
- pContext->m_pRenderer->GetStatus());
- }
- return FPDF_RENDER_FAILED;
-}
-
-DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
-
- CRenderContext* pContext = (CRenderContext*)pPage->GetPrivateData((void*)1);
- if (!pContext)
- return;
-
- pContext->m_pDevice->RestoreState();
- delete pContext;
- pPage->RemovePrivateData((void*)1);
-}
diff --git a/fpdfsdk/src/fpdf_searchex.cpp b/fpdfsdk/src/fpdf_searchex.cpp
deleted file mode 100644
index 96c5e53309..0000000000
--- a/fpdfsdk/src/fpdf_searchex.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_searchex.h"
-
-#include "core/include/fpdftext/fpdf_text.h"
-
-DLLEXPORT int STDCALL
-FPDFText_GetCharIndexFromTextIndex(FPDF_TEXTPAGE text_page, int nTextIndex) {
- if (!text_page)
- return -1;
- return ((IPDF_TextPage*)text_page)->CharIndexFromTextIndex(nTextIndex);
-}
diff --git a/fpdfsdk/src/fpdf_sysfontinfo.cpp b/fpdfsdk/src/fpdf_sysfontinfo.cpp
deleted file mode 100644
index 655c4a22bb..0000000000
--- a/fpdfsdk/src/fpdf_sysfontinfo.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_sysfontinfo.h"
-
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/pdfwindow/PWL_FontMap.h"
-
-class CFX_ExternalFontInfo final : public IFX_SystemFontInfo {
- public:
- explicit CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) {}
-
- void Release() override {
- if (m_pInfo->Release)
- m_pInfo->Release(m_pInfo);
- delete this;
- }
-
- FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override {
- if (m_pInfo->EnumFonts) {
- m_pInfo->EnumFonts(m_pInfo, pMapper);
- return TRUE;
- }
- return FALSE;
- }
-
- void* MapFont(int weight,
- FX_BOOL bItalic,
- int charset,
- int pitch_family,
- const FX_CHAR* family,
- int& iExact) override {
- if (m_pInfo->MapFont)
- return m_pInfo->MapFont(m_pInfo, weight, bItalic, charset, pitch_family,
- family, &iExact);
- return NULL;
- }
-
- void* GetFont(const FX_CHAR* family) override {
- if (m_pInfo->GetFont)
- return m_pInfo->GetFont(m_pInfo, family);
- return NULL;
- }
-
- FX_DWORD GetFontData(void* hFont,
- FX_DWORD table,
- uint8_t* buffer,
- FX_DWORD size) override {
- if (m_pInfo->GetFontData)
- return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size);
- return 0;
- }
-
- FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override {
- if (!m_pInfo->GetFaceName)
- return FALSE;
- FX_DWORD size = m_pInfo->GetFaceName(m_pInfo, hFont, NULL, 0);
- if (size == 0)
- return FALSE;
- char* buffer = FX_Alloc(char, size);
- size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size);
- name = CFX_ByteString(buffer, size);
- FX_Free(buffer);
- return TRUE;
- }
-
- FX_BOOL GetFontCharset(void* hFont, int& charset) override {
- if (m_pInfo->GetFontCharset) {
- charset = m_pInfo->GetFontCharset(m_pInfo, hFont);
- return TRUE;
- }
- return FALSE;
- }
-
- void DeleteFont(void* hFont) override {
- if (m_pInfo->DeleteFont)
- m_pInfo->DeleteFont(m_pInfo, hFont);
- }
-
- private:
- ~CFX_ExternalFontInfo() override {}
-
- FPDF_SYSFONTINFO* const m_pInfo;
-};
-
-DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper,
- const char* name,
- int charset) {
- ((CFX_FontMapper*)mapper)->AddInstalledFont(name, charset);
-}
-
-DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt) {
- if (pFontInfoExt->version != 1)
- return;
-
- CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo(
- new CFX_ExternalFontInfo(pFontInfoExt));
-}
-
-DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap() {
- return CPWL_FontMap::defaultTTFMap;
-}
-
-struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO {
- IFX_SystemFontInfo* m_pFontInfo;
-};
-
-static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) {
- ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->Release();
-}
-
-static void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper) {
- ((FPDF_SYSFONTINFO_DEFAULT*)pThis)
- ->m_pFontInfo->EnumFontList((CFX_FontMapper*)pMapper);
-}
-
-static void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis,
- int weight,
- int bItalic,
- int charset,
- int pitch_family,
- const char* family,
- int* bExact) {
- return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)
- ->m_pFontInfo->MapFont(weight, bItalic, charset, pitch_family, family,
- *bExact);
-}
-
-void* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family) {
- return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFont(family);
-}
-
-static unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis,
- void* hFont,
- unsigned int table,
- unsigned char* buffer,
- unsigned long buf_size) {
- return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)
- ->m_pFontInfo->GetFontData(hFont, table, buffer, buf_size);
-}
-
-static unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis,
- void* hFont,
- char* buffer,
- unsigned long buf_size) {
- CFX_ByteString name;
- if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)
- ->m_pFontInfo->GetFaceName(hFont, name))
- return 0;
- if (name.GetLength() >= (long)buf_size)
- return name.GetLength() + 1;
- FXSYS_strcpy(buffer, name);
- return name.GetLength() + 1;
-}
-
-static int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont) {
- int charset;
- if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)
- ->m_pFontInfo->GetFontCharset(hFont, charset))
- return 0;
- return charset;
-}
-
-static void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont) {
- ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->DeleteFont(hFont);
-}
-
-DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo() {
- IFX_SystemFontInfo* pFontInfo = IFX_SystemFontInfo::CreateDefault(nullptr);
- if (!pFontInfo)
- return NULL;
-
- FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt =
- FX_Alloc(FPDF_SYSFONTINFO_DEFAULT, 1);
- pFontInfoExt->DeleteFont = DefaultDeleteFont;
- pFontInfoExt->EnumFonts = DefaultEnumFonts;
- pFontInfoExt->GetFaceName = DefaultGetFaceName;
- pFontInfoExt->GetFont = DefaultGetFont;
- pFontInfoExt->GetFontCharset = DefaultGetFontCharset;
- pFontInfoExt->GetFontData = DefaultGetFontData;
- pFontInfoExt->MapFont = DefaultMapFont;
- pFontInfoExt->Release = DefaultRelease;
- pFontInfoExt->version = 1;
- pFontInfoExt->m_pFontInfo = pFontInfo;
- return pFontInfoExt;
-}
diff --git a/fpdfsdk/src/fpdf_transformpage.cpp b/fpdfsdk/src/fpdf_transformpage.cpp
deleted file mode 100644
index f3c2576dd5..0000000000
--- a/fpdfsdk/src/fpdf_transformpage.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_transformpage.h"
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_number.h"
-#include "core/include/fpdfapi/cpdf_reference.h"
-#include "fpdfsdk/include/fsdk_define.h"
-
-namespace {
-
-void SetBoundingBox(CPDF_Page* page,
- const CFX_ByteStringC& key,
- float left,
- float bottom,
- float right,
- float top) {
- CPDF_Dictionary* pPageDict = page->m_pFormDict;
- CPDF_Array* pBoundingBoxArray = new CPDF_Array;
- pBoundingBoxArray->Add(new CPDF_Number(left));
- pBoundingBoxArray->Add(new CPDF_Number(bottom));
- pBoundingBoxArray->Add(new CPDF_Number(right));
- pBoundingBoxArray->Add(new CPDF_Number(top));
- pPageDict->SetAt(key, pBoundingBoxArray);
-}
-
-FPDF_BOOL GetBoundingBox(CPDF_Page* page,
- const CFX_ByteStringC& key,
- float* left,
- float* bottom,
- float* right,
- float* top) {
- CPDF_Dictionary* pPageDict = page->m_pFormDict;
- CPDF_Array* pArray = pPageDict->GetArrayBy(key);
- if (!pArray)
- return FALSE;
-
- *left = pArray->GetFloatAt(0);
- *bottom = pArray->GetFloatAt(1);
- *right = pArray->GetFloatAt(2);
- *top = pArray->GetFloatAt(3);
- return TRUE;
-}
-
-} // namespace
-
-DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page,
- float left,
- float bottom,
- float right,
- float top) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
-
- SetBoundingBox(pPage, "MediaBox", left, bottom, right, top);
-}
-
-DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page,
- float left,
- float bottom,
- float right,
- float top) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
-
- SetBoundingBox(pPage, "CropBox", left, bottom, right, top);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page,
- float* left,
- float* bottom,
- float* right,
- float* top) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- return pPage && GetBoundingBox(pPage, "MediaBox", left, bottom, right, top);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page,
- float* left,
- float* bottom,
- float* right,
- float* top) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- return pPage && GetBoundingBox(pPage, "CropBox", left, bottom, right, top);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page,
- FS_MATRIX* matrix,
- FS_RECTF* clipRect) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return FALSE;
-
- CFX_ByteTextBuf textBuf;
- textBuf << "q ";
- CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right,
- clipRect->top);
- rect.Normalize();
- CFX_ByteString bsClipping;
- bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom,
- rect.Width(), rect.Height());
- textBuf << bsClipping;
-
- CFX_ByteString bsMatix;
- bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c,
- matrix->d, matrix->e, matrix->f);
- textBuf << bsMatix;
-
- CPDF_Dictionary* pPageDic = pPage->m_pFormDict;
- CPDF_Object* pContentObj =
- pPageDic ? pPageDic->GetElement("Contents") : nullptr;
- if (!pContentObj)
- pContentObj = pPageDic ? pPageDic->GetArrayBy("Contents") : nullptr;
- if (!pContentObj)
- return FALSE;
-
- CPDF_Dictionary* pDic = new CPDF_Dictionary;
- CPDF_Stream* pStream = new CPDF_Stream(nullptr, 0, pDic);
- pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE);
- CPDF_Document* pDoc = pPage->m_pDocument;
- if (!pDoc)
- return FALSE;
- pDoc->AddIndirectObject(pStream);
-
- pDic = new CPDF_Dictionary;
- CPDF_Stream* pEndStream = new CPDF_Stream(nullptr, 0, pDic);
- pEndStream->SetData((const uint8_t*)" Q", 2, FALSE, FALSE);
- pDoc->AddIndirectObject(pEndStream);
-
- CPDF_Array* pContentArray = nullptr;
- if (CPDF_Array* pArray = ToArray(pContentObj)) {
- pContentArray = pArray;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- pContentArray->AddReference(pDoc, pEndStream);
- } else if (CPDF_Reference* pReference = ToReference(pContentObj)) {
- CPDF_Object* pDirectObj = pReference->GetDirect();
- if (pDirectObj) {
- if (CPDF_Array* pArray = pDirectObj->AsArray()) {
- pContentArray = pArray;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- pContentArray->AddReference(pDoc, pEndStream);
- } else if (pDirectObj->IsStream()) {
- pContentArray = new CPDF_Array();
- pContentArray->AddReference(pDoc, pStream->GetObjNum());
- pContentArray->AddReference(pDoc, pDirectObj->GetObjNum());
- pContentArray->AddReference(pDoc, pEndStream);
- pPageDic->SetAtReference("Contents", pDoc,
- pDoc->AddIndirectObject(pContentArray));
- }
- }
- }
-
- // Need to transform the patterns as well.
- CPDF_Dictionary* pRes = pPageDic->GetDictBy("Resources");
- if (pRes) {
- CPDF_Dictionary* pPattenDict = pRes->GetDictBy("Pattern");
- if (pPattenDict) {
- for (const auto& it : *pPattenDict) {
- CPDF_Object* pObj = it.second;
- if (pObj->IsReference())
- pObj = pObj->GetDirect();
-
- CPDF_Dictionary* pDict = nullptr;
- if (pObj->IsDictionary())
- pDict = pObj->AsDictionary();
- else if (CPDF_Stream* pStream = pObj->AsStream())
- pDict = pStream->GetDict();
- else
- continue;
-
- CFX_Matrix m = pDict->GetMatrixBy("Matrix");
- CFX_Matrix t = *(CFX_Matrix*)matrix;
- m.Concat(t);
- pDict->SetAtMatrix("Matrix", m);
- }
- }
- }
-
- return TRUE;
-}
-
-DLLEXPORT void STDCALL
-FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f) {
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object;
- if (!pPageObj)
- return;
- CFX_Matrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d,
- (FX_FLOAT)e, (FX_FLOAT)f);
-
- // Special treatment to shading object, because the ClipPath for shading
- // object is already transformed.
- if (!pPageObj->IsShading())
- pPageObj->TransformClipPath(matrix);
- pPageObj->TransformGeneralState(matrix);
-}
-
-DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left,
- float bottom,
- float right,
- float top) {
- CPDF_ClipPath* pNewClipPath = new CPDF_ClipPath();
- pNewClipPath->GetModify();
- CPDF_Path Path;
- Path.GetModify();
- Path.AppendRect(left, bottom, right, top);
- pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, FALSE);
- return pNewClipPath;
-}
-
-DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) {
- delete (CPDF_ClipPath*)clipPath;
-}
-
-void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) {
- const CFX_PathData* pPathData = path;
- if (!pPathData)
- return;
-
- FX_PATHPOINT* pPoints = pPathData->GetPoints();
-
- if (path.IsRect()) {
- buf << (pPoints[0].m_PointX) << " " << (pPoints[0].m_PointY) << " "
- << (pPoints[2].m_PointX - pPoints[0].m_PointX) << " "
- << (pPoints[2].m_PointY - pPoints[0].m_PointY) << " re\n";
- return;
- }
-
- CFX_ByteString temp;
- for (int i = 0; i < pPathData->GetPointCount(); i++) {
- buf << (pPoints[i].m_PointX) << " " << (pPoints[i].m_PointY);
- int point_type = pPoints[i].m_Flag & FXPT_TYPE;
- if (point_type == FXPT_MOVETO) {
- buf << " m\n";
- } else if (point_type == FXPT_BEZIERTO) {
- buf << " " << (pPoints[i + 1].m_PointX) << " "
- << (pPoints[i + 1].m_PointY) << " " << (pPoints[i + 2].m_PointX)
- << " " << (pPoints[i + 2].m_PointY);
- if (pPoints[i + 2].m_Flag & FXPT_CLOSEFIGURE)
- buf << " c h\n";
- else
- buf << " c\n";
- i += 2;
- } else if (point_type == FXPT_LINETO) {
- if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE)
- buf << " l h\n";
- else
- buf << " l\n";
- }
- }
-}
-
-DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page,
- FPDF_CLIPPATH clipPath) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
-
- CPDF_Dictionary* pPageDic = pPage->m_pFormDict;
- CPDF_Object* pContentObj =
- pPageDic ? pPageDic->GetElement("Contents") : nullptr;
- if (!pContentObj)
- pContentObj = pPageDic ? pPageDic->GetArrayBy("Contents") : nullptr;
- if (!pContentObj)
- return;
-
- CFX_ByteTextBuf strClip;
- CPDF_ClipPath* pClipPath = (CPDF_ClipPath*)clipPath;
- FX_DWORD i;
- for (i = 0; i < pClipPath->GetPathCount(); i++) {
- CPDF_Path path = pClipPath->GetPath(i);
- int iClipType = pClipPath->GetClipType(i);
- if (path.GetPointCount() == 0) {
- // Empty clipping (totally clipped out)
- strClip << "0 0 m W n ";
- } else {
- OutputPath(strClip, path);
- if (iClipType == FXFILL_WINDING)
- strClip << "W n\n";
- else
- strClip << "W* n\n";
- }
- }
- CPDF_Dictionary* pDic = new CPDF_Dictionary;
- CPDF_Stream* pStream = new CPDF_Stream(nullptr, 0, pDic);
- pStream->SetData(strClip.GetBuffer(), strClip.GetSize(), FALSE, FALSE);
- CPDF_Document* pDoc = pPage->m_pDocument;
- if (!pDoc)
- return;
- pDoc->AddIndirectObject(pStream);
-
- CPDF_Array* pContentArray = nullptr;
- if (CPDF_Array* pArray = ToArray(pContentObj)) {
- pContentArray = pArray;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- } else if (CPDF_Reference* pReference = ToReference(pContentObj)) {
- CPDF_Object* pDirectObj = pReference->GetDirect();
- if (pDirectObj) {
- if (CPDF_Array* pArray = pDirectObj->AsArray()) {
- pContentArray = pArray;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- } else if (pDirectObj->IsStream()) {
- pContentArray = new CPDF_Array();
- pContentArray->AddReference(pDoc, pStream->GetObjNum());
- pContentArray->AddReference(pDoc, pDirectObj->GetObjNum());
- pPageDic->SetAtReference("Contents", pDoc,
- pDoc->AddIndirectObject(pContentArray));
- }
- }
- }
-}
diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp
deleted file mode 100644
index a6d09b70cf..0000000000
--- a/fpdfsdk/src/fpdfdoc.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_doc.h"
-
-#include <set>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "third_party/base/stl_util.h"
-
-namespace {
-
-int THISMODULE = 0;
-
-CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree,
- CPDF_Bookmark bookmark,
- const CFX_WideString& title,
- std::set<CPDF_Dictionary*>* visited) {
- // Return if already checked to avoid circular calling.
- if (pdfium::ContainsKey(*visited, bookmark.GetDict()))
- return CPDF_Bookmark();
- visited->insert(bookmark.GetDict());
-
- if (bookmark.GetDict() &&
- bookmark.GetTitle().CompareNoCase(title.c_str()) == 0) {
- // First check this item.
- return bookmark;
- }
-
- // Go into children items.
- CPDF_Bookmark child = tree.GetFirstChild(bookmark);
- while (child.GetDict() && !pdfium::ContainsKey(*visited, child.GetDict())) {
- // Check this item and its children.
- CPDF_Bookmark found = FindBookmark(tree, child, title, visited);
- if (found.GetDict())
- return found;
- child = tree.GetNextSibling(child);
- }
- return CPDF_Bookmark();
-}
-
-void ReleaseLinkList(void* data) {
- delete (CPDF_LinkList*)data;
-}
-
-CPDF_LinkList* GetLinkList(CPDF_Page* page) {
- if (!page)
- return nullptr;
-
- // Link list is stored with the document
- CPDF_Document* pDoc = page->m_pDocument;
- CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE);
- if (!pLinkList) {
- pLinkList = new CPDF_LinkList;
- pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList);
- }
- return pLinkList;
-}
-
-} // namespace
-
-DLLEXPORT FPDF_BOOKMARK STDCALL
-FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
- CPDF_BookmarkTree tree(pDoc);
- CPDF_Bookmark bookmark =
- CPDF_Bookmark(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- return tree.GetFirstChild(bookmark).GetDict();
-}
-
-DLLEXPORT FPDF_BOOKMARK STDCALL
-FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) {
- if (!pDict)
- return nullptr;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
- CPDF_BookmarkTree tree(pDoc);
- CPDF_Bookmark bookmark =
- CPDF_Bookmark(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- return tree.GetNextSibling(bookmark).GetDict();
-}
-
-DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK pDict,
- void* buffer,
- unsigned long buflen) {
- if (!pDict)
- return 0;
- CPDF_Bookmark bookmark(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- CFX_WideString title = bookmark.GetTitle();
- CFX_ByteString encodedTitle = title.UTF16LE_Encode();
- unsigned long len = encodedTitle.GetLength();
- if (buffer && buflen >= len) {
- FXSYS_memcpy(buffer, encodedTitle.c_str(), len);
- }
- return len;
-}
-
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document,
- FPDF_WIDESTRING title) {
- if (!title || title[0] == 0)
- return nullptr;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
- CPDF_BookmarkTree tree(pDoc);
- FX_STRSIZE len = CFX_WideString::WStringLength(title);
- CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len);
- std::set<CPDF_Dictionary*> visited;
- return FindBookmark(tree, CPDF_Bookmark(), encodedTitle, &visited).GetDict();
-}
-
-DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document,
- FPDF_BOOKMARK pDict) {
- if (!pDict)
- return nullptr;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
- CPDF_Bookmark bookmark(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- CPDF_Dest dest = bookmark.GetDest(pDoc);
- if (dest.GetObject())
- return dest.GetObject();
- // If this bookmark is not directly associated with a dest, we try to get
- // action
- CPDF_Action action = bookmark.GetAction();
- if (!action.GetDict())
- return nullptr;
- return action.GetDest(pDoc).GetObject();
-}
-
-DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) {
- if (!pDict)
- return NULL;
- CPDF_Bookmark bookmark(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- return bookmark.GetAction().GetDict();
-}
-
-DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) {
- if (!pDict)
- return PDFACTION_UNSUPPORTED;
-
- CPDF_Action action(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- CPDF_Action::ActionType type = action.GetType();
- switch (type) {
- case CPDF_Action::GoTo:
- return PDFACTION_GOTO;
- case CPDF_Action::GoToR:
- return PDFACTION_REMOTEGOTO;
- case CPDF_Action::URI:
- return PDFACTION_URI;
- case CPDF_Action::Launch:
- return PDFACTION_LAUNCH;
- default:
- return PDFACTION_UNSUPPORTED;
- }
-}
-
-DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document,
- FPDF_ACTION pDict) {
- if (!pDict)
- return nullptr;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
- CPDF_Action action(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- return action.GetDest(pDoc).GetObject();
-}
-
-DLLEXPORT unsigned long STDCALL
-FPDFAction_GetFilePath(FPDF_ACTION pDict, void* buffer, unsigned long buflen) {
- unsigned long type = FPDFAction_GetType(pDict);
- if (type != PDFACTION_REMOTEGOTO && type != PDFACTION_LAUNCH)
- return 0;
-
- CPDF_Action action(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- CFX_ByteString path = action.GetFilePath().UTF8Encode();
- unsigned long len = path.GetLength() + 1;
- if (buffer && buflen >= len)
- FXSYS_memcpy(buffer, path.c_str(), len);
- return len;
-}
-
-DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document,
- FPDF_ACTION pDict,
- void* buffer,
- unsigned long buflen) {
- if (!pDict)
- return 0;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return 0;
- CPDF_Action action(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- CFX_ByteString path = action.GetURI(pDoc);
- unsigned long len = path.GetLength() + 1;
- if (buffer && buflen >= len)
- FXSYS_memcpy(buffer, path.c_str(), len);
- return len;
-}
-
-DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document,
- FPDF_DEST pDict) {
- if (!pDict)
- return 0;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return 0;
- CPDF_Dest dest(static_cast<CPDF_Array*>(pDict));
- return dest.GetPageIndex(pDoc);
-}
-
-DLLEXPORT FPDF_LINK STDCALL
-FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return nullptr;
-
- CPDF_LinkList* pLinkList = GetLinkList(pPage);
- if (!pLinkList)
- return nullptr;
-
- return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y, nullptr)
- .GetDict();
-}
-
-DLLEXPORT int STDCALL
-FPDFLink_GetLinkZOrderAtPoint(FPDF_PAGE page, double x, double y) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return -1;
-
- CPDF_LinkList* pLinkList = GetLinkList(pPage);
- if (!pLinkList)
- return -1;
-
- int z_order = -1;
- pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y, &z_order);
- return z_order;
-}
-
-DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document,
- FPDF_LINK pDict) {
- if (!pDict)
- return nullptr;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
- CPDF_Link link(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- FPDF_DEST dest = link.GetDest(pDoc).GetObject();
- if (dest)
- return dest;
- // If this link is not directly associated with a dest, we try to get action
- CPDF_Action action = link.GetAction();
- if (!action.GetDict())
- return nullptr;
- return action.GetDest(pDoc).GetObject();
-}
-
-DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) {
- if (!pDict)
- return nullptr;
-
- CPDF_Link link(ToDictionary(static_cast<CPDF_Object*>(pDict)));
- return link.GetAction().GetDict();
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page,
- int* startPos,
- FPDF_LINK* linkAnnot) {
- if (!startPos || !linkAnnot)
- return FALSE;
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage || !pPage->m_pFormDict)
- return FALSE;
- CPDF_Array* pAnnots = pPage->m_pFormDict->GetArrayBy("Annots");
- if (!pAnnots)
- return FALSE;
- for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) {
- CPDF_Dictionary* pDict =
- ToDictionary(static_cast<CPDF_Object*>(pAnnots->GetElementValue(i)));
- if (!pDict)
- continue;
- if (pDict->GetStringBy("Subtype").Equal("Link")) {
- *startPos = i + 1;
- *linkAnnot = (FPDF_LINK)pDict;
- return TRUE;
- }
- }
- return FALSE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot,
- FS_RECTF* rect) {
- if (!linkAnnot || !rect)
- return FALSE;
- CPDF_Dictionary* pAnnotDict =
- ToDictionary(static_cast<CPDF_Object*>(linkAnnot));
- CFX_FloatRect rt = pAnnotDict->GetRectBy("Rect");
- rect->left = rt.left;
- rect->bottom = rt.bottom;
- rect->right = rt.right;
- rect->top = rt.top;
- return TRUE;
-}
-
-DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot) {
- if (!linkAnnot)
- return 0;
- CPDF_Dictionary* pAnnotDict =
- ToDictionary(static_cast<CPDF_Object*>(linkAnnot));
- CPDF_Array* pArray = pAnnotDict->GetArrayBy("QuadPoints");
- if (!pArray)
- return 0;
- return pArray->GetCount() / 8;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot,
- int quadIndex,
- FS_QUADPOINTSF* quadPoints) {
- if (!linkAnnot || !quadPoints)
- return FALSE;
- CPDF_Dictionary* pAnnotDict =
- ToDictionary(static_cast<CPDF_Object*>(linkAnnot));
- CPDF_Array* pArray = pAnnotDict->GetArrayBy("QuadPoints");
- if (pArray) {
- if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount() / 8 ||
- ((quadIndex * 8 + 7) >= (int)pArray->GetCount()))
- return FALSE;
- quadPoints->x1 = pArray->GetNumberAt(quadIndex * 8);
- quadPoints->y1 = pArray->GetNumberAt(quadIndex * 8 + 1);
- quadPoints->x2 = pArray->GetNumberAt(quadIndex * 8 + 2);
- quadPoints->y2 = pArray->GetNumberAt(quadIndex * 8 + 3);
- quadPoints->x3 = pArray->GetNumberAt(quadIndex * 8 + 4);
- quadPoints->y3 = pArray->GetNumberAt(quadIndex * 8 + 5);
- quadPoints->x4 = pArray->GetNumberAt(quadIndex * 8 + 6);
- quadPoints->y4 = pArray->GetNumberAt(quadIndex * 8 + 7);
- return TRUE;
- }
- return FALSE;
-}
-
-DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc,
- FPDF_BYTESTRING tag,
- void* buffer,
- unsigned long buflen) {
- if (!tag)
- return 0;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc);
- if (!pDoc)
- return 0;
- CPDF_Dictionary* pInfo = pDoc->GetInfo();
- if (!pInfo)
- return 0;
- CFX_WideString text = pInfo->GetUnicodeTextBy(tag);
- // Use UTF-16LE encoding
- CFX_ByteString encodedText = text.UTF16LE_Encode();
- unsigned long len = encodedText.GetLength();
- if (buffer && buflen >= len) {
- FXSYS_memcpy(buffer, encodedText.c_str(), len);
- }
- return len;
-}
diff --git a/fpdfsdk/src/fpdfdoc_embeddertest.cpp b/fpdfsdk/src/fpdfdoc_embeddertest.cpp
deleted file mode 100644
index 4788773982..0000000000
--- a/fpdfsdk/src/fpdfdoc_embeddertest.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <string>
-
-#include "core/include/fxcrt/fx_string.h"
-#include "public/fpdf_doc.h"
-#include "public/fpdfview.h"
-#include "testing/embedder_test.h"
-#include "testing/fx_string_testhelpers.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/test_support.h"
-
-class FPDFDocEmbeddertest : public EmbedderTest {};
-
-TEST_F(FPDFDocEmbeddertest, DestGetPageIndex) {
- EXPECT_TRUE(OpenDocument("named_dests.pdf"));
-
- // NULL FPDF_DEST case.
- EXPECT_EQ(0U, FPDFDest_GetPageIndex(document(), nullptr));
-
- // Page number directly in item from Dests NameTree.
- FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First");
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(1U, FPDFDest_GetPageIndex(document(), dest));
-
- // Page number via object reference in item from Dests NameTree.
- dest = FPDF_GetNamedDestByName(document(), "Next");
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(1U, FPDFDest_GetPageIndex(document(), dest));
-
- // Page number directly in item from Dests dictionary.
- dest = FPDF_GetNamedDestByName(document(), "FirstAlternate");
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(11U, FPDFDest_GetPageIndex(document(), dest));
-
- // Invalid object reference in item from Dests NameTree.
- dest = FPDF_GetNamedDestByName(document(), "LastAlternate");
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(0U, FPDFDest_GetPageIndex(document(), dest));
-}
-
-TEST_F(FPDFDocEmbeddertest, ActionGetFilePath) {
- EXPECT_TRUE(OpenDocument("launch_action.pdf"));
-
- FPDF_PAGE page = FPDF_LoadPage(document(), 0);
- ASSERT_TRUE(page);
-
- // The target action is nearly the size of the whole page.
- FPDF_LINK link = FPDFLink_GetLinkAtPoint(page, 100, 100);
- ASSERT_TRUE(link);
-
- FPDF_ACTION action = FPDFLink_GetAction(link);
- ASSERT_TRUE(action);
-
- const char kExpectedResult[] = "test.pdf";
- const unsigned long kExpectedLength = sizeof(kExpectedResult);
- unsigned long bufsize = FPDFAction_GetFilePath(action, nullptr, 0);
- ASSERT_EQ(kExpectedLength, bufsize);
-
- char buf[kExpectedLength];
- EXPECT_EQ(bufsize, FPDFAction_GetFilePath(action, buf, bufsize));
- EXPECT_EQ(std::string(kExpectedResult), std::string(buf));
-
- FPDF_ClosePage(page);
-}
-
-TEST_F(FPDFDocEmbeddertest, NoBookmarks) {
- // Open a file with no bookmarks.
- EXPECT_TRUE(OpenDocument("named_dests.pdf"));
-
- // The non-existent top-level bookmark has no title.
- unsigned short buf[128];
- EXPECT_EQ(0, FPDFBookmark_GetTitle(nullptr, buf, sizeof(buf)));
-
- // The non-existent top-level bookmark has no children.
- EXPECT_EQ(nullptr, FPDFBookmark_GetFirstChild(document(), nullptr));
-}
-
-TEST_F(FPDFDocEmbeddertest, Bookmarks) {
- // Open a file with two bookmarks.
- EXPECT_TRUE(OpenDocument("bookmarks.pdf"));
-
- // The existent top-level bookmark has no title.
- unsigned short buf[128];
- EXPECT_EQ(0, FPDFBookmark_GetTitle(nullptr, buf, sizeof(buf)));
-
- FPDF_BOOKMARK child = FPDFBookmark_GetFirstChild(document(), nullptr);
- EXPECT_NE(nullptr, child);
- EXPECT_EQ(34, FPDFBookmark_GetTitle(child, buf, sizeof(buf)));
- EXPECT_EQ(CFX_WideString(L"A Good Beginning"),
- CFX_WideString::FromUTF16LE(buf, 16));
-
- EXPECT_EQ(nullptr, FPDFBookmark_GetFirstChild(document(), child));
-
- FPDF_BOOKMARK sibling = FPDFBookmark_GetNextSibling(document(), child);
- EXPECT_NE(nullptr, sibling);
- EXPECT_EQ(28, FPDFBookmark_GetTitle(sibling, buf, sizeof(buf)));
- EXPECT_EQ(CFX_WideString(L"A Good Ending"),
- CFX_WideString::FromUTF16LE(buf, 13));
-
- EXPECT_EQ(nullptr, FPDFBookmark_GetNextSibling(document(), sibling));
-}
-
-TEST_F(FPDFDocEmbeddertest, FindBookmarks) {
- // Open a file with two bookmarks.
- EXPECT_TRUE(OpenDocument("bookmarks.pdf"));
-
- // Find the first one, based on its known title.
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> title =
- GetFPDFWideString(L"A Good Beginning");
- FPDF_BOOKMARK child = FPDFBookmark_Find(document(), title.get());
- EXPECT_NE(nullptr, child);
-
- // Check that the string matches.
- unsigned short buf[128];
- EXPECT_EQ(34, FPDFBookmark_GetTitle(child, buf, sizeof(buf)));
- EXPECT_EQ(CFX_WideString(L"A Good Beginning"),
- CFX_WideString::FromUTF16LE(buf, 16));
-
- // Check that it is them same as the one returned by GetFirstChild.
- EXPECT_EQ(child, FPDFBookmark_GetFirstChild(document(), nullptr));
-
- // Try to find one using a non-existent title.
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> bad_title =
- GetFPDFWideString(L"A BAD Beginning");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(document(), bad_title.get()));
-}
-
-// Check circular bookmarks will not cause infinite loop.
-TEST_F(FPDFDocEmbeddertest, FindBookmarks_bug420) {
- // Open a file with circular bookmarks.
- EXPECT_TRUE(OpenDocument("bookmarks_circular.pdf"));
-
- // Try to find a title.
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> title =
- GetFPDFWideString(L"anything");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(document(), title.get()));
-}
diff --git a/fpdfsdk/src/fpdfdoc_unittest.cpp b/fpdfsdk/src/fpdfdoc_unittest.cpp
deleted file mode 100644
index 04f885264e..0000000000
--- a/fpdfsdk/src/fpdfdoc_unittest.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "public/fpdf_doc.h"
-
-#include <memory>
-#include <vector>
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_name.h"
-#include "core/include/fpdfapi/cpdf_number.h"
-#include "core/include/fpdfapi/cpdf_reference.h"
-#include "core/include/fpdfapi/cpdf_string.h"
-#include "core/include/fpdfapi/fpdf_module.h"
-#include "core/include/fpdfdoc/fpdf_doc.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/test_support.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#endif // PDF_ENABLE_XFA
-
-class CPDF_TestDocument : public CPDF_Document {
- public:
- void SetRoot(CPDF_Dictionary* root) { m_pRootDict = root; }
- CPDF_IndirectObjectHolder* GetHolder() { return this; }
-};
-
-#ifdef PDF_ENABLE_XFA
-class CPDF_TestXFADocument : public CPDFXFA_Document {
- public:
- CPDF_TestXFADocument()
- : CPDFXFA_Document(new CPDF_TestDocument(), CPDFXFA_App::GetInstance()) {}
-
- void SetRoot(CPDF_Dictionary* root) {
- reinterpret_cast<CPDF_TestDocument*>(GetPDFDoc())->SetRoot(root);
- }
-
- CPDF_IndirectObjectHolder* GetHolder() { return GetPDFDoc(); }
-};
-using CPDF_TestPdfDocument = CPDF_TestXFADocument;
-#else // PDF_ENABLE_XFA
-using CPDF_TestPdfDocument = CPDF_TestDocument;
-#endif // PDF_ENABLE_XFA
-
-class PDFDocTest : public testing::Test {
- public:
- struct DictObjInfo {
- FX_DWORD num;
- CPDF_Dictionary* obj;
- };
-
- void SetUp() override {
- // We don't need page module or render module, but
- // initialize them to keep the code sane.
- CPDF_ModuleMgr::Create();
- CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get();
- module_mgr->InitPageModule();
- module_mgr->InitRenderModule();
-
- m_pDoc.reset(new CPDF_TestPdfDocument());
- m_pIndirectObjs = m_pDoc->GetHolder();
- // Setup the root directory.
- m_pRootObj.reset(new CPDF_Dictionary());
- m_pDoc->SetRoot(m_pRootObj.get());
- }
-
- std::vector<DictObjInfo> CreateDictObjs(int num) {
- std::vector<DictObjInfo> info;
- for (int i = 0; i < num; ++i) {
- // Objects created will be released by the document.
- CPDF_Dictionary* obj(new CPDF_Dictionary());
- m_pIndirectObjs->AddIndirectObject(obj);
- info.push_back({obj->GetObjNum(), obj});
- }
- return info;
- }
-
- protected:
- std::unique_ptr<CPDF_TestPdfDocument> m_pDoc;
- CPDF_IndirectObjectHolder* m_pIndirectObjs;
- std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> m_pRootObj;
-};
-
-TEST_F(PDFDocTest, FindBookmark) {
- {
- // No bookmark information.
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> title =
- GetFPDFWideString(L"");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
-
- title = GetFPDFWideString(L"Preface");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
- }
- {
- // Empty bookmark tree.
- m_pRootObj->SetAt("Outlines", new CPDF_Dictionary());
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> title =
- GetFPDFWideString(L"");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
-
- title = GetFPDFWideString(L"Preface");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
- }
- {
- // Check on a regular bookmark tree.
- auto bookmarks = CreateDictObjs(3);
-
- bookmarks[1].obj->SetAt("Title", new CPDF_String(L"Chapter 1"));
- bookmarks[1].obj->SetAt(
- "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
- bookmarks[1].obj->SetAt(
- "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num));
-
- bookmarks[2].obj->SetAt("Title", new CPDF_String(L"Chapter 2"));
- bookmarks[2].obj->SetAt(
- "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
- bookmarks[2].obj->SetAt(
- "Prev", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num));
-
- bookmarks[0].obj->SetAt("Type", new CPDF_Name("Outlines"));
- bookmarks[0].obj->SetAt("Count", new CPDF_Number(2));
- bookmarks[0].obj->SetAt(
- "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num));
- bookmarks[0].obj->SetAt(
- "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num));
-
- m_pRootObj->SetAt("Outlines",
- new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
-
- // Title with no match.
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> title =
- GetFPDFWideString(L"Chapter 3");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
-
- // Title with partial match only.
- title = GetFPDFWideString(L"Chapter");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
-
- // Title with a match.
- title = GetFPDFWideString(L"Chapter 2");
- EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get()));
-
- // Title match is case insensitive.
- title = GetFPDFWideString(L"cHaPter 2");
- EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get()));
- }
- {
- // Circular bookmarks in depth.
- auto bookmarks = CreateDictObjs(3);
-
- bookmarks[1].obj->SetAt("Title", new CPDF_String(L"Chapter 1"));
- bookmarks[1].obj->SetAt(
- "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
- bookmarks[1].obj->SetAt(
- "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num));
-
- bookmarks[2].obj->SetAt("Title", new CPDF_String(L"Chapter 2"));
- bookmarks[2].obj->SetAt(
- "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num));
- bookmarks[2].obj->SetAt(
- "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num));
-
- bookmarks[0].obj->SetAt("Type", new CPDF_Name("Outlines"));
- bookmarks[0].obj->SetAt("Count", new CPDF_Number(2));
- bookmarks[0].obj->SetAt(
- "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num));
- bookmarks[0].obj->SetAt(
- "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num));
-
- m_pRootObj->SetAt("Outlines",
- new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
-
- // Title with no match.
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> title =
- GetFPDFWideString(L"Chapter 3");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
-
- // Title with a match.
- title = GetFPDFWideString(L"Chapter 2");
- EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get()));
- }
- {
- // Circular bookmarks in breadth.
- auto bookmarks = CreateDictObjs(4);
-
- bookmarks[1].obj->SetAt("Title", new CPDF_String(L"Chapter 1"));
- bookmarks[1].obj->SetAt(
- "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
- bookmarks[1].obj->SetAt(
- "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num));
-
- bookmarks[2].obj->SetAt("Title", new CPDF_String(L"Chapter 2"));
- bookmarks[2].obj->SetAt(
- "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
- bookmarks[2].obj->SetAt(
- "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[3].num));
-
- bookmarks[3].obj->SetAt("Title", new CPDF_String(L"Chapter 3"));
- bookmarks[3].obj->SetAt(
- "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
- bookmarks[3].obj->SetAt(
- "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num));
-
- bookmarks[0].obj->SetAt("Type", new CPDF_Name("Outlines"));
- bookmarks[0].obj->SetAt("Count", new CPDF_Number(2));
- bookmarks[0].obj->SetAt(
- "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num));
- bookmarks[0].obj->SetAt(
- "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num));
-
- m_pRootObj->SetAt("Outlines",
- new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num));
-
- // Title with no match.
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> title =
- GetFPDFWideString(L"Chapter 8");
- EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get()));
-
- // Title with a match.
- title = GetFPDFWideString(L"Chapter 3");
- EXPECT_EQ(bookmarks[3].obj, FPDFBookmark_Find(m_pDoc.get(), title.get()));
- }
-}
diff --git a/fpdfsdk/src/fpdfedit_embeddertest.cpp b/fpdfsdk/src/fpdfedit_embeddertest.cpp
deleted file mode 100644
index 480ef51dbd..0000000000
--- a/fpdfsdk/src/fpdfedit_embeddertest.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "public/fpdf_edit.h"
-#include "public/fpdfview.h"
-#include "testing/embedder_test.h"
-#include "testing/gmock/include/gmock/gmock-matchers.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/test_support.h"
-
-class FPDFEditEmbeddertest : public EmbedderTest, public TestSaver {};
-
-TEST_F(FPDFEditEmbeddertest, EmptyCreation) {
- EXPECT_TRUE(CreateEmptyDocument());
- FPDF_PAGE page = FPDFPage_New(document(), 1, 640.0, 480.0);
- EXPECT_NE(nullptr, page);
- EXPECT_TRUE(FPDFPage_GenerateContent(page));
- EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
- EXPECT_THAT(GetString(),
- testing::MatchesRegex(
- "%PDF-1.7\r\n"
- "%\xA1\xB3\xC5\xD7\r\n"
- "1 0 obj\r\n"
- "<</Pages 2 0 R /Type/Catalog>>\r\n"
- "endobj\r\n"
- "2 0 obj\r\n"
- "<</Count 1/Kids\\[ 4 0 R \\]/Type/Pages>>\r\n"
- "endobj\r\n"
- "3 0 obj\r\n"
- "<</CreationDate\\(D:.*\\)/Creator\\(PDFium\\)>>\r\n"
- "endobj\r\n"
- "4 0 obj\r\n"
- "<</Contents 5 0 R /MediaBox\\[ 0 0 640 480\\]"
- "/Parent 2 0 R /Resources<<>>/Rotate 0/Type/Page"
- ">>\r\n"
- "endobj\r\n"
- "5 0 obj\r\n"
- "<</Filter/FlateDecode/Length 8>>stream\r\n"
- "x\x9C\x3\0\0\0\0\x1\r\n"
- "endstream\r\n"
- "endobj\r\n"
- "xref\r\n"
- "0 6\r\n"
- "0000000000 65535 f\r\n"
- "0000000017 00000 n\r\n"
- "0000000066 00000 n\r\n"
- "0000000122 00000 n\r\n"
- "0000000192 00000 n\r\n"
- "0000000301 00000 n\r\n"
- "trailer\r\n"
- "<<\r\n"
- "/Root 1 0 R\r\n"
- "/Info 3 0 R\r\n"
- "/Size 6/ID\\[<.*><.*>\\]>>\r\n"
- "startxref\r\n"
- "379\r\n"
- "%%EOF\r\n"));
- FPDFPage_Delete(document(), 1);
-}
diff --git a/fpdfsdk/src/fpdfeditimg.cpp b/fpdfsdk/src/fpdfeditimg.cpp
deleted file mode 100644
index de5c72f659..0000000000
--- a/fpdfsdk/src/fpdfeditimg.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_edit.h"
-
-#include "fpdfsdk/include/fsdk_define.h"
-
-DLLEXPORT FPDF_PAGEOBJECT STDCALL
-FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
- CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
- CPDF_Image* pImg = new CPDF_Image(pDoc);
- pImageObj->m_pImage = pImg;
- return pImageObj;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL
-FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
- int nCount,
- FPDF_PAGEOBJECT image_object,
- FPDF_FILEACCESS* fileAccess) {
- if (!image_object || !fileAccess || !pages)
- return FALSE;
-
- IFX_FileRead* pFile = new CPDF_CustomAccess(fileAccess);
- CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
- pImgObj->m_GeneralState.GetModify();
- for (int index = 0; index < nCount; index++) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(pages[index]);
- if (!pPage)
- continue;
- pImgObj->m_pImage->ResetCache(pPage, NULL);
- }
- pImgObj->m_pImage->SetJpegImage(pFile);
-
- return TRUE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f) {
- if (!image_object)
- return FALSE;
- CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
- pImgObj->m_Matrix.a = (FX_FLOAT)a;
- pImgObj->m_Matrix.b = (FX_FLOAT)b;
- pImgObj->m_Matrix.c = (FX_FLOAT)c;
- pImgObj->m_Matrix.d = (FX_FLOAT)d;
- pImgObj->m_Matrix.e = (FX_FLOAT)e;
- pImgObj->m_Matrix.f = (FX_FLOAT)f;
- pImgObj->CalcBoundingBox();
- return TRUE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
- int nCount,
- FPDF_PAGEOBJECT image_object,
- FPDF_BITMAP bitmap) {
- if (!image_object || !bitmap || !pages)
- return FALSE;
- CFX_DIBitmap* pBmp = NULL;
- pBmp = (CFX_DIBitmap*)bitmap;
- CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
- pImgObj->m_GeneralState.GetModify();
- for (int index = 0; index < nCount; index++) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(pages[index]);
- if (!pPage)
- continue;
- pImgObj->m_pImage->ResetCache(pPage, NULL);
- }
- pImgObj->m_pImage->SetImage(pBmp, FALSE);
- pImgObj->CalcBoundingBox();
- return TRUE;
-}
diff --git a/fpdfsdk/src/fpdfeditpage.cpp b/fpdfsdk/src/fpdfeditpage.cpp
deleted file mode 100644
index 992f08eb8b..0000000000
--- a/fpdfsdk/src/fpdfeditpage.cpp
+++ /dev/null
@@ -1,316 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_edit.h"
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_number.h"
-#include "core/include/fpdfapi/cpdf_string.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "public/fpdf_formfill.h"
-#include "third_party/base/stl_util.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#endif // PDF_ENABLE_XFA
-
-#if _FX_OS_ == _FX_ANDROID_
-#include "time.h"
-#else
-#include <ctime>
-#endif
-
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() {
- CPDF_Document* pDoc = new CPDF_Document;
- pDoc->CreateNewDoc();
- time_t currentTime;
-
- CFX_ByteString DateStr;
-
- if (FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) {
- if (-1 != time(&currentTime)) {
- tm* pTM = localtime(&currentTime);
- if (pTM) {
- DateStr.Format("D:%04d%02d%02d%02d%02d%02d", pTM->tm_year + 1900,
- pTM->tm_mon + 1, pTM->tm_mday, pTM->tm_hour, pTM->tm_min,
- pTM->tm_sec);
- }
- }
- }
-
- CPDF_Dictionary* pInfoDict = NULL;
- pInfoDict = pDoc->GetInfo();
- if (pInfoDict) {
- if (FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- pInfoDict->SetAt("CreationDate", new CPDF_String(DateStr, FALSE));
- pInfoDict->SetAt("Creator", new CPDF_String(L"PDFium"));
- }
-
- return FPDFDocumentFromCPDFDocument(pDoc);
-}
-
-DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc || page_index < 0 || page_index >= pDoc->GetPageCount())
- return;
-
- pDoc->DeletePage(page_index);
-}
-
-DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document,
- int page_index,
- double width,
- double height) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
-
- if (page_index < 0)
- page_index = 0;
- if (pDoc->GetPageCount() < page_index)
- page_index = pDoc->GetPageCount();
-
- CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index);
- if (!pPageDict)
- return NULL;
- CPDF_Array* pMediaBoxArray = new CPDF_Array;
- pMediaBoxArray->Add(new CPDF_Number(0));
- pMediaBoxArray->Add(new CPDF_Number(0));
- pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(width)));
- pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(height)));
-
- pPageDict->SetAt("MediaBox", pMediaBoxArray);
- pPageDict->SetAt("Rotate", new CPDF_Number(0));
- pPageDict->SetAt("Resources", new CPDF_Dictionary);
-
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_Page* pPage =
- new CPDFXFA_Page((CPDFXFA_Document*)document, page_index);
- pPage->LoadPDFPage(pPageDict);
-#else // PDF_ENABLE_XFA
- CPDF_Page* pPage = new CPDF_Page;
- pPage->Load(pDoc, pPageDict);
- pPage->ParseContent(nullptr);
-#endif // PDF_ENABLE_XFA
-
- return pPage;
-}
-
-DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
- !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
- pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
- "Page")) {
- return -1;
- }
- CPDF_Dictionary* pDict = pPage->m_pFormDict;
- if (!pDict)
- return -1;
-
- while (pDict) {
- if (pDict->KeyExist("Rotate")) {
- CPDF_Object* pRotateObj = pDict->GetElement("Rotate")->GetDirect();
- return pRotateObj ? pRotateObj->GetInteger() / 90 : 0;
- }
- if (!pDict->KeyExist("Parent"))
- break;
-
- pDict = ToDictionary(pDict->GetElement("Parent")->GetDirect());
- }
-
- return 0;
-}
-
-DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page,
- FPDF_PAGEOBJECT page_obj) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
- !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
- pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
- "Page")) {
- return;
- }
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj;
- if (!pPageObj)
- return;
-
- pPage->GetPageObjectList()->push_back(
- std::unique_ptr<CPDF_PageObject>(pPageObj));
-
- switch (pPageObj->GetType()) {
- case FPDF_PAGEOBJ_PATH: {
- CPDF_PathObject* pPathObj = pPageObj->AsPath();
- pPathObj->CalcBoundingBox();
- break;
- }
- case FPDF_PAGEOBJ_TEXT: {
- break;
- }
- case FPDF_PAGEOBJ_IMAGE: {
- CPDF_ImageObject* pImageObj = pPageObj->AsImage();
- pImageObj->CalcBoundingBox();
- break;
- }
- case FPDF_PAGEOBJ_SHADING: {
- CPDF_ShadingObject* pShadingObj = pPageObj->AsShading();
- pShadingObj->CalcBoundingBox();
- break;
- }
- case FPDF_PAGEOBJ_FORM: {
- CPDF_FormObject* pFormObj = pPageObj->AsForm();
- pFormObj->CalcBoundingBox();
- break;
- }
- default:
- break;
- }
-}
-
-DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
- !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
- pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
- "Page")) {
- return -1;
- }
- return pdfium::CollectionSize<int>(*pPage->GetPageObjectList());
-}
-
-DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page,
- int index) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
- pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
- "Page")) {
- return nullptr;
- }
- return pPage->GetPageObjectList()->GetPageObjectByIndex(index);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- return pPage && pPage->BackgroundAlphaNeeded();
-}
-
-DLLEXPORT FPDF_BOOL STDCALL
-FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject) {
- if (!pageObject)
- return FALSE;
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)pageObject;
-
- const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState;
- int blend_type =
- pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL;
- if (blend_type != FXDIB_BLEND_NORMAL)
- return TRUE;
-
- CPDF_Dictionary* pSMaskDict =
- pGeneralState ? ToDictionary(pGeneralState->m_pSoftMask) : NULL;
- if (pSMaskDict)
- return TRUE;
-
- if (pGeneralState && pGeneralState->m_FillAlpha != 1.0f)
- return TRUE;
-
- if (pPageObj->IsPath()) {
- if (pGeneralState && pGeneralState->m_StrokeAlpha != 1.0f)
- return TRUE;
- }
-
- if (pPageObj->IsForm()) {
- CPDF_FormObject* pFormObj = pPageObj->AsForm();
- if (pFormObj->m_pForm &&
- (pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED))
- return TRUE;
- if (pFormObj->m_pForm &&
- (!(pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED) &&
- (pFormObj->m_pForm->m_Transparency & PDFTRANS_GROUP)))
- return TRUE;
- }
- return FALSE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
- !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
- pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
- "Page")) {
- return FALSE;
- }
- CPDF_PageContentGenerator CG(pPage);
- CG.GenerateContent();
-
- return TRUE;
-}
-
-DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f) {
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object;
- if (!pPageObj)
- return;
-
- CFX_Matrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d,
- (FX_FLOAT)e, (FX_FLOAT)f);
- pPageObj->Transform(matrix);
-}
-DLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page,
- double a,
- double b,
- double c,
- double d,
- double e,
- double f) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
- CPDF_AnnotList AnnotList(pPage);
- for (size_t i = 0; i < AnnotList.Count(); ++i) {
- CPDF_Annot* pAnnot = AnnotList.GetAt(i);
- // transformAnnots Rectangle
- CFX_FloatRect rect;
- pAnnot->GetRect(rect);
- CFX_Matrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d,
- (FX_FLOAT)e, (FX_FLOAT)f);
- rect.Transform(&matrix);
- CPDF_Array* pRectArray = NULL;
- pRectArray = pAnnot->GetAnnotDict()->GetArrayBy("Rect");
- if (!pRectArray)
- pRectArray = new CPDF_Array;
- pRectArray->SetAt(0, new CPDF_Number(rect.left));
- pRectArray->SetAt(1, new CPDF_Number(rect.bottom));
- pRectArray->SetAt(2, new CPDF_Number(rect.right));
- pRectArray->SetAt(3, new CPDF_Number(rect.top));
- pAnnot->GetAnnotDict()->SetAt("Rect", pRectArray);
-
- // Transform AP's rectangle
- // To Do
- }
-}
-
-DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
- !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
- pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
- "Page")) {
- return;
- }
- CPDF_Dictionary* pDict = pPage->m_pFormDict;
- rotate %= 4;
-
- pDict->SetAt("Rotate", new CPDF_Number(rotate * 90));
-}
diff --git a/fpdfsdk/src/fpdfext_embeddertest.cpp b/fpdfsdk/src/fpdfext_embeddertest.cpp
deleted file mode 100644
index 7c28c29a8e..0000000000
--- a/fpdfsdk/src/fpdfext_embeddertest.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "public/fpdf_ext.h"
-#include "public/fpdfview.h"
-#include "testing/embedder_test.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-class FPDFExtEmbeddertest : public EmbedderTest {};
-
-TEST_F(FPDFExtEmbeddertest, PageModeUnknown) {
- EXPECT_EQ(PAGEMODE_UNKNOWN, FPDFDoc_GetPageMode(nullptr));
-}
-
-TEST_F(FPDFExtEmbeddertest, PageModeUseNone) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- EXPECT_EQ(PAGEMODE_USENONE, FPDFDoc_GetPageMode(document()));
-}
-
-TEST_F(FPDFExtEmbeddertest, PageModeUseOutlines) {
- EXPECT_TRUE(OpenDocument("use_outlines.pdf"));
- EXPECT_EQ(PAGEMODE_USEOUTLINES, FPDFDoc_GetPageMode(document()));
-}
diff --git a/fpdfsdk/src/fpdfformfill.cpp b/fpdfsdk/src/fpdfformfill.cpp
deleted file mode 100644
index 31f5732ce5..0000000000
--- a/fpdfsdk/src/fpdfformfill.cpp
+++ /dev/null
@@ -1,732 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_formfill.h"
-
-#include <memory>
-#include <vector>
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "public/fpdfview.h"
-#include "third_party/base/stl_util.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#endif // PDF_ENABLE_XFA
-
-namespace {
-
-CPDFSDK_InterForm* FormHandleToInterForm(FPDF_FORMHANDLE hHandle) {
- CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
- return pSDKDoc ? pSDKDoc->GetInterForm() : nullptr;
-}
-
-CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page) {
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
- if (!pPage)
- return nullptr;
-
- CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
- return pSDKDoc ? pSDKDoc->GetPageView(pPage, TRUE) : nullptr;
-}
-
-#ifdef PDF_ENABLE_XFA
-std::vector<CFX_ByteString>* FromFPDFStringHandle(FPDF_STRINGHANDLE handle) {
- return reinterpret_cast<std::vector<CFX_ByteString>*>(handle);
-}
-
-FPDF_STRINGHANDLE ToFPDFStringHandle(std::vector<CFX_ByteString>* strings) {
- return reinterpret_cast<FPDF_STRINGHANDLE>(strings);
-}
-#endif // PDF_ENABLE_XFA
-
-} // namespace
-
-DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- double page_x,
- double page_y) {
- if (!hHandle)
- return -1;
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (pPage) {
- CPDF_InterForm interform(pPage->m_pDocument, FALSE);
- CPDF_FormControl* pFormCtrl =
- interform.GetControlAtPoint(pPage, static_cast<FX_FLOAT>(page_x),
- static_cast<FX_FLOAT>(page_y), nullptr);
- if (!pFormCtrl)
- return -1;
- CPDF_FormField* pFormField = pFormCtrl->GetField();
- return pFormField ? pFormField->GetFieldType() : -1;
- }
-
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_Page* pXFAPage = UnderlyingFromFPDFPage(page);
- if (!pXFAPage)
- return -1;
-
- IXFA_PageView* pPageView = pXFAPage->GetXFAPageView();
- if (!pPageView)
- return -1;
-
- IXFA_DocView* pDocView = pPageView->GetDocView();
- if (!pDocView)
- return -1;
-
- IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler();
- if (!pWidgetHandler)
- return -1;
-
- std::unique_ptr<IXFA_WidgetIterator, ReleaseDeleter<IXFA_WidgetIterator>>
- pWidgetIterator(pPageView->CreateWidgetIterator(
- XFA_TRAVERSEWAY_Form,
- XFA_WIDGETFILTER_Viewable | XFA_WIDGETFILTER_AllType));
- if (!pWidgetIterator)
- return -1;
-
- IXFA_Widget* pXFAAnnot = pWidgetIterator->MoveToNext();
- while (pXFAAnnot) {
- CFX_RectF rcBBox;
- pWidgetHandler->GetBBox(pXFAAnnot, rcBBox, 0);
- CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
- rcBBox.top + rcBBox.height);
- rcWidget.left -= 1.0f;
- rcWidget.right += 1.0f;
- rcWidget.bottom -= 1.0f;
- rcWidget.top += 1.0f;
-
- if (rcWidget.Contains(static_cast<FX_FLOAT>(page_x),
- static_cast<FX_FLOAT>(page_y))) {
- return FPDF_FORMFIELD_XFA;
- }
- pXFAAnnot = pWidgetIterator->MoveToNext();
- }
-#endif // PDF_ENABLE_XFA
- return -1;
-}
-
-DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- double page_x,
- double page_y) {
- return FPDFPage_HasFormFieldAtPoint(hHandle, page, page_x, page_y);
-}
-
-DLLEXPORT int STDCALL FPDFPage_FormFieldZOrderAtPoint(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- double page_x,
- double page_y) {
- if (!hHandle)
- return -1;
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return -1;
- CPDF_InterForm interform(pPage->m_pDocument, FALSE);
- int z_order = -1;
- (void)interform.GetControlAtPoint(pPage, (FX_FLOAT)page_x, (FX_FLOAT)page_y,
- &z_order);
- return z_order;
-}
-
-DLLEXPORT FPDF_FORMHANDLE STDCALL
-FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
- FPDF_FORMFILLINFO* formInfo) {
-#ifdef PDF_ENABLE_XFA
- const int kRequiredVersion = 2;
-#else // PDF_ENABLE_XFA
- const int kRequiredVersion = 1;
-#endif // PDF_ENABLE_XFA
- if (!formInfo || formInfo->version != kRequiredVersion)
- return nullptr;
-
- UnderlyingDocumentType* pDocument = UnderlyingFromFPDFDocument(document);
- if (!pDocument)
- return nullptr;
-
- CPDFDoc_Environment* pEnv = new CPDFDoc_Environment(pDocument, formInfo);
-#ifdef PDF_ENABLE_XFA
- pEnv->SetSDKDocument(pDocument->GetSDKDocument(pEnv));
- CPDFXFA_App* pApp = CPDFXFA_App::GetInstance();
- pApp->AddFormFillEnv(pEnv);
-#else // PDF_ENABLE_XFA
- pEnv->SetSDKDocument(new CPDFSDK_Document(pDocument, pEnv));
-#endif // PDF_ENABLE_XFA
- return pEnv;
-}
-
-DLLEXPORT void STDCALL
-FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle) {
- if (!hHandle)
- return;
- CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_App* pApp = CPDFXFA_App::GetInstance();
- pApp->RemoveFormFillEnv(pEnv);
-#else // PDF_ENABLE_XFA
- if (CPDFSDK_Document* pSDKDoc = pEnv->GetSDKDocument()) {
- pEnv->SetSDKDocument(NULL);
- delete pSDKDoc;
- }
-#endif // PDF_ENABLE_XFA
- delete pEnv;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CFX_FloatPoint pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnMouseMove(pt, modifier);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CFX_FloatPoint pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnLButtonDown(pt, modifier);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CFX_FloatPoint pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnLButtonUp(pt, modifier);
-}
-
-#ifdef PDF_ENABLE_XFA
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CFX_FloatPoint pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnRButtonDown(pt, modifier);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int modifier,
- double page_x,
- double page_y) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CFX_FloatPoint pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnRButtonUp(pt, modifier);
-}
-#endif // PDF_ENABLE_XFA
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int nKeyCode,
- int modifier) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- return pPageView->OnKeyDown(nKeyCode, modifier);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int nKeyCode,
- int modifier) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- return pPageView->OnKeyUp(nKeyCode, modifier);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,
- FPDF_PAGE page,
- int nChar,
- int modifier) {
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- return pPageView->OnChar(nChar, modifier);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle) {
- CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
- if (!pSDKDoc)
- return FALSE;
-
- return pSDKDoc->KillFocusAnnot(0);
-}
-
-DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
- FPDF_BITMAP bitmap,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags) {
- if (!hHandle)
- return;
-
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
- if (!pPage)
- return;
-
-#ifndef PDF_ENABLE_XFA
- CPDF_RenderOptions options;
- if (flags & FPDF_LCD_TEXT)
- options.m_Flags |= RENDER_CLEARTYPE;
- else
- options.m_Flags &= ~RENDER_CLEARTYPE;
- // Grayscale output
- if (flags & FPDF_GRAYSCALE) {
- options.m_ColorMode = RENDER_COLOR_GRAY;
- options.m_ForeColor = 0;
- options.m_BackColor = 0xffffff;
- }
- options.m_AddFlags = flags >> 8;
- options.m_pOCContext = new CPDF_OCContext(pPage->m_pDocument);
-#else // PDF_ENABLE_XFA
- CPDFXFA_Document* pDocument = pPage->GetDocument();
- if (!pDocument)
- return;
- CPDF_Document* pPDFDoc = pDocument->GetPDFDoc();
- if (!pPDFDoc)
- return;
- CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
- CPDFSDK_Document* pFXDoc = pEnv->GetSDKDocument();
- if (!pFXDoc)
- return;
-#endif // PDF_ENABLE_XFA
-
- CFX_Matrix matrix;
- pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
-
- FX_RECT clip(start_x, start_y, start_x + size_x, start_y + size_y);
-
-#ifdef _SKIA_SUPPORT_
- std::unique_ptr<CFX_SkiaDevice> pDevice(new CFX_SkiaDevice);
-#else
- std::unique_ptr<CFX_FxgeDevice> pDevice(new CFX_FxgeDevice);
-#endif
- pDevice->Attach((CFX_DIBitmap*)bitmap);
- pDevice->SaveState();
- pDevice->SetClip_Rect(clip);
-
-#ifndef PDF_ENABLE_XFA
- if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, pPage))
- pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options);
-#else // PDF_ENABLE_XFA
- CPDF_RenderOptions options;
- if (flags & FPDF_LCD_TEXT)
- options.m_Flags |= RENDER_CLEARTYPE;
- else
- options.m_Flags &= ~RENDER_CLEARTYPE;
-
- // Grayscale output
- if (flags & FPDF_GRAYSCALE) {
- options.m_ColorMode = RENDER_COLOR_GRAY;
- options.m_ForeColor = 0;
- options.m_BackColor = 0xffffff;
- }
- options.m_AddFlags = flags >> 8;
- options.m_pOCContext = new CPDF_OCContext(pPDFDoc);
-
- if (CPDFSDK_PageView* pPageView = pFXDoc->GetPageView(pPage))
- pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options, clip);
-#endif // PDF_ENABLE_XFA
-
- pDevice->RestoreState();
- delete options.m_pOCContext;
-#ifdef PDF_ENABLE_XFA
- options.m_pOCContext = NULL;
-#endif // PDF_ENABLE_XFA
-}
-
-#ifdef PDF_ENABLE_XFA
-DLLEXPORT void STDCALL FPDF_Widget_Undo(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget) {
- if (NULL == hWidget || NULL == document)
- return;
-
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander == NULL)
- return;
-
- pXFAMenuHander->Undo((IXFA_Widget*)hWidget);
-}
-DLLEXPORT void STDCALL FPDF_Widget_Redo(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget) {
- if (NULL == hWidget || NULL == document)
- return;
-
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander == NULL)
- return;
-
- pXFAMenuHander->Redo((IXFA_Widget*)hWidget);
-}
-
-DLLEXPORT void STDCALL FPDF_Widget_SelectAll(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget) {
- if (NULL == hWidget || NULL == document)
- return;
-
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander == NULL)
- return;
-
- pXFAMenuHander->SelectAll((IXFA_Widget*)hWidget);
-}
-DLLEXPORT void STDCALL FPDF_Widget_Copy(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- FPDF_WIDESTRING wsText,
- FPDF_DWORD* size) {
- if (NULL == hWidget || NULL == document)
- return;
-
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander == NULL)
- return;
-
- CFX_WideString wsCpText;
- pXFAMenuHander->Copy((IXFA_Widget*)hWidget, wsCpText);
-
- CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode();
- int len = bsCpText.GetLength() / sizeof(unsigned short);
- if (wsText == NULL) {
- *size = len;
- return;
- }
-
- int real_size = len < *size ? len : *size;
- if (real_size > 0) {
- FXSYS_memcpy((void*)wsText,
- bsCpText.GetBuffer(real_size * sizeof(unsigned short)),
- real_size * sizeof(unsigned short));
- bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short));
- }
- *size = real_size;
-}
-
-DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- FPDF_WIDESTRING wsText,
- FPDF_DWORD* size) {
- if (NULL == hWidget || NULL == document)
- return;
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander == NULL)
- return;
-
- CFX_WideString wsCpText;
- pXFAMenuHander->Cut((IXFA_Widget*)hWidget, wsCpText);
-
- CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode();
- int len = bsCpText.GetLength() / sizeof(unsigned short);
- if (wsText == NULL) {
- *size = len;
- return;
- }
-
- int real_size = len < *size ? len : *size;
- if (real_size > 0) {
- FXSYS_memcpy((void*)wsText,
- bsCpText.GetBuffer(real_size * sizeof(unsigned short)),
- real_size * sizeof(unsigned short));
- bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short));
- }
- *size = real_size;
-}
-
-DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- FPDF_WIDESTRING wsText,
- FPDF_DWORD size) {
- if (NULL == hWidget || NULL == document)
- return;
-
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander == NULL)
- return;
-
- CFX_WideString wstr = CFX_WideString::FromUTF16LE(wsText, size);
- pXFAMenuHander->Paste((IXFA_Widget*)hWidget, wstr);
-}
-
-DLLEXPORT void STDCALL
-FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- float x,
- float y,
- FPDF_BYTESTRING bsText) {
- if (NULL == hWidget || NULL == document)
- return;
-
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander == NULL)
- return;
-
- CFX_PointF ptPopup;
- ptPopup.x = x;
- ptPopup.y = y;
- CFX_ByteStringC bs(bsText);
- pXFAMenuHander->ReplaceSpellCheckWord((IXFA_Widget*)hWidget, ptPopup, bs);
-}
-
-DLLEXPORT void STDCALL
-FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document,
- FPDF_WIDGET hWidget,
- float x,
- float y,
- FPDF_STRINGHANDLE* stringHandle) {
- if (!hWidget || !document)
- return;
-
- CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
- if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic &&
- pDocument->GetDocType() != XFA_DOCTYPE_Static)
- return;
-
- IXFA_MenuHandler* pXFAMenuHander =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
- if (!pXFAMenuHander)
- return;
-
- std::vector<CFX_ByteString>* sSuggestWords = new std::vector<CFX_ByteString>;
- CFX_PointF ptPopup;
- ptPopup.x = x;
- ptPopup.y = y;
- pXFAMenuHander->GetSuggestWords(reinterpret_cast<IXFA_Widget*>(hWidget),
- ptPopup, *sSuggestWords);
- *stringHandle = ToFPDFStringHandle(sSuggestWords);
-}
-
-DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE sHandle) {
- std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
- return sSuggestWords ? pdfium::CollectionSize<int>(*sSuggestWords) : -1;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL
-FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE sHandle,
- int index,
- FPDF_BYTESTRING bsText,
- FPDF_DWORD* size) {
- if (!sHandle || !size)
- return FALSE;
-
- int count = FPDF_StringHandleCounts(sHandle);
- if (index < 0 || index >= count)
- return FALSE;
-
- std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
- int len = (*sSuggestWords)[index].GetLength();
- if (!bsText) {
- *size = len;
- return TRUE;
- }
-
- int real_size = len < *size ? len : *size;
- if (real_size > 0)
- FXSYS_memcpy((void*)bsText, (const FX_CHAR*)(*sSuggestWords)[index],
- real_size);
- *size = real_size;
- return TRUE;
-}
-
-DLLEXPORT void STDCALL
-FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle) {
- delete FromFPDFStringHandle(stringHandle);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL
-FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle,
- FPDF_BYTESTRING bsText,
- FPDF_DWORD size) {
- if (!stringHandle || !bsText || size == 0)
- return FALSE;
-
- FromFPDFStringHandle(stringHandle)->push_back(CFX_ByteString(bsText, size));
- return TRUE;
-}
-#endif // PDF_ENABLE_XFA
-
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
- int fieldType,
- unsigned long color) {
- if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
- pInterForm->SetHighlightColor(color, fieldType);
-}
-
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle,
- unsigned char alpha) {
- if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
- pInterForm->SetHighlightAlpha(alpha);
-}
-
-DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle) {
- if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
- pInterForm->RemoveAllHighLight();
-}
-
-DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page,
- FPDF_FORMHANDLE hHandle) {
- if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page))
- pPageView->SetValid(TRUE);
-}
-
-DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page,
- FPDF_FORMHANDLE hHandle) {
- if (!hHandle)
- return;
-
- CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument();
- if (!pSDKDoc)
- return;
-
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
- if (!pPage)
- return;
-
- CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE);
- if (pPageView) {
- pPageView->SetValid(FALSE);
- // RemovePageView() takes care of the delete for us.
- pSDKDoc->RemovePageView(pPage);
- }
-}
-
-DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle) {
- CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
- if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
- pSDKDoc->ProcJavascriptFun();
-}
-
-DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle) {
- CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
- if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
- pSDKDoc->ProcOpenAction();
-}
-
-DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle,
- int aaType) {
- CPDFSDK_Document* pSDKDoc = CPDFSDK_Document::FromFPDFFormHandle(hHandle);
- if (!pSDKDoc)
- return;
-
- CPDF_Document* pDoc = pSDKDoc->GetPDFDocument();
- CPDF_Dictionary* pDic = pDoc->GetRoot();
- if (!pDic)
- return;
-
- CPDF_AAction aa(pDic->GetDictBy("AA"));
- if (aa.ActionExist((CPDF_AAction::AActionType)aaType)) {
- CPDF_Action action = aa.GetAction((CPDF_AAction::AActionType)aaType);
- CPDFSDK_ActionHandler* pActionHandler =
- ((CPDFDoc_Environment*)hHandle)->GetActionHander();
- pActionHandler->DoAction_Document(action, (CPDF_AAction::AActionType)aaType,
- pSDKDoc);
- }
-}
-
-DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page,
- FPDF_FORMHANDLE hHandle,
- int aaType) {
- if (!hHandle)
- return;
- CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument();
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
- CPDF_Page* pPDFPage = CPDFPageFromFPDFPage(page);
- if (!pPDFPage)
- return;
- if (pSDKDoc->GetPageView(pPage, FALSE)) {
- CPDFDoc_Environment* pEnv = pSDKDoc->GetEnv();
- CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
- CPDF_Dictionary* pPageDict = pPDFPage->m_pFormDict;
- CPDF_AAction aa(pPageDict->GetDictBy("AA"));
- if (FPDFPAGE_AACTION_OPEN == aaType) {
- if (aa.ActionExist(CPDF_AAction::OpenPage)) {
- CPDF_Action action = aa.GetAction(CPDF_AAction::OpenPage);
- pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc);
- }
- } else {
- if (aa.ActionExist(CPDF_AAction::ClosePage)) {
- CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage);
- pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc);
- }
- }
- }
-}
diff --git a/fpdfsdk/src/fpdfformfill_embeddertest.cpp b/fpdfsdk/src/fpdfformfill_embeddertest.cpp
deleted file mode 100644
index c73dc008f7..0000000000
--- a/fpdfsdk/src/fpdfformfill_embeddertest.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "public/fpdf_formfill.h"
-#include "testing/embedder_test.h"
-#include "testing/embedder_test_mock_delegate.h"
-#include "testing/embedder_test_timer_handling_delegate.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using testing::_;
-using testing::Return;
-
-class FPDFFormFillEmbeddertest : public EmbedderTest {};
-
-TEST_F(FPDFFormFillEmbeddertest, FirstTest) {
- EmbedderTestMockDelegate mock;
- EXPECT_CALL(mock, Alert(_, _, _, _)).Times(0);
- EXPECT_CALL(mock, UnsupportedHandler(_)).Times(0);
- EXPECT_CALL(mock, SetTimer(_, _)).Times(0);
- EXPECT_CALL(mock, KillTimer(_)).Times(0);
- SetDelegate(&mock);
-
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
- UnloadPage(page);
-}
-
-TEST_F(FPDFFormFillEmbeddertest, BUG_487928) {
- EmbedderTestTimerHandlingDelegate delegate;
- SetDelegate(&delegate);
-
- EXPECT_TRUE(OpenDocument("bug_487928.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
- DoOpenActions();
- delegate.AdvanceTime(5000);
- UnloadPage(page);
-}
-
-TEST_F(FPDFFormFillEmbeddertest, BUG_507316) {
- EmbedderTestTimerHandlingDelegate delegate;
- SetDelegate(&delegate);
-
- EXPECT_TRUE(OpenDocument("bug_507316.pdf"));
- FPDF_PAGE page = LoadAndCachePage(2);
- EXPECT_NE(nullptr, page);
- DoOpenActions();
- delegate.AdvanceTime(4000);
- UnloadPage(page);
-}
-
-TEST_F(FPDFFormFillEmbeddertest, BUG_514690) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
-
- // Test that FORM_OnMouseMove() etc. permit null HANDLES and PAGES.
- FORM_OnMouseMove(nullptr, page, 0, 10.0, 10.0);
- FORM_OnMouseMove(form_handle(), nullptr, 0, 10.0, 10.0);
-
- UnloadPage(page);
-}
-
-#ifdef PDF_ENABLE_V8
-TEST_F(FPDFFormFillEmbeddertest, BUG_551248) {
- EmbedderTestTimerHandlingDelegate delegate;
- SetDelegate(&delegate);
-
- EXPECT_TRUE(OpenDocument("bug_551248.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
- DoOpenActions();
- delegate.AdvanceTime(5000);
- UnloadPage(page);
-
- const auto& alerts = delegate.GetAlerts();
- ASSERT_EQ(1U, alerts.size());
-
- EXPECT_STREQ(L"hello world", alerts[0].message.c_str());
- EXPECT_STREQ(L"Alert", alerts[0].title.c_str());
- EXPECT_EQ(0, alerts[0].type);
- EXPECT_EQ(0, alerts[0].icon);
-}
-#endif // PDF_ENABLE_V8
diff --git a/fpdfsdk/src/fpdfppo.cpp b/fpdfsdk/src/fpdfppo.cpp
deleted file mode 100644
index 4253cc5fd9..0000000000
--- a/fpdfsdk/src/fpdfppo.cpp
+++ /dev/null
@@ -1,415 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_ppo.h"
-
-#include <map>
-#include <memory>
-#include <vector>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_name.h"
-#include "core/include/fpdfapi/cpdf_number.h"
-#include "core/include/fpdfapi/cpdf_reference.h"
-#include "core/include/fpdfapi/cpdf_string.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "third_party/base/stl_util.h"
-
-class CPDF_PageOrganizer {
- public:
- using ObjectNumberMap = std::map<FX_DWORD, FX_DWORD>;
- CPDF_PageOrganizer();
- ~CPDF_PageOrganizer();
-
- FX_BOOL PDFDocInit(CPDF_Document* pDestPDFDoc, CPDF_Document* pSrcPDFDoc);
- FX_BOOL ExportPage(CPDF_Document* pSrcPDFDoc,
- std::vector<FX_WORD>* pPageNums,
- CPDF_Document* pDestPDFDoc,
- int nIndex);
- CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary* pDict,
- CFX_ByteString nSrctag);
- FX_BOOL UpdateReference(CPDF_Object* pObj,
- CPDF_Document* pDoc,
- ObjectNumberMap* pObjNumberMap);
- FX_DWORD GetNewObjId(CPDF_Document* pDoc,
- ObjectNumberMap* pObjNumberMap,
- CPDF_Reference* pRef);
-};
-
-CPDF_PageOrganizer::CPDF_PageOrganizer() {}
-
-CPDF_PageOrganizer::~CPDF_PageOrganizer() {}
-
-FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc,
- CPDF_Document* pSrcPDFDoc) {
- if (!pDestPDFDoc || !pSrcPDFDoc)
- return FALSE;
-
- CPDF_Dictionary* pNewRoot = pDestPDFDoc->GetRoot();
- if (!pNewRoot)
- return FALSE;
-
- // Set the document information
- CPDF_Dictionary* DInfoDict = pDestPDFDoc->GetInfo();
- if (!DInfoDict)
- return FALSE;
-
- CFX_ByteString producerstr;
- producerstr.Format("PDFium");
- DInfoDict->SetAt("Producer", new CPDF_String(producerstr, FALSE));
-
- // Set type
- CFX_ByteString cbRootType = pNewRoot->GetStringBy("Type", "");
- if (cbRootType.Equal("")) {
- pNewRoot->SetAt("Type", new CPDF_Name("Catalog"));
- }
-
- CPDF_Object* pElement = pNewRoot->GetElement("Pages");
- CPDF_Dictionary* pNewPages =
- pElement ? ToDictionary(pElement->GetDirect()) : nullptr;
- if (!pNewPages) {
- pNewPages = new CPDF_Dictionary;
- FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages);
- pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON));
- }
-
- CFX_ByteString cbPageType = pNewPages->GetStringBy("Type", "");
- if (cbPageType.Equal("")) {
- pNewPages->SetAt("Type", new CPDF_Name("Pages"));
- }
-
- CPDF_Array* pKeysArray = pNewPages->GetArrayBy("Kids");
- if (!pKeysArray) {
- CPDF_Array* pNewKids = new CPDF_Array;
- FX_DWORD Kidsobjnum = -1;
- Kidsobjnum = pDestPDFDoc->AddIndirectObject(pNewKids);
-
- pNewPages->SetAt("Kids", new CPDF_Reference(pDestPDFDoc, Kidsobjnum));
- pNewPages->SetAt("Count", new CPDF_Number(0));
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc,
- std::vector<FX_WORD>* pPageNums,
- CPDF_Document* pDestPDFDoc,
- int nIndex) {
- int curpage = nIndex;
- std::unique_ptr<ObjectNumberMap> pObjNumberMap(new ObjectNumberMap);
- int nSize = pdfium::CollectionSize<int>(*pPageNums);
- for (int i = 0; i < nSize; ++i) {
- CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage);
- CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(pPageNums->at(i) - 1);
- if (!pSrcPageDict || !pCurPageDict)
- return FALSE;
-
- // Clone the page dictionary
- for (const auto& it : *pSrcPageDict) {
- const CFX_ByteString& cbSrcKeyStr = it.first;
- CPDF_Object* pObj = it.second;
- if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) {
- if (pCurPageDict->KeyExist(cbSrcKeyStr))
- pCurPageDict->RemoveAt(cbSrcKeyStr);
- pCurPageDict->SetAt(cbSrcKeyStr, pObj->Clone());
- }
- }
-
- // inheritable item
- CPDF_Object* pInheritable = nullptr;
- // 1 MediaBox //required
- if (!pCurPageDict->KeyExist("MediaBox")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "MediaBox");
- if (!pInheritable) {
- // Search the "CropBox" from source page dictionary,
- // if not exists,we take the letter size.
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
- if (pInheritable) {
- pCurPageDict->SetAt("MediaBox", pInheritable->Clone());
- } else {
- // Make the default size to be letter size (8.5'x11')
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddNumber(0);
- pArray->AddNumber(0);
- pArray->AddNumber(612);
- pArray->AddNumber(792);
- pCurPageDict->SetAt("MediaBox", pArray);
- }
- } else {
- pCurPageDict->SetAt("MediaBox", pInheritable->Clone());
- }
- }
- // 2 Resources //required
- if (!pCurPageDict->KeyExist("Resources")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources");
- if (!pInheritable)
- return FALSE;
- pCurPageDict->SetAt("Resources", pInheritable->Clone());
- }
- // 3 CropBox //Optional
- if (!pCurPageDict->KeyExist("CropBox")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
- if (pInheritable)
- pCurPageDict->SetAt("CropBox", pInheritable->Clone());
- }
- // 4 Rotate //Optional
- if (!pCurPageDict->KeyExist("Rotate")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate");
- if (pInheritable)
- pCurPageDict->SetAt("Rotate", pInheritable->Clone());
- }
-
- // Update the reference
- FX_DWORD dwOldPageObj = pSrcPageDict->GetObjNum();
- FX_DWORD dwNewPageObj = pCurPageDict->GetObjNum();
-
- (*pObjNumberMap)[dwOldPageObj] = dwNewPageObj;
-
- UpdateReference(pCurPageDict, pDestPDFDoc, pObjNumberMap.get());
- ++curpage;
- }
-
- return TRUE;
-}
-
-CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(
- CPDF_Dictionary* pDict,
- CFX_ByteString nSrctag) {
- if (!pDict || nSrctag.IsEmpty())
- return nullptr;
- if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type"))
- return nullptr;
-
- CPDF_Object* pType = pDict->GetElement("Type")->GetDirect();
- if (!ToName(pType))
- return nullptr;
- if (pType->GetString().Compare("Page"))
- return nullptr;
-
- CPDF_Dictionary* pp = ToDictionary(pDict->GetElement("Parent")->GetDirect());
- if (!pp)
- return nullptr;
-
- if (pDict->KeyExist((const char*)nSrctag))
- return pDict->GetElement((const char*)nSrctag);
-
- while (pp) {
- if (pp->KeyExist((const char*)nSrctag))
- return pp->GetElement((const char*)nSrctag);
- if (!pp->KeyExist("Parent"))
- break;
- pp = ToDictionary(pp->GetElement("Parent")->GetDirect());
- }
- return nullptr;
-}
-
-FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
- CPDF_Document* pDoc,
- ObjectNumberMap* pObjNumberMap) {
- switch (pObj->GetType()) {
- case CPDF_Object::REFERENCE: {
- CPDF_Reference* pReference = pObj->AsReference();
- FX_DWORD newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference);
- if (newobjnum == 0)
- return FALSE;
- pReference->SetRef(pDoc, newobjnum);
- break;
- }
- case CPDF_Object::DICTIONARY: {
- CPDF_Dictionary* pDict = pObj->AsDictionary();
- auto it = pDict->begin();
- while (it != pDict->end()) {
- const CFX_ByteString& key = it->first;
- CPDF_Object* pNextObj = it->second;
- ++it;
- if (!FXSYS_strcmp(key, "Parent") || !FXSYS_strcmp(key, "Prev") ||
- !FXSYS_strcmp(key, "First")) {
- continue;
- }
- if (pNextObj) {
- if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
- pDict->RemoveAt(key);
- } else {
- return FALSE;
- }
- }
- break;
- }
- case CPDF_Object::ARRAY: {
- CPDF_Array* pArray = pObj->AsArray();
- FX_DWORD count = pArray->GetCount();
- for (FX_DWORD i = 0; i < count; ++i) {
- CPDF_Object* pNextObj = pArray->GetElement(i);
- if (!pNextObj)
- return FALSE;
- if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
- return FALSE;
- }
- break;
- }
- case CPDF_Object::STREAM: {
- CPDF_Stream* pStream = pObj->AsStream();
- CPDF_Dictionary* pDict = pStream->GetDict();
- if (pDict) {
- if (!UpdateReference(pDict, pDoc, pObjNumberMap))
- return FALSE;
- } else {
- return FALSE;
- }
- break;
- }
- default:
- break;
- }
-
- return TRUE;
-}
-
-FX_DWORD CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc,
- ObjectNumberMap* pObjNumberMap,
- CPDF_Reference* pRef) {
- if (!pRef)
- return 0;
-
- FX_DWORD dwObjnum = pRef->GetRefObjNum();
- FX_DWORD dwNewObjNum = 0;
- const auto it = pObjNumberMap->find(dwObjnum);
- if (it != pObjNumberMap->end())
- dwNewObjNum = it->second;
- if (dwNewObjNum)
- return dwNewObjNum;
-
- CPDF_Object* pDirect = pRef->GetDirect();
- if (!pDirect)
- return 0;
-
- CPDF_Object* pClone = pDirect->Clone();
- if (!pClone)
- return 0;
-
- if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) {
- if (pDictClone->KeyExist("Type")) {
- CFX_ByteString strType = pDictClone->GetStringBy("Type");
- if (!FXSYS_stricmp(strType, "Pages")) {
- pDictClone->Release();
- return 4;
- }
- if (!FXSYS_stricmp(strType, "Page")) {
- pDictClone->Release();
- return 0;
- }
- }
- }
- dwNewObjNum = pDoc->AddIndirectObject(pClone);
- (*pObjNumberMap)[dwObjnum] = dwNewObjNum;
- if (!UpdateReference(pClone, pDoc, pObjNumberMap)) {
- pClone->Release();
- return 0;
- }
- return dwNewObjNum;
-}
-
-FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring,
- std::vector<FX_WORD>* pageArray,
- int nCount) {
- if (rangstring.GetLength() != 0) {
- rangstring.Remove(' ');
- int nLength = rangstring.GetLength();
- CFX_ByteString cbCompareString("0123456789-,");
- for (int i = 0; i < nLength; ++i) {
- if (cbCompareString.Find(rangstring[i]) == -1)
- return FALSE;
- }
- CFX_ByteString cbMidRange;
- int nStringFrom = 0;
- int nStringTo = 0;
- while (nStringTo < nLength) {
- nStringTo = rangstring.Find(',', nStringFrom);
- if (nStringTo == -1)
- nStringTo = nLength;
- cbMidRange = rangstring.Mid(nStringFrom, nStringTo - nStringFrom);
- int nMid = cbMidRange.Find('-');
- if (nMid == -1) {
- long lPageNum = atol(cbMidRange);
- if (lPageNum <= 0 || lPageNum > nCount)
- return FALSE;
- pageArray->push_back((FX_WORD)lPageNum);
- } else {
- int nStartPageNum = atol(cbMidRange.Mid(0, nMid));
- if (nStartPageNum == 0)
- return FALSE;
-
- ++nMid;
- int nEnd = cbMidRange.GetLength() - nMid;
- if (nEnd == 0)
- return FALSE;
-
- int nEndPageNum = atol(cbMidRange.Mid(nMid, nEnd));
- if (nStartPageNum < 0 || nStartPageNum > nEndPageNum ||
- nEndPageNum > nCount) {
- return FALSE;
- }
- for (int i = nStartPageNum; i <= nEndPageNum; ++i) {
- pageArray->push_back(i);
- }
- }
- nStringFrom = nStringTo + 1;
- }
- }
- return TRUE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
- FPDF_DOCUMENT src_doc,
- FPDF_BYTESTRING pagerange,
- int index) {
- CPDF_Document* pDestDoc = CPDFDocumentFromFPDFDocument(dest_doc);
- if (!dest_doc)
- return FALSE;
-
- CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc);
- if (!pSrcDoc)
- return FALSE;
-
- std::vector<FX_WORD> pageArray;
- int nCount = pSrcDoc->GetPageCount();
- if (pagerange) {
- if (!ParserPageRangeString(pagerange, &pageArray, nCount))
- return FALSE;
- } else {
- for (int i = 1; i <= nCount; ++i) {
- pageArray.push_back(i);
- }
- }
-
- CPDF_PageOrganizer pageOrg;
- pageOrg.PDFDocInit(pDestDoc, pSrcDoc);
- return pageOrg.ExportPage(pSrcDoc, &pageArray, pDestDoc, index);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc,
- FPDF_DOCUMENT src_doc) {
- CPDF_Document* pDstDoc = CPDFDocumentFromFPDFDocument(dest_doc);
- if (!pDstDoc)
- return FALSE;
-
- CPDF_Document* pSrcDoc = CPDFDocumentFromFPDFDocument(src_doc);
- if (!pSrcDoc)
- return FALSE;
-
- CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot();
- pSrcDict = pSrcDict->GetDictBy("ViewerPreferences");
- if (!pSrcDict)
- return FALSE;
-
- CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
- if (!pDstDict)
- return FALSE;
-
- pDstDict->SetAt("ViewerPreferences", pSrcDict->Clone(TRUE));
- return TRUE;
-}
diff --git a/fpdfsdk/src/fpdfsave.cpp b/fpdfsdk/src/fpdfsave.cpp
deleted file mode 100644
index 81defbf0a7..0000000000
--- a/fpdfsdk/src/fpdfsave.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_save.h"
-
-#include <vector>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_reference.h"
-#include "core/include/fpdfapi/cpdf_string.h"
-#include "core/include/fpdfapi/fpdf_serial.h"
-#include "core/include/fxcrt/fx_ext.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "public/fpdf_edit.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#include "public/fpdf_formfill.h"
-#endif
-
-#if _FX_OS_ == _FX_ANDROID_
-#include "time.h"
-#else
-#include <ctime>
-#endif
-
-class CFX_IFileWrite final : public IFX_StreamWrite {
- public:
- CFX_IFileWrite();
- FX_BOOL Init(FPDF_FILEWRITE* pFileWriteStruct);
- FX_BOOL WriteBlock(const void* pData, size_t size) override;
- void Release() override;
-
- protected:
- ~CFX_IFileWrite() override {}
-
- FPDF_FILEWRITE* m_pFileWriteStruct;
-};
-
-CFX_IFileWrite::CFX_IFileWrite() {
- m_pFileWriteStruct = NULL;
-}
-
-FX_BOOL CFX_IFileWrite::Init(FPDF_FILEWRITE* pFileWriteStruct) {
- if (!pFileWriteStruct)
- return FALSE;
-
- m_pFileWriteStruct = pFileWriteStruct;
- return TRUE;
-}
-
-FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size) {
- if (!m_pFileWriteStruct)
- return FALSE;
-
- m_pFileWriteStruct->WriteBlock(m_pFileWriteStruct, pData, size);
- return TRUE;
-}
-
-void CFX_IFileWrite::Release() {
- delete this;
-}
-
-namespace {
-
-#ifdef PDF_ENABLE_XFA
-bool SaveXFADocumentData(CPDFXFA_Document* pDocument,
- std::vector<ScopedFileStream>* fileList) {
- if (!pDocument)
- return false;
-
- if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA &&
- pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
- return true;
-
- if (!CPDFXFA_App::GetInstance()->GetXFAApp())
- return true;
-
- IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
- if (!pXFADocView)
- return true;
-
- IXFA_DocHandler* pXFADocHandler =
- CPDFXFA_App::GetInstance()->GetXFAApp()->GetDocHandler();
- CPDF_Document* pPDFDocument = pDocument->GetPDFDoc();
- if (!pDocument)
- return false;
-
- CPDF_Dictionary* pRoot = pPDFDocument->GetRoot();
- if (!pRoot)
- return false;
-
- CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
- if (!pAcroForm)
- return false;
-
- CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
- if (!pXFA)
- return true;
-
- if (!pXFA->IsArray())
- return false;
-
- CPDF_Array* pArray = pXFA->GetArray();
- if (!pArray)
- return false;
-
- int size = pArray->GetCount();
- int iFormIndex = -1;
- int iDataSetsIndex = -1;
- int iTemplate = -1;
- int iLast = size - 2;
- for (int i = 0; i < size - 1; i++) {
- CPDF_Object* pPDFObj = pArray->GetElement(i);
- if (!pPDFObj->IsString())
- continue;
- if (pPDFObj->GetString() == "form")
- iFormIndex = i + 1;
- else if (pPDFObj->GetString() == "datasets")
- iDataSetsIndex = i + 1;
- else if (pPDFObj->GetString() == "template")
- iTemplate = i + 1;
- }
- std::unique_ptr<IXFA_ChecksumContext, ReleaseDeleter<IXFA_ChecksumContext>>
- pContext(XFA_Checksum_Create());
- pContext->StartChecksum();
-
- // template
- if (iTemplate > -1) {
- CPDF_Stream* pTemplateStream = pArray->GetStreamAt(iTemplate);
- CPDF_StreamAcc streamAcc;
- streamAcc.LoadAllData(pTemplateStream);
- uint8_t* pData = (uint8_t*)streamAcc.GetData();
- FX_DWORD dwSize2 = streamAcc.GetSize();
- ScopedFileStream pTemplate(FX_CreateMemoryStream(pData, dwSize2));
- pContext->UpdateChecksum(pTemplate.get());
- }
- CPDF_Stream* pFormStream = NULL;
- CPDF_Stream* pDataSetsStream = NULL;
- if (iFormIndex != -1) {
- // Get form CPDF_Stream
- CPDF_Object* pFormPDFObj = pArray->GetElement(iFormIndex);
- if (pFormPDFObj->IsReference()) {
- CPDF_Object* pFormDirectObj = pFormPDFObj->GetDirect();
- if (pFormDirectObj && pFormDirectObj->IsStream()) {
- pFormStream = (CPDF_Stream*)pFormDirectObj;
- }
- } else if (pFormPDFObj->IsStream()) {
- pFormStream = (CPDF_Stream*)pFormPDFObj;
- }
- }
-
- if (iDataSetsIndex != -1) {
- // Get datasets CPDF_Stream
- CPDF_Object* pDataSetsPDFObj = pArray->GetElement(iDataSetsIndex);
- if (pDataSetsPDFObj->IsReference()) {
- CPDF_Reference* pDataSetsRefObj = (CPDF_Reference*)pDataSetsPDFObj;
- CPDF_Object* pDataSetsDirectObj = pDataSetsRefObj->GetDirect();
- if (pDataSetsDirectObj && pDataSetsDirectObj->IsStream()) {
- pDataSetsStream = (CPDF_Stream*)pDataSetsDirectObj;
- }
- } else if (pDataSetsPDFObj->IsStream()) {
- pDataSetsStream = (CPDF_Stream*)pDataSetsPDFObj;
- }
- }
- // L"datasets"
- {
- ScopedFileStream pDsfileWrite(FX_CreateMemoryStream());
- if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(),
- CFX_WideStringC(L"datasets"),
- pDsfileWrite.get()) &&
- pDsfileWrite->GetSize() > 0) {
- // Datasets
- pContext->UpdateChecksum(pDsfileWrite.get());
- pContext->FinishChecksum();
- CPDF_Dictionary* pDataDict = new CPDF_Dictionary;
- if (iDataSetsIndex != -1) {
- if (pDataSetsStream)
- pDataSetsStream->InitStreamFromFile(pDsfileWrite.get(), pDataDict);
- } else {
- CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL);
- pData->InitStreamFromFile(pDsfileWrite.get(), pDataDict);
- pPDFDocument->AddIndirectObject(pData);
- iLast = pArray->GetCount() - 2;
- pArray->InsertAt(iLast, new CPDF_String("datasets", FALSE));
- pArray->InsertAt(iLast + 1, pData, pPDFDocument);
- }
- fileList->push_back(std::move(pDsfileWrite));
- }
- }
- // L"form"
- {
- ScopedFileStream pfileWrite(FX_CreateMemoryStream());
- if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(),
- CFX_WideStringC(L"form"), pfileWrite.get(),
- pContext.get()) &&
- pfileWrite->GetSize() > 0) {
- CPDF_Dictionary* pDataDict = new CPDF_Dictionary;
- if (iFormIndex != -1) {
- if (pFormStream)
- pFormStream->InitStreamFromFile(pfileWrite.get(), pDataDict);
- } else {
- CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL);
- pData->InitStreamFromFile(pfileWrite.get(), pDataDict);
- pPDFDocument->AddIndirectObject(pData);
- iLast = pArray->GetCount() - 2;
- pArray->InsertAt(iLast, new CPDF_String("form", FALSE));
- pArray->InsertAt(iLast + 1, pData, pPDFDocument);
- }
- fileList->push_back(std::move(pfileWrite));
- }
- }
- return true;
-}
-
-bool SendPostSaveToXFADoc(CPDFXFA_Document* pDocument) {
- if (!pDocument)
- return false;
-
- if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA &&
- pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
- return true;
-
- IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
- if (!pXFADocView)
- return false;
-
- IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler();
- CXFA_WidgetAcc* pWidgetAcc = NULL;
- IXFA_WidgetAccIterator* pWidgetAccIterator =
- pXFADocView->CreateWidgetAccIterator();
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- while (pWidgetAcc) {
- CXFA_EventParam preParam;
- preParam.m_eType = XFA_EVENT_PostSave;
- pWidgetHander->ProcessEvent(pWidgetAcc, &preParam);
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- }
- pWidgetAccIterator->Release();
- pXFADocView->UpdateDocView();
- pDocument->_ClearChangeMark();
- return true;
-}
-
-bool SendPreSaveToXFADoc(CPDFXFA_Document* pDocument,
- std::vector<ScopedFileStream>* fileList) {
- if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA &&
- pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
- return true;
-
- IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
- if (!pXFADocView)
- return true;
-
- IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler();
- CXFA_WidgetAcc* pWidgetAcc = NULL;
- IXFA_WidgetAccIterator* pWidgetAccIterator =
- pXFADocView->CreateWidgetAccIterator();
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- while (pWidgetAcc) {
- CXFA_EventParam preParam;
- preParam.m_eType = XFA_EVENT_PreSave;
- pWidgetHander->ProcessEvent(pWidgetAcc, &preParam);
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- }
- pWidgetAccIterator->Release();
- pXFADocView->UpdateDocView();
- return SaveXFADocumentData(pDocument, fileList);
-}
-#endif // PDF_ENABLE_XFA
-
-bool FPDF_Doc_Save(FPDF_DOCUMENT document,
- FPDF_FILEWRITE* pFileWrite,
- FPDF_DWORD flags,
- FPDF_BOOL bSetVersion,
- int fileVerion) {
- CPDF_Document* pPDFDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pPDFDoc)
- return 0;
-
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_Document* pDoc = static_cast<CPDFXFA_Document*>(document);
- std::vector<ScopedFileStream> fileList;
- SendPreSaveToXFADoc(pDoc, &fileList);
-#endif // PDF_ENABLE_XFA
-
- if (flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY)
- flags = 0;
-
- CPDF_Creator FileMaker(pPDFDoc);
- if (bSetVersion)
- FileMaker.SetFileVersion(fileVerion);
- if (flags == FPDF_REMOVE_SECURITY) {
- flags = 0;
- FileMaker.RemoveSecurity();
- }
-
- CFX_IFileWrite* pStreamWrite = NULL;
- pStreamWrite = new CFX_IFileWrite;
- pStreamWrite->Init(pFileWrite);
- bool bRet = FileMaker.Create(pStreamWrite, flags);
-#ifdef PDF_ENABLE_XFA
- SendPostSaveToXFADoc(pDoc);
-#endif // PDF_ENABLE_XFA
- pStreamWrite->Release();
- return bRet;
-}
-
-} // namespace
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document,
- FPDF_FILEWRITE* pFileWrite,
- FPDF_DWORD flags) {
- return FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0);
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document,
- FPDF_FILEWRITE* pFileWrite,
- FPDF_DWORD flags,
- int fileVersion) {
- return FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion);
-}
diff --git a/fpdfsdk/src/fpdfsave_embeddertest.cpp b/fpdfsdk/src/fpdfsave_embeddertest.cpp
deleted file mode 100644
index 1c93f4f0e1..0000000000
--- a/fpdfsdk/src/fpdfsave_embeddertest.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <string.h>
-
-#include "core/include/fxcrt/fx_string.h"
-#include "public/fpdf_save.h"
-#include "public/fpdfview.h"
-#include "testing/embedder_test.h"
-#include "testing/fx_string_testhelpers.h"
-#include "testing/gmock/include/gmock/gmock-matchers.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/test_support.h"
-
-class FPDFSaveEmbedderTest : public EmbedderTest, public TestSaver {};
-
-TEST_F(FPDFSaveEmbedderTest, SaveSimpleDoc) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
- EXPECT_THAT(GetString(), testing::StartsWith("%PDF-1.7\r\n"));
- EXPECT_EQ(843, GetString().length());
-}
-
-TEST_F(FPDFSaveEmbedderTest, SaveSimpleDocWithVersion) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- EXPECT_TRUE(FPDF_SaveWithVersion(document(), this, 0, 14));
- EXPECT_THAT(GetString(), testing::StartsWith("%PDF-1.4\r\n"));
- EXPECT_EQ(843, GetString().length());
-}
-
-TEST_F(FPDFSaveEmbedderTest, SaveSimpleDocWithBadVersion) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- EXPECT_TRUE(FPDF_SaveWithVersion(document(), this, 0, -1));
- EXPECT_THAT(GetString(), testing::StartsWith("%PDF-1.7\r\n"));
-
- ClearString();
- EXPECT_TRUE(FPDF_SaveWithVersion(document(), this, 0, 0));
- EXPECT_THAT(GetString(), testing::StartsWith("%PDF-1.7\r\n"));
-
- ClearString();
- EXPECT_TRUE(FPDF_SaveWithVersion(document(), this, 0, 18));
- EXPECT_THAT(GetString(), testing::StartsWith("%PDF-1.7\r\n"));
-}
-
-TEST_F(FPDFSaveEmbedderTest, BUG_342) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
- EXPECT_THAT(GetString(), testing::HasSubstr("0000000000 65535 f\r\n"));
- EXPECT_THAT(GetString(),
- testing::Not(testing::HasSubstr("0000000000 65536 f\r\n")));
-}
diff --git a/fpdfsdk/src/fpdftext.cpp b/fpdfsdk/src/fpdftext.cpp
deleted file mode 100644
index 80d56920bc..0000000000
--- a/fpdfsdk/src/fpdftext.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdf_text.h"
-
-#include "core/include/fpdfdoc/fpdf_doc.h"
-#include "core/include/fpdftext/fpdf_text.h"
-#include "fpdfsdk/include/fsdk_define.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#endif // PDF_ENABLE_XFA
-
-#ifdef _WIN32
-#include <tchar.h>
-#endif
-
-DLLEXPORT FPDF_TEXTPAGE STDCALL FPDFText_LoadPage(FPDF_PAGE page) {
- CPDF_Page* pPDFPage = CPDFPageFromFPDFPage(page);
- if (!pPDFPage)
- return nullptr;
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_Page* pPage = (CPDFXFA_Page*)page;
- CPDFXFA_Document* pDoc = pPage->GetDocument();
- CPDF_ViewerPreferences viewRef(pDoc->GetPDFDoc());
-#else // PDF_ENABLE_XFA
- CPDF_ViewerPreferences viewRef(pPDFPage->m_pDocument);
-#endif // PDF_ENABLE_XFA
- IPDF_TextPage* textpage =
- IPDF_TextPage::CreateTextPage(pPDFPage, viewRef.IsDirectionR2L());
- textpage->ParseTextPage();
- return textpage;
-}
-DLLEXPORT void STDCALL FPDFText_ClosePage(FPDF_TEXTPAGE text_page) {
- delete (IPDF_TextPage*)text_page;
-}
-DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page) {
- if (!text_page)
- return -1;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
- return textpage->CountChars();
-}
-
-DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page,
- int index) {
- if (!text_page)
- return -1;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
-
- if (index < 0 || index >= textpage->CountChars())
- return 0;
-
- FPDF_CHAR_INFO charinfo;
- textpage->GetCharInfo(index, &charinfo);
- return charinfo.m_Unicode;
-}
-
-DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page,
- int index) {
- if (!text_page)
- return 0;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
-
- if (index < 0 || index >= textpage->CountChars())
- return 0;
-
- FPDF_CHAR_INFO charinfo;
- textpage->GetCharInfo(index, &charinfo);
- return charinfo.m_FontSize;
-}
-
-DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page,
- int index,
- double* left,
- double* right,
- double* bottom,
- double* top) {
- if (!text_page)
- return;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
-
- if (index < 0 || index >= textpage->CountChars())
- return;
- FPDF_CHAR_INFO charinfo;
- textpage->GetCharInfo(index, &charinfo);
- *left = charinfo.m_CharBox.left;
- *right = charinfo.m_CharBox.right;
- *bottom = charinfo.m_CharBox.bottom;
- *top = charinfo.m_CharBox.top;
-}
-
-// select
-DLLEXPORT int STDCALL FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,
- double x,
- double y,
- double xTolerance,
- double yTolerance) {
- if (!text_page)
- return -3;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
- return textpage->GetIndexAtPos((FX_FLOAT)x, (FX_FLOAT)y, (FX_FLOAT)xTolerance,
- (FX_FLOAT)yTolerance);
-}
-
-DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page,
- int start,
- int count,
- unsigned short* result) {
- if (!text_page)
- return 0;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
-
- if (start >= textpage->CountChars())
- return 0;
-
- CFX_WideString str = textpage->GetPageText(start, count);
- if (str.GetLength() > count)
- str = str.Left(count);
-
- CFX_ByteString cbUTF16str = str.UTF16LE_Encode();
- FXSYS_memcpy(result, cbUTF16str.GetBuffer(cbUTF16str.GetLength()),
- cbUTF16str.GetLength());
- cbUTF16str.ReleaseBuffer(cbUTF16str.GetLength());
-
- return cbUTF16str.GetLength() / sizeof(unsigned short);
-}
-
-DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page,
- int start,
- int count) {
- if (!text_page)
- return 0;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
- return textpage->CountRects(start, count);
-}
-DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page,
- int rect_index,
- double* left,
- double* top,
- double* right,
- double* bottom) {
- if (!text_page)
- return;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
- CFX_FloatRect rect;
- textpage->GetRect(rect_index, rect.left, rect.top, rect.right, rect.bottom);
- *left = rect.left;
- *top = rect.top;
- *right = rect.right;
- *bottom = rect.bottom;
-}
-
-DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,
- double left,
- double top,
- double right,
- double bottom,
- unsigned short* buffer,
- int buflen) {
- if (!text_page)
- return 0;
- IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
- CFX_FloatRect rect((FX_FLOAT)left, (FX_FLOAT)bottom, (FX_FLOAT)right,
- (FX_FLOAT)top);
- CFX_WideString str = textpage->GetTextByRect(rect);
-
- if (buflen <= 0 || !buffer) {
- return str.GetLength();
- }
-
- CFX_ByteString cbUTF16Str = str.UTF16LE_Encode();
- int len = cbUTF16Str.GetLength() / sizeof(unsigned short);
- int size = buflen > len ? len : buflen;
- FXSYS_memcpy(buffer, cbUTF16Str.GetBuffer(size * sizeof(unsigned short)),
- size * sizeof(unsigned short));
- cbUTF16Str.ReleaseBuffer(size * sizeof(unsigned short));
-
- return size;
-}
-
-// Search
-// -1 for end
-DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page,
- FPDF_WIDESTRING findwhat,
- unsigned long flags,
- int start_index) {
- if (!text_page)
- return NULL;
- IPDF_TextPageFind* textpageFind = NULL;
- textpageFind = IPDF_TextPageFind::CreatePageFind((IPDF_TextPage*)text_page);
- FX_STRSIZE len = CFX_WideString::WStringLength(findwhat);
- textpageFind->FindFirst(CFX_WideString::FromUTF16LE(findwhat, len), flags,
- start_index);
- return textpageFind;
-}
-DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindNext(FPDF_SCHHANDLE handle) {
- if (!handle)
- return FALSE;
- IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
- return textpageFind->FindNext();
-}
-DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindPrev(FPDF_SCHHANDLE handle) {
- if (!handle)
- return FALSE;
- IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
- return textpageFind->FindPrev();
-}
-DLLEXPORT int STDCALL FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle) {
- if (!handle)
- return 0;
- IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
- return textpageFind->GetCurOrder();
-}
-DLLEXPORT int STDCALL FPDFText_GetSchCount(FPDF_SCHHANDLE handle) {
- if (!handle)
- return 0;
- IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
- return textpageFind->GetMatchedCount();
-}
-DLLEXPORT void STDCALL FPDFText_FindClose(FPDF_SCHHANDLE handle) {
- if (!handle)
- return;
- IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
- delete textpageFind;
- handle = NULL;
-}
-
-// web link
-DLLEXPORT FPDF_PAGELINK STDCALL FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page) {
- if (!text_page)
- return NULL;
- IPDF_LinkExtract* pageLink = NULL;
- pageLink = IPDF_LinkExtract::CreateLinkExtract();
- pageLink->ExtractLinks((IPDF_TextPage*)text_page);
- return pageLink;
-}
-DLLEXPORT int STDCALL FPDFLink_CountWebLinks(FPDF_PAGELINK link_page) {
- if (!link_page)
- return 0;
- IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
- return pageLink->CountLinks();
-}
-DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page,
- int link_index,
- unsigned short* buffer,
- int buflen) {
- if (!link_page)
- return 0;
- IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
- CFX_WideString url = pageLink->GetURL(link_index);
-
- CFX_ByteString cbUTF16URL = url.UTF16LE_Encode();
- int len = cbUTF16URL.GetLength() / sizeof(unsigned short);
- if (!buffer || buflen <= 0)
- return len;
- int size = len < buflen ? len : buflen;
- if (size > 0) {
- FXSYS_memcpy(buffer, cbUTF16URL.GetBuffer(size * sizeof(unsigned short)),
- size * sizeof(unsigned short));
- cbUTF16URL.ReleaseBuffer(size * sizeof(unsigned short));
- }
- return size;
-}
-DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page,
- int link_index) {
- if (!link_page)
- return 0;
- IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
- CFX_RectArray rectArray;
- pageLink->GetRects(link_index, rectArray);
- return rectArray.GetSize();
-}
-DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page,
- int link_index,
- int rect_index,
- double* left,
- double* top,
- double* right,
- double* bottom) {
- if (!link_page)
- return;
- IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
- CFX_RectArray rectArray;
- pageLink->GetRects(link_index, rectArray);
- if (rect_index >= 0 && rect_index < rectArray.GetSize()) {
- CFX_FloatRect rect = rectArray.GetAt(rect_index);
- *left = rect.left;
- *right = rect.right;
- *top = rect.top;
- *bottom = rect.bottom;
- }
-}
-DLLEXPORT void STDCALL FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page) {
- delete (IPDF_LinkExtract*)link_page;
-}
diff --git a/fpdfsdk/src/fpdftext_embeddertest.cpp b/fpdfsdk/src/fpdftext_embeddertest.cpp
deleted file mode 100644
index 3eaa5815d9..0000000000
--- a/fpdfsdk/src/fpdftext_embeddertest.cpp
+++ /dev/null
@@ -1,391 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "core/include/fxcrt/fx_basic.h"
-#include "public/fpdf_text.h"
-#include "public/fpdfview.h"
-#include "testing/embedder_test.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/test_support.h"
-
-namespace {
-
-bool check_unsigned_shorts(const char* expected,
- const unsigned short* actual,
- size_t length) {
- if (length > strlen(expected) + 1) {
- return false;
- }
- for (size_t i = 0; i < length; ++i) {
- if (actual[i] != static_cast<unsigned short>(expected[i])) {
- return false;
- }
- }
- return true;
-}
-
-} // namespace
-
-class FPDFTextEmbeddertest : public EmbedderTest {};
-
-TEST_F(FPDFTextEmbeddertest, Text) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
-
- FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page);
- EXPECT_NE(nullptr, textpage);
-
- static const char expected[] = "Hello, world!\r\nGoodbye, world!";
- unsigned short fixed_buffer[128];
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
-
- // Check includes the terminating NUL that is provided.
- int num_chars = FPDFText_GetText(textpage, 0, 128, fixed_buffer);
- ASSERT_GE(num_chars, 0);
- EXPECT_EQ(sizeof(expected), static_cast<size_t>(num_chars));
- EXPECT_TRUE(check_unsigned_shorts(expected, fixed_buffer, sizeof(expected)));
-
- // Count does not include the terminating NUL in the string literal.
- EXPECT_EQ(sizeof(expected) - 1, FPDFText_CountChars(textpage));
- for (size_t i = 0; i < sizeof(expected) - 1; ++i) {
- EXPECT_EQ(static_cast<unsigned int>(expected[i]),
- FPDFText_GetUnicode(textpage, i))
- << " at " << i;
- }
-
- EXPECT_EQ(12.0, FPDFText_GetFontSize(textpage, 0));
- EXPECT_EQ(16.0, FPDFText_GetFontSize(textpage, 15));
-
- double left = 0.0;
- double right = 0.0;
- double bottom = 0.0;
- double top = 0.0;
- FPDFText_GetCharBox(textpage, 4, &left, &right, &bottom, &top);
- EXPECT_NEAR(41.071, left, 0.001);
- EXPECT_NEAR(46.243, right, 0.001);
- EXPECT_NEAR(49.844, bottom, 0.001);
- EXPECT_NEAR(55.520, top, 0.001);
-
- EXPECT_EQ(4, FPDFText_GetCharIndexAtPos(textpage, 42.0, 50.0, 1.0, 1.0));
- EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 0.0, 0.0, 1.0, 1.0));
- EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 199.0, 199.0, 1.0, 1.0));
-
- // Test out of range indicies.
- EXPECT_EQ(-1,
- FPDFText_GetCharIndexAtPos(textpage, 42.0, 10000000.0, 1.0, 1.0));
- EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, -1.0, 50.0, 1.0, 1.0));
-
- // Count does not include the terminating NUL in the string literal.
- EXPECT_EQ(2, FPDFText_CountRects(textpage, 0, sizeof(expected) - 1));
-
- left = 0.0;
- right = 0.0;
- bottom = 0.0;
- top = 0.0;
- FPDFText_GetRect(textpage, 1, &left, &top, &right, &bottom);
- EXPECT_NEAR(20.847, left, 0.001);
- EXPECT_NEAR(135.167, right, 0.001);
- EXPECT_NEAR(96.655, bottom, 0.001);
- EXPECT_NEAR(116.000, top, 0.001);
-
- // Test out of range indicies set outputs to (0.0, 0.0, 0.0, 0.0).
- left = -1.0;
- right = -1.0;
- bottom = -1.0;
- top = -1.0;
- FPDFText_GetRect(textpage, -1, &left, &top, &right, &bottom);
- EXPECT_EQ(0.0, left);
- EXPECT_EQ(0.0, right);
- EXPECT_EQ(0.0, bottom);
- EXPECT_EQ(0.0, top);
-
- left = -2.0;
- right = -2.0;
- bottom = -2.0;
- top = -2.0;
- FPDFText_GetRect(textpage, 2, &left, &top, &right, &bottom);
- EXPECT_EQ(0.0, left);
- EXPECT_EQ(0.0, right);
- EXPECT_EQ(0.0, bottom);
- EXPECT_EQ(0.0, top);
-
- EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, 0, 0));
-
- // Extract starting at character 4 as above.
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(1, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0,
- fixed_buffer, 1));
- EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 1));
- EXPECT_EQ(0xbdbd, fixed_buffer[1]);
-
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0,
- fixed_buffer, 9));
- EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9));
- EXPECT_EQ(0xbdbd, fixed_buffer[9]);
-
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(10, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0,
- fixed_buffer, 128));
- EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9));
- EXPECT_EQ(0u, fixed_buffer[9]);
- EXPECT_EQ(0xbdbd, fixed_buffer[10]);
-
- FPDFText_ClosePage(textpage);
- UnloadPage(page);
-}
-
-TEST_F(FPDFTextEmbeddertest, TextSearch) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
-
- FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page);
- EXPECT_NE(nullptr, textpage);
-
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> nope =
- GetFPDFWideString(L"nope");
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> world =
- GetFPDFWideString(L"world");
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> world_caps =
- GetFPDFWideString(L"WORLD");
- std::unique_ptr<unsigned short, pdfium::FreeDeleter> world_substr =
- GetFPDFWideString(L"orld");
-
- // No occurences of "nope" in test page.
- FPDF_SCHHANDLE search = FPDFText_FindStart(textpage, nope.get(), 0, 0);
- EXPECT_NE(nullptr, search);
- EXPECT_EQ(0, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(0, FPDFText_GetSchCount(search));
-
- // Advancing finds nothing.
- EXPECT_FALSE(FPDFText_FindNext(search));
- EXPECT_EQ(0, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(0, FPDFText_GetSchCount(search));
-
- // Retreating finds nothing.
- EXPECT_FALSE(FPDFText_FindPrev(search));
- EXPECT_EQ(0, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(0, FPDFText_GetSchCount(search));
- FPDFText_FindClose(search);
-
- // Two occurences of "world" in test page.
- search = FPDFText_FindStart(textpage, world.get(), 0, 2);
- EXPECT_NE(nullptr, search);
-
- // Remains not found until advanced.
- EXPECT_EQ(0, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(0, FPDFText_GetSchCount(search));
-
- // First occurence of "world" in this test page.
- EXPECT_TRUE(FPDFText_FindNext(search));
- EXPECT_EQ(7, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(5, FPDFText_GetSchCount(search));
-
- // Last occurence of "world" in this test page.
- EXPECT_TRUE(FPDFText_FindNext(search));
- EXPECT_EQ(24, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(5, FPDFText_GetSchCount(search));
-
- // Found position unchanged when fails to advance.
- EXPECT_FALSE(FPDFText_FindNext(search));
- EXPECT_EQ(24, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(5, FPDFText_GetSchCount(search));
-
- // Back to first occurence.
- EXPECT_TRUE(FPDFText_FindPrev(search));
- EXPECT_EQ(7, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(5, FPDFText_GetSchCount(search));
-
- // Found position unchanged when fails to retreat.
- EXPECT_FALSE(FPDFText_FindPrev(search));
- EXPECT_EQ(7, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(5, FPDFText_GetSchCount(search));
- FPDFText_FindClose(search);
-
- // Exact search unaffected by case sensitiity and whole word flags.
- search = FPDFText_FindStart(textpage, world.get(),
- FPDF_MATCHCASE | FPDF_MATCHWHOLEWORD, 0);
- EXPECT_NE(nullptr, search);
- EXPECT_TRUE(FPDFText_FindNext(search));
- EXPECT_EQ(7, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(5, FPDFText_GetSchCount(search));
- FPDFText_FindClose(search);
-
- // Default is case-insensitive, so matching agaist caps works.
- search = FPDFText_FindStart(textpage, world_caps.get(), 0, 0);
- EXPECT_NE(nullptr, search);
- EXPECT_TRUE(FPDFText_FindNext(search));
- EXPECT_EQ(7, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(5, FPDFText_GetSchCount(search));
- FPDFText_FindClose(search);
-
- // But can be made case sensitive, in which case this fails.
- search = FPDFText_FindStart(textpage, world_caps.get(), FPDF_MATCHCASE, 0);
- EXPECT_FALSE(FPDFText_FindNext(search));
- EXPECT_EQ(0, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(0, FPDFText_GetSchCount(search));
- FPDFText_FindClose(search);
-
- // Default is match anywhere within word, so matching substirng works.
- search = FPDFText_FindStart(textpage, world_substr.get(), 0, 0);
- EXPECT_TRUE(FPDFText_FindNext(search));
- EXPECT_EQ(8, FPDFText_GetSchResultIndex(search));
- EXPECT_EQ(4, FPDFText_GetSchCount(search));
- FPDFText_FindClose(search);
-
- // But can be made to mach word boundaries, in which case this fails.
- search =
- FPDFText_FindStart(textpage, world_substr.get(), FPDF_MATCHWHOLEWORD, 0);
- EXPECT_FALSE(FPDFText_FindNext(search));
- // TODO(tsepez): investigate strange index/count values in this state.
- FPDFText_FindClose(search);
-
- FPDFText_ClosePage(textpage);
- UnloadPage(page);
-}
-
-// Test that the page has characters despite a bad stream length.
-TEST_F(FPDFTextEmbeddertest, StreamLengthPastEndOfFile) {
- EXPECT_TRUE(OpenDocument("bug_57.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
-
- FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page);
- EXPECT_NE(nullptr, textpage);
- EXPECT_EQ(13, FPDFText_CountChars(textpage));
-
- FPDFText_ClosePage(textpage);
- UnloadPage(page);
-}
-
-TEST_F(FPDFTextEmbeddertest, WebLinks) {
- EXPECT_TRUE(OpenDocument("weblinks.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
-
- FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page);
- EXPECT_NE(nullptr, textpage);
-
- FPDF_PAGELINK pagelink = FPDFLink_LoadWebLinks(textpage);
- EXPECT_NE(nullptr, pagelink);
-
- // Page contains two HTTP-style URLs.
- EXPECT_EQ(2, FPDFLink_CountWebLinks(pagelink));
-
- // Only a terminating NUL required for bogus links.
- EXPECT_EQ(1, FPDFLink_GetURL(pagelink, 2, nullptr, 0));
- EXPECT_EQ(1, FPDFLink_GetURL(pagelink, 1400, nullptr, 0));
- EXPECT_EQ(1, FPDFLink_GetURL(pagelink, -1, nullptr, 0));
-
- // Query the number of characters required for each link (incl NUL).
- EXPECT_EQ(25, FPDFLink_GetURL(pagelink, 0, nullptr, 0));
- EXPECT_EQ(26, FPDFLink_GetURL(pagelink, 1, nullptr, 0));
-
- static const char expected_url[] = "http://example.com?q=foo";
- unsigned short fixed_buffer[128];
-
- // Retrieve a link with too small a buffer. Buffer will not be
- // NUL-terminated, but must not be modified past indicated length,
- // so pre-fill with a pattern to check write bounds.
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(1, FPDFLink_GetURL(pagelink, 0, fixed_buffer, 1));
- EXPECT_TRUE(check_unsigned_shorts(expected_url, fixed_buffer, 1));
- EXPECT_EQ(0xbdbd, fixed_buffer[1]);
-
- // Check buffer that doesn't have space for a terminating NUL.
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(
- sizeof(expected_url) - 1,
- FPDFLink_GetURL(pagelink, 0, fixed_buffer, sizeof(expected_url) - 1));
- EXPECT_TRUE(check_unsigned_shorts(expected_url, fixed_buffer,
- sizeof(expected_url) - 1));
- EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url) - 1]);
-
- // Retreive link with exactly-sized buffer.
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(sizeof(expected_url),
- FPDFLink_GetURL(pagelink, 0, fixed_buffer, sizeof(expected_url)));
- EXPECT_TRUE(
- check_unsigned_shorts(expected_url, fixed_buffer, sizeof(expected_url)));
- EXPECT_EQ(0u, fixed_buffer[sizeof(expected_url) - 1]);
- EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url)]);
-
- // Retreive link with ample-sized-buffer.
- memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(sizeof(expected_url),
- FPDFLink_GetURL(pagelink, 0, fixed_buffer, 128));
- EXPECT_TRUE(
- check_unsigned_shorts(expected_url, fixed_buffer, sizeof(expected_url)));
- EXPECT_EQ(0u, fixed_buffer[sizeof(expected_url) - 1]);
- EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url)]);
-
- // Each link rendered in a single rect in this test page.
- EXPECT_EQ(1, FPDFLink_CountRects(pagelink, 0));
- EXPECT_EQ(1, FPDFLink_CountRects(pagelink, 1));
-
- // Each link rendered in a single rect in this test page.
- EXPECT_EQ(0, FPDFLink_CountRects(pagelink, -1));
- EXPECT_EQ(0, FPDFLink_CountRects(pagelink, 2));
- EXPECT_EQ(0, FPDFLink_CountRects(pagelink, 10000));
-
- // Check boundary of valid link index with valid rect index.
- double left = 0.0;
- double right = 0.0;
- double top = 0.0;
- double bottom = 0.0;
- FPDFLink_GetRect(pagelink, 0, 0, &left, &top, &right, &bottom);
- EXPECT_NEAR(50.791, left, 0.001);
- EXPECT_NEAR(187.963, right, 0.001);
- EXPECT_NEAR(97.624, bottom, 0.001);
- EXPECT_NEAR(108.736, top, 0.001);
-
- // Check that valid link with invalid rect index leaves parameters unchanged.
- left = -1.0;
- right = -1.0;
- top = -1.0;
- bottom = -1.0;
- FPDFLink_GetRect(pagelink, 0, 1, &left, &top, &right, &bottom);
- EXPECT_EQ(-1.0, left);
- EXPECT_EQ(-1.0, right);
- EXPECT_EQ(-1.0, bottom);
- EXPECT_EQ(-1.0, top);
-
- // Check that invalid link index leaves parameters unchanged.
- left = -2.0;
- right = -2.0;
- top = -2.0;
- bottom = -2.0;
- FPDFLink_GetRect(pagelink, -1, 0, &left, &top, &right, &bottom);
- EXPECT_EQ(-2.0, left);
- EXPECT_EQ(-2.0, right);
- EXPECT_EQ(-2.0, bottom);
- EXPECT_EQ(-2.0, top);
-
- FPDFLink_CloseWebLinks(pagelink);
- FPDFText_ClosePage(textpage);
- UnloadPage(page);
-}
-
-TEST_F(FPDFTextEmbeddertest, GetFontSize) {
- EXPECT_TRUE(OpenDocument("hello_world.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
-
- FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page);
- EXPECT_NE(nullptr, textpage);
-
- const double kExpectedFontsSizes[] = {12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 1, 1, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16};
-
- int count = FPDFText_CountChars(textpage);
- ASSERT_EQ(FX_ArraySize(kExpectedFontsSizes), count);
- for (int i = 0; i < count; ++i)
- EXPECT_EQ(kExpectedFontsSizes[i], FPDFText_GetFontSize(textpage, i)) << i;
-
- FPDFText_ClosePage(textpage);
- UnloadPage(page);
-}
diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp
deleted file mode 100644
index 1f6d11d3fe..0000000000
--- a/fpdfsdk/src/fpdfview.cpp
+++ /dev/null
@@ -1,1145 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "public/fpdfview.h"
-
-#include <memory>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fxcodec/fx_codec.h"
-#include "core/include/fxcrt/fx_safe_types.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/fsdk_rendercontext.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "public/fpdf_ext.h"
-#include "public/fpdf_progressive.h"
-#include "third_party/base/numerics/safe_conversions_impl.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "core/include/fpdfapi/fpdf_module.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#include "public/fpdf_formfill.h"
-#endif // PDF_ENABLE_XFA
-
-UnderlyingDocumentType* UnderlyingFromFPDFDocument(FPDF_DOCUMENT doc) {
- return static_cast<UnderlyingDocumentType*>(doc);
-}
-
-FPDF_DOCUMENT FPDFDocumentFromUnderlying(UnderlyingDocumentType* doc) {
- return static_cast<FPDF_DOCUMENT>(doc);
-}
-
-UnderlyingPageType* UnderlyingFromFPDFPage(FPDF_PAGE page) {
- return static_cast<UnderlyingPageType*>(page);
-}
-
-CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) {
-#ifdef PDF_ENABLE_XFA
- return doc ? UnderlyingFromFPDFDocument(doc)->GetPDFDoc() : nullptr;
-#else // PDF_ENABLE_XFA
- return UnderlyingFromFPDFDocument(doc);
-#endif // PDF_ENABLE_XFA
-}
-
-FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) {
-#ifdef PDF_ENABLE_XFA
- return doc ? FPDFDocumentFromUnderlying(
- new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance()))
- : nullptr;
-#else // PDF_ENABLE_XFA
- return FPDFDocumentFromUnderlying(doc);
-#endif // PDF_ENABLE_XFA
-}
-
-CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) {
-#ifdef PDF_ENABLE_XFA
- return page ? UnderlyingFromFPDFPage(page)->GetPDFPage() : nullptr;
-#else // PDF_ENABLE_XFA
- return UnderlyingFromFPDFPage(page);
-#endif // PDF_ENABLE_XFA
-}
-
-#ifdef PDF_ENABLE_XFA
-CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) {
- m_pFS = pFS;
- m_nCurPos = 0;
-}
-
-IFX_FileStream* CFPDF_FileStream::Retain() {
- return this;
-}
-
-void CFPDF_FileStream::Release() {
- if (m_pFS && m_pFS->Release)
- m_pFS->Release(m_pFS->clientData);
- delete this;
-}
-
-FX_FILESIZE CFPDF_FileStream::GetSize() {
- if (m_pFS && m_pFS->GetSize)
- return (FX_FILESIZE)m_pFS->GetSize(m_pFS->clientData);
- return 0;
-}
-
-FX_BOOL CFPDF_FileStream::IsEOF() {
- return m_nCurPos >= GetSize();
-}
-
-FX_BOOL CFPDF_FileStream::ReadBlock(void* buffer,
- FX_FILESIZE offset,
- size_t size) {
- if (!buffer || !size || !m_pFS->ReadBlock)
- return FALSE;
-
- if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer,
- (FPDF_DWORD)size) == 0) {
- m_nCurPos = offset + size;
- return TRUE;
- }
- return FALSE;
-}
-
-size_t CFPDF_FileStream::ReadBlock(void* buffer, size_t size) {
- if (!buffer || !size || !m_pFS->ReadBlock)
- return 0;
-
- FX_FILESIZE nSize = GetSize();
- if (m_nCurPos >= nSize)
- return 0;
- FX_FILESIZE dwAvail = nSize - m_nCurPos;
- if (dwAvail < (FX_FILESIZE)size)
- size = (size_t)dwAvail;
- if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)m_nCurPos, buffer,
- (FPDF_DWORD)size) == 0) {
- m_nCurPos += size;
- return size;
- }
-
- return 0;
-}
-
-FX_BOOL CFPDF_FileStream::WriteBlock(const void* buffer,
- FX_FILESIZE offset,
- size_t size) {
- if (!m_pFS || !m_pFS->WriteBlock)
- return FALSE;
-
- if (m_pFS->WriteBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer,
- (FPDF_DWORD)size) == 0) {
- m_nCurPos = offset + size;
- return TRUE;
- }
- return FALSE;
-}
-
-FX_BOOL CFPDF_FileStream::Flush() {
- if (!m_pFS || !m_pFS->Flush)
- return TRUE;
-
- return m_pFS->Flush(m_pFS->clientData) == 0;
-}
-#endif // PDF_ENABLE_XFA
-
-CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) {
- m_FileAccess = *pFileAccess;
-#ifdef PDF_ENABLE_XFA
- m_BufferOffset = (FX_DWORD)-1;
-#endif // PDF_ENABLE_XFA
-}
-
-#ifdef PDF_ENABLE_XFA
-FX_BOOL CPDF_CustomAccess::GetByte(FX_DWORD pos, uint8_t& ch) {
- if (pos >= m_FileAccess.m_FileLen)
- return FALSE;
- if (m_BufferOffset == (FX_DWORD)-1 || pos < m_BufferOffset ||
- pos >= m_BufferOffset + 512) {
- // Need to read from file access
- m_BufferOffset = pos;
- int size = 512;
- if (pos + 512 > m_FileAccess.m_FileLen)
- size = m_FileAccess.m_FileLen - pos;
- if (!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, m_BufferOffset, m_Buffer,
- size))
- return FALSE;
- }
- ch = m_Buffer[pos - m_BufferOffset];
- return TRUE;
-}
-
-FX_BOOL CPDF_CustomAccess::GetBlock(FX_DWORD pos,
- uint8_t* pBuf,
- FX_DWORD size) {
- if (pos + size > m_FileAccess.m_FileLen)
- return FALSE;
- return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, pos, pBuf, size);
-}
-#endif // PDF_ENABLE_XFA
-
-FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer,
- FX_FILESIZE offset,
- size_t size) {
- if (offset < 0) {
- return FALSE;
- }
- FX_SAFE_FILESIZE newPos =
- pdfium::base::checked_cast<FX_FILESIZE, size_t>(size);
- newPos += offset;
- if (!newPos.IsValid() || newPos.ValueOrDie() > m_FileAccess.m_FileLen) {
- return FALSE;
- }
- return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset, (uint8_t*)buffer,
- size);
-}
-
-// 0 bit: FPDF_POLICY_MACHINETIME_ACCESS
-static FX_DWORD foxit_sandbox_policy = 0xFFFFFFFF;
-
-void FSDK_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable) {
- switch (policy) {
- case FPDF_POLICY_MACHINETIME_ACCESS: {
- if (enable)
- foxit_sandbox_policy |= 0x01;
- else
- foxit_sandbox_policy &= 0xFFFFFFFE;
- } break;
- default:
- break;
- }
-}
-
-FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy) {
- switch (policy) {
- case FPDF_POLICY_MACHINETIME_ACCESS:
- return !!(foxit_sandbox_policy & 0x01);
- default:
- return FALSE;
- }
-}
-
-CCodec_ModuleMgr* g_pCodecModule = nullptr;
-
-DLLEXPORT void STDCALL FPDF_InitLibrary() {
- FPDF_InitLibraryWithConfig(nullptr);
-}
-
-DLLEXPORT void STDCALL FPDF_InitLibraryWithConfig(
- const FPDF_LIBRARY_CONFIG* cfg) {
- g_pCodecModule = new CCodec_ModuleMgr();
-
- CFX_GEModule::Create(cfg ? cfg->m_pUserFontPaths : nullptr);
- CFX_GEModule::Get()->SetCodecModule(g_pCodecModule);
-
- CPDF_ModuleMgr::Create();
- CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
- pModuleMgr->SetCodecModule(g_pCodecModule);
- pModuleMgr->InitPageModule();
- pModuleMgr->InitRenderModule();
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_App::GetInstance()->Initialize(
- (cfg && cfg->version >= 2)
- ? reinterpret_cast<FXJSE_HRUNTIME>(cfg->m_pIsolate)
- : nullptr);
-#else // PDF_ENABLE_XFA
- pModuleMgr->LoadEmbeddedGB1CMaps();
- pModuleMgr->LoadEmbeddedJapan1CMaps();
- pModuleMgr->LoadEmbeddedCNS1CMaps();
- pModuleMgr->LoadEmbeddedKorea1CMaps();
-#endif // PDF_ENABLE_XFA
- if (cfg && cfg->version >= 2)
- IJS_Runtime::Initialize(cfg->m_v8EmbedderSlot, cfg->m_pIsolate);
-}
-
-DLLEXPORT void STDCALL FPDF_DestroyLibrary() {
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_App::ReleaseInstance();
-#endif // PDF_ENABLE_XFA
- CPDF_ModuleMgr::Destroy();
- CFX_GEModule::Destroy();
-
- delete g_pCodecModule;
- g_pCodecModule = nullptr;
-}
-
-#ifndef _WIN32
-int g_LastError;
-void SetLastError(int err) {
- g_LastError = err;
-}
-
-int GetLastError() {
- return g_LastError;
-}
-#endif // _WIN32
-
-void ProcessParseError(CPDF_Parser::Error err) {
- FX_DWORD err_code;
- // Translate FPDFAPI error code to FPDFVIEW error code
- switch (err) {
- case CPDF_Parser::SUCCESS:
- err_code = FPDF_ERR_SUCCESS;
- break;
- case CPDF_Parser::FILE_ERROR:
- err_code = FPDF_ERR_FILE;
- break;
- case CPDF_Parser::FORMAT_ERROR:
- err_code = FPDF_ERR_FORMAT;
- break;
- case CPDF_Parser::PASSWORD_ERROR:
- err_code = FPDF_ERR_PASSWORD;
- break;
- case CPDF_Parser::HANDLER_ERROR:
- err_code = FPDF_ERR_SECURITY;
- break;
- }
- SetLastError(err_code);
-}
-
-DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
- FPDF_BOOL enable) {
- return FSDK_SetSandBoxPolicy(policy, enable);
-}
-
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
- FPDF_BYTESTRING password) {
- // NOTE: the creation of the file needs to be by the embedder on the
- // other side of this API.
- IFX_FileRead* pFileAccess = FX_CreateFileRead((const FX_CHAR*)file_path);
- if (!pFileAccess) {
- return nullptr;
- }
-
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
-
- CPDF_Parser::Error error = pParser->StartParse(pFileAccess);
- if (error != CPDF_Parser::SUCCESS) {
- delete pParser;
- ProcessParseError(error);
- return NULL;
- }
-#ifdef PDF_ENABLE_XFA
- CPDF_Document* pPDFDoc = pParser->GetDocument();
- if (!pPDFDoc)
- return NULL;
-
- CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance();
- return new CPDFXFA_Document(pPDFDoc, pProvider);
-#else // PDF_ENABLE_XFA
- return pParser->GetDocument();
-#endif // PDF_ENABLE_XFA
-}
-
-#ifdef PDF_ENABLE_XFA
-DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document,
- int* docType) {
- if (!document)
- return FALSE;
-
- CPDF_Document* pdfDoc =
- (static_cast<CPDFXFA_Document*>(document))->GetPDFDoc();
- if (!pdfDoc)
- return FALSE;
-
- CPDF_Dictionary* pRoot = pdfDoc->GetRoot();
- if (!pRoot)
- return FALSE;
-
- CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
- if (!pAcroForm)
- return FALSE;
-
- CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
- if (!pXFA)
- return FALSE;
-
- FX_BOOL bDynamicXFA = pRoot->GetBooleanBy("NeedsRendering", FALSE);
-
- if (bDynamicXFA)
- *docType = DOCTYPE_DYNAMIC_XFA;
- else
- *docType = DOCTYPE_STATIC_XFA;
-
- return TRUE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) {
- return document && (static_cast<CPDFXFA_Document*>(document))->LoadXFADoc();
-}
-#endif // PDF_ENABLE_XFA
-
-class CMemFile final : public IFX_FileRead {
- public:
- CMemFile(uint8_t* pBuf, FX_FILESIZE size) : m_pBuf(pBuf), m_size(size) {}
-
- void Release() override { delete this; }
- FX_FILESIZE GetSize() override { return m_size; }
- FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
- if (offset < 0) {
- return FALSE;
- }
- FX_SAFE_FILESIZE newPos =
- pdfium::base::checked_cast<FX_FILESIZE, size_t>(size);
- newPos += offset;
- if (!newPos.IsValid() || newPos.ValueOrDie() > (FX_DWORD)m_size) {
- return FALSE;
- }
- FXSYS_memcpy(buffer, m_pBuf + offset, size);
- return TRUE;
- }
-
- private:
- ~CMemFile() override {}
-
- uint8_t* const m_pBuf;
- const FX_FILESIZE m_size;
-};
-
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf,
- int size,
- FPDF_BYTESTRING password) {
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
- CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size);
- CPDF_Parser::Error error = pParser->StartParse(pMemFile);
- if (error != CPDF_Parser::SUCCESS) {
- delete pParser;
- ProcessParseError(error);
- return NULL;
- }
- CPDF_Document* pDoc = NULL;
- pDoc = pParser ? pParser->GetDocument() : NULL;
- CheckUnSupportError(pDoc, error);
- return FPDFDocumentFromCPDFDocument(pParser->GetDocument());
-}
-
-DLLEXPORT FPDF_DOCUMENT STDCALL
-FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess,
- FPDF_BYTESTRING password) {
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
- CPDF_CustomAccess* pFile = new CPDF_CustomAccess(pFileAccess);
- CPDF_Parser::Error error = pParser->StartParse(pFile);
- if (error != CPDF_Parser::SUCCESS) {
- delete pParser;
- ProcessParseError(error);
- return NULL;
- }
- CPDF_Document* pDoc = NULL;
- pDoc = pParser ? pParser->GetDocument() : NULL;
- CheckUnSupportError(pDoc, error);
- return FPDFDocumentFromCPDFDocument(pParser->GetDocument());
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
- int* fileVersion) {
- if (!fileVersion)
- return FALSE;
-
- *fileVersion = 0;
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc);
- if (!pDoc)
- return FALSE;
-
- CPDF_Parser* pParser = pDoc->GetParser();
- if (!pParser)
- return FALSE;
-
- *fileVersion = pParser->GetFileVersion();
- return TRUE;
-}
-
-// jabdelmalek: changed return type from FX_DWORD to build on Linux (and match
-// header).
-DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
-#ifndef PDF_ENABLE_XFA
- return 0;
-#else // PDF_ENABLE_XFA
- return (FX_DWORD)-1;
-#endif // PDF_ENABLE_XFA
-
- CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict();
- return pDict ? pDict->GetIntegerBy("P") : (FX_DWORD)-1;
-}
-
-DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return -1;
-
- CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict();
- return pDict ? pDict->GetIntegerBy("R") : -1;
-}
-
-DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) {
- UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
- return pDoc ? pDoc->GetPageCount() : 0;
-}
-
-DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
- int page_index) {
- UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
-
- if (page_index < 0 || page_index >= pDoc->GetPageCount())
- return nullptr;
-
-#ifdef PDF_ENABLE_XFA
- return pDoc->GetPage(page_index);
-#else // PDF_ENABLE_XFA
- CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
- if (!pDict)
- return NULL;
- CPDF_Page* pPage = new CPDF_Page;
- pPage->Load(pDoc, pDict);
- pPage->ParseContent(nullptr);
- return pPage;
-#endif // PDF_ENABLE_XFA
-}
-
-DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) {
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
- return pPage ? pPage->GetPageWidth() : 0.0;
-}
-
-DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) {
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
- return pPage ? pPage->GetPageHeight() : 0.0;
-}
-
-void DropContext(void* data) {
- delete (CRenderContext*)data;
-}
-
-#if defined(_WIN32)
-DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
-
- CRenderContext* pContext = new CRenderContext;
- pPage->SetPrivateData((void*)1, pContext, DropContext);
-
-#if !defined(_WIN32_WCE)
- CFX_DIBitmap* pBitmap = nullptr;
- FX_BOOL bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded();
- FX_BOOL bHasImageMask = pPage->HasImageMask();
- if (bBackgroundAlphaNeeded || bHasImageMask) {
- pBitmap = new CFX_DIBitmap;
- pBitmap->Create(size_x, size_y, FXDIB_Argb);
- pBitmap->Clear(0x00ffffff);
-#ifdef _SKIA_SUPPORT_
- pContext->m_pDevice = new CFX_SkiaDevice;
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap);
-#else
- pContext->m_pDevice = new CFX_FxgeDevice;
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap);
-#endif
- } else {
- pContext->m_pDevice = new CFX_WindowsDevice(dc);
- }
-
- FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
- rotate, flags, TRUE, NULL);
-
- if (bBackgroundAlphaNeeded || bHasImageMask) {
- if (pBitmap) {
- CFX_WindowsDevice WinDC(dc);
-
- if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) {
- CFX_DIBitmap* pDst = new CFX_DIBitmap;
- int pitch = pBitmap->GetPitch();
- pDst->Create(size_x, size_y, FXDIB_Rgb32);
- FXSYS_memset(pDst->GetBuffer(), -1, pitch * size_y);
- pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0,
- FXDIB_BLEND_NORMAL, NULL, FALSE, NULL);
- WinDC.StretchDIBits(pDst, 0, 0, size_x, size_y);
- delete pDst;
- } else {
- WinDC.SetDIBits(pBitmap, 0, 0);
- }
- }
- }
-#else
- // get clip region
- RECT rect, cliprect;
- rect.left = start_x;
- rect.top = start_y;
- rect.right = start_x + size_x;
- rect.bottom = start_y + size_y;
- GetClipBox(dc, &cliprect);
- IntersectRect(&rect, &rect, &cliprect);
- int width = rect.right - rect.left;
- int height = rect.bottom - rect.top;
-
- // Create a DIB section
- LPVOID pBuffer;
- BITMAPINFOHEADER bmih;
- FXSYS_memset(&bmih, 0, sizeof bmih);
- bmih.biSize = sizeof bmih;
- bmih.biBitCount = 24;
- bmih.biHeight = -height;
- bmih.biPlanes = 1;
- bmih.biWidth = width;
- pContext->m_hBitmap = CreateDIBSection(dc, (BITMAPINFO*)&bmih, DIB_RGB_COLORS,
- &pBuffer, NULL, 0);
- FXSYS_memset(pBuffer, 0xff, height * ((width * 3 + 3) / 4 * 4));
-
- // Create a device with this external buffer
- pContext->m_pBitmap = new CFX_DIBitmap;
- pContext->m_pBitmap->Create(width, height, FXDIB_Rgb, (uint8_t*)pBuffer);
- pContext->m_pDevice = new CPDF_FxgeDevice;
- ((CPDF_FxgeDevice*)pContext->m_pDevice)->Attach(pContext->m_pBitmap);
-
- // output to bitmap device
- FPDF_RenderPage_Retail(pContext, page, start_x - rect.left,
- start_y - rect.top, size_x, size_y, rotate, flags);
-
- // Now output to real device
- HDC hMemDC = CreateCompatibleDC(dc);
- HGDIOBJ hOldBitmap = SelectObject(hMemDC, pContext->m_hBitmap);
-
- BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY);
- SelectObject(hMemDC, hOldBitmap);
- DeleteDC(hMemDC);
-
-#endif // !defined(_WIN32_WCE)
- if (bBackgroundAlphaNeeded || bHasImageMask)
- delete pBitmap;
-
- delete pContext;
- pPage->RemovePrivateData((void*)1);
-}
-#endif // defined(_WIN32)
-
-DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags) {
- if (!bitmap)
- return;
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
- CRenderContext* pContext = new CRenderContext;
- pPage->SetPrivateData((void*)1, pContext, DropContext);
-#ifdef _SKIA_SUPPORT_
- pContext->m_pDevice = new CFX_SkiaDevice;
-
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_SkiaDevice*)pContext->m_pDevice)
- ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
- else
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
-#else
- pContext->m_pDevice = new CFX_FxgeDevice;
-
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_FxgeDevice*)pContext->m_pDevice)
- ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
- else
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
-#endif
-
- FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
- rotate, flags, TRUE, NULL);
-
- delete pContext;
- pPage->RemovePrivateData((void*)1);
-}
-
-DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
- if (!page)
- return;
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_Page* pPage = (CPDFXFA_Page*)page;
- pPage->Release();
-#else // PDF_ENABLE_XFA
- CPDFSDK_PageView* pPageView =
- (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page);
- if (pPageView && pPageView->IsLocked()) {
- pPageView->TakeOverPage();
- return;
- }
- delete (CPDF_Page*)page;
-#endif // PDF_ENABLE_XFA
-}
-
-DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) {
-#ifdef PDF_ENABLE_XFA
- delete UnderlyingFromFPDFDocument(document);
-#else // PDF_ENABLE_XFA
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return;
- CPDF_Parser* pParser = pDoc->GetParser();
- if (!pParser) {
- delete pDoc;
- return;
- }
- delete pParser;
-#endif // PDF_ENABLE_XFA
-}
-
-DLLEXPORT unsigned long STDCALL FPDF_GetLastError() {
- return GetLastError();
-}
-
-DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int device_x,
- int device_y,
- double* page_x,
- double* page_y) {
- if (!page || !page_x || !page_y)
- return;
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
-#ifdef PDF_ENABLE_XFA
- pPage->DeviceToPage(start_x, start_y, size_x, size_y, rotate, device_x,
- device_y, page_x, page_y);
-#else // PDF_ENABLE_XFA
- CFX_Matrix page2device;
- pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y,
- rotate);
- CFX_Matrix device2page;
- device2page.SetReverse(page2device);
- FX_FLOAT page_x_f, page_y_f;
- device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f,
- page_y_f);
- *page_x = (page_x_f);
- *page_y = (page_y_f);
-#endif // PDF_ENABLE_XFA
-}
-
-DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- double page_x,
- double page_y,
- int* device_x,
- int* device_y) {
- if (!device_x || !device_y)
- return;
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
- if (!pPage)
- return;
-#ifdef PDF_ENABLE_XFA
- pPage->PageToDevice(start_x, start_y, size_x, size_y, rotate, page_x, page_y,
- device_x, device_y);
-#else // PDF_ENABLE_XFA
- CFX_Matrix page2device;
- pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y,
- rotate);
- FX_FLOAT device_x_f, device_y_f;
- page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f,
- device_y_f);
- *device_x = FXSYS_round(device_x_f);
- *device_y = FXSYS_round(device_y_f);
-#endif // PDF_ENABLE_XFA
-}
-
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width,
- int height,
- int alpha) {
- std::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap);
- if (!pBitmap->Create(width, height, alpha ? FXDIB_Argb : FXDIB_Rgb32)) {
- return NULL;
- }
- return pBitmap.release();
-}
-
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width,
- int height,
- int format,
- void* first_scan,
- int stride) {
- FXDIB_Format fx_format;
- switch (format) {
- case FPDFBitmap_Gray:
- fx_format = FXDIB_8bppRgb;
- break;
- case FPDFBitmap_BGR:
- fx_format = FXDIB_Rgb;
- break;
- case FPDFBitmap_BGRx:
- fx_format = FXDIB_Rgb32;
- break;
- case FPDFBitmap_BGRA:
- fx_format = FXDIB_Argb;
- break;
- default:
- return NULL;
- }
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- pBitmap->Create(width, height, fx_format, (uint8_t*)first_scan, stride);
- return pBitmap;
-}
-
-DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap,
- int left,
- int top,
- int width,
- int height,
- FPDF_DWORD color) {
- if (!bitmap)
- return;
-#ifdef _SKIA_SUPPORT_
- CFX_SkiaDevice device;
-#else
- CFX_FxgeDevice device;
-#endif
- device.Attach((CFX_DIBitmap*)bitmap);
- if (!((CFX_DIBitmap*)bitmap)->HasAlpha())
- color |= 0xFF000000;
- FX_RECT rect(left, top, left + width, top + height);
- device.FillRect(&rect, color);
-}
-
-DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap) {
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetBuffer() : nullptr;
-}
-
-DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap) {
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetWidth() : 0;
-}
-
-DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap) {
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetHeight() : 0;
-}
-
-DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap) {
- return bitmap ? ((CFX_DIBitmap*)bitmap)->GetPitch() : 0;
-}
-
-DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap) {
- delete (CFX_DIBitmap*)bitmap;
-}
-
-void FPDF_RenderPage_Retail(CRenderContext* pContext,
- FPDF_PAGE page,
- int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int flags,
- FX_BOOL bNeedToRestore,
- IFSDK_PAUSE_Adapter* pause) {
- CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
- if (!pPage)
- return;
-
- if (!pContext->m_pOptions)
- pContext->m_pOptions = new CPDF_RenderOptions;
-
- if (flags & FPDF_LCD_TEXT)
- pContext->m_pOptions->m_Flags |= RENDER_CLEARTYPE;
- else
- pContext->m_pOptions->m_Flags &= ~RENDER_CLEARTYPE;
- if (flags & FPDF_NO_NATIVETEXT)
- pContext->m_pOptions->m_Flags |= RENDER_NO_NATIVETEXT;
- if (flags & FPDF_RENDER_LIMITEDIMAGECACHE)
- pContext->m_pOptions->m_Flags |= RENDER_LIMITEDIMAGECACHE;
- if (flags & FPDF_RENDER_FORCEHALFTONE)
- pContext->m_pOptions->m_Flags |= RENDER_FORCE_HALFTONE;
-#ifndef PDF_ENABLE_XFA
- if (flags & FPDF_RENDER_NO_SMOOTHTEXT)
- pContext->m_pOptions->m_Flags |= RENDER_NOTEXTSMOOTH;
- if (flags & FPDF_RENDER_NO_SMOOTHIMAGE)
- pContext->m_pOptions->m_Flags |= RENDER_NOIMAGESMOOTH;
- if (flags & FPDF_RENDER_NO_SMOOTHPATH)
- pContext->m_pOptions->m_Flags |= RENDER_NOPATHSMOOTH;
-#endif // PDF_ENABLE_XFA
- // Grayscale output
- if (flags & FPDF_GRAYSCALE) {
- pContext->m_pOptions->m_ColorMode = RENDER_COLOR_GRAY;
- pContext->m_pOptions->m_ForeColor = 0;
- pContext->m_pOptions->m_BackColor = 0xffffff;
- }
- const CPDF_OCContext::UsageType usage =
- (flags & FPDF_PRINTING) ? CPDF_OCContext::Print : CPDF_OCContext::View;
- pContext->m_pOptions->m_AddFlags = flags >> 8;
- pContext->m_pOptions->m_pOCContext =
- new CPDF_OCContext(pPage->m_pDocument, usage);
-
- CFX_Matrix matrix;
- pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
-
- pContext->m_pDevice->SaveState();
- pContext->m_pDevice->SetClip_Rect(
- FX_RECT(start_x, start_y, start_x + size_x, start_y + size_y));
-
- pContext->m_pContext = new CPDF_RenderContext(pPage);
- pContext->m_pContext->AppendLayer(pPage, &matrix);
-
- if (flags & FPDF_ANNOT) {
- pContext->m_pAnnots = new CPDF_AnnotList(pPage);
- FX_BOOL bPrinting = pContext->m_pDevice->GetDeviceClass() != FXDC_DISPLAY;
- pContext->m_pAnnots->DisplayAnnots(pPage, pContext->m_pContext, bPrinting,
- &matrix, TRUE, NULL);
- }
-
- pContext->m_pRenderer = new CPDF_ProgressiveRenderer(
- pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions);
- pContext->m_pRenderer->Start(pause);
- if (bNeedToRestore)
- pContext->m_pDevice->RestoreState();
-}
-
-DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
- int page_index,
- double* width,
- double* height) {
- UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
- if (!pDoc)
- return FALSE;
-
-#ifdef PDF_ENABLE_XFA
- int count = pDoc->GetPageCount();
- if (page_index < 0 || page_index >= count)
- return FALSE;
- CPDFXFA_Page* pPage = pDoc->GetPage(page_index);
- if (!pPage)
- return FALSE;
- *width = pPage->GetPageWidth();
- *height = pPage->GetPageHeight();
-#else // PDF_ENABLE_XFA
- CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
- if (!pDict)
- return FALSE;
- CPDF_Page page;
- page.Load(pDoc, pDict);
- *width = page.GetPageWidth();
- *height = page.GetPageHeight();
-#endif // PDF_ENABLE_XFA
-
- return TRUE;
-}
-
-DLLEXPORT FPDF_BOOL STDCALL
-FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return TRUE;
- CPDF_ViewerPreferences viewRef(pDoc);
- return viewRef.PrintScaling();
-}
-
-DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return 1;
- CPDF_ViewerPreferences viewRef(pDoc);
- return viewRef.NumCopies();
-}
-
-DLLEXPORT FPDF_PAGERANGE STDCALL
-FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return NULL;
- CPDF_ViewerPreferences viewRef(pDoc);
- return viewRef.PrintPageRange();
-}
-
-DLLEXPORT FPDF_DUPLEXTYPE STDCALL
-FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return DuplexUndefined;
- CPDF_ViewerPreferences viewRef(pDoc);
- CFX_ByteString duplex = viewRef.Duplex();
- if ("Simplex" == duplex)
- return Simplex;
- if ("DuplexFlipShortEdge" == duplex)
- return DuplexFlipShortEdge;
- if ("DuplexFlipLongEdge" == duplex)
- return DuplexFlipLongEdge;
- return DuplexUndefined;
-}
-
-DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) {
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return 0;
-
- CPDF_Dictionary* pRoot = pDoc->GetRoot();
- if (!pRoot)
- return 0;
-
- CPDF_NameTree nameTree(pDoc, "Dests");
- pdfium::base::CheckedNumeric<FPDF_DWORD> count = nameTree.GetCount();
- CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests");
- if (pDest)
- count += pDest->GetCount();
-
- if (!count.IsValid())
- return 0;
-
- return count.ValueOrDie();
-}
-
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,
- FPDF_BYTESTRING name) {
- if (!name || name[0] == 0)
- return nullptr;
-
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
-
- CPDF_NameTree name_tree(pDoc, "Dests");
- return name_tree.LookupNamedDest(pDoc, name);
-}
-
-#ifdef PDF_ENABLE_XFA
-FPDF_RESULT FPDF_BStr_Init(FPDF_BSTR* str) {
- if (!str)
- return -1;
-
- FXSYS_memset(str, 0, sizeof(FPDF_BSTR));
- return 0;
-}
-
-FPDF_RESULT FPDF_BStr_Set(FPDF_BSTR* str, FPDF_LPCSTR bstr, int length) {
- if (!str)
- return -1;
- if (!bstr || !length)
- return -1;
- if (length == -1)
- length = FXSYS_strlen(bstr);
-
- if (length == 0) {
- if (str->str) {
- FX_Free(str->str);
- str->str = NULL;
- }
- str->len = 0;
- return 0;
- }
-
- if (str->str && str->len < length)
- str->str = FX_Realloc(char, str->str, length + 1);
- else if (!str->str)
- str->str = FX_Alloc(char, length + 1);
-
- str->str[length] = 0;
- if (str->str == NULL)
- return -1;
-
- FXSYS_memcpy(str->str, bstr, length);
- str->len = length;
-
- return 0;
-}
-
-FPDF_RESULT FPDF_BStr_Clear(FPDF_BSTR* str) {
- if (!str)
- return -1;
-
- if (str->str) {
- FX_Free(str->str);
- str->str = NULL;
- }
- str->len = 0;
- return 0;
-}
-#endif // PDF_ENABLE_XFA
-
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
- int index,
- void* buffer,
- long* buflen) {
- if (!buffer)
- *buflen = 0;
-
- if (index < 0)
- return nullptr;
-
- CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
- if (!pDoc)
- return nullptr;
-
- CPDF_Dictionary* pRoot = pDoc->GetRoot();
- if (!pRoot)
- return nullptr;
-
- CPDF_Object* pDestObj = nullptr;
- CFX_ByteString bsName;
- CPDF_NameTree nameTree(pDoc, "Dests");
- int count = nameTree.GetCount();
- if (index >= count) {
- CPDF_Dictionary* pDest = pRoot->GetDictBy("Dests");
- if (!pDest)
- return nullptr;
-
- pdfium::base::CheckedNumeric<int> checked_count = count;
- checked_count += pDest->GetCount();
- if (!checked_count.IsValid() || index >= checked_count.ValueOrDie())
- return nullptr;
-
- index -= count;
- int i = 0;
- for (const auto& it : *pDest) {
- bsName = it.first;
- pDestObj = it.second;
- if (!pDestObj)
- continue;
- if (i == index)
- break;
- i++;
- }
- } else {
- pDestObj = nameTree.LookupValue(index, bsName);
- }
- if (!pDestObj)
- return nullptr;
- if (CPDF_Dictionary* pDict = pDestObj->AsDictionary()) {
- pDestObj = pDict->GetArrayBy("D");
- if (!pDestObj)
- return nullptr;
- }
- if (!pDestObj->IsArray())
- return nullptr;
-
- CFX_WideString wsName = PDF_DecodeText(bsName);
- CFX_ByteString utf16Name = wsName.UTF16LE_Encode();
- unsigned int len = utf16Name.GetLength();
- if (!buffer) {
- *buflen = len;
- } else if (*buflen >= len) {
- memcpy(buffer, utf16Name.c_str(), len);
- *buflen = len;
- } else {
- *buflen = -1;
- }
- return (FPDF_DEST)pDestObj;
-}
diff --git a/fpdfsdk/src/fpdfview_c_api_test.c b/fpdfsdk/src/fpdfview_c_api_test.c
deleted file mode 100644
index 52bbd11b00..0000000000
--- a/fpdfsdk/src/fpdfview_c_api_test.c
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This "C" (not "C++") file ensures that the public headers compile
-// and link for "C" (and not just "C++").
-
-#include <stdio.h>
-
-#include "fpdfsdk/src/fpdfview_c_api_test.h"
-
-#include "public/fpdf_dataavail.h"
-#include "public/fpdf_doc.h"
-#include "public/fpdf_edit.h"
-#include "public/fpdf_ext.h"
-#include "public/fpdf_flatten.h"
-#include "public/fpdf_formfill.h"
-#include "public/fpdf_fwlevent.h"
-#include "public/fpdf_ppo.h"
-#include "public/fpdf_progressive.h"
-#include "public/fpdf_save.h"
-#include "public/fpdf_searchex.h"
-#include "public/fpdf_sysfontinfo.h"
-#include "public/fpdf_text.h"
-#include "public/fpdf_transformpage.h"
-#include "public/fpdfview.h"
-
-// Scheme for avoiding LTO out of existence, warnings, etc.
-typedef void (*fnptr)(void); // Legal generic function type for casts.
-fnptr g_c_api_test_fnptr = NULL; // Extern, so can't know it doesn't change.
-#define CHK(x) if ((fnptr)(x) == g_c_api_test_fnptr) return 0
-
-// Function to call from gtest harness to ensure linker resolution.
-int CheckPDFiumCApi() {
- // fpdf_dataavail.h
- CHK(FPDFAvail_Create);
- CHK(FPDFAvail_Destroy);
- CHK(FPDFAvail_IsDocAvail);
- CHK(FPDFAvail_GetDocument);
- CHK(FPDFAvail_GetFirstPageNum);
- CHK(FPDFAvail_IsPageAvail);
- CHK(FPDFAvail_IsFormAvail);
- CHK(FPDFAvail_IsLinearized);
-
- // fpdf_doc.h
- CHK(FPDFBookmark_GetFirstChild);
- CHK(FPDFBookmark_GetNextSibling);
- CHK(FPDFBookmark_GetTitle);
- CHK(FPDFBookmark_Find);
- CHK(FPDFBookmark_GetDest);
- CHK(FPDFBookmark_GetAction);
- CHK(FPDFAction_GetType);
- CHK(FPDFAction_GetDest);
- CHK(FPDFAction_GetFilePath);
- CHK(FPDFAction_GetURIPath);
- CHK(FPDFDest_GetPageIndex);
- CHK(FPDFLink_GetLinkAtPoint);
- CHK(FPDFLink_GetLinkZOrderAtPoint);
- CHK(FPDFLink_GetDest);
- CHK(FPDFLink_GetAction);
- CHK(FPDFLink_Enumerate);
- CHK(FPDFLink_GetAnnotRect);
- CHK(FPDFLink_CountQuadPoints);
- CHK(FPDFLink_GetQuadPoints);
- CHK(FPDF_GetMetaText);
-
- // fpdf_edit.h
- CHK(FPDF_CreateNewDocument);
- CHK(FPDFPage_New);
- CHK(FPDFPage_Delete);
- CHK(FPDFPage_GetRotation);
- CHK(FPDFPage_SetRotation);
- CHK(FPDFPage_InsertObject);
- CHK(FPDFPage_CountObject);
- CHK(FPDFPage_GetObject);
- CHK(FPDFPage_HasTransparency);
- CHK(FPDFPage_GenerateContent);
- CHK(FPDFPageObj_HasTransparency);
- CHK(FPDFPageObj_Transform);
- CHK(FPDFPage_TransformAnnots);
- CHK(FPDFPageObj_NewImgeObj);
- CHK(FPDFImageObj_LoadJpegFile);
- CHK(FPDFImageObj_SetMatrix);
- CHK(FPDFImageObj_SetBitmap);
-
- // fpdf_ext.h
- CHK(FSDK_SetUnSpObjProcessHandler);
- CHK(FPDFDoc_GetPageMode);
-
- // fpdf_flatten.h
- CHK(FPDFPage_Flatten);
-
- // fpdf_fwlevent.h - no exports.
-
- // fpdf_formfill.h
- CHK(FPDFDOC_InitFormFillEnvironment);
- CHK(FPDFDOC_ExitFormFillEnvironment);
- CHK(FORM_OnAfterLoadPage);
- CHK(FORM_OnBeforeClosePage);
- CHK(FORM_DoDocumentJSAction);
- CHK(FORM_DoDocumentOpenAction);
- CHK(FORM_DoDocumentAAction);
- CHK(FORM_DoPageAAction);
- CHK(FORM_OnMouseMove);
- CHK(FORM_OnLButtonDown);
- CHK(FORM_OnLButtonUp);
-#ifdef PDF_ENABLE_XFA
- CHK(FORM_OnRButtonDown);
- CHK(FORM_OnRButtonUp);
-#endif
- CHK(FORM_OnKeyDown);
- CHK(FORM_OnKeyUp);
- CHK(FORM_OnChar);
- CHK(FORM_ForceToKillFocus);
- CHK(FPDFPage_HasFormFieldAtPoint);
- CHK(FPDPage_HasFormFieldAtPoint); // DEPRECATED. Remove in the future.
- CHK(FPDFPage_FormFieldZOrderAtPoint);
- CHK(FPDF_SetFormFieldHighlightColor);
- CHK(FPDF_SetFormFieldHighlightAlpha);
- CHK(FPDF_RemoveFormFieldHighlight);
- CHK(FPDF_FFLDraw);
-#ifdef PDF_ENABLE_XFA
- CHK(FPDF_HasXFAField);
- CHK(FPDF_LoadXFA);
- CHK(FPDF_Widget_Undo);
- CHK(FPDF_Widget_Redo);
- CHK(FPDF_Widget_SelectAll);
- CHK(FPDF_Widget_Copy);
- CHK(FPDF_Widget_Cut);
- CHK(FPDF_Widget_Paste);
- CHK(FPDF_Widget_ReplaceSpellCheckWord);
- CHK(FPDF_Widget_GetSpellCheckWords);
- CHK(FPDF_StringHandleCounts);
- CHK(FPDF_StringHandleGetStringByIndex);
- CHK(FPDF_StringHandleRelease);
- CHK(FPDF_StringHandleAddString);
-#endif
-
- // fpdf_ppo.h
- CHK(FPDF_ImportPages);
- CHK(FPDF_CopyViewerPreferences);
-
- // fpdf_progressive.h
- CHK(FPDF_RenderPageBitmap_Start);
- CHK(FPDF_RenderPage_Continue);
- CHK(FPDF_RenderPage_Close);
-
- // fpdf_save.h
- CHK(FPDF_SaveAsCopy);
- CHK(FPDF_SaveWithVersion);
-
- // fpdf_searchex.h
- CHK(FPDFText_GetCharIndexFromTextIndex);
-
- // fpdf_sysfontinfo.h
- CHK(FPDF_GetDefaultTTFMap);
- CHK(FPDF_AddInstalledFont);
- CHK(FPDF_SetSystemFontInfo);
- CHK(FPDF_GetDefaultSystemFontInfo);
-
- // fpdf_text.h
- CHK(FPDFText_LoadPage);
- CHK(FPDFText_ClosePage);
- CHK(FPDFText_CountChars);
- CHK(FPDFText_GetUnicode);
- CHK(FPDFText_GetFontSize);
- CHK(FPDFText_GetCharBox);
- CHK(FPDFText_GetCharIndexAtPos);
- CHK(FPDFText_GetText);
- CHK(FPDFText_CountRects);
- CHK(FPDFText_GetRect);
- CHK(FPDFText_GetBoundedText);
- CHK(FPDFText_FindStart);
- CHK(FPDFText_FindNext);
- CHK(FPDFText_FindPrev);
- CHK(FPDFText_GetSchResultIndex);
- CHK(FPDFText_GetSchCount);
- CHK(FPDFText_FindClose);
- CHK(FPDFLink_LoadWebLinks);
- CHK(FPDFLink_CountWebLinks);
- CHK(FPDFLink_GetURL);
- CHK(FPDFLink_CountRects);
- CHK(FPDFLink_GetRect);
- CHK(FPDFLink_CloseWebLinks);
-
- // fpdf_transformpage.h
- CHK(FPDFPage_SetMediaBox);
- CHK(FPDFPage_SetCropBox);
- CHK(FPDFPage_GetMediaBox);
- CHK(FPDFPage_GetCropBox);
- CHK(FPDFPage_TransFormWithClip);
- CHK(FPDFPageObj_TransformClipPath);
- CHK(FPDF_CreateClipPath);
- CHK(FPDF_DestroyClipPath);
- CHK(FPDFPage_InsertClipPath);
-
- // fpdfview.h
- CHK(FPDF_InitLibrary);
- CHK(FPDF_InitLibraryWithConfig);
- CHK(FPDF_DestroyLibrary);
- CHK(FPDF_SetSandBoxPolicy);
- CHK(FPDF_LoadDocument);
- CHK(FPDF_LoadMemDocument);
- CHK(FPDF_LoadCustomDocument);
- CHK(FPDF_GetFileVersion);
- CHK(FPDF_GetLastError);
- CHK(FPDF_GetDocPermissions);
- CHK(FPDF_GetSecurityHandlerRevision);
- CHK(FPDF_GetPageCount);
- CHK(FPDF_LoadPage);
- CHK(FPDF_GetPageWidth);
- CHK(FPDF_GetPageHeight);
- CHK(FPDF_GetPageSizeByIndex);
- CHK(FPDF_RenderPageBitmap);
- CHK(FPDF_ClosePage);
- CHK(FPDF_CloseDocument);
- CHK(FPDF_DeviceToPage);
- CHK(FPDF_PageToDevice);
- CHK(FPDFBitmap_Create);
- CHK(FPDFBitmap_CreateEx);
- CHK(FPDFBitmap_FillRect);
- CHK(FPDFBitmap_GetBuffer);
- CHK(FPDFBitmap_GetWidth);
- CHK(FPDFBitmap_GetHeight);
- CHK(FPDFBitmap_GetStride);
- CHK(FPDFBitmap_Destroy);
- CHK(FPDF_VIEWERREF_GetPrintScaling);
- CHK(FPDF_VIEWERREF_GetNumCopies);
- CHK(FPDF_VIEWERREF_GetPrintPageRange);
- CHK(FPDF_VIEWERREF_GetDuplex);
- CHK(FPDF_CountNamedDests);
- CHK(FPDF_GetNamedDestByName);
- CHK(FPDF_GetNamedDest);
-#ifdef PDF_ENABLE_XFA
- CHK(FPDF_BStr_Init);
- CHK(FPDF_BStr_Set);
- CHK(FPDF_BStr_Clear);
-#endif
-
- return 1;
-}
-
-#undef CHK
diff --git a/fpdfsdk/src/fpdfview_c_api_test.h b/fpdfsdk/src/fpdfview_c_api_test.h
deleted file mode 100644
index 755d8215c9..0000000000
--- a/fpdfsdk/src/fpdfview_c_api_test.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FPDFSDK_SRC_FPDFVIEW_C_API_TEST_H_
-#define FPDFSDK_SRC_FPDFVIEW_C_API_TEST_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Function to call from gtest harness to ensure linker resolution. Returns
-// 1 on success or 0 on error.
-int CheckPDFiumCApi();
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // FPDFSDK_SRC_FPDFVIEW_C_API_TEST_H_
diff --git a/fpdfsdk/src/fpdfview_embeddertest.cpp b/fpdfsdk/src/fpdfview_embeddertest.cpp
deleted file mode 100644
index da7313dd5f..0000000000
--- a/fpdfsdk/src/fpdfview_embeddertest.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <limits>
-#include <string>
-
-#include "fpdfsdk/src/fpdfview_c_api_test.h"
-#include "public/fpdfview.h"
-#include "testing/embedder_test.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-TEST(fpdf, CApiTest) {
- EXPECT_TRUE(CheckPDFiumCApi());
-}
-
-class FPDFViewEmbeddertest : public EmbedderTest {};
-
-TEST_F(FPDFViewEmbeddertest, Document) {
- EXPECT_TRUE(OpenDocument("about_blank.pdf"));
- EXPECT_EQ(1, GetPageCount());
- EXPECT_EQ(0, GetFirstPageNum());
-
- int version;
- EXPECT_TRUE(FPDF_GetFileVersion(document(), &version));
- EXPECT_EQ(14, version);
-
- EXPECT_EQ(0xFFFFFFFF, FPDF_GetDocPermissions(document()));
- EXPECT_EQ(-1, FPDF_GetSecurityHandlerRevision(document()));
-}
-
-TEST_F(FPDFViewEmbeddertest, Page) {
- EXPECT_TRUE(OpenDocument("about_blank.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
- EXPECT_EQ(612.0, FPDF_GetPageWidth(page));
- EXPECT_EQ(792.0, FPDF_GetPageHeight(page));
- UnloadPage(page);
- EXPECT_EQ(nullptr, LoadPage(1));
-}
-
-TEST_F(FPDFViewEmbeddertest, ViewerRef) {
- EXPECT_TRUE(OpenDocument("about_blank.pdf"));
- EXPECT_TRUE(FPDF_VIEWERREF_GetPrintScaling(document()));
- EXPECT_EQ(1, FPDF_VIEWERREF_GetNumCopies(document()));
- EXPECT_EQ(DuplexUndefined, FPDF_VIEWERREF_GetDuplex(document()));
-}
-
-TEST_F(FPDFViewEmbeddertest, NamedDests) {
- EXPECT_TRUE(OpenDocument("named_dests.pdf"));
- long buffer_size;
- char fixed_buffer[512];
- FPDF_DEST dest;
-
- // Query the size of the first item.
- buffer_size = 2000000; // Absurdly large, check not used for this case.
- dest = FPDF_GetNamedDest(document(), 0, nullptr, &buffer_size);
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(12u, buffer_size);
-
- // Try to retrieve the first item with too small a buffer.
- buffer_size = 10;
- dest = FPDF_GetNamedDest(document(), 0, fixed_buffer, &buffer_size);
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(-1, buffer_size);
-
- // Try to retrieve the first item with correctly sized buffer. Item is
- // taken from Dests NameTree in named_dests.pdf.
- buffer_size = 12;
- dest = FPDF_GetNamedDest(document(), 0, fixed_buffer, &buffer_size);
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(12u, buffer_size);
- EXPECT_EQ(std::string("F\0i\0r\0s\0t\0\0\0", 12),
- std::string(fixed_buffer, buffer_size));
-
- // Try to retrieve the second item with ample buffer. Item is taken
- // from Dests NameTree but has a sub-dictionary in named_dests.pdf.
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), 1, fixed_buffer, &buffer_size);
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(10u, buffer_size);
- EXPECT_EQ(std::string("N\0e\0x\0t\0\0\0", 10),
- std::string(fixed_buffer, buffer_size));
-
- // Try to retrieve third item with ample buffer. Item is taken
- // from Dests NameTree but has a bad sub-dictionary in named_dests.pdf.
- // in named_dests.pdf).
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), 2, fixed_buffer, &buffer_size);
- EXPECT_EQ(nullptr, dest);
- EXPECT_EQ(sizeof(fixed_buffer), buffer_size); // unmodified.
-
- // Try to retrieve the forth item with ample buffer. Item is taken
- // from Dests NameTree but has a vale of the wrong type in named_dests.pdf.
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), 3, fixed_buffer, &buffer_size);
- EXPECT_EQ(nullptr, dest);
- EXPECT_EQ(sizeof(fixed_buffer), buffer_size); // unmodified.
-
- // Try to retrieve fifth item with ample buffer. Item taken from the
- // old-style Dests dictionary object in named_dests.pdf.
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), 4, fixed_buffer, &buffer_size);
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(30u, buffer_size);
- EXPECT_EQ(std::string("F\0i\0r\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 30),
- std::string(fixed_buffer, buffer_size));
-
- // Try to retrieve sixth item with ample buffer. Item istaken from the
- // old-style Dests dictionary object but has a sub-dictionary in
- // named_dests.pdf.
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), 5, fixed_buffer, &buffer_size);
- EXPECT_NE(nullptr, dest);
- EXPECT_EQ(28u, buffer_size);
- EXPECT_EQ(std::string("L\0a\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 28),
- std::string(fixed_buffer, buffer_size));
-
- // Try to retrieve non-existent item with ample buffer.
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), 6, fixed_buffer, &buffer_size);
- EXPECT_EQ(nullptr, dest);
- EXPECT_EQ(sizeof(fixed_buffer), buffer_size); // unmodified.
-
- // Try to underflow/overflow the integer index.
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), std::numeric_limits<int>::max(),
- fixed_buffer, &buffer_size);
- EXPECT_EQ(nullptr, dest);
- EXPECT_EQ(sizeof(fixed_buffer), buffer_size); // unmodified.
-
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), std::numeric_limits<int>::min(),
- fixed_buffer, &buffer_size);
- EXPECT_EQ(nullptr, dest);
- EXPECT_EQ(sizeof(fixed_buffer), buffer_size); // unmodified.
-
- buffer_size = sizeof(fixed_buffer);
- dest = FPDF_GetNamedDest(document(), -1, fixed_buffer, &buffer_size);
- EXPECT_EQ(nullptr, dest);
- EXPECT_EQ(sizeof(fixed_buffer), buffer_size); // unmodified.
-}
-
-TEST_F(FPDFViewEmbeddertest, NamedDestsByName) {
- EXPECT_TRUE(OpenDocument("named_dests.pdf"));
-
- // Null pointer returns NULL.
- FPDF_DEST dest = FPDF_GetNamedDestByName(document(), nullptr);
- EXPECT_EQ(nullptr, dest);
-
- // Empty string returns NULL.
- dest = FPDF_GetNamedDestByName(document(), "");
- EXPECT_EQ(nullptr, dest);
-
- // Item from Dests NameTree.
- dest = FPDF_GetNamedDestByName(document(), "First");
- EXPECT_NE(nullptr, dest);
-
- long ignore_len = 0;
- FPDF_DEST dest_by_index =
- FPDF_GetNamedDest(document(), 0, nullptr, &ignore_len);
- EXPECT_EQ(dest_by_index, dest);
-
- // Item from Dests dictionary.
- dest = FPDF_GetNamedDestByName(document(), "FirstAlternate");
- EXPECT_NE(nullptr, dest);
-
- ignore_len = 0;
- dest_by_index = FPDF_GetNamedDest(document(), 4, nullptr, &ignore_len);
- EXPECT_EQ(dest_by_index, dest);
-
- // Bad value type for item from Dests NameTree array.
- dest = FPDF_GetNamedDestByName(document(), "WrongType");
- EXPECT_EQ(nullptr, dest);
-
- // No such destination in either Dest NameTree or dictionary.
- dest = FPDF_GetNamedDestByName(document(), "Bogus");
- EXPECT_EQ(nullptr, dest);
-}
-
-// The following tests pass if the document opens without crashing.
-TEST_F(FPDFViewEmbeddertest, Crasher_113) {
- EXPECT_TRUE(OpenDocument("bug_113.pdf"));
-}
-
-TEST_F(FPDFViewEmbeddertest, Crasher_451830) {
- // Document is damaged and can't be opened.
- EXPECT_FALSE(OpenDocument("bug_451830.pdf"));
-}
-
-TEST_F(FPDFViewEmbeddertest, Crasher_452455) {
- EXPECT_TRUE(OpenDocument("bug_452455.pdf"));
- FPDF_PAGE page = LoadPage(0);
- EXPECT_NE(nullptr, page);
- UnloadPage(page);
-}
-
-TEST_F(FPDFViewEmbeddertest, Crasher_454695) {
- // Document is damaged and can't be opened.
- EXPECT_FALSE(OpenDocument("bug_454695.pdf"));
-}
-
-TEST_F(FPDFViewEmbeddertest, Crasher_572871) {
- EXPECT_TRUE(OpenDocument("bug_572871.pdf"));
-}
-
-// It tests that document can still be loaded even the trailer has no 'Size'
-// field if other information is right.
-TEST_F(FPDFViewEmbeddertest, Failed_213) {
- EXPECT_TRUE(OpenDocument("bug_213.pdf"));
-}
-
-// The following tests pass if the document opens without infinite looping.
-TEST_F(FPDFViewEmbeddertest, Hang_298) {
- EXPECT_FALSE(OpenDocument("bug_298.pdf"));
-}
-
-// Test if the document opens without infinite looping.
-// Previously this test will hang in a loop inside LoadAllCrossRefV4. After
-// the fix, LoadAllCrossRefV4 will return false after detecting a cross
-// reference loop. Cross references will be rebuilt successfully.
-TEST_F(FPDFViewEmbeddertest, CrossRefV4Loop) {
- EXPECT_TRUE(OpenDocument("bug_xrefv4_loop.pdf"));
-}
-
-// The test should pass when circular references to ParseIndirectObject will not
-// cause infinite loop.
-TEST_F(FPDFViewEmbeddertest, Hang_343) {
- EXPECT_FALSE(OpenDocument("bug_343.pdf"));
-}
-
-// The test should pass when the absence of 'Contents' field in a signature
-// dictionary will not cause an infinite loop in CPDF_SyntaxParser::GetObject().
-TEST_F(FPDFViewEmbeddertest, Hang_344) {
- EXPECT_FALSE(OpenDocument("bug_344.pdf"));
-}
-
-// The test should pass when there is no infinite recursion in
-// CPDF_SyntaxParser::GetString().
-TEST_F(FPDFViewEmbeddertest, Hang_355) {
- EXPECT_FALSE(OpenDocument("bug_355.pdf"));
-}
-// The test should pass even when the file has circular references to pages.
-TEST_F(FPDFViewEmbeddertest, Hang_360) {
- EXPECT_FALSE(OpenDocument("bug_360.pdf"));
-}
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp
deleted file mode 100644
index 910cdc511e..0000000000
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp
+++ /dev/null
@@ -1,540 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "public/fpdf_formfill.h"
-#include "xfa/include/fxbarcode/BC_BarCode.h"
-
-CPDFXFA_App* CPDFXFA_App::g_pApp = NULL;
-
-CPDFXFA_App* CPDFXFA_App::GetInstance() {
- if (!g_pApp) {
- g_pApp = new CPDFXFA_App();
- }
- return g_pApp;
-}
-
-void CPDFXFA_App::ReleaseInstance() {
- delete g_pApp;
- g_pApp = NULL;
-}
-
-CPDFXFA_App::CPDFXFA_App()
- : m_bJavaScriptInitialized(FALSE),
- m_pXFAApp(NULL),
- m_pFontMgr(NULL),
- m_hJSERuntime(NULL),
- m_csAppType(JS_STR_VIEWERTYPE_STANDARD),
- m_bOwnedRuntime(false) {
- m_pEnvList.RemoveAll();
-}
-
-CPDFXFA_App::~CPDFXFA_App() {
- delete m_pFontMgr;
- m_pFontMgr = NULL;
-
- delete m_pXFAApp;
- m_pXFAApp = NULL;
-
-#ifdef PDF_ENABLE_XFA
- FXJSE_Runtime_Release(m_hJSERuntime, m_bOwnedRuntime);
- m_hJSERuntime = NULL;
-
- FXJSE_Finalize();
- BC_Library_Destory();
-#endif
-}
-
-FX_BOOL CPDFXFA_App::Initialize(FXJSE_HRUNTIME hRuntime) {
-#ifdef PDF_ENABLE_XFA
- BC_Library_Init();
- FXJSE_Initialize();
-
- m_bOwnedRuntime = !hRuntime;
- m_hJSERuntime = hRuntime ? hRuntime : FXJSE_Runtime_Create();
- if (!m_hJSERuntime)
- return FALSE;
-
- m_pXFAApp = IXFA_App::Create(this);
- if (!m_pXFAApp)
- return FALSE;
-
- m_pFontMgr = IXFA_FontMgr::CreateDefault();
- if (!m_pFontMgr)
- return FALSE;
-
- m_pXFAApp->SetDefaultFontMgr(m_pFontMgr);
-#endif
- return TRUE;
-}
-
-FX_BOOL CPDFXFA_App::AddFormFillEnv(CPDFDoc_Environment* pEnv) {
- if (!pEnv)
- return FALSE;
-
- m_pEnvList.Add(pEnv);
- return TRUE;
-}
-
-FX_BOOL CPDFXFA_App::RemoveFormFillEnv(CPDFDoc_Environment* pEnv) {
- if (!pEnv)
- return FALSE;
-
- int nFind = m_pEnvList.Find(pEnv);
- if (nFind != -1) {
- m_pEnvList.RemoveAt(nFind);
- return TRUE;
- }
-
- return FALSE;
-}
-
-void CPDFXFA_App::GetAppType(CFX_WideString& wsAppType) {
- wsAppType = m_csAppType;
-}
-
-void CPDFXFA_App::GetAppName(CFX_WideString& wsName) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- wsName = pEnv->FFI_GetAppName();
- }
-}
-
-void CPDFXFA_App::SetAppType(const CFX_WideStringC& wsAppType) {
- m_csAppType = wsAppType;
-}
-
-void CPDFXFA_App::GetLanguage(CFX_WideString& wsLanguage) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- wsLanguage = pEnv->FFI_GetLanguage();
- }
-}
-
-void CPDFXFA_App::GetPlatform(CFX_WideString& wsPlatform) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- wsPlatform = pEnv->FFI_GetPlatform();
- }
-}
-
-void CPDFXFA_App::GetVariation(CFX_WideString& wsVariation) {
- wsVariation = JS_STR_VIEWERVARIATION;
-}
-
-void CPDFXFA_App::GetVersion(CFX_WideString& wsVersion) {
- wsVersion = JS_STR_VIEWERVERSION_XFA;
-}
-
-void CPDFXFA_App::Beep(FX_DWORD dwType) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- pEnv->JS_appBeep(dwType);
- }
-}
-
-int32_t CPDFXFA_App::MsgBox(const CFX_WideStringC& wsMessage,
- const CFX_WideStringC& wsTitle,
- FX_DWORD dwIconType,
- FX_DWORD dwButtonType) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (!pEnv)
- return -1;
-
- FX_DWORD iconType = 0;
- int iButtonType = 0;
- switch (dwIconType) {
- case XFA_MBICON_Error:
- iconType |= 0;
- break;
- case XFA_MBICON_Warning:
- iconType |= 1;
- break;
- case XFA_MBICON_Question:
- iconType |= 2;
- break;
- case XFA_MBICON_Status:
- iconType |= 3;
- break;
- }
- switch (dwButtonType) {
- case XFA_MB_OK:
- iButtonType |= 0;
- break;
- case XFA_MB_OKCancel:
- iButtonType |= 1;
- break;
- case XFA_MB_YesNo:
- iButtonType |= 2;
- break;
- case XFA_MB_YesNoCancel:
- iButtonType |= 3;
- break;
- }
- int32_t iRet = pEnv->JS_appAlert(wsMessage.GetPtr(), wsTitle.GetPtr(),
- iButtonType, iconType);
- switch (iRet) {
- case 1:
- return XFA_IDOK;
- case 2:
- return XFA_IDCancel;
- case 3:
- return XFA_IDNo;
- case 4:
- return XFA_IDYes;
- }
- return XFA_IDYes;
-}
-
-void CPDFXFA_App::Response(CFX_WideString& wsAnswer,
- const CFX_WideStringC& wsQuestion,
- const CFX_WideStringC& wsTitle,
- const CFX_WideStringC& wsDefaultAnswer,
- FX_BOOL bMark) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- int nLength = 2048;
- char* pBuff = new char[nLength];
- nLength = pEnv->JS_appResponse(wsQuestion.GetPtr(), wsTitle.GetPtr(),
- wsDefaultAnswer.GetPtr(), NULL, bMark, pBuff,
- nLength);
- if (nLength > 0) {
- nLength = nLength > 2046 ? 2046 : nLength;
- pBuff[nLength] = 0;
- pBuff[nLength + 1] = 0;
- wsAnswer = CFX_WideString::FromUTF16LE(
- reinterpret_cast<const unsigned short*>(pBuff),
- nLength / sizeof(unsigned short));
- }
- delete[] pBuff;
- }
-}
-
-int32_t CPDFXFA_App::GetCurDocumentInBatch() {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- return pEnv->FFI_GetCurDocument();
- }
- return 0;
-}
-
-int32_t CPDFXFA_App::GetDocumentCountInBatch() {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- return pEnv->FFI_GetDocumentCount();
- }
-
- return 0;
-}
-
-IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideStringC& wsURL) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- return pEnv->FFI_DownloadFromURL(wsURL.GetPtr());
- }
- return NULL;
-}
-
-FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideStringC& wsURL,
- const CFX_WideStringC& wsData,
- const CFX_WideStringC& wsContentType,
- const CFX_WideStringC& wsEncode,
- const CFX_WideStringC& wsHeader,
- CFX_WideString& wsResponse) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- wsResponse = pEnv->FFI_PostRequestURL(wsURL.GetPtr(), wsData.GetPtr(),
- wsContentType.GetPtr(),
- wsEncode.GetPtr(), wsHeader.GetPtr());
- return TRUE;
- }
- return FALSE;
-}
-
-FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideStringC& wsURL,
- const CFX_WideStringC& wsData,
- const CFX_WideStringC& wsEncode) {
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv) {
- return pEnv->FFI_PutRequestURL(wsURL.GetPtr(), wsData.GetPtr(),
- wsEncode.GetPtr());
- }
- return FALSE;
-}
-
-void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString& wsString) {
- switch (iStringID) {
- case XFA_IDS_ValidateFailed:
- wsString = L"%s validate failed";
- return;
- case XFA_IDS_CalcOverride:
- wsString = L"Calculate Override";
- return;
- case XFA_IDS_ModifyField:
- wsString = L"Are you sure you want to modify this field?";
- return;
- case XFA_IDS_NotModifyField:
- wsString = L"You are not allowed to modify this field.";
- return;
- case XFA_IDS_AppName:
- wsString = L"Foxit";
- return;
- case XFA_IDS_ImageFilter:
- wsString =
- L"Image "
- L"Files(*.bmp;*.jpg;*.png;*.gif;*.tif)|*.bmp;*.jpg;*.png;*.gif;*.tif|"
- L"All Files(*.*)|*.*||";
- return;
- case XFA_IDS_UNKNOW_CATCHED:
- wsString = L"unknown error is catched!";
- return;
- case XFA_IDS_Unable_TO_SET:
- wsString = L"Unable to set ";
- return;
- case XFA_IDS_VALUE_EXCALMATORY:
- wsString = L" value!";
- return;
- case XFA_IDS_INVALID_ENUM_VALUE:
- wsString = L"Invalid enumerated value: ";
- return;
- case XFA_IDS_UNSUPPORT_METHOD:
- wsString = L"unsupport %s method.";
- return;
- case XFA_IDS_UNSUPPORT_PROP:
- wsString = L"unsupport %s property.";
- return;
- case XFA_IDS_INVAlID_PROP_SET:
- wsString = L"Invalid property set operation;";
- return;
- case XFA_IDS_NOT_DEFAUL_VALUE:
- wsString = L" doesn't have a default property";
- return;
- case XFA_IDS_UNABLE_SET_LANGUAGE:
- wsString = L"Unable to set language value!";
- return;
- case XFA_IDS_UNABLE_SET_NUMPAGES:
- wsString = L"Unable to set numPages value!";
- return;
- case XFA_IDS_UNABLE_SET_PLATFORM:
- wsString = L"Unable to set platform value!";
- return;
- case XFA_IDS_UNABLE_SET_VALIDATIONENABLE:
- wsString = L"Unable to set validationsEnabled value!";
- return;
- case XFA_IDS_UNABLE_SET_VARIATION:
- wsString = L"Unable to set variation value!";
- return;
- case XFA_IDS_UNABLE_SET_VERSION:
- wsString = L"Unable to set version value!";
- return;
- case XFA_IDS_UNABLE_SET_READY:
- wsString = L"Unable to set ready value!";
- return;
- case XFA_IDS_NUMBER_OF_OCCUR:
- wsString =
- L"The element [%s] has violated its allowable number of occurrences";
- return;
- case XFA_IDS_UNABLE_SET_CLASS_NAME:
- wsString = L"Unable to set className value!";
- return;
- case XFA_IDS_UNABLE_SET_LENGTH_VALUE:
- wsString = L"Unable to set length value!";
- return;
- case XFA_IDS_UNSUPPORT_CHAR:
- wsString = L"unsupported char '%c'";
- return;
- case XFA_IDS_BAD_SUFFIX:
- wsString = L"bad suffix on number";
- return;
- case XFA_IDS_EXPECTED_IDENT:
- wsString = L"expected identifier instead of '%s'";
- return;
- case XFA_IDS_EXPECTED_STRING:
- wsString = L"expected '%s' instead of '%s'";
- return;
- case XFA_IDS_INVALIDATE_CHAR:
- wsString = L"invalidate char '%c'";
- return;
- case XFA_IDS_REDEFINITION:
- wsString = L"'%s' redefinition ";
- return;
- case XFA_IDS_INVALIDATE_TOKEN:
- wsString = L"invalidate token '%s'";
- return;
- case XFA_IDS_INVALIDATE_EXPRESSION:
- wsString = L"invalidate expression '%s'";
- return;
- case XFA_IDS_UNDEFINE_IDENTIFIER:
- wsString = L"undefined identifier '%s'";
- return;
- case XFA_IDS_INVALIDATE_LEFTVALUE:
- wsString = L"invalidate left-value '%s'";
- return;
- case XFA_IDS_COMPILER_ERROR:
- wsString = L"compiler error";
- return;
- case XFA_IDS_CANNOT_MODIFY_VALUE:
- wsString = L"can't modify the '%s' value";
- return;
- case XFA_IDS_ERROR_PARAMETERS:
- wsString = L"function '%s' has not %d parameters";
- return;
- case XFA_IDS_EXPECT_ENDIF:
- wsString = L"expected 'endif' instead of '%s'";
- return;
- case XFA_IDS_UNEXPECTED_EXPRESSION:
- wsString = L"unexpected expression '%s'";
- return;
- case XFA_IDS_CONDITION_IS_NULL:
- wsString = L"condition is null";
- return;
- case XFA_IDS_ILLEGALBREAK:
- wsString = L"illegal break";
- return;
- case XFA_IDS_ILLEGALCONTINUE:
- wsString = L"illegal continue";
- return;
- case XFA_IDS_EXPECTED_OPERATOR:
- wsString = L"expected operator '%s' instead of '%s'";
- return;
- case XFA_IDS_DIVIDE_ZERO:
- wsString = L"divide by zero";
- return;
- case XFA_IDS_CANNOT_COVERT_OBJECT:
- wsString = L"%s.%s can not covert to object";
- return;
- case XFA_IDS_NOT_FOUND_CONTAINER:
- wsString = L"can not found container '%s'";
- return;
- case XFA_IDS_NOT_FOUND_PROPERTY:
- wsString = L"can not found property '%s'";
- return;
- case XFA_IDS_NOT_FOUND_METHOD:
- wsString = L"can not found method '%s'";
- return;
- case XFA_IDS_NOT_FOUND_CONST:
- wsString = L"can not found const '%s'";
- return;
- case XFA_IDS_NOT_ASSIGN_OBJECT:
- wsString = L"can not direct assign value to object";
- return;
- case XFA_IDS_IVALIDATE_INSTRUCTION:
- wsString = L"invalidate instruction";
- return;
- case XFA_IDS_EXPECT_NUMBER:
- wsString = L"expected number instead of '%s'";
- return;
- case XFA_IDS_VALIDATE_OUT_ARRAY:
- wsString = L"validate access index '%s' out of array";
- return;
- case XFA_IDS_CANNOT_ASSIGN_IDENT:
- wsString = L"can not assign to %s";
- return;
- case XFA_IDS_NOT_FOUNT_FUNCTION:
- wsString = L"can not found '%s' function";
- return;
- case XFA_IDS_NOT_ARRAY:
- wsString = L"'%s' doesn't an array";
- return;
- case XFA_IDS_OUT_ARRAY:
- wsString = L"out of range of '%s' array";
- return;
- case XFA_IDS_NOT_SUPPORT_CALC:
- wsString = L"'%s' operator can not support array calculate";
- return;
- case XFA_IDS_ARGUMENT_NOT_ARRAY:
- wsString = L"'%s' function's %d argument can not be array";
- return;
- case XFA_IDS_ARGUMENT_EXPECT_CONTAINER:
- wsString = L"'%s' argument expected a container";
- return;
- case XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT:
- wsString =
- L"an attempt was made to reference property '%s' of a non-object in "
- L"SOM expression %s";
- return;
- case XFA_IDS_FUNCTION_IS_BUILDIN:
- wsString = L"function '%s' is buildin";
- return;
- case XFA_IDS_ERROR_MSG:
- wsString = L"%s : %s";
- return;
- case XFA_IDS_INDEX_OUT_OF_BOUNDS:
- wsString = L"Index value is out of bounds";
- return;
- case XFA_IDS_INCORRECT_NUMBER_OF_METHOD:
- wsString = L"Incorrect number of parameters calling method '%s'";
- return;
- case XFA_IDS_ARGUMENT_MISMATCH:
- wsString = L"Argument mismatch in property or function argument";
- return;
- case XFA_IDS_INVALID_ENUMERATE:
- wsString = L"Invalid enumerated value: %s";
- return;
- case XFA_IDS_INVALID_APPEND:
- wsString =
- L"Invalid append operation: %s cannot have a child element of %s";
- return;
- case XFA_IDS_SOM_EXPECTED_LIST:
- wsString =
- L"SOM expression returned list when single result was expected";
- return;
- case XFA_IDS_NOT_HAVE_PROPERTY:
- wsString = L"'%s' doesn't have property '%s'";
- return;
- case XFA_IDS_INVALID_NODE_TYPE:
- wsString = L"Invalid node type : '%s'";
- return;
- case XFA_IDS_VIOLATE_BOUNDARY:
- wsString =
- L"The element [%s] has violated its allowable number of occurrences";
- return;
- case XFA_IDS_SERVER_DENY:
- wsString = L"Server does not permit";
- return;
- case XFA_IDS_ValidateLimit:
- wsString = FX_WSTRC(
- L"Message limit exceeded. Remaining %d validation errors not "
- L"reported.");
- return;
- case XFA_IDS_ValidateNullWarning:
- wsString = FX_WSTRC(
- L"%s cannot be left blank. To ignore validations for %s, click "
- L"Ignore.");
- return;
- case XFA_IDS_ValidateNullError:
- wsString = FX_WSTRC(L"%s cannot be left blank.");
- return;
- case XFA_IDS_ValidateWarning:
- wsString = FX_WSTRC(
- L"The value you entered for %s is invalid. To ignore validations for "
- L"%s, click Ignore.");
- return;
- case XFA_IDS_ValidateError:
- wsString = FX_WSTRC(L"The value you entered for %s is invalid.");
- return;
- }
-}
-
-FX_BOOL CPDFXFA_App::ShowFileDialog(const CFX_WideStringC& wsTitle,
- const CFX_WideStringC& wsFilter,
- CFX_WideStringArray& wsPathArr,
- FX_BOOL bOpen) {
- return FALSE;
-}
-
-IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() {
- CXFA_FWLAdapterTimerMgr* pAdapter = NULL;
- CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
- if (pEnv)
- pAdapter = new CXFA_FWLAdapterTimerMgr(pEnv);
- return pAdapter;
-}
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
deleted file mode 100644
index 18f3d498e7..0000000000
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
+++ /dev/null
@@ -1,1258 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_string.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "public/fpdf_formfill.h"
-
-#define IDS_XFA_Validate_Input \
- "At least one required field was empty. Please fill in the required " \
- "fields\r\n(highlighted) before continuing."
-
-// submit
-#define FXFA_CONFIG 0x00000001
-#define FXFA_TEMPLATE 0x00000010
-#define FXFA_LOCALESET 0x00000100
-#define FXFA_DATASETS 0x00001000
-#define FXFA_XMPMETA 0x00010000
-#define FXFA_XFDF 0x00100000
-#define FXFA_FORM 0x01000000
-#define FXFA_PDF 0x10000000
-
-#ifndef _WIN32
-extern void SetLastError(int err);
-
-extern int GetLastError();
-#endif
-
-CPDFXFA_Document::CPDFXFA_Document(CPDF_Document* pPDFDoc,
- CPDFXFA_App* pProvider)
- : m_iDocType(DOCTYPE_PDF),
- m_pPDFDoc(pPDFDoc),
- m_pSDKDoc(nullptr),
- m_pXFADoc(nullptr),
- m_pXFADocView(nullptr),
- m_pApp(pProvider),
- m_pJSContext(nullptr) {
-}
-
-CPDFXFA_Document::~CPDFXFA_Document() {
- if (m_pXFADoc) {
- IXFA_App* pApp = m_pApp->GetXFAApp();
- if (pApp) {
- IXFA_DocHandler* pDocHandler = pApp->GetDocHandler();
- if (pDocHandler) {
- CloseXFADoc(pDocHandler);
- }
- }
- delete m_pXFADoc;
- }
- if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv())
- m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext);
- delete m_pSDKDoc;
- if (m_pPDFDoc) {
- CPDF_Parser* pParser = m_pPDFDoc->GetParser();
- if (pParser)
- delete pParser;
- else
- delete m_pPDFDoc;
- }
-}
-
-FX_BOOL CPDFXFA_Document::LoadXFADoc() {
- if (!m_pPDFDoc)
- return FALSE;
-
- m_XFAPageList.RemoveAll();
-
- IXFA_App* pApp = m_pApp->GetXFAApp();
- if (!pApp)
- return FALSE;
-
- m_pXFADoc = pApp->CreateDoc(this, m_pPDFDoc);
- if (!m_pXFADoc) {
- SetLastError(FPDF_ERR_XFALOAD);
- return FALSE;
- }
-
- IXFA_DocHandler* pDocHandler = pApp->GetDocHandler();
- if (!pDocHandler) {
- SetLastError(FPDF_ERR_XFALOAD);
- return FALSE;
- }
-
- pDocHandler->StartLoad(m_pXFADoc);
- int iStatus = pDocHandler->DoLoad(m_pXFADoc, NULL);
- if (iStatus != XFA_PARSESTATUS_Done) {
- CloseXFADoc(pDocHandler);
- SetLastError(FPDF_ERR_XFALOAD);
- return FALSE;
- }
- pDocHandler->StopLoad(m_pXFADoc);
- pDocHandler->SetJSERuntime(m_pXFADoc, m_pApp->GetJSERuntime());
-
- if (pDocHandler->GetDocType(m_pXFADoc) == XFA_DOCTYPE_Dynamic)
- m_iDocType = DOCTYPE_DYNAMIC_XFA;
- else
- m_iDocType = DOCTYPE_STATIC_XFA;
-
- m_pXFADocView = pDocHandler->CreateDocView(m_pXFADoc, XFA_DOCVIEW_View);
- if (m_pXFADocView->StartLayout() < 0) {
- CloseXFADoc(pDocHandler);
- SetLastError(FPDF_ERR_XFALAYOUT);
- return FALSE;
- }
-
- m_pXFADocView->DoLayout(NULL);
- m_pXFADocView->StopLayout();
- return TRUE;
-}
-
-int CPDFXFA_Document::GetPageCount() {
- if (!m_pPDFDoc && !m_pXFADoc)
- return 0;
-
- switch (m_iDocType) {
- case DOCTYPE_PDF:
- case DOCTYPE_STATIC_XFA:
- if (m_pPDFDoc)
- return m_pPDFDoc->GetPageCount();
- case DOCTYPE_DYNAMIC_XFA:
- if (m_pXFADoc)
- return m_pXFADocView->CountPageViews();
- default:
- return 0;
- }
-
- return 0;
-}
-
-CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) {
- if (page_index < 0)
- return nullptr;
- CPDFXFA_Page* pPage = nullptr;
- int nCount = m_XFAPageList.GetSize();
- if (nCount > 0 && page_index < nCount) {
- pPage = m_XFAPageList.GetAt(page_index);
- if (pPage)
- pPage->AddRef();
- } else {
- m_XFAPageList.SetSize(GetPageCount());
- }
- if (pPage)
- return pPage;
- pPage = new CPDFXFA_Page(this, page_index);
- if (!pPage->LoadPage()) {
- delete pPage;
- return nullptr;
- }
- m_XFAPageList.SetAt(page_index, pPage);
- return pPage;
-}
-
-CPDFXFA_Page* CPDFXFA_Document::GetPage(IXFA_PageView* pPage) {
- if (!pPage)
- return NULL;
-
- if (!m_pXFADoc)
- return NULL;
-
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
- return NULL;
-
- int nSize = m_XFAPageList.GetSize();
- for (int i = 0; i < nSize; i++) {
- CPDFXFA_Page* pTempPage = m_XFAPageList.GetAt(i);
- if (!pTempPage)
- continue;
- if (pTempPage->GetXFAPageView() && pTempPage->GetXFAPageView() == pPage)
- return pTempPage;
- }
-
- return NULL;
-}
-
-void CPDFXFA_Document::RemovePage(CPDFXFA_Page* page) {
- m_XFAPageList.SetAt(page->GetPageIndex(), NULL);
-}
-
-CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument(
- CPDFDoc_Environment* pFormFillEnv) {
- if (!m_pSDKDoc && pFormFillEnv)
- m_pSDKDoc = new CPDFSDK_Document(this, pFormFillEnv);
- return m_pSDKDoc;
-}
-
-void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF,
- CFX_FloatRect& pdfRect) {
- pdfRect.left = fxRectF.left;
- pdfRect.top = fxRectF.bottom();
- pdfRect.right = fxRectF.right();
- pdfRect.bottom = fxRectF.top;
-}
-
-void CPDFXFA_Document::SetChangeMark(IXFA_Doc* hDoc) {
- if (hDoc == m_pXFADoc && m_pSDKDoc) {
- m_pSDKDoc->SetChangeMark();
- }
-}
-
-FX_BOOL CPDFXFA_Document::GetChangeMark(IXFA_Doc* hDoc) {
- if (hDoc == m_pXFADoc && m_pSDKDoc)
- return m_pSDKDoc->GetChangeMark();
- return FALSE;
-}
-
-void CPDFXFA_Document::InvalidateRect(IXFA_PageView* pPageView,
- const CFX_RectF& rt,
- FX_DWORD dwFlags /* = 0 */) {
- if (!m_pXFADoc || !m_pSDKDoc)
- return;
-
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
- return;
-
- CFX_FloatRect rcPage;
- FXRect2PDFRect(rt, rcPage);
-
- CPDFXFA_Page* pPage = GetPage(pPageView);
-
- if (pPage == NULL)
- return;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (!pEnv)
- return;
-
- pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom,
- rcPage.right, rcPage.top);
-}
-
-void CPDFXFA_Document::InvalidateRect(IXFA_Widget* hWidget,
- FX_DWORD dwFlags /* = 0 */) {
- if (!hWidget)
- return;
-
- if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView)
- return;
-
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
- return;
-
- IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
- if (!pWidgetHandler)
- return;
-
- IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget);
- if (!pPageView)
- return;
-
- CFX_RectF rect;
- pWidgetHandler->GetRect(hWidget, rect);
- InvalidateRect(pPageView, rect, dwFlags);
-}
-
-void CPDFXFA_Document::DisplayCaret(IXFA_Widget* hWidget,
- FX_BOOL bVisible,
- const CFX_RectF* pRtAnchor) {
- if (!hWidget || pRtAnchor == NULL)
- return;
-
- if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView)
- return;
-
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
- return;
-
- IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
- if (!pWidgetHandler)
- return;
-
- IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget);
- if (!pPageView)
- return;
-
- CPDFXFA_Page* pPage = GetPage(pPageView);
-
- if (pPage == NULL)
- return;
-
- CFX_FloatRect rcCaret;
- FXRect2PDFRect(*pRtAnchor, rcCaret);
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (!pEnv)
- return;
-
- pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top,
- rcCaret.right, rcCaret.bottom);
-}
-
-FX_BOOL CPDFXFA_Document::GetPopupPos(IXFA_Widget* hWidget,
- FX_FLOAT fMinPopup,
- FX_FLOAT fMaxPopup,
- const CFX_RectF& rtAnchor,
- CFX_RectF& rtPopup) {
- if (NULL == hWidget) {
- return FALSE;
- }
- IXFA_PageView* pXFAPageView =
- m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget);
- if (NULL == pXFAPageView) {
- return FALSE;
- }
- CPDFXFA_Page* pPage = GetPage(pXFAPageView);
- if (pPage == NULL)
- return FALSE;
-
- CXFA_WidgetAcc* pWidgetAcc =
- m_pXFADocView->GetWidgetHandler()->GetDataAcc(hWidget);
-
- int nRotate = 0;
-#ifdef PDF_ENABLE_XFA
- nRotate = pWidgetAcc->GetRotate();
-#endif
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return FALSE;
- FS_RECTF pageViewRect;
- pEnv->FFI_GetPageViewRect(pPage, pageViewRect);
-
- CFX_FloatRect rcAnchor;
-
- rcAnchor.left = rtAnchor.left;
- rcAnchor.top = rtAnchor.bottom();
- rcAnchor.right = rtAnchor.right();
- rcAnchor.bottom = rtAnchor.top;
-
- int t1, t2, t;
- FX_DWORD dwPos;
- FX_FLOAT fPoupHeight;
- switch (nRotate) {
- case 90: {
- t1 = (int)(pageViewRect.right - rcAnchor.right);
- t2 = (int)(rcAnchor.left - pageViewRect.left);
- if (rcAnchor.bottom < pageViewRect.bottom) {
- rtPopup.left += rcAnchor.bottom - pageViewRect.bottom;
- }
-
- break;
- }
-
- case 180: {
- t2 = (int)(pageViewRect.top - rcAnchor.top);
- t1 = (int)(rcAnchor.bottom - pageViewRect.bottom);
- if (rcAnchor.left < pageViewRect.left) {
- rtPopup.left += rcAnchor.left - pageViewRect.left;
- }
- break;
- }
- case 270: {
- t1 = (int)(rcAnchor.left - pageViewRect.left);
- t2 = (int)(pageViewRect.right - rcAnchor.right);
-
- if (rcAnchor.top > pageViewRect.top) {
- rtPopup.left -= rcAnchor.top - pageViewRect.top;
- }
- break;
- }
- case 0:
- default: {
- t1 = (int)(pageViewRect.top - rcAnchor.top);
- t2 = (int)(rcAnchor.bottom - pageViewRect.bottom);
- if (rcAnchor.right > pageViewRect.right) {
- rtPopup.left -= rcAnchor.right - pageViewRect.right;
- }
- break;
- }
- }
-
- if (t1 <= 0 && t2 <= 0) {
- return FALSE;
- }
- if (t1 <= 0) {
- t = t2;
- dwPos = 1;
- } else if (t2 <= 0) {
- t = t1;
- dwPos = 0;
- } else if (t1 > t2) {
- t = t1;
- dwPos = 0;
- } else {
- t = t2;
- dwPos = 1;
- }
- if (t < fMinPopup) {
- fPoupHeight = fMinPopup;
- } else if (t > fMaxPopup) {
- fPoupHeight = fMaxPopup;
- } else {
- fPoupHeight = (FX_FLOAT)t;
- }
-
- switch (nRotate) {
- case 0:
- case 180: {
- if (dwPos == 0) {
- rtPopup.top = rtAnchor.height;
- rtPopup.height = fPoupHeight;
- } else {
- rtPopup.top = -fPoupHeight;
- rtPopup.height = fPoupHeight;
- }
- break;
- }
- case 90:
- case 270: {
- if (dwPos == 0) {
- rtPopup.top = rtAnchor.width;
- rtPopup.height = fPoupHeight;
- } else {
- rtPopup.top = -fPoupHeight;
- rtPopup.height = fPoupHeight;
- }
- break;
- }
- default:
- break;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFXFA_Document::PopupMenu(IXFA_Widget* hWidget,
- CFX_PointF ptPopup,
- const CFX_RectF* pRectExclude) {
- if (NULL == hWidget) {
- return FALSE;
- }
- IXFA_PageView* pXFAPageView =
- m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget);
- if (pXFAPageView == NULL)
- return FALSE;
- CPDFXFA_Page* pPage = GetPage(pXFAPageView);
-
- if (pPage == NULL)
- return FALSE;
-
- int menuFlag = 0;
-
- IXFA_MenuHandler* pXFAMenuHander = m_pApp->GetXFAApp()->GetMenuHandler();
- if (pXFAMenuHander->CanUndo(hWidget))
- menuFlag |= FXFA_MEMU_UNDO;
- if (pXFAMenuHander->CanRedo(hWidget))
- menuFlag |= FXFA_MEMU_REDO;
- if (pXFAMenuHander->CanPaste(hWidget))
- menuFlag |= FXFA_MEMU_PASTE;
- if (pXFAMenuHander->CanCopy(hWidget))
- menuFlag |= FXFA_MEMU_COPY;
- if (pXFAMenuHander->CanCut(hWidget))
- menuFlag |= FXFA_MEMU_CUT;
- if (pXFAMenuHander->CanSelectAll(hWidget))
- menuFlag |= FXFA_MEMU_SELECTALL;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return FALSE;
-
- return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, NULL);
-}
-
-void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView,
- FX_DWORD dwFlags) {
- if (!pPageView || (dwFlags != XFA_PAGEVIEWEVENT_PostAdded &&
- dwFlags != XFA_PAGEVIEWEVENT_PostRemoved)) {
- return;
- }
- CPDFXFA_Page* pPage = nullptr;
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (dwFlags == XFA_PAGEVIEWEVENT_PostAdded) {
- int nPageIndex = pPageView->GetPageViewIndex();
- pPage = GetPage(nPageIndex);
- if (pPage)
- pPage->SetXFAPageView(pPageView);
- pEnv->FFI_PageEvent(nPageIndex, dwFlags);
- return;
- }
- pPage = GetPage(pPageView);
- if (!pPage)
- return;
- pEnv->FFI_PageEvent(pPage->GetPageIndex(), dwFlags);
- pPage->Release();
-}
-
-void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget,
- CXFA_WidgetAcc* pWidgetData,
- FX_DWORD dwEvent,
- void* pParam,
- void* pAdditional) {
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget)
- return;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (!pEnv)
- return;
-
- IXFA_PageView* pPageView =
- m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget);
- if (pPageView == NULL)
- return;
-
- CPDFXFA_Page* pXFAPage = GetPage(pPageView);
- if (pXFAPage == NULL)
- return;
-
- CPDFSDK_PageView* pSdkPageView = m_pSDKDoc->GetPageView(pXFAPage);
- if (dwEvent == XFA_WIDGETEVENT_PostAdded) {
- pSdkPageView->AddAnnot(hWidget);
-
- } else if (dwEvent == XFA_WIDGETEVENT_PreRemoved) {
- CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget);
- if (pAnnot) {
- pSdkPageView->DeleteAnnot(pAnnot);
- }
- }
-}
-
-int32_t CPDFXFA_Document::CountPages(IXFA_Doc* hDoc) {
- if (hDoc == m_pXFADoc && m_pSDKDoc) {
- return GetPageCount();
- }
- return 0;
-}
-int32_t CPDFXFA_Document::GetCurrentPage(IXFA_Doc* hDoc) {
- if (hDoc != m_pXFADoc || !m_pSDKDoc)
- return -1;
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
- return -1;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return -1;
-
- return pEnv->FFI_GetCurrentPageIndex(this);
-}
-void CPDFXFA_Document::SetCurrentPage(IXFA_Doc* hDoc, int32_t iCurPage) {
- if (hDoc != m_pXFADoc || !m_pSDKDoc || m_iDocType != DOCTYPE_DYNAMIC_XFA ||
- iCurPage < 0 || iCurPage >= m_pSDKDoc->GetPageCount()) {
- return;
- }
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (!pEnv)
- return;
- pEnv->FFI_SetCurrentPage(this, iCurPage);
-}
-FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(IXFA_Doc* hDoc) {
- if (hDoc != m_pXFADoc || !m_pSDKDoc)
- return FALSE;
- if (m_pSDKDoc->GetInterForm())
- return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled();
-
- return FALSE;
-}
-void CPDFXFA_Document::SetCalculationsEnabled(IXFA_Doc* hDoc,
- FX_BOOL bEnabled) {
- if (hDoc != m_pXFADoc || !m_pSDKDoc)
- return;
- if (m_pSDKDoc->GetInterForm())
- m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled);
-}
-
-void CPDFXFA_Document::GetTitle(IXFA_Doc* hDoc, CFX_WideString& wsTitle) {
- if (hDoc != m_pXFADoc)
- return;
- if (m_pPDFDoc == NULL)
- return;
- CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo();
-
- if (pInfoDict == NULL)
- return;
-
- CFX_ByteString csTitle = pInfoDict->GetStringBy("Title");
- wsTitle = wsTitle.FromLocal(csTitle.GetBuffer(csTitle.GetLength()));
- csTitle.ReleaseBuffer(csTitle.GetLength());
-}
-void CPDFXFA_Document::SetTitle(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsTitle) {
- if (hDoc != m_pXFADoc)
- return;
- if (m_pPDFDoc == NULL)
- return;
- CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo();
-
- if (pInfoDict == NULL)
- return;
- pInfoDict->SetAt("Title", new CPDF_String(wsTitle));
-}
-void CPDFXFA_Document::ExportData(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFilePath,
- FX_BOOL bXDP) {
- if (hDoc != m_pXFADoc)
- return;
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA)
- return;
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return;
- int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML;
- CFX_ByteString bs = CFX_WideString(wsFilePath).UTF16LE_Encode();
-
- if (wsFilePath.IsEmpty()) {
- if (!pEnv->GetFormFillInfo() ||
- pEnv->GetFormFillInfo()->m_pJsPlatform == NULL)
- return;
- CFX_WideString filepath = pEnv->JS_fieldBrowse();
- bs = filepath.UTF16LE_Encode();
- }
- int len = bs.GetLength() / sizeof(unsigned short);
- FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile(
- bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML,
- (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "wb");
- bs.ReleaseBuffer(len * sizeof(unsigned short));
-
- if (pFileHandler == NULL)
- return;
-
- CFPDF_FileStream fileWrite(pFileHandler);
-
- IXFA_DocHandler* pXFADocHander = m_pApp->GetXFAApp()->GetDocHandler();
- CFX_ByteString content;
- if (fileType == FXFA_SAVEAS_XML) {
- content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
- fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(),
- content.GetLength());
- CFX_WideStringC data(L"data");
- if (pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), data, &fileWrite)) {
- // Ignoring error.
- }
- } else if (fileType == FXFA_SAVEAS_XDP) {
- if (m_pPDFDoc == NULL)
- return;
- CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
- if (pRoot == NULL)
- return;
- CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
- if (NULL == pAcroForm)
- return;
- CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
- if (pXFA == NULL)
- return;
- if (!pXFA->IsArray())
- return;
- CPDF_Array* pArray = pXFA->GetArray();
- if (NULL == pArray)
- return;
- int size = pArray->GetCount();
- for (int i = 1; i < size; i += 2) {
- CPDF_Object* pPDFObj = pArray->GetElement(i);
- CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1);
- if (!pPrePDFObj->IsString())
- continue;
- if (!pPDFObj->IsReference())
- continue;
- CPDF_Object* pDirectObj = pPDFObj->GetDirect();
- if (!pDirectObj->IsStream())
- continue;
- if (pPrePDFObj->GetString() == "form") {
- CFX_WideStringC form(L"form");
- pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), form, &fileWrite);
- } else if (pPrePDFObj->GetString() == "datasets") {
- CFX_WideStringC datasets(L"datasets");
- pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), datasets,
- &fileWrite);
- } else {
- if (i == size - 1) {
- CFX_WideString wPath = CFX_WideString::FromUTF16LE(
- (unsigned short*)(const FX_CHAR*)bs,
- bs.GetLength() / sizeof(unsigned short));
- CFX_ByteString bPath = wPath.UTF8Encode();
- CFX_ByteString szFormat =
- "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>";
- content.Format(szFormat, (char*)(const FX_CHAR*)bPath);
- fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(),
- content.GetLength());
- }
-
- CPDF_Stream* pStream = (CPDF_Stream*)pDirectObj;
- CPDF_StreamAcc* pAcc = new CPDF_StreamAcc;
- pAcc->LoadAllData(pStream);
- fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(),
- pAcc->GetSize());
- delete pAcc;
- }
- }
- }
- if (!fileWrite.Flush()) {
- // Ignoring flush error.
- }
-}
-void CPDFXFA_Document::ImportData(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFilePath) {
-}
-
-void CPDFXFA_Document::GotoURL(IXFA_Doc* hDoc,
- const CFX_WideStringC& bsURL,
- FX_BOOL bAppend) {
- if (hDoc != m_pXFADoc)
- return;
-
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
- return;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return;
-
- CFX_WideStringC str(bsURL.GetPtr());
-
- pEnv->FFI_GotoURL(this, str, bAppend);
-}
-
-FX_BOOL CPDFXFA_Document::IsValidationsEnabled(IXFA_Doc* hDoc) {
- if (hDoc != m_pXFADoc || !m_pSDKDoc)
- return FALSE;
- if (m_pSDKDoc->GetInterForm())
- return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled();
-
- return TRUE;
-}
-void CPDFXFA_Document::SetValidationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled) {
- if (hDoc != m_pXFADoc || !m_pSDKDoc)
- return;
- if (m_pSDKDoc->GetInterForm())
- m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled);
-}
-void CPDFXFA_Document::SetFocusWidget(IXFA_Doc* hDoc, IXFA_Widget* hWidget) {
- if (hDoc != m_pXFADoc)
- return;
-
- if (NULL == hWidget) {
- m_pSDKDoc->SetFocusAnnot(NULL);
- return;
- }
-
- int pageViewCount = m_pSDKDoc->GetPageViewCount();
- for (int i = 0; i < pageViewCount; i++) {
- CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i);
- if (pPageView == NULL)
- continue;
- CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget);
- if (pAnnot) {
- m_pSDKDoc->SetFocusAnnot(pAnnot);
- break;
- }
- }
-}
-void CPDFXFA_Document::Print(IXFA_Doc* hDoc,
- int32_t nStartPage,
- int32_t nEndPage,
- FX_DWORD dwOptions) {
- if (hDoc != m_pXFADoc)
- return;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return;
-
- if (!pEnv->GetFormFillInfo() ||
- pEnv->GetFormFillInfo()->m_pJsPlatform == NULL)
- return;
- if (pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print == NULL)
- return;
- pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print(
- pEnv->GetFormFillInfo()->m_pJsPlatform,
- dwOptions & XFA_PRINTOPT_ShowDialog, nStartPage, nEndPage,
- dwOptions & XFA_PRINTOPT_CanCancel, dwOptions & XFA_PRINTOPT_ShrinkPage,
- dwOptions & XFA_PRINTOPT_AsImage, dwOptions & XFA_PRINTOPT_ReverseOrder,
- dwOptions & XFA_PRINTOPT_PrintAnnot);
-}
-
-void CPDFXFA_Document::GetURL(IXFA_Doc* hDoc, CFX_WideString& wsDocURL) {
- if (hDoc != m_pXFADoc)
- return;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return;
-
- pEnv->FFI_GetURL(this, wsDocURL);
-}
-
-FX_ARGB CPDFXFA_Document::GetHighlightColor(IXFA_Doc* hDoc) {
- if (hDoc != m_pXFADoc)
- return 0;
- if (m_pSDKDoc) {
- if (CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm()) {
- FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA);
- uint8_t alpha = pInterForm->GetHighlightAlpha();
- FX_ARGB argb = ArgbEncode((int)alpha, color);
- return argb;
- }
- }
- return 0;
-}
-
-FX_BOOL CPDFXFA_Document::_NotifySubmit(FX_BOOL bPrevOrPost) {
- if (bPrevOrPost)
- return _OnBeforeNotifySumbit();
-
- _OnAfterNotifySumbit();
- return TRUE;
-}
-
-FX_BOOL CPDFXFA_Document::_OnBeforeNotifySumbit() {
-#ifdef PDF_ENABLE_XFA
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA)
- return TRUE;
- if (m_pXFADocView == NULL)
- return TRUE;
- IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
- if (pWidgetHandler == NULL)
- return TRUE;
- IXFA_WidgetAccIterator* pWidgetAccIterator =
- m_pXFADocView->CreateWidgetAccIterator();
- if (pWidgetAccIterator) {
- CXFA_EventParam Param;
- Param.m_eType = XFA_EVENT_PreSubmit;
- CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext();
- while (pWidgetAcc) {
- pWidgetHandler->ProcessEvent(pWidgetAcc, &Param);
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- }
- pWidgetAccIterator->Release();
- }
- pWidgetAccIterator = m_pXFADocView->CreateWidgetAccIterator();
- if (pWidgetAccIterator) {
- CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext();
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- while (pWidgetAcc) {
- int fRet = pWidgetAcc->ProcessValidate(-1);
- if (fRet == XFA_EVENTERROR_Error) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return FALSE;
- CFX_WideString ws;
- ws.FromLocal(IDS_XFA_Validate_Input);
- CFX_ByteString bs = ws.UTF16LE_Encode();
- int len = bs.GetLength() / sizeof(unsigned short);
- pEnv->FFI_Alert(
- (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)),
- (FPDF_WIDESTRING)L"", 0, 1);
- bs.ReleaseBuffer(len * sizeof(unsigned short));
- pWidgetAccIterator->Release();
- return FALSE;
- }
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- }
- pWidgetAccIterator->Release();
- m_pXFADocView->UpdateDocView();
- }
-#endif
- return TRUE;
-}
-void CPDFXFA_Document::_OnAfterNotifySumbit() {
- if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA)
- return;
- if (m_pXFADocView == NULL)
- return;
- IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
- if (pWidgetHandler == NULL)
- return;
- IXFA_WidgetAccIterator* pWidgetAccIterator =
- m_pXFADocView->CreateWidgetAccIterator();
- if (pWidgetAccIterator == NULL)
- return;
- CXFA_EventParam Param;
- Param.m_eType = XFA_EVENT_PostSubmit;
-
- CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext();
- while (pWidgetAcc) {
- pWidgetHandler->ProcessEvent(pWidgetAcc, &Param);
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- }
- pWidgetAccIterator->Release();
- m_pXFADocView->UpdateDocView();
-}
-
-FX_BOOL CPDFXFA_Document::SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) {
- if (!_NotifySubmit(TRUE))
- return FALSE;
- if (NULL == m_pXFADocView)
- return FALSE;
- m_pXFADocView->UpdateDocView();
-
- FX_BOOL ret = _SubmitData(hDoc, submit);
- _NotifySubmit(FALSE);
- return ret;
-}
-
-IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(IXFA_Doc* hDoc,
- const CFX_WideString& wsLink) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return FALSE;
- CFX_ByteString bs = wsLink.UTF16LE_Encode();
- int len = bs.GetLength() / sizeof(unsigned short);
- FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile(
- 0, (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "rb");
- bs.ReleaseBuffer(len * sizeof(unsigned short));
-
- if (pFileHandler == NULL)
- return NULL;
- return new CFPDF_FileStream(pFileHandler);
-}
-FX_BOOL CPDFXFA_Document::_ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler,
- int fileType,
- FPDF_DWORD encodeType,
- FPDF_DWORD flag) {
- if (NULL == m_pXFADocView)
- return FALSE;
- IXFA_DocHandler* pDocHandler = m_pApp->GetXFAApp()->GetDocHandler();
- CFX_ByteString content;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (pEnv == NULL)
- return FALSE;
-
- CFPDF_FileStream fileStream(pFileHandler);
-
- if (fileType == FXFA_SAVEAS_XML) {
- CFX_WideString ws;
- ws.FromLocal("data");
- CFX_ByteString content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
- fileStream.WriteBlock((const FX_CHAR*)content, 0, content.GetLength());
- pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream);
- } else if (fileType == FXFA_SAVEAS_XDP) {
- if (flag == 0)
- flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS |
- FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM;
- if (m_pPDFDoc == NULL) {
- fileStream.Flush();
- return FALSE;
- }
- CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
- if (pRoot == NULL) {
- fileStream.Flush();
- return FALSE;
- }
- CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
- if (NULL == pAcroForm) {
- fileStream.Flush();
- return FALSE;
- }
- CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
- if (pXFA == NULL) {
- fileStream.Flush();
- return FALSE;
- }
- if (!pXFA->IsArray()) {
- fileStream.Flush();
- return FALSE;
- }
- CPDF_Array* pArray = pXFA->GetArray();
- if (NULL == pArray) {
- fileStream.Flush();
- return FALSE;
- }
- int size = pArray->GetCount();
- for (int i = 1; i < size; i += 2) {
- CPDF_Object* pPDFObj = pArray->GetElement(i);
- CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1);
- if (!pPrePDFObj->IsString())
- continue;
- if (!pPDFObj->IsReference())
- continue;
- CPDF_Object* pDirectObj = pPDFObj->GetDirect();
- if (!pDirectObj->IsStream())
- continue;
- if (pPrePDFObj->GetString() == "config" && !(flag & FXFA_CONFIG))
- continue;
- if (pPrePDFObj->GetString() == "template" && !(flag & FXFA_TEMPLATE))
- continue;
- if (pPrePDFObj->GetString() == "localeSet" && !(flag & FXFA_LOCALESET))
- continue;
- if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS))
- continue;
- if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA))
- continue;
- if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF))
- continue;
- if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM))
- continue;
- if (pPrePDFObj->GetString() == "form") {
- CFX_WideString ws;
- ws.FromLocal("form");
- pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream);
- } else if (pPrePDFObj->GetString() == "datasets") {
- CFX_WideString ws;
- ws.FromLocal("datasets");
- pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream);
- } else {
- // PDF,creator.
- }
- }
- }
- return TRUE;
-}
-
-void CPDFXFA_Document::_ClearChangeMark() {
- if (m_pSDKDoc)
- m_pSDKDoc->ClearChangeMark();
-}
-
-void CPDFXFA_Document::_ToXFAContentFlags(CFX_WideString csSrcContent,
- FPDF_DWORD& flag) {
- if (csSrcContent.Find(L" config ", 0) != -1)
- flag |= FXFA_CONFIG;
- if (csSrcContent.Find(L" template ", 0) != -1)
- flag |= FXFA_TEMPLATE;
- if (csSrcContent.Find(L" localeSet ", 0) != -1)
- flag |= FXFA_LOCALESET;
- if (csSrcContent.Find(L" datasets ", 0) != -1)
- flag |= FXFA_DATASETS;
- if (csSrcContent.Find(L" xmpmeta ", 0) != -1)
- flag |= FXFA_XMPMETA;
- if (csSrcContent.Find(L" xfdf ", 0) != -1)
- flag |= FXFA_XFDF;
- if (csSrcContent.Find(L" form ", 0) != -1)
- flag |= FXFA_FORM;
- if (flag == 0)
- flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS |
- FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM;
-}
-FX_BOOL CPDFXFA_Document::_MailToInfo(CFX_WideString& csURL,
- CFX_WideString& csToAddress,
- CFX_WideString& csCCAddress,
- CFX_WideString& csBCCAddress,
- CFX_WideString& csSubject,
- CFX_WideString& csMsg) {
- CFX_WideString srcURL = csURL;
- srcURL.TrimLeft();
- if (0 != srcURL.Left(7).CompareNoCase(L"mailto:"))
- return FALSE;
- int pos = srcURL.Find(L'?', 0);
- CFX_WideString tmp;
- if (pos == -1) {
- pos = srcURL.Find(L'@', 0);
- if (pos == -1)
- return FALSE;
-
- tmp = srcURL.Right(csURL.GetLength() - 7);
- tmp.TrimLeft();
- tmp.TrimRight();
- } else {
- tmp = srcURL.Left(pos);
- tmp = tmp.Right(tmp.GetLength() - 7);
- tmp.TrimLeft();
- tmp.TrimRight();
- }
-
- csToAddress = tmp;
-
- srcURL = srcURL.Right(srcURL.GetLength() - (pos + 1));
- while (!srcURL.IsEmpty()) {
- srcURL.TrimLeft();
- srcURL.TrimRight();
- pos = srcURL.Find(L'&', 0);
- if (pos == -1)
- tmp = srcURL;
- else
- tmp = srcURL.Left(pos);
-
- tmp.TrimLeft();
- tmp.TrimRight();
- if (tmp.GetLength() >= 3 && 0 == tmp.Left(3).CompareNoCase(L"cc=")) {
- tmp = tmp.Right(tmp.GetLength() - 3);
- if (!csCCAddress.IsEmpty())
- csCCAddress += L';';
- csCCAddress += tmp;
-
- } else if (tmp.GetLength() >= 4 &&
- 0 == tmp.Left(4).CompareNoCase(L"bcc=")) {
- tmp = tmp.Right(tmp.GetLength() - 4);
- if (!csBCCAddress.IsEmpty())
- csBCCAddress += L';';
- csBCCAddress += tmp;
- } else if (tmp.GetLength() >= 8 &&
- 0 == tmp.Left(8).CompareNoCase(L"subject=")) {
- tmp = tmp.Right(tmp.GetLength() - 8);
- csSubject += tmp;
- } else if (tmp.GetLength() >= 5 &&
- 0 == tmp.Left(5).CompareNoCase(L"body=")) {
- tmp = tmp.Right(tmp.GetLength() - 5);
- csMsg += tmp;
- }
- if (pos == -1)
- srcURL = L"";
- else
- srcURL = srcURL.Right(csURL.GetLength() - (pos + 1));
- }
- csToAddress.Replace(L",", L";");
- csCCAddress.Replace(L",", L";");
- csBCCAddress.Replace(L",", L";");
- return TRUE;
-}
-
-FX_BOOL CPDFXFA_Document::_SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) {
-#ifdef PDF_ENABLE_XFA
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- if (!pEnv)
- return FALSE;
- CFX_WideStringC csURLC;
- submit.GetSubmitTarget(csURLC);
- CFX_WideString csURL = csURLC;
- if (csURL.IsEmpty()) {
- CFX_WideString ws;
- ws.FromLocal("Submit cancelled.");
- CFX_ByteString bs = ws.UTF16LE_Encode();
- int len = bs.GetLength() / sizeof(unsigned short);
- pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)),
- (FPDF_WIDESTRING)L"", 0, 4);
- bs.ReleaseBuffer(len * sizeof(unsigned short));
- return FALSE;
- }
- FPDF_BOOL bRet = TRUE;
- FPDF_FILEHANDLER* pFileHandler = nullptr;
- int fileFlag = -1;
- switch (submit.GetSubmitFormat()) {
- case XFA_ATTRIBUTEENUM_Xdp: {
- CFX_WideStringC csContentC;
- submit.GetSubmitXDPContent(csContentC);
- CFX_WideString csContent;
- csContent = csContentC;
- csContent.TrimLeft();
- csContent.TrimRight();
- CFX_WideString space;
- space.FromLocal(" ");
- csContent = space + csContent + space;
- FPDF_DWORD flag = 0;
- if (submit.IsSubmitEmbedPDF())
- flag |= FXFA_PDF;
- _ToXFAContentFlags(csContent, flag);
- pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XDP, nullptr, "wb");
- fileFlag = FXFA_SAVEAS_XDP;
- _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XDP, 0, flag);
- break;
- }
- case XFA_ATTRIBUTEENUM_Xml:
- pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
- fileFlag = FXFA_SAVEAS_XML;
- _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0);
- break;
- case XFA_ATTRIBUTEENUM_Pdf:
- break;
- case XFA_ATTRIBUTEENUM_Urlencoded:
- pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
- fileFlag = FXFA_SAVEAS_XML;
- _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0);
- break;
- default:
- return false;
- }
- if (!pFileHandler)
- return FALSE;
- if (0 == csURL.Left(7).CompareNoCase(L"mailto:")) {
- CFX_WideString csToAddress;
- CFX_WideString csCCAddress;
- CFX_WideString csBCCAddress;
- CFX_WideString csSubject;
- CFX_WideString csMsg;
- bRet = _MailToInfo(csURL, csToAddress, csCCAddress, csBCCAddress, csSubject,
- csMsg);
- if (!bRet)
- return FALSE;
- CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode();
- CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode();
- CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode();
- CFX_ByteString bsSubject = CFX_WideString(csSubject).UTF16LE_Encode();
- CFX_ByteString bsMsg = CFX_WideString(csMsg).UTF16LE_Encode();
- FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength());
- FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength());
- FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength());
- FPDF_WIDESTRING pSubject =
- (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength());
- FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength());
- pEnv->FFI_EmailTo(pFileHandler, pTo, pSubject, pCC, pBcc, pMsg);
- bsTo.ReleaseBuffer();
- bsCC.ReleaseBuffer();
- bsBcc.ReleaseBuffer();
- bsSubject.ReleaseBuffer();
- bsMsg.ReleaseBuffer();
- } else {
- // HTTP or FTP
- CFX_WideString ws;
- CFX_ByteString bs = csURL.UTF16LE_Encode();
- int len = bs.GetLength() / sizeof(unsigned short);
- pEnv->FFI_UploadTo(
- pFileHandler, fileFlag,
- (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)));
- bs.ReleaseBuffer(len * sizeof(unsigned short));
- }
- return bRet;
-#else
- return TRUE;
-#endif
-}
-
-FX_BOOL CPDFXFA_Document::SetGlobalProperty(IXFA_Doc* hDoc,
- const CFX_ByteStringC& szPropName,
- FXJSE_HVALUE hValue) {
- if (hDoc != m_pXFADoc)
- return FALSE;
-
- if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime())
- return m_pSDKDoc->GetEnv()->GetJSRuntime()->SetHValueByName(szPropName,
- hValue);
- return FALSE;
-}
-FX_BOOL CPDFXFA_Document::GetPDFScriptObject(IXFA_Doc* hDoc,
- const CFX_ByteStringC& utf8Name,
- FXJSE_HVALUE hValue) {
- if (hDoc != m_pXFADoc)
- return FALSE;
-
- if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime())
- return FALSE;
-
- if (!m_pJSContext) {
- m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc);
- m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext();
- }
-
- return _GetHValueByName(utf8Name, hValue,
- m_pSDKDoc->GetEnv()->GetJSRuntime());
-}
-FX_BOOL CPDFXFA_Document::GetGlobalProperty(IXFA_Doc* hDoc,
- const CFX_ByteStringC& szPropName,
- FXJSE_HVALUE hValue) {
- if (hDoc != m_pXFADoc)
- return FALSE;
- if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime())
- return FALSE;
-
- if (!m_pJSContext) {
- m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc);
- m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext();
- }
-
- return _GetHValueByName(szPropName, hValue,
- m_pSDKDoc->GetEnv()->GetJSRuntime());
-}
-FX_BOOL CPDFXFA_Document::_GetHValueByName(const CFX_ByteStringC& utf8Name,
- FXJSE_HVALUE hValue,
- IJS_Runtime* runTime) {
- return runTime->GetHValueByName(utf8Name, hValue);
-}
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp
deleted file mode 100644
index 0210ac1c08..0000000000
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp
+++ /dev/null
@@ -1,248 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-
-CPDFXFA_Page::CPDFXFA_Page(CPDFXFA_Document* pDoc, int page_index)
- : m_pPDFPage(NULL),
- m_pXFAPageView(NULL),
- m_iPageIndex(page_index),
- m_pDocument(pDoc),
- m_iRef(1) {}
-
-CPDFXFA_Page::~CPDFXFA_Page() {
- if (m_pPDFPage)
- delete m_pPDFPage;
- m_pPDFPage = NULL;
- m_pXFAPageView = NULL;
-}
-
-void CPDFXFA_Page::Release() {
- m_iRef--;
- if (m_iRef > 0)
- return;
-
- if (m_pDocument)
- m_pDocument->RemovePage(this);
-
- delete this;
-}
-
-FX_BOOL CPDFXFA_Page::LoadPDFPage() {
- if (!m_pDocument)
- return FALSE;
- CPDF_Document* pPDFDoc = m_pDocument->GetPDFDoc();
- if (pPDFDoc) {
- CPDF_Dictionary* pDict = pPDFDoc->GetPage(m_iPageIndex);
- if (pDict == NULL)
- return FALSE;
- if (m_pPDFPage) {
- if (m_pPDFPage->m_pFormDict == pDict)
- return TRUE;
-
- delete m_pPDFPage;
- m_pPDFPage = NULL;
- }
-
- m_pPDFPage = new CPDF_Page;
- m_pPDFPage->Load(pPDFDoc, pDict);
- m_pPDFPage->ParseContent(nullptr);
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFXFA_Page::LoadXFAPageView() {
- if (!m_pDocument)
- return FALSE;
- IXFA_Doc* pXFADoc = m_pDocument->GetXFADoc();
- if (!pXFADoc)
- return FALSE;
-
- IXFA_DocView* pXFADocView = m_pDocument->GetXFADocView();
- if (!pXFADocView)
- return FALSE;
-
- IXFA_PageView* pPageView = pXFADocView->GetPageView(m_iPageIndex);
- if (!pPageView)
- return FALSE;
-
- if (m_pXFAPageView == pPageView)
- return TRUE;
-
- m_pXFAPageView = pPageView;
- (void)m_pXFAPageView->LoadPageView(nullptr);
- return TRUE;
-}
-
-FX_BOOL CPDFXFA_Page::LoadPage() {
- if (!m_pDocument || m_iPageIndex < 0)
- return FALSE;
-
- int iDocType = m_pDocument->GetDocType();
- switch (iDocType) {
- case DOCTYPE_PDF:
- case DOCTYPE_STATIC_XFA: {
- return LoadPDFPage();
- }
- case DOCTYPE_DYNAMIC_XFA: {
- return LoadXFAPageView();
- }
- default:
- return FALSE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFXFA_Page::LoadPDFPage(CPDF_Dictionary* pageDict) {
- if (!m_pDocument || m_iPageIndex < 0 || !pageDict)
- return FALSE;
-
- if (m_pPDFPage)
- delete m_pPDFPage;
-
- m_pPDFPage = new CPDF_Page();
- m_pPDFPage->Load(m_pDocument->GetPDFDoc(), pageDict);
- m_pPDFPage->ParseContent(nullptr);
-
- return TRUE;
-}
-
-FX_FLOAT CPDFXFA_Page::GetPageWidth() {
- if (!m_pPDFPage && !m_pXFAPageView)
- return 0.0f;
-
- int nDocType = m_pDocument->GetDocType();
- switch (nDocType) {
- case DOCTYPE_DYNAMIC_XFA: {
- if (m_pXFAPageView) {
- CFX_RectF rect;
- m_pXFAPageView->GetPageViewRect(rect);
- return rect.width;
- }
- } break;
- case DOCTYPE_STATIC_XFA:
- case DOCTYPE_PDF: {
- if (m_pPDFPage)
- return m_pPDFPage->GetPageWidth();
- } break;
- default:
- return 0.0f;
- }
-
- return 0.0f;
-}
-
-FX_FLOAT CPDFXFA_Page::GetPageHeight() {
- if (!m_pPDFPage && !m_pXFAPageView)
- return 0.0f;
-
- int nDocType = m_pDocument->GetDocType();
- switch (nDocType) {
- case DOCTYPE_PDF:
- case DOCTYPE_STATIC_XFA: {
- if (m_pPDFPage)
- return m_pPDFPage->GetPageHeight();
- } break;
- case DOCTYPE_DYNAMIC_XFA: {
- if (m_pXFAPageView) {
- CFX_RectF rect;
- m_pXFAPageView->GetPageViewRect(rect);
- return rect.height;
- }
- } break;
- default:
- return 0.0f;
- }
-
- return 0.0f;
-}
-
-void CPDFXFA_Page::DeviceToPage(int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- int device_x,
- int device_y,
- double* page_x,
- double* page_y) {
- if (!m_pPDFPage && !m_pXFAPageView)
- return;
-
- CFX_Matrix page2device;
- CFX_Matrix device2page;
- FX_FLOAT page_x_f, page_y_f;
-
- GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate);
-
- device2page.SetReverse(page2device);
- device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f,
- page_y_f);
-
- *page_x = (page_x_f);
- *page_y = (page_y_f);
-}
-
-void CPDFXFA_Page::PageToDevice(int start_x,
- int start_y,
- int size_x,
- int size_y,
- int rotate,
- double page_x,
- double page_y,
- int* device_x,
- int* device_y) {
- if (!m_pPDFPage && !m_pXFAPageView)
- return;
-
- CFX_Matrix page2device;
- FX_FLOAT device_x_f, device_y_f;
-
- GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate);
-
- page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f,
- device_y_f);
-
- *device_x = FXSYS_round(device_x_f);
- *device_y = FXSYS_round(device_y_f);
-}
-
-void CPDFXFA_Page::GetDisplayMatrix(CFX_Matrix& matrix,
- int xPos,
- int yPos,
- int xSize,
- int ySize,
- int iRotate) const {
- if (!m_pPDFPage && !m_pXFAPageView)
- return;
-
- int nDocType = m_pDocument->GetDocType();
- switch (nDocType) {
- case DOCTYPE_DYNAMIC_XFA: {
- if (m_pXFAPageView) {
- CFX_Rect rect;
- rect.Set(xPos, yPos, xSize, ySize);
- m_pXFAPageView->GetDisplayMatrix(matrix, rect, iRotate);
- }
- } break;
- case DOCTYPE_PDF:
- case DOCTYPE_STATIC_XFA: {
- if (m_pPDFPage) {
- m_pPDFPage->GetDisplayMatrix(matrix, xPos, yPos, xSize, ySize, iRotate);
- }
- } break;
- default:
- return;
- }
-}
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
deleted file mode 100644
index 7814d8bd8a..0000000000
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-
-#include <vector>
-
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-
-std::vector<CFWL_TimerInfo*>* CXFA_FWLAdapterTimerMgr::s_TimerArray = nullptr;
-
-FWL_ERR CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer,
- FX_DWORD dwElapse,
- FWL_HTIMER& hTimer,
- FX_BOOL bImmediately) {
- if (!m_pEnv)
- return FWL_ERR_Indefinite;
-
- uint32_t uIDEvent = m_pEnv->FFI_SetTimer(dwElapse, TimerProc);
- if (!s_TimerArray)
- s_TimerArray = new std::vector<CFWL_TimerInfo*>;
- s_TimerArray->push_back(new CFWL_TimerInfo(uIDEvent, pTimer));
- hTimer = reinterpret_cast<FWL_HTIMER>(s_TimerArray->back());
- return FWL_ERR_Succeeded;
-}
-
-FWL_ERR CXFA_FWLAdapterTimerMgr::Stop(FWL_HTIMER hTimer) {
- if (!hTimer || !m_pEnv)
- return FWL_ERR_Indefinite;
-
- CFWL_TimerInfo* pInfo = reinterpret_cast<CFWL_TimerInfo*>(hTimer);
- m_pEnv->FFI_KillTimer(pInfo->uIDEvent);
- if (s_TimerArray) {
- auto it = std::find(s_TimerArray->begin(), s_TimerArray->end(), pInfo);
- if (it != s_TimerArray->end()) {
- s_TimerArray->erase(it);
- delete pInfo;
- }
- }
- return FWL_ERR_Succeeded;
-}
-
-// static
-void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) {
- if (!s_TimerArray)
- return;
-
- for (CFWL_TimerInfo* pInfo : *s_TimerArray) {
- if (pInfo->uIDEvent == idEvent) {
- pInfo->pTimer->Run(reinterpret_cast<FWL_HTIMER>(pInfo));
- break;
- }
- }
-}
diff --git a/fpdfsdk/src/fsdk_actionhandler.cpp b/fpdfsdk/src/fsdk_actionhandler.cpp
deleted file mode 100644
index 7bca1b7865..0000000000
--- a/fpdfsdk/src/fsdk_actionhandler.cpp
+++ /dev/null
@@ -1,640 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fsdk_actionhandler.h"
-
-#include <set>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "third_party/base/stl_util.h"
-
-CPDFSDK_ActionHandler::CPDFSDK_ActionHandler()
- : m_pFormActionHandler(new CPDFSDK_FormActionHandler) {
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_DocOpen(const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- std::set<CPDF_Dictionary*> visited;
- return ExecuteDocumentOpenAction(action, pDocument, &visited);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_JavaScript(
- const CPDF_Action& JsAction,
- CFX_WideString csJSName,
- CPDFSDK_Document* pDocument) {
- if (JsAction.GetType() == CPDF_Action::JavaScript) {
- CFX_WideString swJS = JsAction.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunDocumentOpenJavaScript(pDocument, csJSName, swJS);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript(
- const CPDF_Action& JsAction,
- CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument,
- CPDF_FormField* pFormField,
- PDFSDK_FieldAction& data) {
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (pEnv->IsJSInitiated() && JsAction.GetType() == CPDF_Action::JavaScript) {
- CFX_WideString swJS = JsAction.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Page(
- const CPDF_Action& action,
- enum CPDF_AAction::AActionType eType,
- CPDFSDK_Document* pDocument) {
- std::set<CPDF_Dictionary*> visited;
- return ExecuteDocumentPageAction(action, eType, pDocument, &visited);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Document(
- const CPDF_Action& action,
- enum CPDF_AAction::AActionType eType,
- CPDFSDK_Document* pDocument) {
- std::set<CPDF_Dictionary*> visited;
- return ExecuteDocumentPageAction(action, eType, pDocument, &visited);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark* pBookMark,
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument) {
- std::set<CPDF_Dictionary*> visited;
- return ExecuteBookMark(action, pDocument, pBookMark, &visited);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument,
- CPDFSDK_Annot* pScreen) {
- std::set<CPDF_Dictionary*> visited;
- return ExecuteScreenAction(action, type, pDocument, pScreen, &visited);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- std::set<CPDF_Dictionary*> visited;
- return ExecuteLinkAction(action, pDocument, &visited);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument,
- CPDF_FormField* pFormField,
- PDFSDK_FieldAction& data) {
- std::set<CPDF_Dictionary*> visited;
- return ExecuteFieldAction(action, type, pDocument, pFormField, data,
- &visited);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument,
- std::set<CPDF_Dictionary*>* visited) {
- CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::ContainsKey(*visited, pDict))
- return FALSE;
-
- visited->insert(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript) {
- if (pEnv->IsJSInitiated()) {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunDocumentOpenJavaScript(pDocument, L"", swJS);
- }
- }
- } else {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteDocumentOpenAction(subaction, pDocument, visited))
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument,
- std::set<CPDF_Dictionary*>* visited) {
- CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::ContainsKey(*visited, pDict))
- return FALSE;
-
- visited->insert(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript) {
- if (pEnv->IsJSInitiated()) {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty()) {
- IJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(pDocument);
-
- IJS_Context* pContext = pRuntime->NewContext();
- pContext->OnLink_MouseUp(pDocument);
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(swJS, &csInfo);
- if (!bRet) {
- // FIXME: return error.
- }
-
- pRuntime->ReleaseContext(pContext);
- }
- }
- } else {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteLinkAction(subaction, pDocument, visited))
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument,
- std::set<CPDF_Dictionary*>* visited) {
- CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::ContainsKey(*visited, pDict))
- return FALSE;
-
- visited->insert(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript) {
- if (pEnv->IsJSInitiated()) {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunDocumentPageJavaScript(pDocument, type, swJS);
- }
- }
- } else {
- DoAction_NoJs(action, pDocument);
- }
-
- if (!IsValidDocView(pDocument))
- return FALSE;
-
- for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteDocumentPageAction(subaction, type, pDocument, visited))
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::IsValidField(CPDFSDK_Document* pDocument,
- CPDF_Dictionary* pFieldDict) {
- ASSERT(pFieldDict);
-
- CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
- CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
- return pPDFInterForm->GetFieldByDict(pFieldDict) != NULL;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument,
- CPDF_FormField* pFormField,
- PDFSDK_FieldAction& data,
- std::set<CPDF_Dictionary*>* visited) {
- CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::ContainsKey(*visited, pDict))
- return FALSE;
-
- visited->insert(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript) {
- if (pEnv->IsJSInitiated()) {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
- if (!IsValidField(pDocument, pFormField->GetFieldDict()))
- return FALSE;
- }
- }
- } else {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteFieldAction(subaction, type, pDocument, pFormField, data,
- visited))
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument,
- CPDFSDK_Annot* pScreen,
- std::set<CPDF_Dictionary*>* visited) {
- CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::ContainsKey(*visited, pDict))
- return FALSE;
-
- visited->insert(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript) {
- if (pEnv->IsJSInitiated()) {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty()) {
- IJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(pDocument);
-
- IJS_Context* pContext = pRuntime->NewContext();
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(swJS, &csInfo);
- if (!bRet) {
- // FIXME: return error.
- }
-
- pRuntime->ReleaseContext(pContext);
- }
- }
- } else {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteScreenAction(subaction, type, pDocument, pScreen, visited))
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument,
- CPDF_Bookmark* pBookmark,
- std::set<CPDF_Dictionary*>* visited) {
- CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::ContainsKey(*visited, pDict))
- return FALSE;
-
- visited->insert(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript) {
- if (pEnv->IsJSInitiated()) {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty()) {
- IJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(pDocument);
-
- IJS_Context* pContext = pRuntime->NewContext();
- pContext->OnBookmark_MouseUp(pBookmark);
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(swJS, &csInfo);
- if (!bRet) {
- // FIXME: return error.
- }
-
- pRuntime->ReleaseContext(pContext);
- }
- }
- } else {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteBookMark(subaction, pDocument, pBookmark, visited))
- return FALSE;
- }
-
- return TRUE;
-}
-
-void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- ASSERT(pDocument);
-
- switch (action.GetType()) {
- case CPDF_Action::GoTo:
- DoAction_GoTo(pDocument, action);
- break;
- case CPDF_Action::GoToR:
- DoAction_GoToR(pDocument, action);
- break;
- case CPDF_Action::GoToE:
- break;
- case CPDF_Action::Launch:
- DoAction_Launch(pDocument, action);
- break;
- case CPDF_Action::Thread:
- break;
- case CPDF_Action::URI:
- DoAction_URI(pDocument, action);
- break;
- case CPDF_Action::Sound:
- break;
- case CPDF_Action::Movie:
- break;
- case CPDF_Action::Hide:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_Hide(action, pDocument);
- }
- break;
- case CPDF_Action::Named:
- DoAction_Named(pDocument, action);
- break;
- case CPDF_Action::SubmitForm:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_SubmitForm(action, pDocument);
- }
- break;
- case CPDF_Action::ResetForm:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_ResetForm(action, pDocument);
- }
- break;
- case CPDF_Action::ImportData:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_ImportData(action, pDocument);
- }
- break;
- case CPDF_Action::JavaScript:
- ASSERT(FALSE);
- break;
- case CPDF_Action::SetOCGState:
- DoAction_SetOCGState(pDocument, action);
- break;
- case CPDF_Action::Rendition:
- break;
- case CPDF_Action::Trans:
- break;
- case CPDF_Action::GoTo3DView:
- break;
- default:
- break;
- }
-}
-
-FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument) {
- ASSERT(pDocument);
- return TRUE;
-}
-
-void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {
- ASSERT(action.GetDict());
-
- CPDF_Document* pPDFDocument = pDocument->GetPDFDocument();
- ASSERT(pPDFDocument);
-
- CPDF_Dest MyDest = action.GetDest(pPDFDocument);
- int nPageIndex = MyDest.GetPageIndex(pPDFDocument);
- int nFitType = MyDest.GetZoomMode();
- const CPDF_Array* pMyArray = ToArray(MyDest.GetObject());
- float* pPosAry = nullptr;
- int sizeOfAry = 0;
- if (pMyArray) {
- pPosAry = new float[pMyArray->GetCount()];
- int j = 0;
- for (int i = 2; i < (int)pMyArray->GetCount(); i++) {
- pPosAry[j++] = pMyArray->GetFloatAt(i);
- }
- sizeOfAry = j;
- }
-
- CPDFDoc_Environment* pApp = pDocument->GetEnv();
- pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry);
- delete[] pPosAry;
-}
-
-void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {}
-
-void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {}
-
-void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {
- ASSERT(action.GetDict());
-
- CPDFDoc_Environment* pApp = pDocument->GetEnv();
- CFX_ByteString sURI = action.GetURI(pDocument->GetPDFDocument());
- pApp->FFI_DoURIAction(sURI.c_str());
-}
-
-void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {
- ASSERT(action.GetDict());
-
- CFX_ByteString csName = action.GetNamedAction();
- pDocument->GetEnv()->FFI_ExecuteNamedAction(csName);
-}
-
-void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {}
-
-void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument,
- CPDF_FormField* pFormField,
- CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& data,
- const CFX_WideString& script) {
- ASSERT(type != CPDF_AAction::Calculate);
- ASSERT(type != CPDF_AAction::Format);
-
- IJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(pDocument);
-
- IJS_Context* pContext = pRuntime->NewContext();
- switch (type) {
- case CPDF_AAction::CursorEnter:
- pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::CursorExit:
- pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::ButtonDown:
- pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::ButtonUp:
- pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::GetFocus:
- pContext->OnField_Focus(data.bModifier, data.bShift, pFormField,
- data.sValue);
- break;
- case CPDF_AAction::LoseFocus:
- pContext->OnField_Blur(data.bModifier, data.bShift, pFormField,
- data.sValue);
- break;
- case CPDF_AAction::KeyStroke:
- pContext->OnField_Keystroke(data.sChange, data.sChangeEx, data.bKeyDown,
- data.bModifier, data.nSelEnd, data.nSelStart,
- data.bShift, pFormField, data.sValue,
- data.bWillCommit, data.bFieldFull, data.bRC);
- break;
- case CPDF_AAction::Validate:
- pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown,
- data.bModifier, data.bShift, pFormField,
- data.sValue, data.bRC);
- break;
- default:
- ASSERT(FALSE);
- break;
- }
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(script, &csInfo);
- if (!bRet) {
- // FIXME: return error.
- }
-
- pRuntime->ReleaseContext(pContext);
-}
-
-void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(
- CPDFSDK_Document* pDocument,
- const CFX_WideString& sScriptName,
- const CFX_WideString& script) {
- IJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(pDocument);
- IJS_Context* pContext = pRuntime->NewContext();
- pContext->OnDoc_Open(pDocument, sScriptName);
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(script, &csInfo);
- if (!bRet) {
- // FIXME: return error.
- }
-
- pRuntime->ReleaseContext(pContext);
-}
-
-void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(
- CPDFSDK_Document* pDocument,
- CPDF_AAction::AActionType type,
- const CFX_WideString& script) {
- IJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(pDocument);
-
- IJS_Context* pContext = pRuntime->NewContext();
- switch (type) {
- case CPDF_AAction::OpenPage:
- pContext->OnPage_Open(pDocument);
- break;
- case CPDF_AAction::ClosePage:
- pContext->OnPage_Close(pDocument);
- break;
- case CPDF_AAction::CloseDocument:
- pContext->OnDoc_WillClose(pDocument);
- break;
- case CPDF_AAction::SaveDocument:
- pContext->OnDoc_WillSave(pDocument);
- break;
- case CPDF_AAction::DocumentSaved:
- pContext->OnDoc_DidSave(pDocument);
- break;
- case CPDF_AAction::PrintDocument:
- pContext->OnDoc_WillPrint(pDocument);
- break;
- case CPDF_AAction::DocumentPrinted:
- pContext->OnDoc_DidPrint(pDocument);
- break;
- case CPDF_AAction::PageVisible:
- pContext->OnPage_InView(pDocument);
- break;
- case CPDF_AAction::PageInvisible:
- pContext->OnPage_OutView(pDocument);
- break;
- default:
- ASSERT(FALSE);
- break;
- }
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(script, &csInfo);
- if (!bRet) {
- // FIXME: return error.
- }
-
- pRuntime->ReleaseContext(pContext);
-}
-
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- if (pInterForm->DoAction_Hide(action)) {
- pDocument->SetChangeMark();
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- return pInterForm->DoAction_SubmitForm(action);
-}
-
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- return pInterForm->DoAction_ResetForm(action);
-}
-
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- if (pInterForm->DoAction_ImportData(action)) {
- pDocument->SetChangeMark();
- return TRUE;
- }
-
- return FALSE;
-}
diff --git a/fpdfsdk/src/fsdk_annothandler.cpp b/fpdfsdk/src/fsdk_annothandler.cpp
deleted file mode 100644
index 989f535e50..0000000000
--- a/fpdfsdk/src/fsdk_annothandler.cpp
+++ /dev/null
@@ -1,1111 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fsdk_annothandler.h"
-
-#include <algorithm>
-#include <vector>
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#include "xfa/include/fxgraphics/fx_graphics.h"
-#endif // PDF_ENABLE_XFA
-
-CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp) {
- m_pApp = pApp;
-
- CPDFSDK_BFAnnotHandler* pHandler = new CPDFSDK_BFAnnotHandler(m_pApp);
- pHandler->SetFormFiller(m_pApp->GetIFormFiller());
- RegisterAnnotHandler(pHandler);
-#ifdef PDF_ENABLE_XFA
- CPDFSDK_XFAAnnotHandler* pXFAAnnotHandler =
- new CPDFSDK_XFAAnnotHandler(m_pApp);
- RegisterAnnotHandler(pXFAAnnotHandler);
-#endif // PDF_ENABLE_XFA
-}
-
-CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr() {
- for (int i = 0; i < m_Handlers.GetSize(); i++) {
- IPDFSDK_AnnotHandler* pHandler = m_Handlers.GetAt(i);
- delete pHandler;
- }
- m_Handlers.RemoveAll();
- m_mapType2Handler.clear();
-}
-
-void CPDFSDK_AnnotHandlerMgr::RegisterAnnotHandler(
- IPDFSDK_AnnotHandler* pAnnotHandler) {
- ASSERT(!GetAnnotHandler(pAnnotHandler->GetType()));
-
- m_Handlers.Add(pAnnotHandler);
- m_mapType2Handler[pAnnotHandler->GetType()] = pAnnotHandler;
-}
-
-void CPDFSDK_AnnotHandlerMgr::UnRegisterAnnotHandler(
- IPDFSDK_AnnotHandler* pAnnotHandler) {
- m_mapType2Handler.erase(pAnnotHandler->GetType());
- for (int i = 0, sz = m_Handlers.GetSize(); i < sz; i++) {
- if (m_Handlers.GetAt(i) == pAnnotHandler) {
- m_Handlers.RemoveAt(i);
- break;
- }
- }
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CPDF_Annot* pAnnot,
- CPDFSDK_PageView* pPageView) {
- ASSERT(pPageView);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler =
- GetAnnotHandler(pAnnot->GetSubType())) {
- return pAnnotHandler->NewAnnot(pAnnot, pPageView);
- }
-
- return new CPDFSDK_BAAnnot(pAnnot, pPageView);
-}
-
-#ifdef PDF_ENABLE_XFA
-CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(IXFA_Widget* pAnnot,
- CPDFSDK_PageView* pPageView) {
- ASSERT(pAnnot);
- ASSERT(pPageView);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler =
- GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME)) {
- return pAnnotHandler->NewAnnot(pAnnot, pPageView);
- }
-
- return NULL;
-}
-#endif // PDF_ENABLE_XFA
-
-void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- pAnnotHandler->OnRelease(pAnnot);
- pAnnotHandler->ReleaseAnnot(pAnnot);
- } else {
- delete (CPDFSDK_Annot*)pAnnot;
- }
-}
-
-void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot) {
- CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
-
- CPDFSDK_DateTime curTime;
- pPDFAnnot->GetAnnotDict()->SetAtString("M", curTime.ToPDFDateTimeString());
- pPDFAnnot->GetAnnotDict()->SetAtNumber("F", 0);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- pAnnotHandler->OnCreate(pAnnot);
- }
-}
-
-void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- pAnnotHandler->OnLoad(pAnnot);
- }
-}
-
-IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(
- CPDFSDK_Annot* pAnnot) const {
- CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
- if (pPDFAnnot)
- return GetAnnotHandler(pPDFAnnot->GetSubType());
-#ifdef PDF_ENABLE_XFA
- if (pAnnot->GetXFAWidget())
- return GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME);
-#endif // PDF_ENABLE_XFA
- return nullptr;
-}
-
-IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(
- const CFX_ByteString& sType) const {
- auto it = m_mapType2Handler.find(sType);
- return it != m_mapType2Handler.end() ? it->second : nullptr;
-}
-
-void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- pAnnotHandler->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
- } else {
-#ifdef PDF_ENABLE_XFA
- if (pAnnot->IsXFAField())
- return;
-#endif // PDF_ENABLE_XFA
- static_cast<CPDFSDK_BAAnnot*>(pAnnot)
- ->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, nullptr);
- }
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnLButtonDown(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnLButtonUp(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnMouseMove(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- short zDelta,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta,
- point);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnRButtonDown(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnRButtonUp(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
-}
-
-void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- pAnnotHandler->OnMouseEnter(pPageView, pAnnot, nFlag);
-}
-
-void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- pAnnotHandler->OnMouseExit(pPageView, pAnnot, nFlag);
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot,
- FX_DWORD nChar,
- FX_DWORD nFlags) {
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnChar(pAnnot, nChar, nFlags);
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot,
- int nKeyCode,
- int nFlag) {
- if (!m_pApp->FFI_IsCTRLKeyDown(nFlag) && !m_pApp->FFI_IsALTKeyDown(nFlag)) {
- CPDFSDK_PageView* pPage = pAnnot->GetPageView();
- CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot();
- if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) {
- CPDFSDK_Annot* pNext =
- GetNextAnnot(pFocusAnnot, !m_pApp->FFI_IsSHIFTKeyDown(nFlag));
-
- if (pNext && pNext != pFocusAnnot) {
- CPDFSDK_Document* pDocument = pPage->GetSDKDocument();
- pDocument->SetFocusAnnot(pNext);
- return TRUE;
- }
- }
- }
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- return pAnnotHandler->OnKeyDown(pAnnot, nKeyCode, nFlag);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot,
- int nKeyCode,
- int nFlag) {
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- ASSERT(pAnnot);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- if (pAnnotHandler->OnSetFocus(pAnnot, nFlag)) {
- CPDFSDK_PageView* pPage = pAnnot->GetPageView();
- pPage->GetSDKDocument();
- return TRUE;
- }
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- ASSERT(pAnnot);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- return pAnnotHandler->OnKillFocus(pAnnot, nFlag);
-
- return FALSE;
-}
-
-#ifdef PDF_ENABLE_XFA
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(
- CPDFSDK_Annot* pSetAnnot,
- CPDFSDK_Annot* pKillAnnot) {
- FX_BOOL bXFA = (pSetAnnot && pSetAnnot->GetXFAWidget()) ||
- (pKillAnnot && pKillAnnot->GetXFAWidget());
-
- if (bXFA) {
- if (IPDFSDK_AnnotHandler* pXFAAnnotHandler =
- GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME))
- return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot);
- }
-
- return TRUE;
-}
-#endif // PDF_ENABLE_XFA
-
-CFX_FloatRect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(
- CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- ASSERT(pAnnot);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- return pAnnotHandler->GetViewBBox(pPageView, pAnnot);
-
- return pAnnot->GetRect();
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- const CFX_FloatPoint& point) {
- ASSERT(pAnnot);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
- if (pAnnotHandler->CanAnswer(pAnnot))
- return pAnnotHandler->HitTest(pPageView, pAnnot, point);
- }
- return FALSE;
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,
- FX_BOOL bNext) {
-#ifdef PDF_ENABLE_XFA
- CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView();
- CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage();
- if (pPage == NULL)
- return NULL;
- if (pPage->GetPDFPage()) { // for pdf annots.
- CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), pSDKAnnot->GetType(), "");
- CPDFSDK_Annot* pNext =
- bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot);
- return pNext;
- }
- // for xfa annots
- IXFA_WidgetIterator* pWidgetIterator =
- pPage->GetXFAPageView()->CreateWidgetIterator(
- XFA_TRAVERSEWAY_Tranvalse, XFA_WIDGETFILTER_Visible |
- XFA_WIDGETFILTER_Viewable |
- XFA_WIDGETFILTER_Field);
- if (pWidgetIterator == NULL)
- return NULL;
- if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget())
- pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget());
- IXFA_Widget* hNextFocus = NULL;
- hNextFocus =
- bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious();
- if (!hNextFocus && pSDKAnnot)
- hNextFocus = pWidgetIterator->MoveToFirst();
-
- pWidgetIterator->Release();
- return pPageView->GetAnnotByXFAWidget(hNextFocus);
-#else // PDF_ENABLE_XFA
- CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), "Widget", "");
- return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot);
-#endif // PDF_ENABLE_XFA
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) {
- ASSERT(pAnnot->GetType() == "Widget");
- if (pAnnot->GetSubType() == BFFT_SIGNATURE)
- return FALSE;
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (!pWidget->IsVisible())
- return FALSE;
-
- int nFieldFlags = pWidget->GetFieldFlags();
- if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
- return FALSE;
-
- if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return TRUE;
-
- CPDF_Page* pPage = pWidget->GetPDFPage();
- CPDF_Document* pDocument = pPage->m_pDocument;
- FX_DWORD dwPermissions = pDocument->GetUserPermissions();
- return (dwPermissions & FPDFPERM_FILL_FORM) ||
- (dwPermissions & FPDFPERM_ANNOT_FORM);
-}
-
-CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot,
- CPDFSDK_PageView* pPage) {
- CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm();
- CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl(
- pInterForm->GetInterForm(), pAnnot->GetAnnotDict());
- if (!pCtrl)
- return nullptr;
-
- CPDFSDK_Widget* pWidget = new CPDFSDK_Widget(pAnnot, pPage, pInterForm);
- pInterForm->AddMap(pCtrl, pWidget);
- CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
- if (pPDFInterForm && pPDFInterForm->NeedConstructAP())
- pWidget->ResetAppearance(nullptr, FALSE);
-
- return pWidget;
-}
-
-#ifdef PDF_ENABLE_XFA
-CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(IXFA_Widget* hWidget,
- CPDFSDK_PageView* pPage) {
- return NULL;
-}
-#endif // PDF_ENABLE_XFA
-
-void CPDFSDK_BFAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
- ASSERT(pAnnot);
-
- if (m_pFormFiller)
- m_pFormFiller->OnDelete(pAnnot);
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
- CPDF_FormControl* pCtrol = pWidget->GetFormControl();
- pInterForm->RemoveMap(pCtrol);
-
- delete pWidget;
-}
-
-void CPDFSDK_BFAnnotHandler::OnDraw(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- static_cast<CPDFSDK_BAAnnot*>(pAnnot)
- ->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, nullptr);
- } else {
- if (m_pFormFiller) {
- m_pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
- }
- }
-}
-
-void CPDFSDK_BFAnnotHandler::OnMouseEnter(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- m_pFormFiller->OnMouseEnter(pPageView, pAnnot, nFlag);
- }
-}
-void CPDFSDK_BFAnnotHandler::OnMouseExit(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- m_pFormFiller->OnMouseExit(pPageView, pAnnot, nFlag);
- }
-}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseMove(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseWheel(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- short zDelta,
- const CFX_FloatPoint& point) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta,
- point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot,
- FX_DWORD nChar,
- FX_DWORD nFlags) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnChar(pAnnot, nChar, nFlags);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot,
- int nKeyCode,
- int nFlag) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlag);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot,
- int nKeyCode,
- int nFlag) {
- return FALSE;
-}
-void CPDFSDK_BFAnnotHandler::OnCreate(CPDFSDK_Annot* pAnnot) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- m_pFormFiller->OnCreate(pAnnot);
- }
-}
-
-void CPDFSDK_BFAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot) {
- if (pAnnot->GetSubType() == BFFT_SIGNATURE)
- return;
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (!pWidget->IsAppearanceValid())
- pWidget->ResetAppearance(NULL, FALSE);
-
- int nFieldType = pWidget->GetFieldType();
- if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBOX) {
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = pWidget->OnFormat(bFormated);
- if (bFormated && nFieldType == FIELDTYPE_COMBOBOX) {
- pWidget->ResetAppearance(sValue.c_str(), FALSE);
- }
- }
-
-#ifdef PDF_ENABLE_XFA
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) {
- if (!pWidget->IsAppearanceValid() && !pWidget->GetValue().IsEmpty())
- pWidget->ResetAppearance(FALSE);
- }
-#endif // PDF_ENABLE_XFA
- if (m_pFormFiller)
- m_pFormFiller->OnLoad(pAnnot);
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnSetFocus(pAnnot, nFlag);
- }
-
- return TRUE;
-}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE) {
- } else {
- if (m_pFormFiller)
- return m_pFormFiller->OnKillFocus(pAnnot, nFlag);
- }
-
- return TRUE;
-}
-
-CFX_FloatRect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType != BFFT_SIGNATURE && m_pFormFiller)
- return CFX_FloatRect(m_pFormFiller->GetViewBBox(pPageView, pAnnot));
-
- return CFX_FloatRect(0, 0, 0, 0);
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::HitTest(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- const CFX_FloatPoint& point) {
- ASSERT(pPageView);
- ASSERT(pAnnot);
-
- CFX_FloatRect rect = GetViewBBox(pPageView, pAnnot);
- return rect.Contains(point.x, point.y);
-}
-
-#ifdef PDF_ENABLE_XFA
-#define FWL_WGTHITTEST_Unknown 0
-#define FWL_WGTHITTEST_Client 1 // arrow
-#define FWL_WGTHITTEST_Titlebar 11 // caption
-#define FWL_WGTHITTEST_HScrollBar 15
-#define FWL_WGTHITTEST_VScrollBar 16
-#define FWL_WGTHITTEST_Border 17
-#define FWL_WGTHITTEST_Edit 19
-#define FWL_WGTHITTEST_HyperLink 20
-
-CPDFSDK_XFAAnnotHandler::CPDFSDK_XFAAnnotHandler(CPDFDoc_Environment* pApp)
- : m_pApp(pApp) {}
-
-CPDFSDK_Annot* CPDFSDK_XFAAnnotHandler::NewAnnot(IXFA_Widget* pAnnot,
- CPDFSDK_PageView* pPage) {
- CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm();
- CPDFSDK_XFAWidget* pWidget = new CPDFSDK_XFAWidget(pAnnot, pPage, pInterForm);
- pInterForm->AddXFAMap(pAnnot, pWidget);
- return pWidget;
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) {
- return pAnnot->GetXFAWidget() != NULL;
-}
-
-void CPDFSDK_XFAAnnotHandler::OnDraw(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_DWORD dwFlags) {
- ASSERT(pPageView != NULL);
- ASSERT(pAnnot != NULL);
-
- CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument();
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
-
- CFX_Graphics gs;
- gs.Create(pDevice);
-
- CFX_Matrix mt;
- mt = *(CFX_Matrix*)pUser2Device;
-
- FX_BOOL bIsHighlight = FALSE;
- if (pSDKDoc->GetFocusAnnot() != pAnnot)
- bIsHighlight = TRUE;
-
- pWidgetHandler->RenderWidget(pAnnot->GetXFAWidget(), &gs, &mt, bIsHighlight);
-
- // to do highlight and shadow
-}
-
-void CPDFSDK_XFAAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
- CPDFSDK_XFAWidget* pWidget = (CPDFSDK_XFAWidget*)pAnnot;
- CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
- pInterForm->RemoveXFAMap(pWidget->GetXFAWidget());
-
- delete pWidget;
-}
-
-CFX_FloatRect CPDFSDK_XFAAnnotHandler::GetViewBBox(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot) {
- ASSERT(pAnnot);
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- CFX_RectF rcBBox;
- XFA_ELEMENT eType =
- pWidgetHandler->GetDataAcc(pAnnot->GetXFAWidget())->GetUIType();
- if (eType == XFA_ELEMENT_Signature)
- pWidgetHandler->GetBBox(pAnnot->GetXFAWidget(), rcBBox,
- XFA_WIDGETSTATUS_Visible, TRUE);
- else
- pWidgetHandler->GetBBox(pAnnot->GetXFAWidget(), rcBBox, 0);
-
- CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
- rcBBox.top + rcBBox.height);
- rcWidget.left -= 1.0f;
- rcWidget.right += 1.0f;
- rcWidget.bottom -= 1.0f;
- rcWidget.top += 1.0f;
-
- return rcWidget;
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::HitTest(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument();
- if (!pSDKDoc)
- return FALSE;
-
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- if (!pDoc)
- return FALSE;
-
- IXFA_DocView* pDocView = pDoc->GetXFADocView();
- if (!pDocView)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler();
- if (!pWidgetHandler)
- return FALSE;
-
- FX_DWORD dwHitTest =
- pWidgetHandler->OnHitTest(pAnnot->GetXFAWidget(), point.x, point.y);
- return (dwHitTest != FWL_WGTHITTEST_Unknown);
-}
-
-void CPDFSDK_XFAAnnotHandler::OnMouseEnter(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- if (!pPageView || !pAnnot)
- return;
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- pWidgetHandler->OnMouseEnter(pAnnot->GetXFAWidget());
-}
-
-void CPDFSDK_XFAAnnotHandler::OnMouseExit(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- if (!pPageView || !pAnnot)
- return;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- pWidgetHandler->OnMouseExit(pAnnot->GetXFAWidget());
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnLButtonDown(pAnnot->GetXFAWidget(),
- GetFWLFlags(nFlags), point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnLButtonUp(pAnnot->GetXFAWidget(),
- GetFWLFlags(nFlags), point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnLButtonDblClk(pAnnot->GetXFAWidget(),
- GetFWLFlags(nFlags), point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnMouseMove(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnMouseMove(pAnnot->GetXFAWidget(),
- GetFWLFlags(nFlags), point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnMouseWheel(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- short zDelta,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnMouseWheel(
- pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), zDelta, point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonDown(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnRButtonDown(pAnnot->GetXFAWidget(),
- GetFWLFlags(nFlags), point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonUp(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnRButtonUp(pAnnot->GetXFAWidget(),
- GetFWLFlags(nFlags), point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonDblClk(CPDFSDK_PageView* pPageView,
- CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlags,
- const CFX_FloatPoint& point) {
- if (!pPageView || !pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnRButtonDblClk(pAnnot->GetXFAWidget(),
- GetFWLFlags(nFlags), point.x, point.y);
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot,
- FX_DWORD nChar,
- FX_DWORD nFlags) {
- if (!pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnChar(pAnnot->GetXFAWidget(), nChar,
- GetFWLFlags(nFlags));
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot,
- int nKeyCode,
- int nFlag) {
- if (!pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnKeyDown(pAnnot->GetXFAWidget(), nKeyCode,
- GetFWLFlags(nFlag));
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot,
- int nKeyCode,
- int nFlag) {
- if (!pAnnot)
- return FALSE;
-
- IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
- return pWidgetHandler->OnKeyUp(pAnnot->GetXFAWidget(), nKeyCode,
- GetFWLFlags(nFlag));
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot,
- FX_DWORD nFlag) {
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_XFAAnnotHandler::OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot,
- CPDFSDK_Annot* pNewAnnot) {
- IXFA_WidgetHandler* pWidgetHandler = NULL;
-
- if (pOldAnnot)
- pWidgetHandler = GetXFAWidgetHandler(pOldAnnot);
- else if (pNewAnnot)
- pWidgetHandler = GetXFAWidgetHandler(pNewAnnot);
-
- if (pWidgetHandler) {
- FX_BOOL bRet = TRUE;
- IXFA_Widget* hWidget = pNewAnnot ? pNewAnnot->GetXFAWidget() : NULL;
- if (hWidget) {
- IXFA_PageView* pXFAPageView = pWidgetHandler->GetPageView(hWidget);
- if (pXFAPageView) {
- bRet = pXFAPageView->GetDocView()->SetFocus(hWidget);
- if (pXFAPageView->GetDocView()->GetFocusWidget() == hWidget)
- bRet = TRUE;
- }
- }
- return bRet;
- }
-
- return TRUE;
-}
-
-IXFA_WidgetHandler* CPDFSDK_XFAAnnotHandler::GetXFAWidgetHandler(
- CPDFSDK_Annot* pAnnot) {
- if (!pAnnot)
- return NULL;
-
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- if (!pPageView)
- return NULL;
-
- CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument();
- if (!pSDKDoc)
- return NULL;
-
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- if (!pDoc)
- return NULL;
-
- IXFA_DocView* pDocView = pDoc->GetXFADocView();
- if (!pDocView)
- return NULL;
-
- return pDocView->GetWidgetHandler();
-}
-
-#define FWL_KEYFLAG_Ctrl (1 << 0)
-#define FWL_KEYFLAG_Alt (1 << 1)
-#define FWL_KEYFLAG_Shift (1 << 2)
-#define FWL_KEYFLAG_LButton (1 << 3)
-#define FWL_KEYFLAG_RButton (1 << 4)
-#define FWL_KEYFLAG_MButton (1 << 5)
-
-FX_DWORD CPDFSDK_XFAAnnotHandler::GetFWLFlags(FX_DWORD dwFlag) {
- FX_DWORD dwFWLFlag = 0;
-
- if (dwFlag & FWL_EVENTFLAG_ControlKey)
- dwFWLFlag |= FWL_KEYFLAG_Ctrl;
- if (dwFlag & FWL_EVENTFLAG_LeftButtonDown)
- dwFWLFlag |= FWL_KEYFLAG_LButton;
- if (dwFlag & FWL_EVENTFLAG_MiddleButtonDown)
- dwFWLFlag |= FWL_KEYFLAG_MButton;
- if (dwFlag & FWL_EVENTFLAG_RightButtonDown)
- dwFWLFlag |= FWL_KEYFLAG_RButton;
- if (dwFlag & FWL_EVENTFLAG_ShiftKey)
- dwFWLFlag |= FWL_KEYFLAG_Shift;
- if (dwFlag & FWL_EVENTFLAG_AltKey)
- dwFWLFlag |= FWL_KEYFLAG_Alt;
-
- return dwFWLFlag;
-}
-#endif // PDF_ENABLE_XFA
-
-CPDFSDK_AnnotIterator::CPDFSDK_AnnotIterator(CPDFSDK_PageView* pPageView,
- bool bReverse)
- : m_bReverse(bReverse), m_pos(0) {
- const std::vector<CPDFSDK_Annot*>& annots = pPageView->GetAnnotList();
- m_iteratorAnnotList.insert(m_iteratorAnnotList.begin(), annots.rbegin(),
- annots.rend());
- std::stable_sort(m_iteratorAnnotList.begin(), m_iteratorAnnotList.end(),
- [](CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) {
- return p1->GetLayoutOrder() < p2->GetLayoutOrder();
- });
-
- CPDFSDK_Annot* pTopMostAnnot = pPageView->GetFocusAnnot();
- if (!pTopMostAnnot)
- return;
-
- auto it = std::find(m_iteratorAnnotList.begin(), m_iteratorAnnotList.end(),
- pTopMostAnnot);
- if (it != m_iteratorAnnotList.end()) {
- CPDFSDK_Annot* pReaderAnnot = *it;
- m_iteratorAnnotList.erase(it);
- m_iteratorAnnotList.insert(m_iteratorAnnotList.begin(), pReaderAnnot);
- }
-}
-
-CPDFSDK_AnnotIterator::~CPDFSDK_AnnotIterator() {
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot() {
- if (m_pos < m_iteratorAnnotList.size())
- return m_iteratorAnnotList[m_pos++];
- return nullptr;
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot() {
- if (m_pos < m_iteratorAnnotList.size())
- return m_iteratorAnnotList[m_iteratorAnnotList.size() - ++m_pos];
- return nullptr;
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::Next() {
- return m_bReverse ? PrevAnnot() : NextAnnot();
-}
diff --git a/fpdfsdk/src/fsdk_baseannot.cpp b/fpdfsdk/src/fsdk_baseannot.cpp
deleted file mode 100644
index 276d302bdd..0000000000
--- a/fpdfsdk/src/fsdk_baseannot.cpp
+++ /dev/null
@@ -1,968 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include <algorithm>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/cpdf_number.h"
-#include "core/include/fxcrt/fx_ext.h"
-#include "fpdfsdk/include/fsdk_baseannot.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#endif // PDF_ENABLE_XFA
-
-int gAfxGetTimeZoneInSeconds(int8_t tzhour, uint8_t tzminute) {
- return (int)tzhour * 3600 + (int)tzminute * (tzhour >= 0 ? 60 : -60);
-}
-
-FX_BOOL _gAfxIsLeapYear(int16_t year) {
- return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)));
-}
-
-FX_WORD _gAfxGetYearDays(int16_t year) {
- return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365);
-}
-
-uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month) {
- uint8_t mDays;
- switch (month) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- mDays = 31;
- break;
-
- case 4:
- case 6:
- case 9:
- case 11:
- mDays = 30;
- break;
-
- case 2:
- if (_gAfxIsLeapYear(year) == TRUE)
- mDays = 29;
- else
- mDays = 28;
- break;
-
- default:
- mDays = 0;
- break;
- }
-
- return mDays;
-}
-
-CPDFSDK_DateTime::CPDFSDK_DateTime() {
- ResetDateTime();
-}
-
-CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) {
- ResetDateTime();
-
- FromPDFDateTimeString(dtStr);
-}
-
-CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime) {
- operator=(datetime);
-}
-
-CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) {
- operator=(st);
-}
-
-void CPDFSDK_DateTime::ResetDateTime() {
- tzset();
-
- time_t curTime;
- time(&curTime);
- struct tm* newtime = localtime(&curTime);
-
- dt.year = newtime->tm_year + 1900;
- dt.month = newtime->tm_mon + 1;
- dt.day = newtime->tm_mday;
- dt.hour = newtime->tm_hour;
- dt.minute = newtime->tm_min;
- dt.second = newtime->tm_sec;
-}
-
-CPDFSDK_DateTime& CPDFSDK_DateTime::operator=(
- const CPDFSDK_DateTime& datetime) {
- FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME));
- return *this;
-}
-
-CPDFSDK_DateTime& CPDFSDK_DateTime::operator=(const FX_SYSTEMTIME& st) {
- tzset();
-
- dt.year = (int16_t)st.wYear;
- dt.month = (uint8_t)st.wMonth;
- dt.day = (uint8_t)st.wDay;
- dt.hour = (uint8_t)st.wHour;
- dt.minute = (uint8_t)st.wMinute;
- dt.second = (uint8_t)st.wSecond;
- return *this;
-}
-
-bool CPDFSDK_DateTime::operator==(const CPDFSDK_DateTime& datetime) const {
- return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0);
-}
-
-bool CPDFSDK_DateTime::operator!=(const CPDFSDK_DateTime& datetime) const {
- return !(*this == datetime);
-}
-
-bool CPDFSDK_DateTime::operator>(const CPDFSDK_DateTime& datetime) const {
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 =
- (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
- (int)dt1.dt.second;
- int d3 =
- (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
- (int)dt2.dt.second;
-
- return d1 > d3 || d2 > d4;
-}
-
-bool CPDFSDK_DateTime::operator>=(const CPDFSDK_DateTime& datetime) const {
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 =
- (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
- (int)dt1.dt.second;
- int d3 =
- (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
- (int)dt2.dt.second;
-
- return d1 >= d3 || d2 >= d4;
-}
-
-bool CPDFSDK_DateTime::operator<(const CPDFSDK_DateTime& datetime) const {
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 =
- (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
- (int)dt1.dt.second;
- int d3 =
- (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
- (int)dt2.dt.second;
-
- return d1 < d3 || d2 < d4;
-}
-
-bool CPDFSDK_DateTime::operator<=(const CPDFSDK_DateTime& datetime) const {
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 =
- (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
- (int)dt1.dt.second;
- int d3 =
- (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
- (int)dt2.dt.second;
-
- return d1 <= d3 || d2 <= d4;
-}
-
-CPDFSDK_DateTime::operator time_t() {
- struct tm newtime;
-
- newtime.tm_year = dt.year - 1900;
- newtime.tm_mon = dt.month - 1;
- newtime.tm_mday = dt.day;
- newtime.tm_hour = dt.hour;
- newtime.tm_min = dt.minute;
- newtime.tm_sec = dt.second;
-
- return mktime(&newtime);
-}
-
-CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(
- const CFX_ByteString& dtStr) {
- int strLength = dtStr.GetLength();
- if (strLength > 0) {
- int i = 0;
- int j, k;
- FX_CHAR ch;
- while (i < strLength && !std::isdigit(dtStr[i]))
- ++i;
-
- if (i >= strLength)
- return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 4) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.year = (int16_t)k;
- if (i >= strLength || j < 4)
- return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.month = (uint8_t)k;
- if (i >= strLength || j < 2)
- return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.day = (uint8_t)k;
- if (i >= strLength || j < 2)
- return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.hour = (uint8_t)k;
- if (i >= strLength || j < 2)
- return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.minute = (uint8_t)k;
- if (i >= strLength || j < 2)
- return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.second = (uint8_t)k;
- if (i >= strLength || j < 2)
- return *this;
-
- ch = dtStr[i++];
- if (ch != '-' && ch != '+')
- return *this;
- if (ch == '-')
- dt.tzHour = -1;
- else
- dt.tzHour = 1;
- j = 0;
- k = 0;
- while (i < strLength && j < 2) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.tzHour *= (FX_CHAR)k;
- if (i >= strLength || j < 2)
- return *this;
-
- ch = dtStr[i++];
- if (ch != '\'')
- return *this;
- j = 0;
- k = 0;
- while (i < strLength && j < 2) {
- ch = dtStr[i];
- k = k * 10 + FXSYS_toDecimalDigit(ch);
- j++;
- if (!std::isdigit(ch))
- break;
- i++;
- }
- dt.tzMinute = (uint8_t)k;
- if (i >= strLength || j < 2)
- return *this;
- }
-
- return *this;
-}
-
-CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() {
- CFX_ByteString str1;
- str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day,
- dt.hour, dt.minute, dt.second);
- if (dt.tzHour < 0)
- str1 += "-";
- else
- str1 += "+";
- CFX_ByteString str2;
- str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute);
- return str1 + str2;
-}
-
-CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() {
- CFX_ByteString dtStr;
- char tempStr[32];
- memset(tempStr, 0, sizeof(tempStr));
- FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d",
- dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
- dtStr = CFX_ByteString(tempStr);
- if (dt.tzHour < 0)
- dtStr += CFX_ByteString("-");
- else
- dtStr += CFX_ByteString("+");
- memset(tempStr, 0, sizeof(tempStr));
- FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour),
- dt.tzMinute);
- dtStr += CFX_ByteString(tempStr);
- return dtStr;
-}
-
-void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st) {
- CPDFSDK_DateTime dt = *this;
- time_t t = (time_t)dt;
- struct tm* pTime = localtime(&t);
- if (pTime) {
- st.wYear = (FX_WORD)pTime->tm_year + 1900;
- st.wMonth = (FX_WORD)pTime->tm_mon + 1;
- st.wDay = (FX_WORD)pTime->tm_mday;
- st.wDayOfWeek = (FX_WORD)pTime->tm_wday;
- st.wHour = (FX_WORD)pTime->tm_hour;
- st.wMinute = (FX_WORD)pTime->tm_min;
- st.wSecond = (FX_WORD)pTime->tm_sec;
- st.wMilliseconds = 0;
- }
-}
-
-CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT() const {
- CPDFSDK_DateTime dt = *this;
- dt.AddSeconds(-gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute));
- dt.dt.tzHour = 0;
- dt.dt.tzMinute = 0;
- return dt;
-}
-
-CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days) {
- if (days == 0)
- return *this;
-
- int16_t y = dt.year, yy;
- uint8_t m = dt.month;
- uint8_t d = dt.day;
- int mdays, ydays, ldays;
-
- ldays = days;
- if (ldays > 0) {
- yy = y;
- if (((FX_WORD)m * 100 + d) > 300)
- yy++;
- ydays = _gAfxGetYearDays(yy);
- while (ldays >= ydays) {
- y++;
- ldays -= ydays;
- yy++;
- mdays = _gAfxGetMonthDays(y, m);
- if (d > mdays) {
- m++;
- d -= mdays;
- }
- ydays = _gAfxGetYearDays(yy);
- }
- mdays = _gAfxGetMonthDays(y, m) - d + 1;
- while (ldays >= mdays) {
- ldays -= mdays;
- m++;
- d = 1;
- mdays = _gAfxGetMonthDays(y, m);
- }
- d += ldays;
- } else {
- ldays *= -1;
- yy = y;
- if (((FX_WORD)m * 100 + d) < 300)
- yy--;
- ydays = _gAfxGetYearDays(yy);
- while (ldays >= ydays) {
- y--;
- ldays -= ydays;
- yy--;
- mdays = _gAfxGetMonthDays(y, m);
- if (d > mdays) {
- m++;
- d -= mdays;
- }
- ydays = _gAfxGetYearDays(yy);
- }
- while (ldays >= d) {
- ldays -= d;
- m--;
- mdays = _gAfxGetMonthDays(y, m);
- d = mdays;
- }
- d -= ldays;
- }
-
- dt.year = y;
- dt.month = m;
- dt.day = d;
-
- return *this;
-}
-
-CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds) {
- if (seconds == 0)
- return *this;
-
- int n;
- int days;
-
- n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds;
- if (n < 0) {
- days = (n - 86399) / 86400;
- n -= days * 86400;
- } else {
- days = n / 86400;
- n %= 86400;
- }
- dt.hour = (uint8_t)(n / 3600);
- dt.hour %= 24;
- n %= 3600;
- dt.minute = (uint8_t)(n / 60);
- dt.second = (uint8_t)(n % 60);
- if (days != 0)
- AddDays(days);
-
- return *this;
-}
-
-CPDFSDK_Annot::CPDFSDK_Annot(CPDFSDK_PageView* pPageView)
- : m_pPageView(pPageView), m_bSelected(FALSE), m_nTabOrder(-1) {
-}
-
-CPDFSDK_BAAnnot::CPDFSDK_BAAnnot(CPDF_Annot* pAnnot,
- CPDFSDK_PageView* pPageView)
- : CPDFSDK_Annot(pPageView), m_pAnnot(pAnnot) {
-}
-
-CPDF_Annot* CPDFSDK_BAAnnot::GetPDFAnnot() const {
- return m_pAnnot;
-}
-
-FX_BOOL CPDFSDK_Annot::IsSelected() {
- return m_bSelected;
-}
-
-void CPDFSDK_Annot::SetSelected(FX_BOOL bSelected) {
- m_bSelected = bSelected;
-}
-
-// Tab Order
-int CPDFSDK_Annot::GetTabOrder() {
- return m_nTabOrder;
-}
-
-void CPDFSDK_Annot::SetTabOrder(int iTabOrder) {
- m_nTabOrder = iTabOrder;
-}
-
-CPDF_Dictionary* CPDFSDK_BAAnnot::GetAnnotDict() const {
- return m_pAnnot->GetAnnotDict();
-}
-
-void CPDFSDK_BAAnnot::SetRect(const CFX_FloatRect& rect) {
- ASSERT(rect.right - rect.left >= GetMinWidth());
- ASSERT(rect.top - rect.bottom >= GetMinHeight());
-
- m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect);
-}
-
-CFX_FloatRect CPDFSDK_BAAnnot::GetRect() const {
- CFX_FloatRect rect;
- m_pAnnot->GetRect(rect);
- return rect;
-}
-
-CFX_ByteString CPDFSDK_BAAnnot::GetType() const {
- return m_pAnnot->GetSubType();
-}
-
-CFX_ByteString CPDFSDK_BAAnnot::GetSubType() const {
- return "";
-}
-
-void CPDFSDK_BAAnnot::DrawAppearance(CFX_RenderDevice* pDevice,
- const CFX_Matrix* pUser2Device,
- CPDF_Annot::AppearanceMode mode,
- const CPDF_RenderOptions* pOptions) {
- m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device,
- mode, pOptions);
-}
-
-FX_BOOL CPDFSDK_BAAnnot::IsAppearanceValid() {
- return m_pAnnot->GetAnnotDict()->GetDictBy("AP") != NULL;
-}
-
-FX_BOOL CPDFSDK_BAAnnot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode) {
- CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDictBy("AP");
- if (!pAP)
- return FALSE;
-
- // Choose the right sub-ap
- const FX_CHAR* ap_entry = "N";
- if (mode == CPDF_Annot::Down)
- ap_entry = "D";
- else if (mode == CPDF_Annot::Rollover)
- ap_entry = "R";
- if (!pAP->KeyExist(ap_entry))
- ap_entry = "N";
-
- // Get the AP stream or subdirectory
- CPDF_Object* psub = pAP->GetElementValue(ap_entry);
- return !!psub;
-}
-
-void CPDFSDK_BAAnnot::DrawBorder(CFX_RenderDevice* pDevice,
- const CFX_Matrix* pUser2Device,
- const CPDF_RenderOptions* pOptions) {
- m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions);
-}
-
-void CPDFSDK_BAAnnot::ClearCachedAP() {
- m_pAnnot->ClearCachedAP();
-}
-
-void CPDFSDK_BAAnnot::SetContents(const CFX_WideString& sContents) {
- if (sContents.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("Contents");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("Contents",
- PDF_EncodeText(sContents));
-}
-
-CFX_WideString CPDFSDK_BAAnnot::GetContents() const {
- return m_pAnnot->GetAnnotDict()->GetUnicodeTextBy("Contents");
-}
-
-void CPDFSDK_BAAnnot::SetAnnotName(const CFX_WideString& sName) {
- if (sName.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("NM");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName));
-}
-
-CFX_WideString CPDFSDK_BAAnnot::GetAnnotName() const {
- return m_pAnnot->GetAnnotDict()->GetUnicodeTextBy("NM");
-}
-
-void CPDFSDK_BAAnnot::SetModifiedDate(const FX_SYSTEMTIME& st) {
- CPDFSDK_DateTime dt(st);
- CFX_ByteString str = dt.ToPDFDateTimeString();
-
- if (str.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("M");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("M", str);
-}
-
-FX_SYSTEMTIME CPDFSDK_BAAnnot::GetModifiedDate() const {
- FX_SYSTEMTIME systime;
- CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetStringBy("M");
-
- CPDFSDK_DateTime dt(str);
- dt.ToSystemTime(systime);
-
- return systime;
-}
-
-void CPDFSDK_BAAnnot::SetFlags(FX_DWORD nFlags) {
- m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags);
-}
-
-FX_DWORD CPDFSDK_BAAnnot::GetFlags() const {
- return m_pAnnot->GetAnnotDict()->GetIntegerBy("F");
-}
-
-void CPDFSDK_BAAnnot::SetAppState(const CFX_ByteString& str) {
- if (str.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("AS");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("AS", str);
-}
-
-CFX_ByteString CPDFSDK_BAAnnot::GetAppState() const {
- return m_pAnnot->GetAnnotDict()->GetStringBy("AS");
-}
-
-void CPDFSDK_BAAnnot::SetStructParent(int key) {
- m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key);
-}
-
-int CPDFSDK_BAAnnot::GetStructParent() const {
- return m_pAnnot->GetAnnotDict()->GetIntegerBy("StructParent");
-}
-
-// border
-void CPDFSDK_BAAnnot::SetBorderWidth(int nWidth) {
- CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArrayBy("Border");
-
- if (pBorder) {
- pBorder->SetAt(2, new CPDF_Number(nWidth));
- } else {
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictBy("BS");
-
- if (!pBSDict) {
- pBSDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
- }
-
- pBSDict->SetAtInteger("W", nWidth);
- }
-}
-
-int CPDFSDK_BAAnnot::GetBorderWidth() const {
- if (CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArrayBy("Border")) {
- return pBorder->GetIntegerAt(2);
- }
- if (CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictBy("BS")) {
- return pBSDict->GetIntegerBy("W", 1);
- }
- return 1;
-}
-
-void CPDFSDK_BAAnnot::SetBorderStyle(int nStyle) {
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictBy("BS");
- if (!pBSDict) {
- pBSDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
- }
-
- switch (nStyle) {
- case BBS_SOLID:
- pBSDict->SetAtName("S", "S");
- break;
- case BBS_DASH:
- pBSDict->SetAtName("S", "D");
- break;
- case BBS_BEVELED:
- pBSDict->SetAtName("S", "B");
- break;
- case BBS_INSET:
- pBSDict->SetAtName("S", "I");
- break;
- case BBS_UNDERLINE:
- pBSDict->SetAtName("S", "U");
- break;
- }
-}
-
-int CPDFSDK_BAAnnot::GetBorderStyle() const {
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictBy("BS");
- if (pBSDict) {
- CFX_ByteString sBorderStyle = pBSDict->GetStringBy("S", "S");
- if (sBorderStyle == "S")
- return BBS_SOLID;
- if (sBorderStyle == "D")
- return BBS_DASH;
- if (sBorderStyle == "B")
- return BBS_BEVELED;
- if (sBorderStyle == "I")
- return BBS_INSET;
- if (sBorderStyle == "U")
- return BBS_UNDERLINE;
- }
-
- CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArrayBy("Border");
- if (pBorder) {
- if (pBorder->GetCount() >= 4) {
- CPDF_Array* pDP = pBorder->GetArrayAt(3);
- if (pDP && pDP->GetCount() > 0)
- return BBS_DASH;
- }
- }
-
- return BBS_SOLID;
-}
-
-void CPDFSDK_BAAnnot::SetBorderDash(const CFX_IntArray& array) {
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictBy("BS");
- if (!pBSDict) {
- pBSDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
- }
-
- CPDF_Array* pArray = new CPDF_Array;
- for (int i = 0, sz = array.GetSize(); i < sz; i++) {
- pArray->AddInteger(array[i]);
- }
-
- pBSDict->SetAt("D", pArray);
-}
-
-void CPDFSDK_BAAnnot::GetBorderDash(CFX_IntArray& array) const {
- CPDF_Array* pDash = NULL;
-
- CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArrayBy("Border");
- if (pBorder) {
- pDash = pBorder->GetArrayAt(3);
- } else {
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictBy("BS");
- if (pBSDict) {
- pDash = pBSDict->GetArrayBy("D");
- }
- }
-
- if (pDash) {
- for (int i = 0, sz = pDash->GetCount(); i < sz; i++) {
- array.Add(pDash->GetIntegerAt(i));
- }
- }
-}
-
-void CPDFSDK_BAAnnot::SetColor(FX_COLORREF color) {
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f);
- pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f);
- pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f);
- m_pAnnot->GetAnnotDict()->SetAt("C", pArray);
-}
-
-void CPDFSDK_BAAnnot::RemoveColor() {
- m_pAnnot->GetAnnotDict()->RemoveAt("C");
-}
-
-FX_BOOL CPDFSDK_BAAnnot::GetColor(FX_COLORREF& color) const {
- if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArrayBy("C")) {
- int nCount = pEntry->GetCount();
- if (nCount == 1) {
- FX_FLOAT g = pEntry->GetNumberAt(0) * 255;
-
- color = FXSYS_RGB((int)g, (int)g, (int)g);
-
- return TRUE;
- } else if (nCount == 3) {
- FX_FLOAT r = pEntry->GetNumberAt(0) * 255;
- FX_FLOAT g = pEntry->GetNumberAt(1) * 255;
- FX_FLOAT b = pEntry->GetNumberAt(2) * 255;
-
- color = FXSYS_RGB((int)r, (int)g, (int)b);
-
- return TRUE;
- } else if (nCount == 4) {
- FX_FLOAT c = pEntry->GetNumberAt(0);
- FX_FLOAT m = pEntry->GetNumberAt(1);
- FX_FLOAT y = pEntry->GetNumberAt(2);
- FX_FLOAT k = pEntry->GetNumberAt(3);
-
- FX_FLOAT r = 1.0f - std::min(1.0f, c + k);
- FX_FLOAT g = 1.0f - std::min(1.0f, m + k);
- FX_FLOAT b = 1.0f - std::min(1.0f, y + k);
-
- color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255));
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType,
- const CFX_FloatRect& rcBBox,
- const CFX_Matrix& matrix,
- const CFX_ByteString& sContents,
- const CFX_ByteString& sAPState) {
- CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDictBy("AP");
-
- if (!pAPDict) {
- pAPDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict);
- }
-
- CPDF_Stream* pStream = nullptr;
- CPDF_Dictionary* pParentDict = nullptr;
-
- if (sAPState.IsEmpty()) {
- pParentDict = pAPDict;
- pStream = pAPDict->GetStreamBy(sAPType);
- } else {
- CPDF_Dictionary* pAPTypeDict = pAPDict->GetDictBy(sAPType);
- if (!pAPTypeDict) {
- pAPTypeDict = new CPDF_Dictionary;
- pAPDict->SetAt(sAPType, pAPTypeDict);
- }
-
- pParentDict = pAPTypeDict;
- pStream = pAPTypeDict->GetStreamBy(sAPState);
- }
-
- if (!pStream) {
- pStream = new CPDF_Stream(nullptr, 0, nullptr);
-
- CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
- int32_t objnum = pDoc->AddIndirectObject(pStream);
- pParentDict->SetAtReference(sAPType, pDoc, objnum);
- }
-
- CPDF_Dictionary* pStreamDict = pStream->GetDict();
- if (!pStreamDict) {
- pStreamDict = new CPDF_Dictionary;
- pStreamDict->SetAtName("Type", "XObject");
- pStreamDict->SetAtName("Subtype", "Form");
- pStreamDict->SetAtInteger("FormType", 1);
- pStream->InitStream(nullptr, 0, pStreamDict);
- }
-
- if (pStreamDict) {
- pStreamDict->SetAtMatrix("Matrix", matrix);
- pStreamDict->SetAtRect("BBox", rcBBox);
- }
-
- pStream->SetData((uint8_t*)sContents.c_str(), sContents.GetLength(), FALSE,
- FALSE);
-}
-
-#define BA_ANNOT_MINWIDTH 1
-#define BA_ANNOT_MINHEIGHT 1
-
-FX_FLOAT CPDFSDK_Annot::GetMinWidth() const {
- return BA_ANNOT_MINWIDTH;
-}
-
-FX_FLOAT CPDFSDK_Annot::GetMinHeight() const {
- return BA_ANNOT_MINHEIGHT;
-}
-
-FX_BOOL CPDFSDK_BAAnnot::CreateFormFiller() {
- return TRUE;
-}
-FX_BOOL CPDFSDK_BAAnnot::IsVisible() const {
- FX_DWORD nFlags = GetFlags();
- return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) ||
- (nFlags & ANNOTFLAG_NOVIEW));
-}
-
-CPDF_Action CPDFSDK_BAAnnot::GetAction() const {
- return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDictBy("A"));
-}
-
-void CPDFSDK_BAAnnot::SetAction(const CPDF_Action& action) {
- ASSERT(action.GetDict());
- if (action.GetDict() != m_pAnnot->GetAnnotDict()->GetDictBy("A")) {
- CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
- CPDF_Dictionary* pDict = action.GetDict();
- if (pDict && pDict->GetObjNum() == 0) {
- pDoc->AddIndirectObject(pDict);
- }
- m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum());
- }
-}
-
-void CPDFSDK_BAAnnot::RemoveAction() {
- m_pAnnot->GetAnnotDict()->RemoveAt("A");
-}
-
-CPDF_AAction CPDFSDK_BAAnnot::GetAAction() const {
- return CPDF_AAction(m_pAnnot->GetAnnotDict()->GetDictBy("AA"));
-}
-
-void CPDFSDK_BAAnnot::SetAAction(const CPDF_AAction& aa) {
- if (aa.GetDict() != m_pAnnot->GetAnnotDict()->GetDictBy("AA"))
- m_pAnnot->GetAnnotDict()->SetAt("AA", aa.GetDict());
-}
-
-void CPDFSDK_BAAnnot::RemoveAAction() {
- m_pAnnot->GetAnnotDict()->RemoveAt("AA");
-}
-
-CPDF_Action CPDFSDK_BAAnnot::GetAAction(CPDF_AAction::AActionType eAAT) {
- CPDF_AAction AAction = GetAAction();
-
- if (AAction.ActionExist(eAAT))
- return AAction.GetAction(eAAT);
-
- if (eAAT == CPDF_AAction::ButtonUp)
- return GetAction();
-
- return CPDF_Action();
-}
-
-#ifdef PDF_ENABLE_XFA
-FX_BOOL CPDFSDK_BAAnnot::IsXFAField() {
- return FALSE;
-}
-#endif // PDF_ENABLE_XFA
-
-void CPDFSDK_BAAnnot::Annot_OnDraw(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- CPDF_RenderOptions* pOptions) {
- m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal);
- m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device,
- CPDF_Annot::Normal, NULL);
-}
-
-UnderlyingPageType* CPDFSDK_Annot::GetUnderlyingPage() {
-#ifdef PDF_ENABLE_XFA
- return GetPDFXFAPage();
-#else // PDF_ENABLE_XFA
- return GetPDFPage();
-#endif // PDF_ENABLE_XFA
-}
-
-CPDF_Page* CPDFSDK_Annot::GetPDFPage() {
- return m_pPageView ? m_pPageView->GetPDFPage() : nullptr;
-}
-
-#ifdef PDF_ENABLE_XFA
-CPDFXFA_Page* CPDFSDK_Annot::GetPDFXFAPage() {
- return m_pPageView ? m_pPageView->GetPDFXFAPage() : nullptr;
-}
-#endif // PDF_ENABLE_XFA
diff --git a/fpdfsdk/src/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp
deleted file mode 100644
index 89d27726e8..0000000000
--- a/fpdfsdk/src/fsdk_baseform.cpp
+++ /dev/null
@@ -1,2872 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fsdk_baseform.h"
-
-#include <algorithm>
-#include <memory>
-#include <vector>
-
-#include "core/include/fpdfapi/cfdf_document.h"
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/fsdk_actionhandler.h"
-#include "fpdfsdk/include/fsdk_baseannot.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#endif // PDF_ENABLE_XFA
-
-#define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01)
-#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
-
-CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot,
- CPDFSDK_PageView* pPageView,
- CPDFSDK_InterForm* pInterForm)
- : CPDFSDK_BAAnnot(pAnnot, pPageView),
- m_pInterForm(pInterForm),
- m_nAppAge(0),
- m_nValueAge(0)
-#ifdef PDF_ENABLE_XFA
- ,
- m_hMixXFAWidget(NULL),
- m_pWidgetHandler(NULL)
-#endif // PDF_ENABLE_XFA
-{
-}
-
-CPDFSDK_Widget::~CPDFSDK_Widget() {}
-
-#ifdef PDF_ENABLE_XFA
-IXFA_Widget* CPDFSDK_Widget::GetMixXFAWidget() const {
- CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) {
- if (!m_hMixXFAWidget) {
- if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
- CFX_WideString sName;
- if (GetFieldType() == FIELDTYPE_RADIOBUTTON) {
- sName = GetAnnotName();
- if (sName.IsEmpty())
- sName = GetName();
- } else {
- sName = GetName();
- }
-
- if (!sName.IsEmpty())
- m_hMixXFAWidget = pDocView->GetWidgetByName(sName);
- }
- }
- return m_hMixXFAWidget;
- }
-
- return NULL;
-}
-
-IXFA_Widget* CPDFSDK_Widget::GetGroupMixXFAWidget() {
- CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) {
- if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
- CFX_WideString sName = GetName();
- if (!sName.IsEmpty())
- return pDocView->GetWidgetByName(sName);
- }
- }
-
- return nullptr;
-}
-
-IXFA_WidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() const {
- CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) {
- if (!m_pWidgetHandler) {
- if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
- m_pWidgetHandler = pDocView->GetWidgetHandler();
- }
- }
- return m_pWidgetHandler;
- }
-
- return NULL;
-}
-
-static XFA_EVENTTYPE GetXFAEventType(PDFSDK_XFAAActionType eXFAAAT) {
- XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown;
-
- switch (eXFAAAT) {
- case PDFSDK_XFA_Click:
- eEventType = XFA_EVENT_Click;
- break;
- case PDFSDK_XFA_Full:
- eEventType = XFA_EVENT_Full;
- break;
- case PDFSDK_XFA_PreOpen:
- eEventType = XFA_EVENT_PreOpen;
- break;
- case PDFSDK_XFA_PostOpen:
- eEventType = XFA_EVENT_PostOpen;
- break;
- }
-
- return eEventType;
-}
-
-static XFA_EVENTTYPE GetXFAEventType(CPDF_AAction::AActionType eAAT,
- FX_BOOL bWillCommit) {
- XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown;
-
- switch (eAAT) {
- case CPDF_AAction::CursorEnter:
- eEventType = XFA_EVENT_MouseEnter;
- break;
- case CPDF_AAction::CursorExit:
- eEventType = XFA_EVENT_MouseExit;
- break;
- case CPDF_AAction::ButtonDown:
- eEventType = XFA_EVENT_MouseDown;
- break;
- case CPDF_AAction::ButtonUp:
- eEventType = XFA_EVENT_MouseUp;
- break;
- case CPDF_AAction::GetFocus:
- eEventType = XFA_EVENT_Enter;
- break;
- case CPDF_AAction::LoseFocus:
- eEventType = XFA_EVENT_Exit;
- break;
- case CPDF_AAction::PageOpen:
- break;
- case CPDF_AAction::PageClose:
- break;
- case CPDF_AAction::PageVisible:
- break;
- case CPDF_AAction::PageInvisible:
- break;
- case CPDF_AAction::KeyStroke:
- if (!bWillCommit) {
- eEventType = XFA_EVENT_Change;
- }
- break;
- case CPDF_AAction::Validate:
- eEventType = XFA_EVENT_Validate;
- break;
- case CPDF_AAction::OpenPage:
- case CPDF_AAction::ClosePage:
- case CPDF_AAction::Format:
- case CPDF_AAction::Calculate:
- case CPDF_AAction::CloseDocument:
- case CPDF_AAction::SaveDocument:
- case CPDF_AAction::DocumentSaved:
- case CPDF_AAction::PrintDocument:
- case CPDF_AAction::DocumentPrinted:
- break;
- }
-
- return eEventType;
-}
-
-FX_BOOL CPDFSDK_Widget::HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT) {
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT);
-
- if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
- GetFieldType() == FIELDTYPE_RADIOBUTTON) {
- if (IXFA_Widget* hGroupWidget = GetGroupMixXFAWidget()) {
- CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget);
- if (pXFAWidgetHandler->HasEvent(pAcc, eEventType))
- return TRUE;
- }
- }
-
- {
- CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
- return pXFAWidgetHandler->HasEvent(pAcc, eEventType);
- }
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT,
- PDFSDK_FieldAction& data,
- CPDFSDK_PageView* pPageView) {
- CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT);
-
- if (eEventType != XFA_EVENT_Unknown) {
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- CXFA_EventParam param;
- param.m_eType = eEventType;
- param.m_wsChange = data.sChange;
- param.m_iCommitKey = data.nCommitKey;
- param.m_bShift = data.bShift;
- param.m_iSelStart = data.nSelStart;
- param.m_iSelEnd = data.nSelEnd;
- param.m_wsFullText = data.sValue;
- param.m_bKeyDown = data.bKeyDown;
- param.m_bModifier = data.bModifier;
- param.m_wsNewText = data.sValue;
- if (data.nSelEnd > data.nSelStart)
- param.m_wsNewText.Delete(data.nSelStart,
- data.nSelEnd - data.nSelStart);
- for (int i = 0; i < data.sChange.GetLength(); i++)
- param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]);
- param.m_wsPrevText = data.sValue;
-
- if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
- GetFieldType() == FIELDTYPE_RADIOBUTTON) {
- if (IXFA_Widget* hGroupWidget = GetGroupMixXFAWidget()) {
- CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget);
- param.m_pTarget = pAcc;
- pXFAWidgetHandler->ProcessEvent(pAcc, &param);
- }
-
- {
- CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
- param.m_pTarget = pAcc;
- int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, &param);
- return nRet == XFA_EVENTERROR_Sucess;
- }
- } else {
- CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
- param.m_pTarget = pAcc;
- int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, &param);
- return nRet == XFA_EVENTERROR_Sucess;
- }
-
- if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
- pDocView->UpdateDocView();
- }
- }
- }
- }
-
- return FALSE;
-}
-
-void CPDFSDK_Widget::Synchronize(FX_BOOL bSynchronizeElse) {
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- CPDF_FormField* pFormField = GetFormField();
- if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
- switch (GetFieldType()) {
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON: {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- XFA_CHECKSTATE eCheckState =
- pFormCtrl->IsChecked() ? XFA_CHECKSTATE_On : XFA_CHECKSTATE_Off;
- pWidgetAcc->SetCheckState(eCheckState);
- } break;
- case FIELDTYPE_TEXTFIELD:
- pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
- break;
- case FIELDTYPE_LISTBOX: {
- pWidgetAcc->ClearAllSelections();
-
- for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz;
- i++) {
- int nIndex = pFormField->GetSelectedIndex(i);
- if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
- pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
- }
- } break;
- case FIELDTYPE_COMBOBOX: {
- pWidgetAcc->ClearAllSelections();
-
- for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz;
- i++) {
- int nIndex = pFormField->GetSelectedIndex(i);
- if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
- pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
- }
- }
-
- pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
- break;
- }
-
- if (bSynchronizeElse)
- pWidgetAcc->ProcessValueChanged();
- }
- }
- }
-}
-
-void CPDFSDK_Widget::SynchronizeXFAValue() {
- CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- IXFA_DocView* pXFADocView = pDoc->GetXFADocView();
- if (!pXFADocView)
- return;
-
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (GetXFAWidgetHandler()) {
- CPDFSDK_Widget::SynchronizeXFAValue(pXFADocView, hWidget, GetFormField(),
- GetFormControl());
- }
- }
-}
-
-void CPDFSDK_Widget::SynchronizeXFAItems() {
- CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- IXFA_DocView* pXFADocView = pDoc->GetXFADocView();
- if (!pXFADocView)
- return;
-
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (GetXFAWidgetHandler())
- SynchronizeXFAItems(pXFADocView, hWidget, GetFormField(), nullptr);
- }
-}
-
-void CPDFSDK_Widget::SynchronizeXFAValue(IXFA_DocView* pXFADocView,
- IXFA_Widget* hWidget,
- CPDF_FormField* pFormField,
- CPDF_FormControl* pFormControl) {
- ASSERT(hWidget);
-
- if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) {
- ASSERT(pFormControl);
-
- switch (pFormField->GetFieldType()) {
- case FIELDTYPE_CHECKBOX: {
- if (CXFA_WidgetAcc* pWidgetAcc =
- pXFAWidgetHandler->GetDataAcc(hWidget)) {
- FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
-
- pFormField->CheckControl(pFormField->GetControlIndex(pFormControl),
- bChecked, TRUE);
- }
- } break;
- case FIELDTYPE_RADIOBUTTON: {
- if (CXFA_WidgetAcc* pWidgetAcc =
- pXFAWidgetHandler->GetDataAcc(hWidget)) {
- FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
-
- pFormField->CheckControl(pFormField->GetControlIndex(pFormControl),
- bChecked, TRUE);
- }
- } break;
- case FIELDTYPE_TEXTFIELD: {
- if (CXFA_WidgetAcc* pWidgetAcc =
- pXFAWidgetHandler->GetDataAcc(hWidget)) {
- CFX_WideString sValue;
- pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
- pFormField->SetValue(sValue, TRUE);
- }
- } break;
- case FIELDTYPE_LISTBOX: {
- pFormField->ClearSelection(FALSE);
-
- if (CXFA_WidgetAcc* pWidgetAcc =
- pXFAWidgetHandler->GetDataAcc(hWidget)) {
- for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
- int nIndex = pWidgetAcc->GetSelectedItem(i);
-
- if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
- pFormField->SetItemSelection(nIndex, TRUE, TRUE);
- }
- }
- }
- } break;
- case FIELDTYPE_COMBOBOX: {
- pFormField->ClearSelection(FALSE);
-
- if (CXFA_WidgetAcc* pWidgetAcc =
- pXFAWidgetHandler->GetDataAcc(hWidget)) {
- for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
- int nIndex = pWidgetAcc->GetSelectedItem(i);
-
- if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
- pFormField->SetItemSelection(nIndex, TRUE, TRUE);
- }
- }
-
- CFX_WideString sValue;
- pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
- pFormField->SetValue(sValue, TRUE);
- }
- } break;
- }
- }
-}
-
-void CPDFSDK_Widget::SynchronizeXFAItems(IXFA_DocView* pXFADocView,
- IXFA_Widget* hWidget,
- CPDF_FormField* pFormField,
- CPDF_FormControl* pFormControl) {
- ASSERT(hWidget);
-
- if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) {
- switch (pFormField->GetFieldType()) {
- case FIELDTYPE_LISTBOX: {
- pFormField->ClearSelection(FALSE);
- pFormField->ClearOptions(TRUE);
-
- if (CXFA_WidgetAcc* pWidgetAcc =
- pXFAWidgetHandler->GetDataAcc(hWidget)) {
- for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz;
- i++) {
- CFX_WideString swText;
- pWidgetAcc->GetChoiceListItem(swText, i);
-
- pFormField->InsertOption(swText, i, TRUE);
- }
- }
- } break;
- case FIELDTYPE_COMBOBOX: {
- pFormField->ClearSelection(FALSE);
- pFormField->ClearOptions(FALSE);
-
- if (CXFA_WidgetAcc* pWidgetAcc =
- pXFAWidgetHandler->GetDataAcc(hWidget)) {
- for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz;
- i++) {
- CFX_WideString swText;
- pWidgetAcc->GetChoiceListItem(swText, i);
-
- pFormField->InsertOption(swText, i, FALSE);
- }
- }
-
- pFormField->SetValue(L"", TRUE);
- } break;
- }
- }
-}
-#endif // PDF_ENABLE_XFA
-
-FX_BOOL CPDFSDK_Widget::IsWidgetAppearanceValid(
- CPDF_Annot::AppearanceMode mode) {
- CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDictBy("AP");
- if (!pAP)
- return FALSE;
-
- // Choose the right sub-ap
- const FX_CHAR* ap_entry = "N";
- if (mode == CPDF_Annot::Down)
- ap_entry = "D";
- else if (mode == CPDF_Annot::Rollover)
- ap_entry = "R";
- if (!pAP->KeyExist(ap_entry))
- ap_entry = "N";
-
- // Get the AP stream or subdirectory
- CPDF_Object* psub = pAP->GetElementValue(ap_entry);
- if (!psub)
- return FALSE;
-
- int nFieldType = GetFieldType();
- switch (nFieldType) {
- case FIELDTYPE_PUSHBUTTON:
- case FIELDTYPE_COMBOBOX:
- case FIELDTYPE_LISTBOX:
- case FIELDTYPE_TEXTFIELD:
- case FIELDTYPE_SIGNATURE:
- return psub->IsStream();
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON:
- if (CPDF_Dictionary* pSubDict = psub->AsDictionary()) {
- return pSubDict->GetStreamBy(GetAppState()) != NULL;
- }
- return FALSE;
- }
- return TRUE;
-}
-
-int CPDFSDK_Widget::GetFieldType() const {
- return GetFormField()->GetFieldType();
-}
-
-FX_BOOL CPDFSDK_Widget::IsAppearanceValid() {
-#ifdef PDF_ENABLE_XFA
- CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
- int nDocType = pDoc->GetDocType();
- if (nDocType != DOCTYPE_PDF && nDocType != DOCTYPE_STATIC_XFA)
- return TRUE;
-#endif // PDF_ENABLE_XFA
- return CPDFSDK_BAAnnot::IsAppearanceValid();
-}
-
-int CPDFSDK_Widget::GetFieldFlags() const {
- CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
- CPDF_FormControl* pFormControl =
- pPDFInterForm->GetControlByDict(m_pAnnot->GetAnnotDict());
- CPDF_FormField* pFormField = pFormControl->GetField();
- return pFormField->GetFieldFlags();
-}
-
-CFX_ByteString CPDFSDK_Widget::GetSubType() const {
- int nType = GetFieldType();
-
- if (nType == FIELDTYPE_SIGNATURE)
- return BFFT_SIGNATURE;
- return CPDFSDK_Annot::GetSubType();
-}
-
-CPDF_FormField* CPDFSDK_Widget::GetFormField() const {
- return GetFormControl()->GetField();
-}
-
-CPDF_FormControl* CPDFSDK_Widget::GetFormControl() const {
- CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
- return pPDFInterForm->GetControlByDict(GetAnnotDict());
-}
-
-CPDF_FormControl* CPDFSDK_Widget::GetFormControl(
- CPDF_InterForm* pInterForm,
- const CPDF_Dictionary* pAnnotDict) {
- ASSERT(pAnnotDict);
- return pInterForm->GetControlByDict(pAnnotDict);
-}
-
-int CPDFSDK_Widget::GetRotate() const {
- CPDF_FormControl* pCtrl = GetFormControl();
- return pCtrl->GetRotation() % 360;
-}
-
-#ifdef PDF_ENABLE_XFA
-CFX_WideString CPDFSDK_Widget::GetName() const {
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetFullName();
-}
-#endif // PDF_ENABLE_XFA
-
-FX_BOOL CPDFSDK_Widget::GetFillColor(FX_COLORREF& color) const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- int iColorType = 0;
- color = FX_ARGBTOCOLORREF(pFormCtrl->GetBackgroundColor(iColorType));
-
- return iColorType != COLORTYPE_TRANSPARENT;
-}
-
-FX_BOOL CPDFSDK_Widget::GetBorderColor(FX_COLORREF& color) const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- int iColorType = 0;
- color = FX_ARGBTOCOLORREF(pFormCtrl->GetBorderColor(iColorType));
-
- return iColorType != COLORTYPE_TRANSPARENT;
-}
-
-FX_BOOL CPDFSDK_Widget::GetTextColor(FX_COLORREF& color) const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
- if (da.HasColor()) {
- FX_ARGB argb;
- int iColorType = COLORTYPE_TRANSPARENT;
- da.GetColor(argb, iColorType);
- color = FX_ARGBTOCOLORREF(argb);
-
- return iColorType != COLORTYPE_TRANSPARENT;
- }
-
- return FALSE;
-}
-
-FX_FLOAT CPDFSDK_Widget::GetFontSize() const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- CPDF_DefaultAppearance pDa = pFormCtrl->GetDefaultAppearance();
- CFX_ByteString csFont = "";
- FX_FLOAT fFontSize = 0.0f;
- pDa.GetFont(csFont, fFontSize);
-
- return fFontSize;
-}
-
-int CPDFSDK_Widget::GetSelectedIndex(int nIndex) const {
-#ifdef PDF_ENABLE_XFA
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
- if (nIndex < pWidgetAcc->CountSelectedItems())
- return pWidgetAcc->GetSelectedItem(nIndex);
- }
- }
- }
-#endif // PDF_ENABLE_XFA
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetSelectedIndex(nIndex);
-}
-
-#ifdef PDF_ENABLE_XFA
-CFX_WideString CPDFSDK_Widget::GetValue(FX_BOOL bDisplay) const {
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
- CFX_WideString sValue;
- pWidgetAcc->GetValue(sValue, bDisplay ? XFA_VALUEPICTURE_Display
- : XFA_VALUEPICTURE_Edit);
- return sValue;
- }
- }
- }
-#else
-CFX_WideString CPDFSDK_Widget::GetValue() const {
-#endif // PDF_ENABLE_XFA
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetValue();
-}
-
-CFX_WideString CPDFSDK_Widget::GetDefaultValue() const {
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetDefaultValue();
-}
-
-CFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const {
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetOptionLabel(nIndex);
-}
-
-int CPDFSDK_Widget::CountOptions() const {
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->CountOptions();
-}
-
-FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) const {
-#ifdef PDF_ENABLE_XFA
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
- if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
- return pWidgetAcc->GetItemState(nIndex);
-
- return FALSE;
- }
- }
- }
-#endif // PDF_ENABLE_XFA
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->IsItemSelected(nIndex);
-}
-
-int CPDFSDK_Widget::GetTopVisibleIndex() const {
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetTopVisibleIndex();
-}
-
-bool CPDFSDK_Widget::IsChecked() const {
-#ifdef PDF_ENABLE_XFA
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget))
- return pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
- }
- }
-#endif // PDF_ENABLE_XFA
- CPDF_FormControl* pFormCtrl = GetFormControl();
- return pFormCtrl->IsChecked();
-}
-
-int CPDFSDK_Widget::GetAlignment() const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- return pFormCtrl->GetControlAlignment();
-}
-
-int CPDFSDK_Widget::GetMaxLen() const {
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetMaxLen();
-}
-
-void CPDFSDK_Widget::SetCheck(bool bChecked, bool bNotify) {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- CPDF_FormField* pFormField = pFormCtrl->GetField();
- pFormField->CheckControl(pFormField->GetControlIndex(pFormCtrl), bChecked,
- bNotify);
-#ifdef PDF_ENABLE_XFA
- if (!IsWidgetAppearanceValid(CPDF_Annot::Normal))
- ResetAppearance(TRUE);
- if (!bNotify)
- Synchronize(TRUE);
-#endif // PDF_ENABLE_XFA
-}
-
-void CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, FX_BOOL bNotify) {
- CPDF_FormField* pFormField = GetFormField();
- pFormField->SetValue(sValue, bNotify);
-#ifdef PDF_ENABLE_XFA
- if (!bNotify)
- Synchronize(TRUE);
-#endif // PDF_ENABLE_XFA
-}
-
-void CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue) {}
-void CPDFSDK_Widget::SetOptionSelection(int index,
- FX_BOOL bSelected,
- FX_BOOL bNotify) {
- CPDF_FormField* pFormField = GetFormField();
- pFormField->SetItemSelection(index, bSelected, bNotify);
-#ifdef PDF_ENABLE_XFA
- if (!bNotify)
- Synchronize(TRUE);
-#endif // PDF_ENABLE_XFA
-}
-
-void CPDFSDK_Widget::ClearSelection(FX_BOOL bNotify) {
- CPDF_FormField* pFormField = GetFormField();
- pFormField->ClearSelection(bNotify);
-#ifdef PDF_ENABLE_XFA
- if (!bNotify)
- Synchronize(TRUE);
-#endif // PDF_ENABLE_XFA
-}
-
-void CPDFSDK_Widget::SetTopVisibleIndex(int index) {}
-
-void CPDFSDK_Widget::SetAppModified() {
- m_bAppModified = TRUE;
-}
-
-void CPDFSDK_Widget::ClearAppModified() {
- m_bAppModified = FALSE;
-}
-
-FX_BOOL CPDFSDK_Widget::IsAppModified() const {
- return m_bAppModified;
-}
-
-#ifdef PDF_ENABLE_XFA
-void CPDFSDK_Widget::ResetAppearance(FX_BOOL bValueChanged) {
- switch (GetFieldType()) {
- case FIELDTYPE_TEXTFIELD:
- case FIELDTYPE_COMBOBOX: {
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = OnFormat(bFormated);
- ResetAppearance(bFormated ? sValue : nullptr, TRUE);
- } break;
- default:
- ResetAppearance(nullptr, FALSE);
- break;
- }
-}
-#endif // PDF_ENABLE_XFA
-
-void CPDFSDK_Widget::ResetAppearance(const FX_WCHAR* sValue,
- FX_BOOL bValueChanged) {
- SetAppModified();
-
- m_nAppAge++;
- if (m_nAppAge > 999999)
- m_nAppAge = 0;
- if (bValueChanged)
- m_nValueAge++;
-
- int nFieldType = GetFieldType();
-
- switch (nFieldType) {
- case FIELDTYPE_PUSHBUTTON:
- ResetAppearance_PushButton();
- break;
- case FIELDTYPE_CHECKBOX:
- ResetAppearance_CheckBox();
- break;
- case FIELDTYPE_RADIOBUTTON:
- ResetAppearance_RadioButton();
- break;
- case FIELDTYPE_COMBOBOX:
- ResetAppearance_ComboBox(sValue);
- break;
- case FIELDTYPE_LISTBOX:
- ResetAppearance_ListBox();
- break;
- case FIELDTYPE_TEXTFIELD:
- ResetAppearance_TextField(sValue);
- break;
- }
-
- m_pAnnot->ClearCachedAP();
-}
-
-CFX_WideString CPDFSDK_Widget::OnFormat(FX_BOOL& bFormated) {
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField);
- return m_pInterForm->OnFormat(pFormField, bFormated);
-}
-
-void CPDFSDK_Widget::ResetFieldAppearance(FX_BOOL bValueChanged) {
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField);
- m_pInterForm->ResetFieldAppearance(pFormField, NULL, bValueChanged);
-}
-
-void CPDFSDK_Widget::DrawAppearance(CFX_RenderDevice* pDevice,
- const CFX_Matrix* pUser2Device,
- CPDF_Annot::AppearanceMode mode,
- const CPDF_RenderOptions* pOptions) {
- int nFieldType = GetFieldType();
-
- if ((nFieldType == FIELDTYPE_CHECKBOX ||
- nFieldType == FIELDTYPE_RADIOBUTTON) &&
- mode == CPDF_Annot::Normal &&
- !IsWidgetAppearanceValid(CPDF_Annot::Normal)) {
- CFX_PathData pathData;
-
- CFX_FloatRect rcAnnot = GetRect();
-
- pathData.AppendRect(rcAnnot.left, rcAnnot.bottom, rcAnnot.right,
- rcAnnot.top);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 0.0f;
-
- pDevice->DrawPath(&pathData, pUser2Device, &gsd, 0, 0xFFAAAAAA,
- FXFILL_ALTERNATE);
- } else {
- CPDFSDK_BAAnnot::DrawAppearance(pDevice, pUser2Device, mode, pOptions);
- }
-}
-
-void CPDFSDK_Widget::UpdateField() {
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField);
- m_pInterForm->UpdateField(pFormField);
-}
-
-void CPDFSDK_Widget::DrawShadow(CFX_RenderDevice* pDevice,
- CPDFSDK_PageView* pPageView) {
- int nFieldType = GetFieldType();
- if (m_pInterForm->IsNeedHighLight(nFieldType)) {
- CFX_FloatRect rc = GetRect();
- FX_COLORREF color = m_pInterForm->GetHighlightColor(nFieldType);
- uint8_t alpha = m_pInterForm->GetHighlightAlpha();
-
- CFX_FloatRect rcDevice;
- ASSERT(m_pInterForm->GetDocument());
- CPDFDoc_Environment* pEnv = m_pInterForm->GetDocument()->GetEnv();
- if (!pEnv)
- return;
- CFX_Matrix page2device;
- pPageView->GetCurrentMatrix(page2device);
- page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom),
- rcDevice.left, rcDevice.bottom);
- page2device.Transform(((FX_FLOAT)rc.right), ((FX_FLOAT)rc.top),
- rcDevice.right, rcDevice.top);
-
- rcDevice.Normalize();
-
- FX_ARGB argb = ArgbEncode((int)alpha, color);
- FX_RECT rcDev((int)rcDevice.left, (int)rcDevice.top, (int)rcDevice.right,
- (int)rcDevice.bottom);
- pDevice->FillRect(&rcDev, argb);
- }
-}
-
-void CPDFSDK_Widget::ResetAppearance_PushButton() {
- CPDF_FormControl* pControl = GetFormControl();
- CFX_FloatRect rcWindow = GetRotatedRect();
- int32_t nLayout = 0;
- switch (pControl->GetTextPosition()) {
- case TEXTPOS_ICON:
- nLayout = PPBL_ICON;
- break;
- case TEXTPOS_BELOW:
- nLayout = PPBL_ICONTOPLABELBOTTOM;
- break;
- case TEXTPOS_ABOVE:
- nLayout = PPBL_LABELTOPICONBOTTOM;
- break;
- case TEXTPOS_RIGHT:
- nLayout = PPBL_ICONLEFTLABELRIGHT;
- break;
- case TEXTPOS_LEFT:
- nLayout = PPBL_LABELLEFTICONRIGHT;
- break;
- case TEXTPOS_OVERLAID:
- nLayout = PPBL_LABELOVERICON;
- break;
- default:
- nLayout = PPBL_LABEL;
- break;
- }
-
- CPWL_Color crBackground, crBorder;
-
- int iColorType;
- FX_FLOAT fc[4];
-
- pControl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- pControl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3, 0, 0);
- CPWL_Color crLeftTop, crRightBottom;
-
- switch (GetBorderStyle()) {
- case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
- case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
- break;
- case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
- break;
- case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
- default:
- nBorderStyle = PBS_SOLID;
- break;
- }
-
- CFX_FloatRect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
-
- CPWL_Color crText(COLORTYPE_GRAY, 0);
-
- FX_FLOAT fFontSize = 12.0f;
- CFX_ByteString csNameTag;
-
- CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
- if (da.HasColor()) {
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
-
- if (da.HasFont())
- da.GetFont(csNameTag, fFontSize);
-
- CFX_WideString csWCaption;
- CFX_WideString csNormalCaption, csRolloverCaption, csDownCaption;
-
- if (pControl->HasMKEntry("CA")) {
- csNormalCaption = pControl->GetNormalCaption();
- }
- if (pControl->HasMKEntry("RC")) {
- csRolloverCaption = pControl->GetRolloverCaption();
- }
- if (pControl->HasMKEntry("AC")) {
- csDownCaption = pControl->GetDownCaption();
- }
-
- CPDF_Stream* pNormalIcon = NULL;
- CPDF_Stream* pRolloverIcon = NULL;
- CPDF_Stream* pDownIcon = NULL;
-
- if (pControl->HasMKEntry("I")) {
- pNormalIcon = pControl->GetNormalIcon();
- }
- if (pControl->HasMKEntry("RI")) {
- pRolloverIcon = pControl->GetRolloverIcon();
- }
- if (pControl->HasMKEntry("IX")) {
- pDownIcon = pControl->GetDownIcon();
- }
-
- if (pNormalIcon) {
- if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict()) {
- if (pImageDict->GetStringBy("Name").IsEmpty())
- pImageDict->SetAtString("Name", "ImgA");
- }
- }
-
- if (pRolloverIcon) {
- if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict()) {
- if (pImageDict->GetStringBy("Name").IsEmpty())
- pImageDict->SetAtString("Name", "ImgB");
- }
- }
-
- if (pDownIcon) {
- if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict()) {
- if (pImageDict->GetStringBy("Name").IsEmpty())
- pImageDict->SetAtString("Name", "ImgC");
- }
- }
-
- CPDF_IconFit iconFit = pControl->GetIconFit();
-
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
-
- CBA_FontMap font_map(this, pEnv->GetSysHandler());
- font_map.SetAPType("N");
-
- CFX_ByteString csAP =
- CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom, nBorderStyle,
- dsBorder) +
- CPWL_Utils::GetPushButtonAppStream(
- iconFit.GetFittingBounds() ? rcWindow : rcClient, &font_map,
- pNormalIcon, iconFit, csNormalCaption, crText, fFontSize, nLayout);
-
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP);
- if (pNormalIcon)
- AddImageToAppearance("N", pNormalIcon);
-
- CPDF_FormControl::HighlightingMode eHLM = pControl->GetHighlightingMode();
- if (eHLM == CPDF_FormControl::Push || eHLM == CPDF_FormControl::Toggle) {
- if (csRolloverCaption.IsEmpty() && !pRolloverIcon) {
- csRolloverCaption = csNormalCaption;
- pRolloverIcon = pNormalIcon;
- }
-
- font_map.SetAPType("R");
-
- csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom,
- nBorderStyle, dsBorder) +
- CPWL_Utils::GetPushButtonAppStream(
- iconFit.GetFittingBounds() ? rcWindow : rcClient, &font_map,
- pRolloverIcon, iconFit, csRolloverCaption, crText, fFontSize,
- nLayout);
-
- WriteAppearance("R", GetRotatedRect(), GetMatrix(), csAP);
- if (pRolloverIcon)
- AddImageToAppearance("R", pRolloverIcon);
-
- if (csDownCaption.IsEmpty() && !pDownIcon) {
- csDownCaption = csNormalCaption;
- pDownIcon = pNormalIcon;
- }
-
- switch (nBorderStyle) {
- case PBS_BEVELED: {
- CPWL_Color crTemp = crLeftTop;
- crLeftTop = crRightBottom;
- crRightBottom = crTemp;
- } break;
- case PBS_INSET:
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
- break;
- }
-
- font_map.SetAPType("D");
-
- csAP = CPWL_Utils::GetRectFillAppStream(
- rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom,
- nBorderStyle, dsBorder) +
- CPWL_Utils::GetPushButtonAppStream(
- iconFit.GetFittingBounds() ? rcWindow : rcClient, &font_map,
- pDownIcon, iconFit, csDownCaption, crText, fFontSize, nLayout);
-
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP);
- if (pDownIcon)
- AddImageToAppearance("D", pDownIcon);
- } else {
- RemoveAppearance("D");
- RemoveAppearance("R");
- }
-}
-
-void CPDFSDK_Widget::ResetAppearance_CheckBox() {
- CPDF_FormControl* pControl = GetFormControl();
- CPWL_Color crBackground, crBorder, crText;
- int iColorType;
- FX_FLOAT fc[4];
-
- pControl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- pControl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3, 0, 0);
- CPWL_Color crLeftTop, crRightBottom;
-
- switch (GetBorderStyle()) {
- case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
- case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
- break;
- case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
- break;
- case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
- default:
- nBorderStyle = PBS_SOLID;
- break;
- }
-
- CFX_FloatRect rcWindow = GetRotatedRect();
- CFX_FloatRect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
-
- CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
- if (da.HasColor()) {
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
-
- int32_t nStyle = 0;
-
- CFX_WideString csWCaption = pControl->GetNormalCaption();
- if (csWCaption.GetLength() > 0) {
- switch (csWCaption[0]) {
- case L'l':
- nStyle = PCS_CIRCLE;
- break;
- case L'8':
- nStyle = PCS_CROSS;
- break;
- case L'u':
- nStyle = PCS_DIAMOND;
- break;
- case L'n':
- nStyle = PCS_SQUARE;
- break;
- case L'H':
- nStyle = PCS_STAR;
- break;
- default: // L'4'
- nStyle = PCS_CHECK;
- break;
- }
- } else {
- nStyle = PCS_CHECK;
- }
-
- CFX_ByteString csAP_N_ON =
- CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom, nBorderStyle,
- dsBorder);
-
- CFX_ByteString csAP_N_OFF = csAP_N_ON;
-
- switch (nBorderStyle) {
- case PBS_BEVELED: {
- CPWL_Color crTemp = crLeftTop;
- crLeftTop = crRightBottom;
- crRightBottom = crTemp;
- } break;
- case PBS_INSET:
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
- break;
- }
-
- CFX_ByteString csAP_D_ON =
- CPWL_Utils::GetRectFillAppStream(
- rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom, nBorderStyle,
- dsBorder);
-
- CFX_ByteString csAP_D_OFF = csAP_D_ON;
-
- csAP_N_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText);
- csAP_D_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText);
-
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON,
- pControl->GetCheckedAPState());
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
-
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON,
- pControl->GetCheckedAPState());
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
-
- CFX_ByteString csAS = GetAppState();
- if (csAS.IsEmpty())
- SetAppState("Off");
-}
-
-void CPDFSDK_Widget::ResetAppearance_RadioButton() {
- CPDF_FormControl* pControl = GetFormControl();
- CPWL_Color crBackground, crBorder, crText;
- int iColorType;
- FX_FLOAT fc[4];
-
- pControl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- pControl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3, 0, 0);
- CPWL_Color crLeftTop, crRightBottom;
-
- switch (GetBorderStyle()) {
- case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
- case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
- break;
- case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
- break;
- case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
- default:
- nBorderStyle = PBS_SOLID;
- break;
- }
-
- CFX_FloatRect rcWindow = GetRotatedRect();
- CFX_FloatRect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
-
- CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
- if (da.HasColor()) {
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
-
- int32_t nStyle = 0;
-
- CFX_WideString csWCaption = pControl->GetNormalCaption();
- if (csWCaption.GetLength() > 0) {
- switch (csWCaption[0]) {
- default: // L'l':
- nStyle = PCS_CIRCLE;
- break;
- case L'8':
- nStyle = PCS_CROSS;
- break;
- case L'u':
- nStyle = PCS_DIAMOND;
- break;
- case L'n':
- nStyle = PCS_SQUARE;
- break;
- case L'H':
- nStyle = PCS_STAR;
- break;
- case L'4':
- nStyle = PCS_CHECK;
- break;
- }
- } else {
- nStyle = PCS_CIRCLE;
- }
-
- CFX_ByteString csAP_N_ON;
-
- CFX_FloatRect rcCenter =
- CPWL_Utils::DeflateRect(CPWL_Utils::GetCenterSquare(rcWindow), 1.0f);
-
- if (nStyle == PCS_CIRCLE) {
- if (nBorderStyle == PBS_BEVELED) {
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
- crRightBottom = CPWL_Utils::SubstractColor(crBackground, 0.25f);
- } else if (nBorderStyle == PBS_INSET) {
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5f);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75f);
- }
-
- csAP_N_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBackground) +
- CPWL_Utils::GetCircleBorderAppStream(
- rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom,
- nBorderStyle, dsBorder);
- } else {
- csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom,
- nBorderStyle, dsBorder);
- }
-
- CFX_ByteString csAP_N_OFF = csAP_N_ON;
-
- switch (nBorderStyle) {
- case PBS_BEVELED: {
- CPWL_Color crTemp = crLeftTop;
- crLeftTop = crRightBottom;
- crRightBottom = crTemp;
- } break;
- case PBS_INSET:
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
- break;
- }
-
- CFX_ByteString csAP_D_ON;
-
- if (nStyle == PCS_CIRCLE) {
- CPWL_Color crBK = CPWL_Utils::SubstractColor(crBackground, 0.25f);
- if (nBorderStyle == PBS_BEVELED) {
- crLeftTop = CPWL_Utils::SubstractColor(crBackground, 0.25f);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
- crBK = crBackground;
- } else if (nBorderStyle == PBS_INSET) {
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
- }
-
- csAP_D_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBK) +
- CPWL_Utils::GetCircleBorderAppStream(
- rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom,
- nBorderStyle, dsBorder);
- } else {
- csAP_D_ON = CPWL_Utils::GetRectFillAppStream(
- rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom,
- nBorderStyle, dsBorder);
- }
-
- CFX_ByteString csAP_D_OFF = csAP_D_ON;
-
- csAP_N_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText);
- csAP_D_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText);
-
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON,
- pControl->GetCheckedAPState());
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
-
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON,
- pControl->GetCheckedAPState());
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
-
- CFX_ByteString csAS = GetAppState();
- if (csAS.IsEmpty())
- SetAppState("Off");
-}
-
-void CPDFSDK_Widget::ResetAppearance_ComboBox(const FX_WCHAR* sValue) {
- CPDF_FormControl* pControl = GetFormControl();
- CPDF_FormField* pField = pControl->GetField();
- CFX_ByteTextBuf sBody, sLines;
-
- CFX_FloatRect rcClient = GetClientRect();
- CFX_FloatRect rcButton = rcClient;
- rcButton.left = rcButton.right - 13;
- rcButton.Normalize();
-
- if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
- pEdit->EnableRefresh(FALSE);
-
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
- CBA_FontMap font_map(this, pEnv->GetSysHandler());
- pEdit->SetFontMap(&font_map);
-
- CFX_FloatRect rcEdit = rcClient;
- rcEdit.right = rcButton.left;
- rcEdit.Normalize();
-
- pEdit->SetPlateRect(rcEdit);
- pEdit->SetAlignmentV(1);
-
- FX_FLOAT fFontSize = GetFontSize();
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
-
- if (sValue) {
- pEdit->SetText(sValue);
- } else {
- int32_t nCurSel = pField->GetSelectedIndex(0);
-
- if (nCurSel < 0)
- pEdit->SetText(pField->GetValue().c_str());
- else
- pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str());
- }
-
- CFX_FloatRect rcContent = pEdit->GetContentRect();
-
- CFX_ByteString sEdit =
- CPWL_Utils::GetEditAppStream(pEdit, CFX_FloatPoint(0.0f, 0.0f));
- if (sEdit.GetLength() > 0) {
- sBody << "/Tx BMC\n"
- << "q\n";
- if (rcContent.Width() > rcEdit.Width() ||
- rcContent.Height() > rcEdit.Height()) {
- sBody << rcEdit.left << " " << rcEdit.bottom << " " << rcEdit.Width()
- << " " << rcEdit.Height() << " re\nW\nn\n";
- }
-
- CPWL_Color crText = GetTextPWLColor();
- sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
- << "ET\n"
- << "Q\nEMC\n";
- }
-
- IFX_Edit::DelEdit(pEdit);
- }
-
- sBody << CPWL_Utils::GetDropButtonAppStream(rcButton);
-
- CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
- sLines.GetByteString() + sBody.GetByteString();
-
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
-}
-
-void CPDFSDK_Widget::ResetAppearance_ListBox() {
- CPDF_FormControl* pControl = GetFormControl();
- CPDF_FormField* pField = pControl->GetField();
- CFX_FloatRect rcClient = GetClientRect();
- CFX_ByteTextBuf sBody, sLines;
-
- if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
- pEdit->EnableRefresh(FALSE);
-
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
-
- CBA_FontMap font_map(this, pEnv->GetSysHandler());
- pEdit->SetFontMap(&font_map);
-
- pEdit->SetPlateRect(
- CFX_FloatRect(rcClient.left, 0.0f, rcClient.right, 0.0f));
-
- FX_FLOAT fFontSize = GetFontSize();
-
- if (IsFloatZero(fFontSize))
- pEdit->SetFontSize(12.0f);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
-
- CFX_ByteTextBuf sList;
- FX_FLOAT fy = rcClient.top;
-
- int32_t nTop = pField->GetTopVisibleIndex();
- int32_t nCount = pField->CountOptions();
- int32_t nSelCount = pField->CountSelectedItems();
-
- for (int32_t i = nTop; i < nCount; i++) {
- FX_BOOL bSelected = FALSE;
- for (int32_t j = 0; j < nSelCount; j++) {
- if (pField->GetSelectedIndex(j) == i) {
- bSelected = TRUE;
- break;
- }
- }
-
- pEdit->SetText(pField->GetOptionLabel(i).c_str());
-
- CFX_FloatRect rcContent = pEdit->GetContentRect();
- FX_FLOAT fItemHeight = rcContent.Height();
-
- if (bSelected) {
- CFX_FloatRect rcItem =
- CFX_FloatRect(rcClient.left, fy - fItemHeight, rcClient.right, fy);
- sList << "q\n" << CPWL_Utils::GetColorAppStream(
- CPWL_Color(COLORTYPE_RGB, 0, 51.0f / 255.0f,
- 113.0f / 255.0f),
- TRUE)
- << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width()
- << " " << rcItem.Height() << " re f\n"
- << "Q\n";
-
- sList << "BT\n" << CPWL_Utils::GetColorAppStream(
- CPWL_Color(COLORTYPE_GRAY, 1), TRUE)
- << CPWL_Utils::GetEditAppStream(pEdit, CFX_FloatPoint(0.0f, fy))
- << "ET\n";
- } else {
- CPWL_Color crText = GetTextPWLColor();
- sList << "BT\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
- << CPWL_Utils::GetEditAppStream(pEdit, CFX_FloatPoint(0.0f, fy))
- << "ET\n";
- }
-
- fy -= fItemHeight;
- }
-
- if (sList.GetSize() > 0) {
- sBody << "/Tx BMC\n"
- << "q\n" << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
- sBody << sList << "Q\nEMC\n";
- }
-
- IFX_Edit::DelEdit(pEdit);
- }
-
- CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
- sLines.GetByteString() + sBody.GetByteString();
-
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
-}
-
-void CPDFSDK_Widget::ResetAppearance_TextField(const FX_WCHAR* sValue) {
- CPDF_FormControl* pControl = GetFormControl();
- CPDF_FormField* pField = pControl->GetField();
- CFX_ByteTextBuf sBody, sLines;
-
- if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
- pEdit->EnableRefresh(FALSE);
-
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
-
- CBA_FontMap font_map(this, pEnv->GetSysHandler());
- pEdit->SetFontMap(&font_map);
-
- CFX_FloatRect rcClient = GetClientRect();
- pEdit->SetPlateRect(rcClient);
- pEdit->SetAlignmentH(pControl->GetControlAlignment());
-
- FX_DWORD dwFieldFlags = pField->GetFieldFlags();
- FX_BOOL bMultiLine = (dwFieldFlags >> 12) & 1;
-
- if (bMultiLine) {
- pEdit->SetMultiLine(TRUE);
- pEdit->SetAutoReturn(TRUE);
- } else {
- pEdit->SetAlignmentV(1);
- }
-
- FX_WORD subWord = 0;
- if ((dwFieldFlags >> 13) & 1) {
- subWord = '*';
- pEdit->SetPasswordChar(subWord);
- }
-
- int nMaxLen = pField->GetMaxLen();
- FX_BOOL bCharArray = (dwFieldFlags >> 24) & 1;
- FX_FLOAT fFontSize = GetFontSize();
-
-#ifdef PDF_ENABLE_XFA
- CFX_WideString sValueTmp;
- if (!sValue && GetMixXFAWidget()) {
- sValueTmp = GetValue(TRUE);
- sValue = sValueTmp;
- }
-#endif // PDF_ENABLE_XFA
-
- if (nMaxLen > 0) {
- if (bCharArray) {
- pEdit->SetCharArray(nMaxLen);
-
- if (IsFloatZero(fFontSize)) {
- fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(
- font_map.GetPDFFont(0), rcClient, nMaxLen);
- }
- } else {
- if (sValue)
- nMaxLen = wcslen((const wchar_t*)sValue);
- pEdit->SetLimitChar(nMaxLen);
- }
- }
-
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
-
- if (sValue)
- pEdit->SetText(sValue);
- else
- pEdit->SetText(pField->GetValue().c_str());
-
- CFX_FloatRect rcContent = pEdit->GetContentRect();
-
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(
- pEdit, CFX_FloatPoint(0.0f, 0.0f), NULL, !bCharArray, subWord);
-
- if (sEdit.GetLength() > 0) {
- sBody << "/Tx BMC\n"
- << "q\n";
- if (rcContent.Width() > rcClient.Width() ||
- rcContent.Height() > rcClient.Height()) {
- sBody << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
- }
- CPWL_Color crText = GetTextPWLColor();
- sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
- << "ET\n"
- << "Q\nEMC\n";
- }
-
- if (bCharArray) {
- switch (GetBorderStyle()) {
- case BBS_SOLID: {
- CFX_ByteString sColor =
- CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE);
- if (sColor.GetLength() > 0) {
- sLines << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE)
- << " 2 J 0 j\n";
-
- for (int32_t i = 1; i < nMaxLen; i++) {
- sLines << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.bottom << " m\n"
- << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.top << " l S\n";
- }
-
- sLines << "Q\n";
- }
- } break;
- case BBS_DASH: {
- CFX_ByteString sColor =
- CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE);
- if (sColor.GetLength() > 0) {
- CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0);
-
- sLines << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE)
- << "[" << dsBorder.nDash << " " << dsBorder.nGap << "] "
- << dsBorder.nPhase << " d\n";
-
- for (int32_t i = 1; i < nMaxLen; i++) {
- sLines << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.bottom << " m\n"
- << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.top << " l S\n";
- }
-
- sLines << "Q\n";
- }
- } break;
- }
- }
-
- IFX_Edit::DelEdit(pEdit);
- }
-
- CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
- sLines.GetByteString() + sBody.GetByteString();
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
-}
-
-CFX_FloatRect CPDFSDK_Widget::GetClientRect() const {
- CFX_FloatRect rcWindow = GetRotatedRect();
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- switch (GetBorderStyle()) {
- case BBS_BEVELED:
- case BBS_INSET:
- fBorderWidth *= 2.0f;
- break;
- }
-
- return CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
-}
-
-CFX_FloatRect CPDFSDK_Widget::GetRotatedRect() const {
- CFX_FloatRect rectAnnot = GetRect();
- FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
- FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
-
- CPDF_FormControl* pControl = GetFormControl();
- CFX_FloatRect rcPDFWindow;
- switch (abs(pControl->GetRotation() % 360)) {
- case 0:
- case 180:
- default:
- rcPDFWindow = CFX_FloatRect(0, 0, fWidth, fHeight);
- break;
- case 90:
- case 270:
- rcPDFWindow = CFX_FloatRect(0, 0, fHeight, fWidth);
- break;
- }
-
- return rcPDFWindow;
-}
-
-CFX_ByteString CPDFSDK_Widget::GetBackgroundAppStream() const {
- CPWL_Color crBackground = GetFillPWLColor();
- if (crBackground.nColorType != COLORTYPE_TRANSPARENT) {
- return CPWL_Utils::GetRectFillAppStream(GetRotatedRect(), crBackground);
- }
- return "";
-}
-
-CFX_ByteString CPDFSDK_Widget::GetBorderAppStream() const {
- CFX_FloatRect rcWindow = GetRotatedRect();
- CPWL_Color crBorder = GetBorderPWLColor();
- CPWL_Color crBackground = GetFillPWLColor();
- CPWL_Color crLeftTop, crRightBottom;
-
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3, 0, 0);
-
- switch (GetBorderStyle()) {
- case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
- case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
- break;
- case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
- break;
- case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
- default:
- nBorderStyle = PBS_SOLID;
- break;
- }
-
- return CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
- crLeftTop, crRightBottom, nBorderStyle,
- dsBorder);
-}
-
-CFX_Matrix CPDFSDK_Widget::GetMatrix() const {
- CFX_Matrix mt;
- CPDF_FormControl* pControl = GetFormControl();
- CFX_FloatRect rcAnnot = GetRect();
- FX_FLOAT fWidth = rcAnnot.right - rcAnnot.left;
- FX_FLOAT fHeight = rcAnnot.top - rcAnnot.bottom;
-
- switch (abs(pControl->GetRotation() % 360)) {
- case 0:
- default:
- mt = CFX_Matrix(1, 0, 0, 1, 0, 0);
- break;
- case 90:
- mt = CFX_Matrix(0, 1, -1, 0, fWidth, 0);
- break;
- case 180:
- mt = CFX_Matrix(-1, 0, 0, -1, fWidth, fHeight);
- break;
- case 270:
- mt = CFX_Matrix(0, -1, 1, 0, 0, fHeight);
- break;
- }
-
- return mt;
-}
-
-CPWL_Color CPDFSDK_Widget::GetTextPWLColor() const {
- CPWL_Color crText = CPWL_Color(COLORTYPE_GRAY, 0);
-
- CPDF_FormControl* pFormCtrl = GetFormControl();
- CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
- if (da.HasColor()) {
- int32_t iColorType;
- FX_FLOAT fc[4];
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
-
- return crText;
-}
-
-CPWL_Color CPDFSDK_Widget::GetBorderPWLColor() const {
- CPWL_Color crBorder;
-
- CPDF_FormControl* pFormCtrl = GetFormControl();
- int32_t iColorType;
- FX_FLOAT fc[4];
- pFormCtrl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- return crBorder;
-}
-
-CPWL_Color CPDFSDK_Widget::GetFillPWLColor() const {
- CPWL_Color crFill;
-
- CPDF_FormControl* pFormCtrl = GetFormControl();
- int32_t iColorType;
- FX_FLOAT fc[4];
- pFormCtrl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crFill = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
-
- return crFill;
-}
-
-void CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType,
- CPDF_Stream* pImage) {
- CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
- ASSERT(pDoc);
-
- CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDictBy("AP");
- CPDF_Stream* pStream = pAPDict->GetStreamBy(sAPType);
- CPDF_Dictionary* pStreamDict = pStream->GetDict();
- CFX_ByteString sImageAlias = "IMG";
-
- if (CPDF_Dictionary* pImageDict = pImage->GetDict()) {
- sImageAlias = pImageDict->GetStringBy("Name");
- if (sImageAlias.IsEmpty())
- sImageAlias = "IMG";
- }
-
- CPDF_Dictionary* pStreamResList = pStreamDict->GetDictBy("Resources");
- if (!pStreamResList) {
- pStreamResList = new CPDF_Dictionary();
- pStreamDict->SetAt("Resources", pStreamResList);
- }
-
- if (pStreamResList) {
- CPDF_Dictionary* pXObject = new CPDF_Dictionary;
- pXObject->SetAtReference(sImageAlias, pDoc, pImage);
- pStreamResList->SetAt("XObject", pXObject);
- }
-}
-
-void CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType) {
- if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDictBy("AP")) {
- pAPDict->RemoveAt(sAPType);
- }
-}
-
-FX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& data,
- CPDFSDK_PageView* pPageView) {
- CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
-
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_Document* pDoc = pDocument->GetXFADocument();
- if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
- XFA_EVENTTYPE eEventType = GetXFAEventType(type, data.bWillCommit);
-
- if (eEventType != XFA_EVENT_Unknown) {
- if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
- CXFA_EventParam param;
- param.m_eType = eEventType;
- param.m_wsChange = data.sChange;
- param.m_iCommitKey = data.nCommitKey;
- param.m_bShift = data.bShift;
- param.m_iSelStart = data.nSelStart;
- param.m_iSelEnd = data.nSelEnd;
- param.m_wsFullText = data.sValue;
- param.m_bKeyDown = data.bKeyDown;
- param.m_bModifier = data.bModifier;
- param.m_wsNewText = data.sValue;
- if (data.nSelEnd > data.nSelStart)
- param.m_wsNewText.Delete(data.nSelStart,
- data.nSelEnd - data.nSelStart);
- for (int i = data.sChange.GetLength() - 1; i >= 0; i--)
- param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]);
- param.m_wsPrevText = data.sValue;
-
- CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
- param.m_pTarget = pAcc;
- int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, &param);
-
- if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
- pDocView->UpdateDocView();
- }
-
- if (nRet == XFA_EVENTERROR_Sucess)
- return TRUE;
- }
- }
- }
-#endif // PDF_ENABLE_XFA
-
- CPDF_Action action = GetAAction(type);
- if (action.GetDict() && action.GetType() != CPDF_Action::Unknown) {
- CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
- return pActionHandler->DoAction_Field(action, type, pDocument,
- GetFormField(), data);
- }
- return FALSE;
-}
-
-CPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT) {
- switch (eAAT) {
- case CPDF_AAction::CursorEnter:
- case CPDF_AAction::CursorExit:
- case CPDF_AAction::ButtonDown:
- case CPDF_AAction::ButtonUp:
- case CPDF_AAction::GetFocus:
- case CPDF_AAction::LoseFocus:
- case CPDF_AAction::PageOpen:
- case CPDF_AAction::PageClose:
- case CPDF_AAction::PageVisible:
- case CPDF_AAction::PageInvisible:
- return CPDFSDK_BAAnnot::GetAAction(eAAT);
-
- case CPDF_AAction::KeyStroke:
- case CPDF_AAction::Format:
- case CPDF_AAction::Validate:
- case CPDF_AAction::Calculate: {
- CPDF_FormField* pField = GetFormField();
- if (pField->GetAdditionalAction().GetDict())
- return pField->GetAdditionalAction().GetAction(eAAT);
- return CPDFSDK_BAAnnot::GetAAction(eAAT);
- }
- default:
- break;
- }
-
- return CPDF_Action();
-}
-
-CFX_WideString CPDFSDK_Widget::GetAlternateName() const {
- CPDF_FormField* pFormField = GetFormField();
- return pFormField->GetAlternateName();
-}
-
-int32_t CPDFSDK_Widget::GetAppearanceAge() const {
- return m_nAppAge;
-}
-
-int32_t CPDFSDK_Widget::GetValueAge() const {
- return m_nValueAge;
-}
-
-FX_BOOL CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY) {
- CPDF_Annot* pAnnot = GetPDFAnnot();
- CFX_FloatRect annotRect;
- pAnnot->GetRect(annotRect);
- if (annotRect.Contains(pageX, pageY)) {
- if (!IsVisible())
- return FALSE;
-
- int nFieldFlags = GetFieldFlags();
- if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
- return FALSE;
-
- return TRUE;
- }
- return FALSE;
-}
-
-#ifdef PDF_ENABLE_XFA
-CPDFSDK_XFAWidget::CPDFSDK_XFAWidget(IXFA_Widget* pAnnot,
- CPDFSDK_PageView* pPageView,
- CPDFSDK_InterForm* pInterForm)
- : CPDFSDK_Annot(pPageView), m_pInterForm(pInterForm), m_hXFAWidget(pAnnot) {
-}
-
-FX_BOOL CPDFSDK_XFAWidget::IsXFAField() {
- return TRUE;
-}
-
-CFX_ByteString CPDFSDK_XFAWidget::GetType() const {
- return FSDK_XFAWIDGET_TYPENAME;
-}
-
-CFX_FloatRect CPDFSDK_XFAWidget::GetRect() const {
- CPDFSDK_PageView* pPageView = GetPageView();
- CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
- CPDFXFA_Document* pDoc = pDocument->GetXFADocument();
- IXFA_DocView* pDocView = pDoc->GetXFADocView();
- IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler();
-
- CFX_RectF rcBBox;
- pWidgetHandler->GetRect(GetXFAWidget(), rcBBox);
-
- return CFX_FloatRect(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
- rcBBox.top + rcBBox.height);
-}
-#endif // PDF_ENABLE_XFA
-
-CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument)
- : m_pDocument(pDocument),
- m_pInterForm(NULL),
-#ifdef PDF_ENABLE_XFA
- m_bXfaCalculate(TRUE),
- m_bXfaValidationsEnabled(TRUE),
-#endif // PDF_ENABLE_XFA
- m_bCalculate(TRUE),
- m_bBusy(FALSE) {
- m_pInterForm = new CPDF_InterForm(m_pDocument->GetPDFDocument(), FALSE);
- m_pInterForm->SetFormNotify(this);
-
- for (int i = 0; i < kNumFieldTypes; ++i)
- m_bNeedHightlight[i] = FALSE;
- m_iHighlightAlpha = 0;
-}
-
-CPDFSDK_InterForm::~CPDFSDK_InterForm() {
- delete m_pInterForm;
- m_pInterForm = nullptr;
- m_Map.clear();
-#ifdef PDF_ENABLE_XFA
- m_XFAMap.RemoveAll();
-#endif // PDF_ENABLE_XFA
-}
-
-FX_BOOL CPDFSDK_InterForm::HighlightWidgets() {
- return FALSE;
-}
-
-CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget,
- FX_BOOL bNext) const {
- std::unique_ptr<CBA_AnnotIterator> pIterator(
- new CBA_AnnotIterator(pWidget->GetPageView(), "Widget", ""));
-
- if (bNext) {
- return (CPDFSDK_Widget*)pIterator->GetNextAnnot(pWidget);
- }
- return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget);
-}
-
-CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const {
- if (!pControl || !m_pInterForm)
- return nullptr;
-
- CPDFSDK_Widget* pWidget = nullptr;
- const auto it = m_Map.find(pControl);
- if (it != m_Map.end())
- pWidget = it->second;
-
- if (pWidget)
- return pWidget;
-
- CPDF_Dictionary* pControlDict = pControl->GetWidget();
- CPDF_Document* pDocument = m_pDocument->GetPDFDocument();
- CPDFSDK_PageView* pPage = nullptr;
-
- if (CPDF_Dictionary* pPageDict = pControlDict->GetDictBy("P")) {
- int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum());
- if (nPageIndex >= 0) {
- pPage = m_pDocument->GetPageView(nPageIndex);
- }
- }
-
- if (!pPage) {
- int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict);
- if (nPageIndex >= 0) {
- pPage = m_pDocument->GetPageView(nPageIndex);
- }
- }
-
- if (!pPage)
- return nullptr;
- return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict);
-}
-
-void CPDFSDK_InterForm::GetWidgets(
- const CFX_WideString& sFieldName,
- std::vector<CPDFSDK_Widget*>* widgets) const {
- for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; ++i) {
- CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName);
- ASSERT(pFormField);
- GetWidgets(pFormField, widgets);
- }
-}
-
-void CPDFSDK_InterForm::GetWidgets(
- CPDF_FormField* pField,
- std::vector<CPDFSDK_Widget*>* widgets) const {
- for (int i = 0, sz = pField->CountControls(); i < sz; ++i) {
- CPDF_FormControl* pFormCtrl = pField->GetControl(i);
- ASSERT(pFormCtrl);
- CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl);
- if (pWidget)
- widgets->push_back(pWidget);
- }
-}
-
-int CPDFSDK_InterForm::GetPageIndexByAnnotDict(
- CPDF_Document* pDocument,
- CPDF_Dictionary* pAnnotDict) const {
- ASSERT(pAnnotDict);
-
- for (int i = 0, sz = pDocument->GetPageCount(); i < sz; i++) {
- if (CPDF_Dictionary* pPageDict = pDocument->GetPage(i)) {
- if (CPDF_Array* pAnnots = pPageDict->GetArrayBy("Annots")) {
- for (int j = 0, jsz = pAnnots->GetCount(); j < jsz; j++) {
- CPDF_Object* pDict = pAnnots->GetElementValue(j);
- if (pAnnotDict == pDict) {
- return i;
- }
- }
- }
- }
- }
-
- return -1;
-}
-
-void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl,
- CPDFSDK_Widget* pWidget) {
- m_Map[pControl] = pWidget;
-}
-
-void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) {
- m_Map.erase(pControl);
-}
-
-void CPDFSDK_InterForm::EnableCalculate(FX_BOOL bEnabled) {
- m_bCalculate = bEnabled;
-}
-
-FX_BOOL CPDFSDK_InterForm::IsCalculateEnabled() const {
- return m_bCalculate;
-}
-
-#ifdef PDF_ENABLE_XFA
-void CPDFSDK_InterForm::AddXFAMap(IXFA_Widget* hWidget,
- CPDFSDK_XFAWidget* pWidget) {
- m_XFAMap.SetAt(hWidget, pWidget);
-}
-
-void CPDFSDK_InterForm::RemoveXFAMap(IXFA_Widget* hWidget) {
- m_XFAMap.RemoveKey(hWidget);
-}
-
-CPDFSDK_XFAWidget* CPDFSDK_InterForm::GetXFAWidget(IXFA_Widget* hWidget) {
- CPDFSDK_XFAWidget* pWidget = NULL;
- m_XFAMap.Lookup(hWidget, pWidget);
-
- return pWidget;
-}
-
-void CPDFSDK_InterForm::XfaEnableCalculate(FX_BOOL bEnabled) {
- m_bXfaCalculate = bEnabled;
-}
-FX_BOOL CPDFSDK_InterForm::IsXfaCalculateEnabled() const {
- return m_bXfaCalculate;
-}
-
-FX_BOOL CPDFSDK_InterForm::IsXfaValidationsEnabled() {
- return m_bXfaValidationsEnabled;
-}
-void CPDFSDK_InterForm::XfaSetValidationsEnabled(FX_BOOL bEnabled) {
- m_bXfaValidationsEnabled = bEnabled;
-}
-#endif // PDF_ENABLE_XFA
-
-void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) {
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv);
- if (!pEnv->IsJSInitiated())
- return;
-
- if (m_bBusy)
- return;
-
- m_bBusy = TRUE;
-
- if (IsCalculateEnabled()) {
- IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(m_pDocument);
-
- int nSize = m_pInterForm->CountFieldsInCalculationOrder();
- for (int i = 0; i < nSize; i++) {
- if (CPDF_FormField* pField =
- m_pInterForm->GetFieldInCalculationOrder(i)) {
- int nType = pField->GetFieldType();
- if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
- CPDF_AAction aAction = pField->GetAdditionalAction();
- if (aAction.GetDict() &&
- aAction.ActionExist(CPDF_AAction::Calculate)) {
- CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate);
- if (action.GetDict()) {
- CFX_WideString csJS = action.GetJavaScript();
- if (!csJS.IsEmpty()) {
- IJS_Context* pContext = pRuntime->NewContext();
- CFX_WideString sOldValue = pField->GetValue();
- CFX_WideString sValue = sOldValue;
- FX_BOOL bRC = TRUE;
- pContext->OnField_Calculate(pFormField, pField, sValue, bRC);
-
- CFX_WideString sInfo;
- FX_BOOL bRet = pContext->RunScript(csJS, &sInfo);
- pRuntime->ReleaseContext(pContext);
-
- if (bRet) {
- if (bRC) {
- if (sValue.Compare(sOldValue) != 0)
- pField->SetValue(sValue, TRUE);
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- m_bBusy = FALSE;
-}
-
-CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
- FX_BOOL& bFormated) {
- CFX_WideString sValue = pFormField->GetValue();
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv);
- if (!pEnv->IsJSInitiated()) {
- bFormated = FALSE;
- return sValue;
- }
-
- IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
- pRuntime->SetReaderDocument(m_pDocument);
-
- if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX) {
- if (pFormField->CountSelectedItems() > 0) {
- int index = pFormField->GetSelectedIndex(0);
- if (index >= 0)
- sValue = pFormField->GetOptionLabel(index);
- }
- }
-
- bFormated = FALSE;
-
- CPDF_AAction aAction = pFormField->GetAdditionalAction();
- if (aAction.GetDict() && aAction.ActionExist(CPDF_AAction::Format)) {
- CPDF_Action action = aAction.GetAction(CPDF_AAction::Format);
- if (action.GetDict()) {
- CFX_WideString script = action.GetJavaScript();
- if (!script.IsEmpty()) {
- CFX_WideString Value = sValue;
-
- IJS_Context* pContext = pRuntime->NewContext();
- pContext->OnField_Format(pFormField, Value, TRUE);
-
- CFX_WideString sInfo;
- FX_BOOL bRet = pContext->RunScript(script, &sInfo);
- pRuntime->ReleaseContext(pContext);
-
- if (bRet) {
- sValue = Value;
- bFormated = TRUE;
- }
- }
- }
- }
-
- return sValue;
-}
-
-void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField,
- const FX_WCHAR* sValue,
- FX_BOOL bValueChanged) {
- for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
- CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
- ASSERT(pFormCtrl);
- if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl))
- pWidget->ResetAppearance(sValue, bValueChanged);
- }
-}
-
-void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) {
- for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
- CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
- ASSERT(pFormCtrl);
-
- if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) {
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller();
- UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
- CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage, FALSE);
- FX_RECT rcBBox = pIFormFiller->GetViewBBox(pPageView, pWidget);
-
- pEnv->FFI_Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right,
- rcBBox.bottom);
- }
- }
-}
-
-FX_BOOL CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField,
- const CFX_WideString& csValue) {
- CPDF_AAction aAction = pFormField->GetAdditionalAction();
- if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::KeyStroke))
- return TRUE;
-
- CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke);
- if (!action.GetDict())
- return TRUE;
-
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
- PDFSDK_FieldAction fa;
- fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
- fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
- fa.sValue = csValue;
- pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke,
- m_pDocument, pFormField, fa);
- return fa.bRC;
-}
-
-FX_BOOL CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField,
- const CFX_WideString& csValue) {
- CPDF_AAction aAction = pFormField->GetAdditionalAction();
- if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Validate))
- return TRUE;
-
- CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate);
- if (!action.GetDict())
- return TRUE;
-
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
- PDFSDK_FieldAction fa;
- fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
- fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
- fa.sValue = csValue;
- pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate,
- m_pDocument, pFormField, fa);
- return fa.bRC;
-}
-
-FX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) {
- ASSERT(action.GetDict());
-
- CPDF_ActionFields af(&action);
- std::vector<CPDF_Object*> fieldObjects = af.GetAllFields();
- std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects);
-
- FX_BOOL bHide = action.GetHideStatus();
- FX_BOOL bChanged = FALSE;
-
- for (CPDF_FormField* pField : fields) {
- for (int i = 0, sz = pField->CountControls(); i < sz; ++i) {
- CPDF_FormControl* pControl = pField->GetControl(i);
- ASSERT(pControl);
-
- if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) {
- FX_DWORD nFlags = pWidget->GetFlags();
- nFlags &= ~ANNOTFLAG_INVISIBLE;
- nFlags &= ~ANNOTFLAG_NOVIEW;
- if (bHide)
- nFlags |= ANNOTFLAG_HIDDEN;
- else
- nFlags &= ~ANNOTFLAG_HIDDEN;
- pWidget->SetFlags(nFlags);
- pWidget->GetPageView()->UpdateView(pWidget);
- bChanged = TRUE;
- }
- }
- }
-
- return bChanged;
-}
-
-FX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) {
- CFX_WideString sDestination = action.GetFilePath();
- if (sDestination.IsEmpty())
- return FALSE;
-
- CPDF_Dictionary* pActionDict = action.GetDict();
- if (pActionDict->KeyExist("Fields")) {
- CPDF_ActionFields af(&action);
- FX_DWORD dwFlags = action.GetFlags();
- std::vector<CPDF_Object*> fieldObjects = af.GetAllFields();
- std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects);
- if (!fields.empty()) {
- bool bIncludeOrExclude = !(dwFlags & 0x01);
- if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude))
- return FALSE;
-
- return SubmitFields(sDestination, fields, bIncludeOrExclude, false);
- }
- }
- if (m_pInterForm->CheckRequiredFields(nullptr, true))
- return FALSE;
-
- return SubmitForm(sDestination, FALSE);
-}
-
-FX_BOOL CPDFSDK_InterForm::SubmitFields(
- const CFX_WideString& csDestination,
- const std::vector<CPDF_FormField*>& fields,
- bool bIncludeOrExclude,
- bool bUrlEncoded) {
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
-
- CFX_ByteTextBuf textBuf;
- ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf);
-
- uint8_t* pBuffer = textBuf.GetBuffer();
- FX_STRSIZE nBufSize = textBuf.GetLength();
-
- if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
- return FALSE;
-
- pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile,
- CFX_WideString csTxtFile) {
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf,
- FX_STRSIZE& nBufSize) {
- CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize);
- if (pFDF) {
- CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDictBy("FDF");
- if (!pMainDict)
- return FALSE;
-
- // Get fields
- CPDF_Array* pFields = pMainDict->GetArrayBy("Fields");
- if (!pFields)
- return FALSE;
-
- CFX_ByteTextBuf fdfEncodedData;
- for (FX_DWORD i = 0; i < pFields->GetCount(); i++) {
- CPDF_Dictionary* pField = pFields->GetDictAt(i);
- if (!pField)
- continue;
- CFX_WideString name;
- name = pField->GetUnicodeTextBy("T");
- CFX_ByteString name_b = CFX_ByteString::FromUnicode(name);
- CFX_ByteString csBValue = pField->GetStringBy("V");
- CFX_WideString csWValue = PDF_DecodeText(csBValue);
- CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue);
-
- fdfEncodedData << name_b.GetBuffer(name_b.GetLength());
- name_b.ReleaseBuffer();
- fdfEncodedData << "=";
- fdfEncodedData << csValue_b.GetBuffer(csValue_b.GetLength());
- csValue_b.ReleaseBuffer();
- if (i != pFields->GetCount() - 1)
- fdfEncodedData << "&";
- }
-
- nBufSize = fdfEncodedData.GetLength();
- pBuf = FX_Alloc(uint8_t, nBufSize);
- FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
- }
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
- const std::vector<CPDF_FormField*>& fields,
- bool bIncludeOrExclude,
- CFX_ByteTextBuf& textBuf) {
- std::unique_ptr<CFDF_Document> pFDF(m_pInterForm->ExportToFDF(
- m_pDocument->GetPath(), fields, bIncludeOrExclude));
- return pFDF ? pFDF->WriteBuf(textBuf) : FALSE;
-}
-
-#ifdef PDF_ENABLE_XFA
-void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField,
- FX_BOOL bSynchronizeElse) {
- int x = 0;
- if (m_FieldSynchronizeMap.Lookup(pFormField, x))
- return;
-
- for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
- CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
- ASSERT(pFormCtrl);
- ASSERT(m_pInterForm);
- if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) {
- pWidget->Synchronize(bSynchronizeElse);
- }
- }
-}
-#endif // PDF_ENABLE_XFA
-
-CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(
- const CFX_WideString& sFileExt) {
- CFX_WideString sFileName;
- return L"";
-}
-
-FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination,
- FX_BOOL bUrlEncoded) {
- if (sDestination.IsEmpty())
- return FALSE;
-
- if (!m_pDocument || !m_pInterForm)
- return FALSE;
-
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- CFX_WideString wsPDFFilePath = m_pDocument->GetPath();
- CFDF_Document* pFDFDoc = m_pInterForm->ExportToFDF(wsPDFFilePath);
- if (!pFDFDoc)
- return FALSE;
-
- CFX_ByteTextBuf FdfBuffer;
- FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer);
- delete pFDFDoc;
- if (!bRet)
- return FALSE;
-
- uint8_t* pBuffer = FdfBuffer.GetBuffer();
- FX_STRSIZE nBufSize = FdfBuffer.GetLength();
-
- if (bUrlEncoded) {
- if (!FDFToURLEncodedData(pBuffer, nBufSize))
- return FALSE;
- }
-
- pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
-
- if (bUrlEncoded) {
- FX_Free(pBuffer);
- pBuffer = NULL;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) {
- CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath());
- if (!pFDF)
- return FALSE;
-
- FX_BOOL bRet = pFDF->WriteBuf(textBuf);
- delete pFDF;
-
- return bRet;
-}
-
-FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) {
- ASSERT(action.GetDict());
-
- CPDF_Dictionary* pActionDict = action.GetDict();
- if (!pActionDict->KeyExist("Fields"))
- return m_pInterForm->ResetForm(true);
-
- CPDF_ActionFields af(&action);
- FX_DWORD dwFlags = action.GetFlags();
-
- std::vector<CPDF_Object*> fieldObjects = af.GetAllFields();
- std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects);
- return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), true);
-}
-
-FX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action) {
- return FALSE;
-}
-
-std::vector<CPDF_FormField*> CPDFSDK_InterForm::GetFieldFromObjects(
- const std::vector<CPDF_Object*>& objects) const {
- std::vector<CPDF_FormField*> fields;
- for (CPDF_Object* pObject : objects) {
- if (pObject && pObject->IsString()) {
- CFX_WideString csName = pObject->GetUnicodeText();
- CPDF_FormField* pField = m_pInterForm->GetField(0, csName);
- if (pField)
- fields.push_back(pField);
- }
- }
- return fields;
-}
-
-int CPDFSDK_InterForm::BeforeValueChange(CPDF_FormField* pField,
- const CFX_WideString& csValue) {
- int nType = pField->GetFieldType();
- if (nType != FIELDTYPE_COMBOBOX && nType != FIELDTYPE_TEXTFIELD)
- return 0;
-
- if (!OnKeyStrokeCommit(pField, csValue))
- return -1;
-
- if (!OnValidate(pField, csValue))
- return -1;
-
- return 1;
-}
-
-void CPDFSDK_InterForm::AfterValueChange(CPDF_FormField* pField) {
-#ifdef PDF_ENABLE_XFA
- SynchronizeField(pField, FALSE);
-#endif // PDF_ENABLE_XFA
- int nType = pField->GetFieldType();
- if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
- OnCalculate(pField);
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = OnFormat(pField, bFormated);
- ResetFieldAppearance(pField, bFormated ? sValue.c_str() : nullptr, TRUE);
- UpdateField(pField);
- }
-}
-
-int CPDFSDK_InterForm::BeforeSelectionChange(CPDF_FormField* pField,
- const CFX_WideString& csValue) {
- if (pField->GetFieldType() != FIELDTYPE_LISTBOX)
- return 0;
-
- if (!OnKeyStrokeCommit(pField, csValue))
- return -1;
-
- if (!OnValidate(pField, csValue))
- return -1;
-
- return 1;
-}
-
-void CPDFSDK_InterForm::AfterSelectionChange(CPDF_FormField* pField) {
- if (pField->GetFieldType() == FIELDTYPE_LISTBOX) {
- OnCalculate(pField);
- ResetFieldAppearance(pField, NULL, TRUE);
- UpdateField(pField);
- }
-}
-
-void CPDFSDK_InterForm::AfterCheckedStatusChange(CPDF_FormField* pField) {
- int nType = pField->GetFieldType();
- if (nType == FIELDTYPE_CHECKBOX || nType == FIELDTYPE_RADIOBUTTON) {
- OnCalculate(pField);
- UpdateField(pField);
- }
-}
-
-int CPDFSDK_InterForm::BeforeFormReset(CPDF_InterForm* pForm) {
- return 0;
-}
-
-void CPDFSDK_InterForm::AfterFormReset(CPDF_InterForm* pForm) {
- OnCalculate(nullptr);
-}
-
-int CPDFSDK_InterForm::BeforeFormImportData(CPDF_InterForm* pForm) {
- return 0;
-}
-
-void CPDFSDK_InterForm::AfterFormImportData(CPDF_InterForm* pForm) {
- OnCalculate(nullptr);
-}
-
-FX_BOOL CPDFSDK_InterForm::IsNeedHighLight(int nFieldType) {
- if (nFieldType < 1 || nFieldType > kNumFieldTypes)
- return FALSE;
- return m_bNeedHightlight[nFieldType - 1];
-}
-
-void CPDFSDK_InterForm::RemoveAllHighLight() {
- for (int i = 0; i < kNumFieldTypes; ++i)
- m_bNeedHightlight[i] = FALSE;
-}
-
-void CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType) {
- if (nFieldType < 0 || nFieldType > kNumFieldTypes)
- return;
- switch (nFieldType) {
- case 0: {
- for (int i = 0; i < kNumFieldTypes; ++i) {
- m_aHighlightColor[i] = clr;
- m_bNeedHightlight[i] = TRUE;
- }
- break;
- }
- default: {
- m_aHighlightColor[nFieldType - 1] = clr;
- m_bNeedHightlight[nFieldType - 1] = TRUE;
- break;
- }
- }
-}
-
-FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) {
- if (nFieldType < 0 || nFieldType > kNumFieldTypes)
- return FXSYS_RGB(255, 255, 255);
- if (nFieldType == 0)
- return m_aHighlightColor[0];
- return m_aHighlightColor[nFieldType - 1];
-}
-
-CBA_AnnotIterator::CBA_AnnotIterator(CPDFSDK_PageView* pPageView,
- const CFX_ByteString& sType,
- const CFX_ByteString& sSubType)
- : m_eTabOrder(STRUCTURE),
- m_pPageView(pPageView),
- m_sType(sType),
- m_sSubType(sSubType) {
- CPDF_Page* pPDFPage = m_pPageView->GetPDFPage();
- CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetStringBy("Tabs");
- if (sTabs == "R")
- m_eTabOrder = ROW;
- else if (sTabs == "C")
- m_eTabOrder = COLUMN;
-
- GenerateResults();
-}
-
-CBA_AnnotIterator::~CBA_AnnotIterator() {
-}
-
-CPDFSDK_Annot* CBA_AnnotIterator::GetFirstAnnot() {
- return m_Annots.empty() ? nullptr : m_Annots.front();
-}
-
-CPDFSDK_Annot* CBA_AnnotIterator::GetLastAnnot() {
- return m_Annots.empty() ? nullptr : m_Annots.back();
-}
-
-CPDFSDK_Annot* CBA_AnnotIterator::GetNextAnnot(CPDFSDK_Annot* pAnnot) {
- auto iter = std::find(m_Annots.begin(), m_Annots.end(), pAnnot);
- if (iter == m_Annots.end())
- return nullptr;
- ++iter;
- if (iter == m_Annots.end())
- iter = m_Annots.begin();
- return *iter;
-}
-
-CPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot) {
- auto iter = std::find(m_Annots.begin(), m_Annots.end(), pAnnot);
- if (iter == m_Annots.end())
- return nullptr;
- if (iter == m_Annots.begin())
- iter = m_Annots.end();
- return *(--iter);
-}
-
-// static
-bool CBA_AnnotIterator::CompareByLeftAscending(const CPDFSDK_Annot* p1,
- const CPDFSDK_Annot* p2) {
- return GetAnnotRect(p1).left < GetAnnotRect(p2).left;
-}
-
-// static
-bool CBA_AnnotIterator::CompareByTopDescending(const CPDFSDK_Annot* p1,
- const CPDFSDK_Annot* p2) {
- return GetAnnotRect(p1).top > GetAnnotRect(p2).top;
-}
-
-void CBA_AnnotIterator::GenerateResults() {
- switch (m_eTabOrder) {
- case STRUCTURE: {
- for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) {
- CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
- if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType)
- m_Annots.push_back(pAnnot);
- }
- } break;
- case ROW: {
- std::vector<CPDFSDK_Annot*> sa;
- for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) {
- CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
- if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType)
- sa.push_back(pAnnot);
- }
-
- std::sort(sa.begin(), sa.end(), CompareByLeftAscending);
- while (!sa.empty()) {
- int nLeftTopIndex = -1;
- FX_FLOAT fTop = 0.0f;
- for (int i = sa.size() - 1; i >= 0; i--) {
- CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
- if (rcAnnot.top > fTop) {
- nLeftTopIndex = i;
- fTop = rcAnnot.top;
- }
- }
- if (nLeftTopIndex >= 0) {
- CPDFSDK_Annot* pLeftTopAnnot = sa[nLeftTopIndex];
- CFX_FloatRect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
- m_Annots.push_back(pLeftTopAnnot);
- sa.erase(sa.begin() + nLeftTopIndex);
-
- std::vector<int> aSelect;
- for (int i = 0; i < sa.size(); ++i) {
- CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
- FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f;
- if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top)
- aSelect.push_back(i);
- }
- for (int i = 0; i < aSelect.size(); ++i)
- m_Annots.push_back(sa[aSelect[i]]);
-
- for (int i = aSelect.size() - 1; i >= 0; --i)
- sa.erase(sa.begin() + aSelect[i]);
- }
- }
- } break;
- case COLUMN: {
- std::vector<CPDFSDK_Annot*> sa;
- for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) {
- CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
- if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType)
- sa.push_back(pAnnot);
- }
-
- std::sort(sa.begin(), sa.end(), CompareByTopDescending);
- while (!sa.empty()) {
- int nLeftTopIndex = -1;
- FX_FLOAT fLeft = -1.0f;
- for (int i = sa.size() - 1; i >= 0; --i) {
- CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
- if (fLeft < 0) {
- nLeftTopIndex = 0;
- fLeft = rcAnnot.left;
- } else if (rcAnnot.left < fLeft) {
- nLeftTopIndex = i;
- fLeft = rcAnnot.left;
- }
- }
-
- if (nLeftTopIndex >= 0) {
- CPDFSDK_Annot* pLeftTopAnnot = sa[nLeftTopIndex];
- CFX_FloatRect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
- m_Annots.push_back(pLeftTopAnnot);
- sa.erase(sa.begin() + nLeftTopIndex);
-
- std::vector<int> aSelect;
- for (int i = 0; i < sa.size(); ++i) {
- CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
- FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f;
- if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
- aSelect.push_back(i);
- }
- for (int i = 0; i < aSelect.size(); ++i)
- m_Annots.push_back(sa[aSelect[i]]);
-
- for (int i = aSelect.size() - 1; i >= 0; --i)
- sa.erase(sa.begin() + aSelect[i]);
- }
- }
- break;
- }
- }
-}
-
-CFX_FloatRect CBA_AnnotIterator::GetAnnotRect(const CPDFSDK_Annot* pAnnot) {
- CFX_FloatRect rcAnnot;
- pAnnot->GetPDFAnnot()->GetRect(rcAnnot);
- return rcAnnot;
-}
diff --git a/fpdfsdk/src/fsdk_baseform_embeddertest.cpp b/fpdfsdk/src/fsdk_baseform_embeddertest.cpp
deleted file mode 100644
index 4fd3bb785c..0000000000
--- a/fpdfsdk/src/fsdk_baseform_embeddertest.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "fpdfsdk/include/fsdk_baseform.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "testing/embedder_test.h"
-#include "testing/embedder_test_mock_delegate.h"
-#include "testing/embedder_test_timer_handling_delegate.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-void CheckRect(const CFX_FloatRect& actual, const CFX_FloatRect& expected) {
- EXPECT_EQ(expected.left, actual.left);
- EXPECT_EQ(expected.bottom, actual.bottom);
- EXPECT_EQ(expected.right, actual.right);
- EXPECT_EQ(expected.top, actual.top);
-}
-
-} // namespace
-
-class FSDKBaseFormEmbeddertest : public EmbedderTest {};
-
-TEST_F(FSDKBaseFormEmbeddertest, CBA_AnnotIterator) {
- EXPECT_TRUE(OpenDocument("annotiter.pdf"));
- EXPECT_TRUE(LoadPage(0));
- EXPECT_TRUE(LoadPage(1));
- EXPECT_TRUE(LoadPage(2));
-
- CFX_FloatRect LeftBottom(200, 200, 220, 220);
- CFX_FloatRect RightBottom(400, 201, 420, 221);
- CFX_FloatRect LeftTop(201, 400, 221, 420);
- CFX_FloatRect RightTop(401, 401, 421, 421);
-
- CPDFSDK_Document* pSDKDoc =
- CPDFSDK_Document::FromFPDFFormHandle(form_handle());
- {
- // Page 0 specifies "row order".
- CBA_AnnotIterator iter(pSDKDoc->GetPageView(0), "Widget", "");
- CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
- CheckRect(pAnnot->GetRect(), RightTop);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftTop);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightBottom);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftBottom);
- pAnnot = iter.GetNextAnnot(pAnnot);
- EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
-
- pAnnot = iter.GetLastAnnot();
- CheckRect(pAnnot->GetRect(), LeftBottom);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightBottom);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftTop);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightTop);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
- }
- {
- // Page 1 specifies "column order"
- CBA_AnnotIterator iter(pSDKDoc->GetPageView(1), "Widget", "");
- CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
- CheckRect(pAnnot->GetRect(), RightTop);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightBottom);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftTop);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftBottom);
- pAnnot = iter.GetNextAnnot(pAnnot);
- EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
-
- pAnnot = iter.GetLastAnnot();
- CheckRect(pAnnot->GetRect(), LeftBottom);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftTop);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightBottom);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightTop);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
- }
- {
- // Page 2 specifies "struct order"
- CBA_AnnotIterator iter(pSDKDoc->GetPageView(2), "Widget", "");
- CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
- CheckRect(pAnnot->GetRect(), LeftBottom);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightTop);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftTop);
- pAnnot = iter.GetNextAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightBottom);
- pAnnot = iter.GetNextAnnot(pAnnot);
- EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
-
- pAnnot = iter.GetLastAnnot();
- CheckRect(pAnnot->GetRect(), RightBottom);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftTop);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), RightTop);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- CheckRect(pAnnot->GetRect(), LeftBottom);
- pAnnot = iter.GetPrevAnnot(pAnnot);
- EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
- }
-}
diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp
deleted file mode 100644
index 519aa06945..0000000000
--- a/fpdfsdk/src/fsdk_mgr.cpp
+++ /dev/null
@@ -1,1201 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fsdk_mgr.h"
-
-#include <algorithm>
-#include <memory>
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
-#include "fpdfsdk/include/fsdk_define.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "public/fpdf_ext.h"
-#include "third_party/base/stl_util.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
-#include "xfa/include/fxgraphics/fx_graphics.h"
-#endif // PDF_ENABLE_XFA
-
-#if _FX_OS_ == _FX_ANDROID_
-#include "time.h"
-#else
-#include <ctime>
-#endif
-
-namespace {
-
-int CharSet2CP(int charset) {
- if (charset == 128)
- return 932;
- if (charset == 134)
- return 936;
- if (charset == 129)
- return 949;
- if (charset == 136)
- return 950;
- return 0;
-}
-
-} // namespace
-
-FPDF_WIDESTRING AsFPDFWideString(CFX_ByteString* bsUTF16LE) {
- return reinterpret_cast<FPDF_WIDESTRING>(
- bsUTF16LE->GetBuffer(bsUTF16LE->GetLength()));
-}
-
-class CFX_SystemHandler : public IFX_SystemHandler {
- public:
- explicit CFX_SystemHandler(CPDFDoc_Environment* pEnv)
- : m_pEnv(pEnv), m_nCharSet(-1) {}
- ~CFX_SystemHandler() override {}
-
- public:
- // IFX_SystemHandler
- void InvalidateRect(FX_HWND hWnd, FX_RECT rect) override;
- void OutputSelectedRect(void* pFormFiller, CFX_FloatRect& rect) override;
- FX_BOOL IsSelectionImplemented() override;
- CFX_WideString GetClipboardText(FX_HWND hWnd) override { return L""; }
- FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString str) override {
- return FALSE;
- }
- void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) override {}
- void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) override {}
- void SetCursor(int32_t nCursorType) override;
- FX_HMENU CreatePopupMenu() override { return NULL; }
- FX_BOOL AppendMenuItem(FX_HMENU hMenu,
- int32_t nIDNewItem,
- CFX_WideString str) override {
- return FALSE;
- }
- FX_BOOL EnableMenuItem(FX_HMENU hMenu,
- int32_t nIDItem,
- FX_BOOL bEnabled) override {
- return FALSE;
- }
- int32_t TrackPopupMenu(FX_HMENU hMenu,
- int32_t x,
- int32_t y,
- FX_HWND hParent) override {
- return -1;
- }
- void DestroyMenu(FX_HMENU hMenu) override {}
- CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset) override;
- FX_BOOL FindNativeTrueTypeFont(int32_t nCharset,
- CFX_ByteString sFontFaceName) override;
- CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
- CFX_ByteString sFontFaceName,
- uint8_t nCharset) override;
- int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) override;
- void KillTimer(int32_t nID) override;
- FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) override {
- return m_pEnv->FFI_IsSHIFTKeyDown(nFlag);
- }
- FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) override {
- return m_pEnv->FFI_IsCTRLKeyDown(nFlag);
- }
- FX_BOOL IsALTKeyDown(FX_DWORD nFlag) override {
- return m_pEnv->FFI_IsALTKeyDown(nFlag);
- }
- FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) override {
- return m_pEnv->FFI_IsINSERTKeyDown(nFlag);
- }
- FX_SYSTEMTIME GetLocalTime() override;
- int32_t GetCharSet() override { return m_nCharSet; }
- void SetCharSet(int32_t nCharSet) override { m_nCharSet = nCharSet; }
-
- private:
- CPDFDoc_Environment* m_pEnv;
- int m_nCharSet;
-};
-
-void CFX_SystemHandler::SetCursor(int32_t nCursorType) {
- m_pEnv->FFI_SetCursor(nCursorType);
-}
-
-void CFX_SystemHandler::InvalidateRect(FX_HWND hWnd, FX_RECT rect) {
- CPDFSDK_Annot* pSDKAnnot = (CPDFSDK_Annot*)hWnd;
- CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView();
- UnderlyingPageType* pPage = pSDKAnnot->GetUnderlyingPage();
- if (!pPage || !pPageView)
- return;
- CFX_Matrix page2device;
- pPageView->GetCurrentMatrix(page2device);
- CFX_Matrix device2page;
- device2page.SetReverse(page2device);
- FX_FLOAT left, top, right, bottom;
- device2page.Transform((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, left, top);
- device2page.Transform((FX_FLOAT)rect.right, (FX_FLOAT)rect.bottom, right,
- bottom);
- CFX_FloatRect rcPDF(left, bottom, right, top);
- rcPDF.Normalize();
-
- m_pEnv->FFI_Invalidate(pPage, rcPDF.left, rcPDF.top, rcPDF.right,
- rcPDF.bottom);
-}
-void CFX_SystemHandler::OutputSelectedRect(void* pFormFiller,
- CFX_FloatRect& rect) {
- CFFL_FormFiller* pFFL = (CFFL_FormFiller*)pFormFiller;
- if (pFFL) {
- CFX_FloatPoint leftbottom = CFX_FloatPoint(rect.left, rect.bottom);
- CFX_FloatPoint righttop = CFX_FloatPoint(rect.right, rect.top);
- CFX_FloatPoint ptA = pFFL->PWLtoFFL(leftbottom);
- CFX_FloatPoint ptB = pFFL->PWLtoFFL(righttop);
- CPDFSDK_Annot* pAnnot = pFFL->GetSDKAnnot();
- UnderlyingPageType* pPage = pAnnot->GetUnderlyingPage();
- ASSERT(pPage);
- m_pEnv->FFI_OutputSelectedRect(pPage, ptA.x, ptB.y, ptB.x, ptA.y);
- }
-}
-
-FX_BOOL CFX_SystemHandler::IsSelectionImplemented() {
- if (m_pEnv) {
- FPDF_FORMFILLINFO* pInfo = m_pEnv->GetFormFillInfo();
- if (pInfo && pInfo->FFI_OutputSelectedRect)
- return TRUE;
- }
- return FALSE;
-}
-
-CFX_ByteString CFX_SystemHandler::GetNativeTrueTypeFont(int32_t nCharset) {
- return "";
-}
-
-FX_BOOL CFX_SystemHandler::FindNativeTrueTypeFont(
- int32_t nCharset,
- CFX_ByteString sFontFaceName) {
- CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
- if (!pFontMgr)
- return FALSE;
-
- CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
- if (!pFontMapper)
- return FALSE;
-
- if (pFontMapper->m_InstalledTTFonts.empty())
- pFontMapper->LoadInstalledFonts();
-
- for (const auto& font : pFontMapper->m_InstalledTTFonts) {
- if (font.Compare(sFontFaceName))
- return TRUE;
- }
-
- return FALSE;
-}
-
-CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF(
- CPDF_Document* pDoc,
- CFX_ByteString sFontFaceName,
- uint8_t nCharset) {
- if (pDoc) {
- CFX_Font* pFXFont = new CFX_Font();
- pFXFont->LoadSubst(sFontFaceName, TRUE, 0, 0, 0, CharSet2CP(nCharset),
- FALSE);
- CPDF_Font* pFont = pDoc->AddFont(pFXFont, nCharset, FALSE);
- delete pFXFont;
- return pFont;
- }
-
- return NULL;
-}
-
-int32_t CFX_SystemHandler::SetTimer(int32_t uElapse,
- TimerCallback lpTimerFunc) {
- return m_pEnv->FFI_SetTimer(uElapse, lpTimerFunc);
-}
-void CFX_SystemHandler::KillTimer(int32_t nID) {
- m_pEnv->FFI_KillTimer(nID);
-}
-
-FX_SYSTEMTIME CFX_SystemHandler::GetLocalTime() {
- return m_pEnv->FFI_GetLocalTime();
-}
-
-CPDFDoc_Environment::CPDFDoc_Environment(UnderlyingDocumentType* pDoc,
- FPDF_FORMFILLINFO* pFFinfo)
- : m_pInfo(pFFinfo), m_pSDKDoc(NULL), m_pUnderlyingDoc(pDoc) {
- m_pSysHandler.reset(new CFX_SystemHandler(this));
-}
-
-CPDFDoc_Environment::~CPDFDoc_Environment() {
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance();
- if (pProvider->m_pEnvList.GetSize() == 0)
- pProvider->SetJavaScriptInitialized(FALSE);
-#endif // PDF_ENABLE_XFA
-}
-
-int CPDFDoc_Environment::JS_appAlert(const FX_WCHAR* Msg,
- const FX_WCHAR* Title,
- FX_UINT Type,
- FX_UINT Icon) {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->app_alert) {
- return -1;
- }
- CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
- CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
- return m_pInfo->m_pJsPlatform->app_alert(
- m_pInfo->m_pJsPlatform, AsFPDFWideString(&bsMsg),
- AsFPDFWideString(&bsTitle), Type, Icon);
-}
-
-int CPDFDoc_Environment::JS_appResponse(const FX_WCHAR* Question,
- const FX_WCHAR* Title,
- const FX_WCHAR* Default,
- const FX_WCHAR* cLabel,
- FPDF_BOOL bPassword,
- void* response,
- int length) {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->app_response) {
- return -1;
- }
- CFX_ByteString bsQuestion = CFX_WideString(Question).UTF16LE_Encode();
- CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
- CFX_ByteString bsDefault = CFX_WideString(Default).UTF16LE_Encode();
- CFX_ByteString bsLabel = CFX_WideString(cLabel).UTF16LE_Encode();
- return m_pInfo->m_pJsPlatform->app_response(
- m_pInfo->m_pJsPlatform, AsFPDFWideString(&bsQuestion),
- AsFPDFWideString(&bsTitle), AsFPDFWideString(&bsDefault),
- AsFPDFWideString(&bsLabel), bPassword, response, length);
-}
-
-void CPDFDoc_Environment::JS_appBeep(int nType) {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->app_beep) {
- return;
- }
- m_pInfo->m_pJsPlatform->app_beep(m_pInfo->m_pJsPlatform, nType);
-}
-
-CFX_WideString CPDFDoc_Environment::JS_fieldBrowse() {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Field_browse) {
- return CFX_WideString();
- }
- const int nRequiredLen =
- m_pInfo->m_pJsPlatform->Field_browse(m_pInfo->m_pJsPlatform, nullptr, 0);
- if (nRequiredLen <= 0)
- return CFX_WideString();
-
- std::unique_ptr<char[]> pBuff(new char[nRequiredLen]);
- memset(pBuff.get(), 0, nRequiredLen);
- const int nActualLen = m_pInfo->m_pJsPlatform->Field_browse(
- m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen);
- if (nActualLen <= 0 || nActualLen > nRequiredLen)
- return CFX_WideString();
-
- return CFX_WideString::FromLocal(CFX_ByteString(pBuff.get(), nActualLen));
-}
-
-CFX_WideString CPDFDoc_Environment::JS_docGetFilePath() {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Doc_getFilePath) {
- return CFX_WideString();
- }
- const int nRequiredLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
- m_pInfo->m_pJsPlatform, nullptr, 0);
- if (nRequiredLen <= 0)
- return CFX_WideString();
-
- std::unique_ptr<char[]> pBuff(new char[nRequiredLen]);
- memset(pBuff.get(), 0, nRequiredLen);
- const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
- m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen);
- if (nActualLen <= 0 || nActualLen > nRequiredLen)
- return CFX_WideString();
-
- return CFX_WideString::FromLocal(CFX_ByteString(pBuff.get(), nActualLen));
-}
-
-void CPDFDoc_Environment::JS_docSubmitForm(void* formData,
- int length,
- const FX_WCHAR* URL) {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Doc_submitForm) {
- return;
- }
- CFX_ByteString bsDestination = CFX_WideString(URL).UTF16LE_Encode();
- m_pInfo->m_pJsPlatform->Doc_submitForm(m_pInfo->m_pJsPlatform, formData,
- length,
- AsFPDFWideString(&bsDestination));
-}
-
-void CPDFDoc_Environment::JS_docmailForm(void* mailData,
- int length,
- FPDF_BOOL bUI,
- const FX_WCHAR* To,
- const FX_WCHAR* Subject,
- const FX_WCHAR* CC,
- const FX_WCHAR* BCC,
- const FX_WCHAR* Msg) {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Doc_mail) {
- return;
- }
- CFX_ByteString bsTo = CFX_WideString(To).UTF16LE_Encode();
- CFX_ByteString bsSubject = CFX_WideString(Subject).UTF16LE_Encode();
- CFX_ByteString bsCC = CFX_WideString(CC).UTF16LE_Encode();
- CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode();
- CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
- m_pInfo->m_pJsPlatform->Doc_mail(
- m_pInfo->m_pJsPlatform, mailData, length, bUI, AsFPDFWideString(&bsTo),
- AsFPDFWideString(&bsSubject), AsFPDFWideString(&bsCC),
- AsFPDFWideString(&bsBcc), AsFPDFWideString(&bsMsg));
-}
-
-void CPDFDoc_Environment::JS_docprint(FPDF_BOOL bUI,
- int nStart,
- int nEnd,
- FPDF_BOOL bSilent,
- FPDF_BOOL bShrinkToFit,
- FPDF_BOOL bPrintAsImage,
- FPDF_BOOL bReverse,
- FPDF_BOOL bAnnotations) {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Doc_print) {
- return;
- }
- m_pInfo->m_pJsPlatform->Doc_print(m_pInfo->m_pJsPlatform, bUI, nStart, nEnd,
- bSilent, bShrinkToFit, bPrintAsImage,
- bReverse, bAnnotations);
-}
-
-void CPDFDoc_Environment::JS_docgotoPage(int nPageNum) {
- if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Doc_gotoPage) {
- return;
- }
- m_pInfo->m_pJsPlatform->Doc_gotoPage(m_pInfo->m_pJsPlatform, nPageNum);
-}
-
-IJS_Runtime* CPDFDoc_Environment::GetJSRuntime() {
- if (!IsJSInitiated())
- return NULL;
- if (!m_pJSRuntime)
- m_pJSRuntime.reset(IJS_Runtime::Create(this));
- return m_pJSRuntime.get();
-}
-
-CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr() {
- if (!m_pAnnotHandlerMgr)
- m_pAnnotHandlerMgr.reset(new CPDFSDK_AnnotHandlerMgr(this));
- return m_pAnnotHandlerMgr.get();
-}
-
-CPDFSDK_ActionHandler* CPDFDoc_Environment::GetActionHander() {
- if (!m_pActionHandler)
- m_pActionHandler.reset(new CPDFSDK_ActionHandler());
- return m_pActionHandler.get();
-}
-
-CFFL_IFormFiller* CPDFDoc_Environment::GetIFormFiller() {
- if (!m_pIFormFiller)
- m_pIFormFiller.reset(new CFFL_IFormFiller(this));
- return m_pIFormFiller.get();
-}
-
-// static
-CPDFSDK_Document* CPDFSDK_Document::FromFPDFFormHandle(
- FPDF_FORMHANDLE hHandle) {
- CPDFDoc_Environment* pEnv = static_cast<CPDFDoc_Environment*>(hHandle);
- return pEnv ? pEnv->GetSDKDocument() : nullptr;
-}
-
-CPDFSDK_Document::CPDFSDK_Document(UnderlyingDocumentType* pDoc,
- CPDFDoc_Environment* pEnv)
- : m_pDoc(pDoc),
- m_pFocusAnnot(nullptr),
- m_pEnv(pEnv),
- m_bChangeMask(FALSE),
- m_bBeingDestroyed(FALSE) {}
-
-CPDFSDK_Document::~CPDFSDK_Document() {
- m_bBeingDestroyed = TRUE;
-
- for (auto& it : m_pageMap)
- it.second->KillFocusAnnotIfNeeded();
-
- for (auto& it : m_pageMap)
- delete it.second;
- m_pageMap.clear();
-}
-
-CPDFSDK_PageView* CPDFSDK_Document::GetPageView(
- UnderlyingPageType* pUnderlyingPage,
- FX_BOOL ReNew) {
- auto it = m_pageMap.find(pUnderlyingPage);
- if (it != m_pageMap.end())
- return it->second;
-
- if (!ReNew)
- return nullptr;
-
- CPDFSDK_PageView* pPageView = new CPDFSDK_PageView(this, pUnderlyingPage);
- m_pageMap[pUnderlyingPage] = pPageView;
- // Delay to load all the annotations, to avoid endless loop.
- pPageView->LoadFXAnnots();
- return pPageView;
-}
-
-CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() {
- UnderlyingPageType* pPage =
- UnderlyingFromFPDFPage(m_pEnv->FFI_GetCurrentPage(m_pDoc));
- return pPage ? GetPageView(pPage, TRUE) : nullptr;
-}
-
-CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex) {
- UnderlyingPageType* pTempPage =
- UnderlyingFromFPDFPage(m_pEnv->FFI_GetPage(m_pDoc, nIndex));
- if (!pTempPage)
- return nullptr;
-
- auto it = m_pageMap.find(pTempPage);
- return it->second;
-}
-
-void CPDFSDK_Document::ProcJavascriptFun() {
- CPDF_Document* pPDFDoc = GetPDFDocument();
- CPDF_DocJSActions docJS(pPDFDoc);
- int iCount = docJS.CountJSActions();
- if (iCount < 1)
- return;
- for (int i = 0; i < iCount; i++) {
- CFX_ByteString csJSName;
- CPDF_Action jsAction = docJS.GetJSAction(i, csJSName);
- if (m_pEnv->GetActionHander())
- m_pEnv->GetActionHander()->DoAction_JavaScript(
- jsAction, CFX_WideString::FromLocal(csJSName), this);
- }
-}
-
-FX_BOOL CPDFSDK_Document::ProcOpenAction() {
- if (!m_pDoc)
- return FALSE;
-
- CPDF_Dictionary* pRoot = GetPDFDocument()->GetRoot();
- if (!pRoot)
- return FALSE;
-
- CPDF_Object* pOpenAction = pRoot->GetDictBy("OpenAction");
- if (!pOpenAction)
- pOpenAction = pRoot->GetArrayBy("OpenAction");
-
- if (!pOpenAction)
- return FALSE;
-
- if (pOpenAction->IsArray())
- return TRUE;
-
- if (CPDF_Dictionary* pDict = pOpenAction->AsDictionary()) {
- CPDF_Action action(pDict);
- if (m_pEnv->GetActionHander())
- m_pEnv->GetActionHander()->DoAction_DocOpen(action, this);
- return TRUE;
- }
- return FALSE;
-}
-
-CPDF_OCContext* CPDFSDK_Document::GetOCContext() {
- if (!m_pOccontent)
- m_pOccontent.reset(new CPDF_OCContext(GetPDFDocument()));
- return m_pOccontent.get();
-}
-
-void CPDFSDK_Document::RemovePageView(UnderlyingPageType* pUnderlyingPage) {
- auto it = m_pageMap.find(pUnderlyingPage);
- if (it == m_pageMap.end())
- return;
-
- CPDFSDK_PageView* pPageView = it->second;
- if (pPageView->IsLocked())
- return;
-
- pPageView->KillFocusAnnotIfNeeded();
- delete pPageView;
- m_pageMap.erase(it);
-}
-
-UnderlyingPageType* CPDFSDK_Document::GetPage(int nIndex) {
- return UnderlyingFromFPDFPage(m_pEnv->FFI_GetPage(m_pDoc, nIndex));
-}
-
-CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm() {
- if (!m_pInterForm)
- m_pInterForm.reset(new CPDFSDK_InterForm(this));
- return m_pInterForm.get();
-}
-
-void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender,
- CPDFSDK_Annot* pAnnot) {
- for (const auto& it : m_pageMap) {
- CPDFSDK_PageView* pPageView = it.second;
- if (pPageView != pSender) {
- pPageView->UpdateView(pAnnot);
- }
- }
-}
-
-CPDFSDK_Annot* CPDFSDK_Document::GetFocusAnnot() {
- return m_pFocusAnnot;
-}
-
-FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
- if (m_bBeingDestroyed)
- return FALSE;
-
- if (m_pFocusAnnot == pAnnot)
- return TRUE;
-
- if (m_pFocusAnnot) {
- if (!KillFocusAnnot(nFlag))
- return FALSE;
- }
-
- if (!pAnnot)
- return FALSE;
-
-#ifdef PDF_ENABLE_XFA
- CPDFSDK_Annot* pLastFocusAnnot = m_pFocusAnnot;
-#endif // PDF_ENABLE_XFA
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- if (pPageView && pPageView->IsValid()) {
- CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr();
- if (!m_pFocusAnnot) {
-#ifdef PDF_ENABLE_XFA
- if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot, pLastFocusAnnot))
- return FALSE;
-#endif // PDF_ENABLE_XFA
- if (!pAnnotHandler->Annot_OnSetFocus(pAnnot, nFlag))
- return FALSE;
- if (!m_pFocusAnnot) {
- m_pFocusAnnot = pAnnot;
- return TRUE;
- }
- }
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_Document::KillFocusAnnot(FX_UINT nFlag) {
- if (m_pFocusAnnot) {
- CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr();
- CPDFSDK_Annot* pFocusAnnot = m_pFocusAnnot;
- m_pFocusAnnot = nullptr;
-
-#ifdef PDF_ENABLE_XFA
- if (!pAnnotHandler->Annot_OnChangeFocus(nullptr, pFocusAnnot))
- return FALSE;
-#endif // PDF_ENABLE_XFA
-
- if (pAnnotHandler->Annot_OnKillFocus(pFocusAnnot, nFlag)) {
- if (pFocusAnnot->GetType() == "Widget") {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pFocusAnnot;
- int nFieldType = pWidget->GetFieldType();
- if (FIELDTYPE_TEXTFIELD == nFieldType ||
- FIELDTYPE_COMBOBOX == nFieldType) {
- m_pEnv->FFI_OnSetFieldInputFocus(NULL, NULL, 0, FALSE);
- }
- }
-
- if (!m_pFocusAnnot)
- return TRUE;
- } else {
- m_pFocusAnnot = pFocusAnnot;
- }
- }
- return FALSE;
-}
-
-void CPDFSDK_Document::OnCloseDocument() {
- KillFocusAnnot();
-}
-
-FX_BOOL CPDFSDK_Document::GetPermissions(int nFlag) {
- return GetPDFDocument()->GetUserPermissions() & nFlag;
-}
-
-IJS_Runtime* CPDFSDK_Document::GetJsRuntime() {
- return m_pEnv->GetJSRuntime();
-}
-
-CFX_WideString CPDFSDK_Document::GetPath() {
- return m_pEnv->JS_docGetFilePath();
-}
-
-CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc,
- UnderlyingPageType* page)
- : m_page(page),
- m_pSDKDoc(pSDKDoc),
- m_CaptureWidget(nullptr),
-#ifndef PDF_ENABLE_XFA
- m_bTakeOverPage(FALSE),
-#endif // PDF_ENABLE_XFA
- m_bEnterWidget(FALSE),
- m_bExitWidget(FALSE),
- m_bOnWidget(FALSE),
- m_bValid(FALSE),
- m_bLocked(FALSE) {
- CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm();
- if (pInterForm) {
- CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
-#ifdef PDF_ENABLE_XFA
- if (page->GetPDFPage())
- pPDFInterForm->FixPageFields(page->GetPDFPage());
-#else // PDF_ENABLE_XFA
- pPDFInterForm->FixPageFields(page);
-#endif // PDF_ENABLE_XFA
- }
-#ifndef PDF_ENABLE_XFA
- m_page->SetPrivateData((void*)m_page, (void*)this, nullptr);
-#endif // PDF_ENABLE_XFA
-}
-
-CPDFSDK_PageView::~CPDFSDK_PageView() {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray)
- pAnnotHandlerMgr->ReleaseAnnot(pAnnot);
-
- m_fxAnnotArray.clear();
- m_pAnnotList.reset();
-#ifndef PDF_ENABLE_XFA
- m_page->RemovePrivateData((void*)m_page);
- if (m_bTakeOverPage) {
- delete m_page;
- }
-#endif // PDF_ENABLE_XFA
-}
-
-void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
-#ifdef PDF_ENABLE_XFA
- CPDF_RenderOptions* pOptions,
- const FX_RECT& pClip) {
-#else
- CPDF_RenderOptions* pOptions) {
-#endif // PDF_ENABLE_XFA
- m_curMatrix = *pUser2Device;
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
-
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_Page* pPage = GetPDFXFAPage();
- if (!pPage)
- return;
-
- if (pPage->GetDocument()->GetDocType() == DOCTYPE_DYNAMIC_XFA) {
- CFX_Graphics gs;
- gs.Create(pDevice);
- CFX_RectF rectClip;
- rectClip.Set(static_cast<FX_FLOAT>(pClip.left),
- static_cast<FX_FLOAT>(pClip.top),
- static_cast<FX_FLOAT>(pClip.Width()),
- static_cast<FX_FLOAT>(pClip.Height()));
- gs.SetClipRect(rectClip);
- IXFA_RenderContext* pRenderContext = XFA_RenderContext_Create();
- if (!pRenderContext)
- return;
- CXFA_RenderOptions renderOptions;
- renderOptions.m_bHighlight = TRUE;
- IXFA_PageView* xfaView = pPage->GetXFAPageView();
- pRenderContext->StartRender(xfaView, &gs, *pUser2Device, renderOptions);
- pRenderContext->DoRender();
- pRenderContext->StopRender();
- pRenderContext->Release();
- IXFA_DocView* docView = xfaView->GetDocView();
- if (!docView)
- return;
- CPDFSDK_Annot* annot = GetFocusAnnot();
- if (!annot)
- return;
- // Render the focus widget
- docView->GetWidgetHandler()->RenderWidget(annot->GetXFAWidget(), &gs,
- pUser2Device, FALSE);
- return;
- }
-#endif // PDF_ENABLE_XFA
-
- // for pdf/static xfa.
- CPDFSDK_AnnotIterator annotIterator(this, true);
- while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) {
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- pAnnotHandlerMgr->Annot_OnDraw(this, pSDKAnnot, pDevice, pUser2Device, 0);
- }
-}
-
-const CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX,
- FX_FLOAT pageY) {
- for (const CPDF_Annot* pAnnot : m_pAnnotList->All()) {
- CFX_FloatRect annotRect;
- pAnnot->GetRect(annotRect);
- if (annotRect.Contains(pageX, pageY))
- return pAnnot;
- }
- return nullptr;
-}
-
-const CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX,
- FX_FLOAT pageY) {
- for (const CPDF_Annot* pAnnot : m_pAnnotList->All()) {
- if (pAnnot->GetSubType() == "Widget") {
- CFX_FloatRect annotRect;
- pAnnot->GetRect(annotRect);
- if (annotRect.Contains(pageX, pageY))
- return pAnnot;
- }
- }
- return nullptr;
-}
-
-CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX,
- FX_FLOAT pageY) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_AnnotIterator annotIterator(this, false);
- while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) {
- CFX_FloatRect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
- if (rc.Contains(pageX, pageY))
- return pSDKAnnot;
- }
-
- return nullptr;
-}
-
-CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX,
- FX_FLOAT pageY) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_AnnotIterator annotIterator(this, false);
- while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) {
- bool bHitTest = pSDKAnnot->GetType() == "Widget";
-#ifdef PDF_ENABLE_XFA
- bHitTest = bHitTest || pSDKAnnot->GetType() == FSDK_XFAWIDGET_TYPENAME;
-#endif // PDF_ENABLE_XFA
- if (bHitTest) {
- pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
- CFX_FloatPoint point(pageX, pageY);
- if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point))
- return pSDKAnnot;
- }
- }
-
- return nullptr;
-}
-
-void CPDFSDK_PageView::KillFocusAnnotIfNeeded() {
- // if there is a focused annot on the page, we should kill the focus first.
- if (CPDFSDK_Annot* focusedAnnot = m_pSDKDoc->GetFocusAnnot()) {
- if (pdfium::ContainsValue(m_fxAnnotArray, focusedAnnot))
- KillFocusAnnot();
- }
-}
-
-FX_BOOL CPDFSDK_PageView::Annot_HasAppearance(CPDF_Annot* pAnnot) {
- CPDF_Dictionary* pAnnotDic = pAnnot->GetAnnotDict();
- if (pAnnotDic)
- return pAnnotDic->KeyExist("AS");
- return FALSE;
-}
-
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot* pPDFAnnot) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
- CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_Annot* pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this);
- if (!pSDKAnnot)
- return nullptr;
-
- m_fxAnnotArray.push_back(pSDKAnnot);
- pAnnotHandler->Annot_OnCreate(pSDKAnnot);
- return pSDKAnnot;
-}
-
-#ifdef PDF_ENABLE_XFA
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(IXFA_Widget* pPDFAnnot) {
- if (!pPDFAnnot)
- return nullptr;
-
- CPDFSDK_Annot* pSDKAnnot = GetAnnotByXFAWidget(pPDFAnnot);
- if (pSDKAnnot)
- return pSDKAnnot;
-
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr();
- pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this);
- if (!pSDKAnnot)
- return nullptr;
-
- m_fxAnnotArray.push_back(pSDKAnnot);
- return pSDKAnnot;
-}
-#endif // PDF_ENABLE_XFA
-
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Dictionary* pDict) {
- return pDict ? AddAnnot(pDict->GetStringBy("Subtype"), pDict) : nullptr;
-}
-
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(const FX_CHAR* lpSubType,
- CPDF_Dictionary* pDict) {
- return NULL;
-}
-
-FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) {
-#ifdef PDF_ENABLE_XFA
- if (!pAnnot)
- return FALSE;
- CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage();
- if (!pPage || (pPage->GetDocument()->GetDocType() != DOCTYPE_STATIC_XFA &&
- pPage->GetDocument()->GetDocType() != DOCTYPE_DYNAMIC_XFA))
- return FALSE;
-
- auto it = std::find(m_fxAnnotArray.begin(), m_fxAnnotArray.end(), pAnnot);
- if (it != m_fxAnnotArray.end())
- m_fxAnnotArray.erase(it);
- if (m_CaptureWidget == pAnnot)
- m_CaptureWidget = nullptr;
-
- return TRUE;
-#else // PDF_ENABLE_XFA
- return FALSE;
-#endif // PDF_ENABLE_XFA
-}
-
-CPDF_Document* CPDFSDK_PageView::GetPDFDocument() {
- if (m_page) {
-#ifdef PDF_ENABLE_XFA
- return m_page->GetDocument()->GetPDFDoc();
-#else // PDF_ENABLE_XFA
- return m_page->m_pDocument;
-#endif // PDF_ENABLE_XFA
- }
- return NULL;
-}
-
-#ifdef PDF_ENABLE_XFA
-CPDF_Page* CPDFSDK_PageView::GetPDFPage() {
- if (m_page) {
- return m_page->GetPDFPage();
- }
- return NULL;
-}
-#endif // PDF_ENABLE_XFA
-
-size_t CPDFSDK_PageView::CountAnnots() const {
- return m_fxAnnotArray.size();
-}
-
-CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(size_t nIndex) {
- return nIndex < m_fxAnnotArray.size() ? m_fxAnnotArray[nIndex] : nullptr;
-}
-
-CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary* pDict) {
- for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) {
- if (pAnnot->GetPDFAnnot()->GetAnnotDict() == pDict)
- return pAnnot;
- }
- return nullptr;
-}
-
-#ifdef PDF_ENABLE_XFA
-CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(IXFA_Widget* hWidget) {
- if (!hWidget)
- return nullptr;
-
- for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) {
- if (pAnnot->GetXFAWidget() == hWidget)
- return pAnnot;
- }
- return nullptr;
-}
-#endif // PDF_ENABLE_XFA
-
-FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CFX_FloatPoint& point,
- FX_UINT nFlag) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
- CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
- if (!pFXAnnot) {
- KillFocusAnnot(nFlag);
- return FALSE;
- }
-
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- FX_BOOL bRet =
- pAnnotHandlerMgr->Annot_OnLButtonDown(this, pFXAnnot, nFlag, point);
- if (bRet)
- SetFocusAnnot(pFXAnnot);
- return bRet;
-}
-
-#ifdef PDF_ENABLE_XFA
-FX_BOOL CPDFSDK_PageView::OnRButtonDown(const CFX_FloatPoint& point,
- FX_UINT nFlag) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr);
-
- CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
-
- if (pFXAnnot == NULL)
- return FALSE;
-
- FX_BOOL bRet =
- pAnnotHandlerMgr->Annot_OnRButtonDown(this, pFXAnnot, nFlag, point);
- if (bRet) {
- SetFocusAnnot(pFXAnnot);
- }
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_PageView::OnRButtonUp(const CFX_FloatPoint& point,
- FX_UINT nFlag) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
-
- CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
-
- if (pFXAnnot == NULL)
- return FALSE;
-
- FX_BOOL bRet =
- pAnnotHandlerMgr->Annot_OnRButtonUp(this, pFXAnnot, nFlag, point);
- if (bRet) {
- SetFocusAnnot(pFXAnnot);
- }
- return TRUE;
-}
-#endif // PDF_ENABLE_XFA
-
-FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CFX_FloatPoint& point,
- FX_UINT nFlag) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
- CPDFSDK_Annot* pFocusAnnot = GetFocusAnnot();
- FX_BOOL bRet = FALSE;
- if (pFocusAnnot && pFocusAnnot != pFXAnnot) {
- // Last focus Annot gets a chance to handle the event.
- bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFocusAnnot, nFlag, point);
- }
- if (pFXAnnot && !bRet)
- bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFXAnnot, nFlag, point);
- return bRet;
-}
-
-FX_BOOL CPDFSDK_PageView::OnMouseMove(const CFX_FloatPoint& point, int nFlag) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- if (CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y)) {
- if (m_CaptureWidget && m_CaptureWidget != pFXAnnot) {
- m_bExitWidget = TRUE;
- m_bEnterWidget = FALSE;
- pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag);
- }
- m_CaptureWidget = (CPDFSDK_Widget*)pFXAnnot;
- m_bOnWidget = TRUE;
- if (!m_bEnterWidget) {
- m_bEnterWidget = TRUE;
- m_bExitWidget = FALSE;
- pAnnotHandlerMgr->Annot_OnMouseEnter(this, pFXAnnot, nFlag);
- }
- pAnnotHandlerMgr->Annot_OnMouseMove(this, pFXAnnot, nFlag, point);
- return TRUE;
- }
- if (m_bOnWidget) {
- m_bOnWidget = FALSE;
- m_bExitWidget = TRUE;
- m_bEnterWidget = FALSE;
- if (m_CaptureWidget) {
- pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag);
- m_CaptureWidget = NULL;
- }
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_PageView::OnMouseWheel(double deltaX,
- double deltaY,
- const CFX_FloatPoint& point,
- int nFlag) {
- if (CPDFSDK_Annot* pAnnot = GetFXWidgetAtPoint(point.x, point.y)) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- return pAnnotHandlerMgr->Annot_OnMouseWheel(this, pAnnot, nFlag,
- (int)deltaY, point);
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_PageView::OnChar(int nChar, FX_UINT nFlag) {
- if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- return pAnnotHandlerMgr->Annot_OnChar(pAnnot, nChar, nFlag);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_PageView::OnKeyDown(int nKeyCode, int nFlag) {
- if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- return pAnnotHandlerMgr->Annot_OnKeyDown(pAnnot, nKeyCode, nFlag);
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_PageView::OnKeyUp(int nKeyCode, int nFlag) {
- return FALSE;
-}
-
-void CPDFSDK_PageView::LoadFXAnnots() {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
-#ifdef PDF_ENABLE_XFA
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
-#else
- FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled();
- // Disable the default AP construction.
- CPDF_InterForm::EnableUpdateAP(FALSE);
- m_pAnnotList.reset(new CPDF_AnnotList(m_page));
- CPDF_InterForm::EnableUpdateAP(enableAPUpdate);
- const size_t nCount = m_pAnnotList->Count();
-#endif // PDF_ENABLE_XFA
-
- SetLock(TRUE);
-
-#ifdef PDF_ENABLE_XFA
- m_page->AddRef();
- if (m_pSDKDoc->GetXFADocument()->GetDocType() == DOCTYPE_DYNAMIC_XFA) {
- IXFA_PageView* pageView = m_page->GetXFAPageView();
- IXFA_WidgetIterator* pWidgetHander = pageView->CreateWidgetIterator(
- XFA_TRAVERSEWAY_Form, XFA_WIDGETFILTER_Visible |
- XFA_WIDGETFILTER_Viewable |
- XFA_WIDGETFILTER_AllType);
- if (!pWidgetHander) {
- m_page->Release();
- SetLock(FALSE);
- return;
- }
-
- while (IXFA_Widget* pXFAAnnot = pWidgetHander->MoveToNext()) {
- CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pXFAAnnot, this);
- if (!pAnnot)
- continue;
-
- m_fxAnnotArray.push_back(pAnnot);
- pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
- }
- pWidgetHander->Release();
- } else {
- CPDF_Page* pPage = m_page->GetPDFPage();
- ASSERT(pPage);
- FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled();
- // Disable the default AP construction.
- CPDF_InterForm::EnableUpdateAP(FALSE);
- m_pAnnotList.reset(new CPDF_AnnotList(pPage));
- CPDF_InterForm::EnableUpdateAP(enableAPUpdate);
-
- const size_t nCount = m_pAnnotList->Count();
- for (size_t i = 0; i < nCount; ++i) {
- CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i);
- CheckUnSupportAnnot(GetPDFDocument(), pPDFAnnot);
-
- CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this);
- if (!pAnnot)
- continue;
- m_fxAnnotArray.push_back(pAnnot);
- pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
- }
- }
- m_page->Release();
-#else // PDF_ENABLE_XFA
- for (size_t i = 0; i < nCount; ++i) {
- CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i);
- CPDF_Document* pDoc = GetPDFDocument();
- CheckUnSupportAnnot(pDoc, pPDFAnnot);
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this);
- if (!pAnnot)
- continue;
- m_fxAnnotArray.push_back(pAnnot);
- pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
- }
-#endif // PDF_ENABLE_XFA
-
- SetLock(FALSE);
-}
-
-void CPDFSDK_PageView::ClearFXAnnots() {
- SetLock(TRUE);
- if (m_pSDKDoc && GetFocusAnnot())
- m_pSDKDoc->SetFocusAnnot(nullptr);
- m_CaptureWidget = nullptr;
- for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray)
- m_pSDKDoc->GetEnv()->GetAnnotHandlerMgr()->ReleaseAnnot(pAnnot);
- m_fxAnnotArray.clear();
- m_pAnnotList.reset();
- SetLock(FALSE);
-}
-
-void CPDFSDK_PageView::UpdateRects(CFX_RectArray& rects) {
- for (int i = 0; i < rects.GetSize(); i++) {
- CFX_FloatRect rc = rects.GetAt(i);
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- pEnv->FFI_Invalidate(m_page, rc.left, rc.top, rc.right, rc.bottom);
- }
-}
-
-void CPDFSDK_PageView::UpdateView(CPDFSDK_Annot* pAnnot) {
- CFX_FloatRect rcWindow = pAnnot->GetRect();
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- pEnv->FFI_Invalidate(m_page, rcWindow.left, rcWindow.top, rcWindow.right,
- rcWindow.bottom);
-}
-
-int CPDFSDK_PageView::GetPageIndex() {
- if (m_page) {
-#ifdef PDF_ENABLE_XFA
- CPDF_Dictionary* pDic = m_page->GetPDFPage()->m_pFormDict;
-#else // PDF_ENABLE_XFA
- CPDF_Dictionary* pDic = m_page->m_pFormDict;
-#endif // PDF_ENABLE_XFA
- CPDF_Document* pDoc = m_pSDKDoc->GetPDFDocument();
- if (pDoc && pDic) {
- return pDoc->GetPageIndex(pDic->GetObjNum());
- }
- }
- return -1;
-}
-
-bool CPDFSDK_PageView::IsValidAnnot(const CPDF_Annot* p) const {
- if (!p)
- return false;
-
- const auto& annots = m_pAnnotList->All();
- return pdfium::ContainsValue(annots, p);
-}
-
-CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot() {
- CPDFSDK_Annot* pFocusAnnot = m_pSDKDoc->GetFocusAnnot();
- if (!pFocusAnnot)
- return nullptr;
-
- for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) {
- if (pAnnot == pFocusAnnot)
- return pAnnot;
- }
- return nullptr;
-}
diff --git a/fpdfsdk/src/fsdk_rendercontext.cpp b/fpdfsdk/src/fsdk_rendercontext.cpp
deleted file mode 100644
index 3b671caea6..0000000000
--- a/fpdfsdk/src/fsdk_rendercontext.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fsdk_rendercontext.h"
-
-void CRenderContext::Clear() {
- m_pDevice = NULL;
- m_pContext = NULL;
- m_pRenderer = NULL;
- m_pAnnots = NULL;
- m_pOptions = NULL;
-#ifdef _WIN32_WCE
- m_pBitmap = NULL;
- m_hBitmap = NULL;
-#endif
-}
-
-CRenderContext::~CRenderContext() {
- delete m_pRenderer;
- delete m_pContext;
- delete m_pDevice;
- delete m_pAnnots;
- delete m_pOptions->m_pOCContext;
- delete m_pOptions;
-#ifdef _WIN32_WCE
- delete m_pBitmap;
- if (m_hBitmap)
- DeleteObject(m_hBitmap);
-#endif
-}
-
-IFSDK_PAUSE_Adapter::IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause) {
- m_IPause = IPause;
-}
-
-IFSDK_PAUSE_Adapter::~IFSDK_PAUSE_Adapter() {
-}
-
-FX_BOOL IFSDK_PAUSE_Adapter::NeedToPauseNow() {
- if (m_IPause->NeedToPauseNow) {
- return m_IPause->NeedToPauseNow(m_IPause);
- }
- return FALSE;
-}
diff --git a/fpdfsdk/src/fxedit/fxet_ap.cpp b/fpdfsdk/src/fxedit/fxet_ap.cpp
deleted file mode 100644
index 22f200d753..0000000000
--- a/fpdfsdk/src/fxedit/fxet_ap.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/include/fpdfapi/fpdf_parser_decode.h"
-#include "core/include/fpdfapi/fpdf_resource.h"
-#include "fpdfsdk/include/fxedit/fx_edit.h"
-#include "fpdfsdk/include/fxedit/fxet_edit.h"
-
-CFX_ByteString GetPDFWordString(IFX_Edit_FontMap* pFontMap,
- int32_t nFontIndex,
- FX_WORD Word,
- FX_WORD SubWord) {
- CFX_ByteString sWord;
- if (CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex)) {
- if (SubWord > 0) {
- Word = SubWord;
- } else {
- FX_DWORD dwCharCode = -1;
-
- if (pPDFFont->IsUnicodeCompatible())
- dwCharCode = pPDFFont->CharCodeFromUnicode(Word);
- else
- dwCharCode = pFontMap->CharCodeFromUnicode(nFontIndex, Word);
-
- if (dwCharCode > 0) {
- pPDFFont->AppendChar(sWord, dwCharCode);
- return sWord;
- }
- }
-
- pPDFFont->AppendChar(sWord, Word);
- }
-
- return sWord;
-}
-
-static CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords) {
- if (strWords.GetLength() > 0)
- return PDF_EncodeString(strWords) + " Tj\n";
-
- return "";
-}
-
-static CFX_ByteString GetFontSetString(IFX_Edit_FontMap* pFontMap,
- int32_t nFontIndex,
- FX_FLOAT fFontSize) {
- CFX_ByteTextBuf sRet;
-
- if (pFontMap) {
- CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
-
- if (sFontAlias.GetLength() > 0 && fFontSize > 0)
- sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString IFX_Edit::GetEditAppearanceStream(
- IFX_Edit* pEdit,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange /* = NULL*/,
- FX_BOOL bContinuous /* = TRUE*/,
- FX_WORD SubWord /* = 0*/) {
- CFX_ByteTextBuf sEditStream, sWords;
-
- CFX_FloatPoint ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f);
- int32_t nCurFontIndex = -1;
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
-
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- if (bContinuous) {
- if (place.LineCmp(oldplace) != 0) {
- if (sWords.GetSize() > 0) {
- sEditStream << GetWordRenderString(sWords.GetByteString());
- sWords.Clear();
- }
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
- word.ptWord.y + ptOffset.y);
- } else {
- CPVT_Line line;
- pIterator->GetLine(line);
- ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x,
- line.ptLine.y + ptOffset.y);
- }
-
- if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
- sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
- << " Td\n";
-
- ptOld = ptNew;
- }
- }
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- if (word.nFontIndex != nCurFontIndex) {
- if (sWords.GetSize() > 0) {
- sEditStream << GetWordRenderString(sWords.GetByteString());
- sWords.Clear();
- }
- sEditStream << GetFontSetString(pEdit->GetFontMap(),
- word.nFontIndex, word.fFontSize);
- nCurFontIndex = word.nFontIndex;
- }
-
- sWords << GetPDFWordString(pEdit->GetFontMap(), nCurFontIndex,
- word.Word, SubWord);
- }
-
- oldplace = place;
- } else {
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
- word.ptWord.y + ptOffset.y);
-
- if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
- sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
- << " Td\n";
- ptOld = ptNew;
- }
-
- if (word.nFontIndex != nCurFontIndex) {
- sEditStream << GetFontSetString(pEdit->GetFontMap(),
- word.nFontIndex, word.fFontSize);
- nCurFontIndex = word.nFontIndex;
- }
-
- sEditStream << GetWordRenderString(GetPDFWordString(
- pEdit->GetFontMap(), nCurFontIndex, word.Word, SubWord));
- }
- }
- }
-
- if (sWords.GetSize() > 0) {
- sEditStream << GetWordRenderString(sWords.GetByteString());
- sWords.Clear();
- }
- }
-
- CFX_ByteTextBuf sAppStream;
- if (sEditStream.GetSize() > 0) {
- int32_t nHorzScale = pEdit->GetHorzScale();
- if (nHorzScale != 100) {
- sAppStream << nHorzScale << " Tz\n";
- }
-
- FX_FLOAT fCharSpace = pEdit->GetCharSpace();
- if (!FX_EDIT_IsFloatZero(fCharSpace)) {
- sAppStream << fCharSpace << " Tc\n";
- }
-
- sAppStream << sEditStream;
- }
-
- return sAppStream.GetByteString();
-}
-
-CFX_ByteString IFX_Edit::GetSelectAppearanceStream(
- IFX_Edit* pEdit,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange) {
- CFX_ByteTextBuf sRet;
-
- if (pRange && pRange->IsExist()) {
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- pIterator->SetAt(pRange->BeginPos);
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
-
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word) && pIterator->GetLine(line)) {
- sRet << word.ptWord.x + ptOffset.x << " "
- << line.ptLine.y + line.fLineDescent << " " << word.fWidth << " "
- << line.fLineAscent - line.fLineDescent << " re\nf\n";
- }
- }
- }
- }
-
- return sRet.GetByteString();
-}
diff --git a/fpdfsdk/src/fxedit/fxet_edit.cpp b/fpdfsdk/src/fxedit/fxet_edit.cpp
deleted file mode 100644
index 1b68dc0510..0000000000
--- a/fpdfsdk/src/fxedit/fxet_edit.cpp
+++ /dev/null
@@ -1,3034 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fxedit/fxet_edit.h"
-
-#include <algorithm>
-
-#include "core/include/fpdfapi/fpdf_resource.h"
-
-#define FX_EDIT_UNDO_MAXITEM 10000
-
-CFX_Edit_Iterator::CFX_Edit_Iterator(CFX_Edit* pEdit,
- IPDF_VariableText_Iterator* pVTIterator)
- : m_pEdit(pEdit), m_pVTIterator(pVTIterator) {}
-
-CFX_Edit_Iterator::~CFX_Edit_Iterator() {}
-
-FX_BOOL CFX_Edit_Iterator::NextWord() {
- return m_pVTIterator->NextWord();
-}
-
-FX_BOOL CFX_Edit_Iterator::NextLine() {
- return m_pVTIterator->NextLine();
-}
-
-FX_BOOL CFX_Edit_Iterator::NextSection() {
- return m_pVTIterator->NextSection();
-}
-
-FX_BOOL CFX_Edit_Iterator::PrevWord() {
- return m_pVTIterator->PrevWord();
-}
-
-FX_BOOL CFX_Edit_Iterator::PrevLine() {
- return m_pVTIterator->PrevLine();
-}
-
-FX_BOOL CFX_Edit_Iterator::PrevSection() {
- return m_pVTIterator->PrevSection();
-}
-
-FX_BOOL CFX_Edit_Iterator::GetWord(CPVT_Word& word) const {
- ASSERT(m_pEdit);
-
- if (m_pVTIterator->GetWord(word)) {
- word.ptWord = m_pEdit->VTToEdit(word.ptWord);
- return TRUE;
- }
- return FALSE;
-}
-
-FX_BOOL CFX_Edit_Iterator::GetLine(CPVT_Line& line) const {
- ASSERT(m_pEdit);
-
- if (m_pVTIterator->GetLine(line)) {
- line.ptLine = m_pEdit->VTToEdit(line.ptLine);
- return TRUE;
- }
- return FALSE;
-}
-
-FX_BOOL CFX_Edit_Iterator::GetSection(CPVT_Section& section) const {
- ASSERT(m_pEdit);
-
- if (m_pVTIterator->GetSection(section)) {
- section.rcSection = m_pEdit->VTToEdit(section.rcSection);
- return TRUE;
- }
- return FALSE;
-}
-
-void CFX_Edit_Iterator::SetAt(int32_t nWordIndex) {
- m_pVTIterator->SetAt(nWordIndex);
-}
-
-void CFX_Edit_Iterator::SetAt(const CPVT_WordPlace& place) {
- m_pVTIterator->SetAt(place);
-}
-
-const CPVT_WordPlace& CFX_Edit_Iterator::GetAt() const {
- return m_pVTIterator->GetAt();
-}
-
-IFX_Edit* CFX_Edit_Iterator::GetEdit() const {
- return m_pEdit;
-}
-
-CFX_Edit_Provider::CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap)
- : m_pFontMap(pFontMap) {
- ASSERT(m_pFontMap);
-}
-
-CFX_Edit_Provider::~CFX_Edit_Provider() {}
-
-IFX_Edit_FontMap* CFX_Edit_Provider::GetFontMap() {
- return m_pFontMap;
-}
-
-int32_t CFX_Edit_Provider::GetCharWidth(int32_t nFontIndex,
- FX_WORD word,
- int32_t nWordStyle) {
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
- FX_DWORD charcode = word;
-
- if (pPDFFont->IsUnicodeCompatible())
- charcode = pPDFFont->CharCodeFromUnicode(word);
- else
- charcode = m_pFontMap->CharCodeFromUnicode(nFontIndex, word);
-
- if (charcode != -1)
- return pPDFFont->GetCharWidthF(charcode);
- }
-
- return 0;
-}
-
-int32_t CFX_Edit_Provider::GetTypeAscent(int32_t nFontIndex) {
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
- return pPDFFont->GetTypeAscent();
-
- return 0;
-}
-
-int32_t CFX_Edit_Provider::GetTypeDescent(int32_t nFontIndex) {
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
- return pPDFFont->GetTypeDescent();
-
- return 0;
-}
-
-int32_t CFX_Edit_Provider::GetWordFontIndex(FX_WORD word,
- int32_t charset,
- int32_t nFontIndex) {
- return m_pFontMap->GetWordFontIndex(word, charset, nFontIndex);
-}
-
-int32_t CFX_Edit_Provider::GetDefaultFontIndex() {
- return 0;
-}
-
-FX_BOOL CFX_Edit_Provider::IsLatinWord(FX_WORD word) {
- return FX_EDIT_ISLATINWORD(word);
-}
-
-CFX_Edit_Refresh::CFX_Edit_Refresh() {}
-
-CFX_Edit_Refresh::~CFX_Edit_Refresh() {}
-
-void CFX_Edit_Refresh::BeginRefresh() {
- m_RefreshRects.Empty();
- m_OldLineRects = m_NewLineRects;
-}
-
-void CFX_Edit_Refresh::Push(const CPVT_WordRange& linerange,
- const CFX_FloatRect& rect) {
- m_NewLineRects.Add(linerange, rect);
-}
-
-void CFX_Edit_Refresh::NoAnalyse() {
- {
- for (int32_t i = 0, sz = m_OldLineRects.GetSize(); i < sz; i++)
- if (CFX_Edit_LineRect* pOldRect = m_OldLineRects.GetAt(i))
- m_RefreshRects.Add(pOldRect->m_rcLine);
- }
-
- {
- for (int32_t i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++)
- if (CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i))
- m_RefreshRects.Add(pNewRect->m_rcLine);
- }
-}
-
-void CFX_Edit_Refresh::Analyse(int32_t nAlignment) {
- FX_BOOL bLineTopChanged = FALSE;
- CFX_FloatRect rcResult;
- FX_FLOAT fWidthDiff;
-
- int32_t szMax = std::max(m_OldLineRects.GetSize(), m_NewLineRects.GetSize());
- int32_t i = 0;
-
- while (i < szMax) {
- CFX_Edit_LineRect* pOldRect = m_OldLineRects.GetAt(i);
- CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i);
-
- if (pOldRect) {
- if (pNewRect) {
- if (bLineTopChanged) {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- m_RefreshRects.Add(rcResult);
- } else {
- if (*pNewRect != *pOldRect) {
- if (!pNewRect->IsSameTop(*pOldRect) ||
- !pNewRect->IsSameHeight(*pOldRect)) {
- bLineTopChanged = TRUE;
- continue;
- }
-
- if (nAlignment == 0) {
- if (pNewRect->m_wrLine.BeginPos != pOldRect->m_wrLine.BeginPos) {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- m_RefreshRects.Add(rcResult);
- } else {
- if (!pNewRect->IsSameLeft(*pOldRect)) {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- } else {
- fWidthDiff =
- pNewRect->m_rcLine.Width() - pOldRect->m_rcLine.Width();
- rcResult = pNewRect->m_rcLine;
- if (fWidthDiff > 0.0f) {
- rcResult.left = rcResult.right - fWidthDiff;
- } else {
- rcResult.left = rcResult.right;
- rcResult.right += (-fWidthDiff);
- }
- }
- m_RefreshRects.Add(rcResult);
- }
- } else {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- m_RefreshRects.Add(rcResult);
- }
- }
- }
- } else {
- m_RefreshRects.Add(pOldRect->m_rcLine);
- }
- } else {
- if (pNewRect) {
- m_RefreshRects.Add(pNewRect->m_rcLine);
- }
- }
- i++;
- }
-}
-
-void CFX_Edit_Refresh::AddRefresh(const CFX_FloatRect& rect) {
- m_RefreshRects.Add(rect);
-}
-
-const CFX_Edit_RectArray* CFX_Edit_Refresh::GetRefreshRects() const {
- return &m_RefreshRects;
-}
-
-void CFX_Edit_Refresh::EndRefresh() {
- m_RefreshRects.Empty();
-}
-
-CFX_Edit_Undo::CFX_Edit_Undo(int32_t nBufsize)
- : m_nCurUndoPos(0),
- m_nBufSize(nBufsize),
- m_bModified(FALSE),
- m_bVirgin(TRUE),
- m_bWorking(FALSE) {}
-
-CFX_Edit_Undo::~CFX_Edit_Undo() {
- Reset();
-}
-
-FX_BOOL CFX_Edit_Undo::CanUndo() const {
- return m_nCurUndoPos > 0;
-}
-
-void CFX_Edit_Undo::Undo() {
- m_bWorking = TRUE;
-
- if (m_nCurUndoPos > 0) {
- IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos - 1);
- pItem->Undo();
-
- m_nCurUndoPos--;
- m_bModified = (m_nCurUndoPos != 0);
- }
-
- m_bWorking = FALSE;
-}
-
-FX_BOOL CFX_Edit_Undo::CanRedo() const {
- return m_nCurUndoPos < m_UndoItemStack.GetSize();
-}
-
-void CFX_Edit_Undo::Redo() {
- m_bWorking = TRUE;
-
- int32_t nStackSize = m_UndoItemStack.GetSize();
-
- if (m_nCurUndoPos < nStackSize) {
- IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos);
- pItem->Redo();
-
- m_nCurUndoPos++;
- m_bModified = (m_nCurUndoPos != 0);
- }
-
- m_bWorking = FALSE;
-}
-
-FX_BOOL CFX_Edit_Undo::IsWorking() const {
- return m_bWorking;
-}
-
-void CFX_Edit_Undo::AddItem(IFX_Edit_UndoItem* pItem) {
- ASSERT(!m_bWorking);
- ASSERT(pItem);
- ASSERT(m_nBufSize > 1);
-
- if (m_nCurUndoPos < m_UndoItemStack.GetSize())
- RemoveTails();
-
- if (m_UndoItemStack.GetSize() >= m_nBufSize) {
- RemoveHeads();
- m_bVirgin = FALSE;
- }
-
- m_UndoItemStack.Add(pItem);
- m_nCurUndoPos = m_UndoItemStack.GetSize();
-
- m_bModified = (m_nCurUndoPos != 0);
-}
-
-FX_BOOL CFX_Edit_Undo::IsModified() const {
- return m_bVirgin ? m_bModified : TRUE;
-}
-
-IFX_Edit_UndoItem* CFX_Edit_Undo::GetItem(int32_t nIndex) {
- if (nIndex >= 0 && nIndex < m_UndoItemStack.GetSize())
- return m_UndoItemStack.GetAt(nIndex);
-
- return NULL;
-}
-
-void CFX_Edit_Undo::RemoveHeads() {
- ASSERT(m_UndoItemStack.GetSize() > 1);
-
- delete m_UndoItemStack.GetAt(0);
- m_UndoItemStack.RemoveAt(0);
-}
-
-void CFX_Edit_Undo::RemoveTails() {
- for (int32_t i = m_UndoItemStack.GetSize() - 1; i >= m_nCurUndoPos; i--) {
- delete m_UndoItemStack.GetAt(i);
- m_UndoItemStack.RemoveAt(i);
- }
-}
-
-void CFX_Edit_Undo::Reset() {
- for (int32_t i = 0, sz = m_UndoItemStack.GetSize(); i < sz; i++) {
- delete m_UndoItemStack.GetAt(i);
- }
- m_nCurUndoPos = 0;
- m_UndoItemStack.RemoveAll();
-}
-
-CFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle)
- : m_sTitle(sTitle) {}
-
-CFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem() {
- for (int i = 0, sz = m_Items.GetSize(); i < sz; i++) {
- delete m_Items[i];
- }
-
- m_Items.RemoveAll();
-}
-
-void CFX_Edit_GroupUndoItem::AddUndoItem(CFX_Edit_UndoItem* pUndoItem) {
- pUndoItem->SetFirst(FALSE);
- pUndoItem->SetLast(FALSE);
-
- m_Items.Add(pUndoItem);
-
- if (m_sTitle.IsEmpty())
- m_sTitle = pUndoItem->GetUndoTitle();
-}
-
-void CFX_Edit_GroupUndoItem::UpdateItems() {
- if (m_Items.GetSize() > 0) {
- CFX_Edit_UndoItem* pFirstItem = m_Items[0];
- pFirstItem->SetFirst(TRUE);
-
- CFX_Edit_UndoItem* pLastItem = m_Items[m_Items.GetSize() - 1];
- pLastItem->SetLast(TRUE);
- }
-}
-
-void CFX_Edit_GroupUndoItem::Undo() {
- for (int i = m_Items.GetSize() - 1; i >= 0; i--) {
- CFX_Edit_UndoItem* pUndoItem = m_Items[i];
- pUndoItem->Undo();
- }
-}
-
-void CFX_Edit_GroupUndoItem::Redo() {
- for (int i = 0, sz = m_Items.GetSize(); i < sz; i++) {
- CFX_Edit_UndoItem* pUndoItem = m_Items[i];
- pUndoItem->Redo();
- }
-}
-
-CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle() {
- return m_sTitle;
-}
-
-CFXEU_InsertWord::CFXEU_InsertWord(CFX_Edit* pEdit,
- const CPVT_WordPlace& wpOldPlace,
- const CPVT_WordPlace& wpNewPlace,
- FX_WORD word,
- int32_t charset,
- const CPVT_WordProps* pWordProps)
- : m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_Word(word),
- m_nCharset(charset),
- m_WordProps() {
- if (pWordProps)
- m_WordProps = *pWordProps;
-}
-
-CFXEU_InsertWord::~CFXEU_InsertWord() {}
-
-void CFXEU_InsertWord::Redo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE);
- }
-}
-
-void CFXEU_InsertWord::Undo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- m_pEdit->Backspace(FALSE, TRUE);
- }
-}
-
-CFXEU_InsertReturn::CFXEU_InsertReturn(CFX_Edit* pEdit,
- const CPVT_WordPlace& wpOldPlace,
- const CPVT_WordPlace& wpNewPlace,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps)
- : m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_SecProps(),
- m_WordProps() {
- if (pSecProps)
- m_SecProps = *pSecProps;
- if (pWordProps)
- m_WordProps = *pWordProps;
-}
-
-CFXEU_InsertReturn::~CFXEU_InsertReturn() {}
-
-void CFXEU_InsertReturn::Redo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE);
- }
-}
-
-void CFXEU_InsertReturn::Undo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- m_pEdit->Backspace(FALSE, TRUE);
- }
-}
-
-CFXEU_Backspace::CFXEU_Backspace(CFX_Edit* pEdit,
- const CPVT_WordPlace& wpOldPlace,
- const CPVT_WordPlace& wpNewPlace,
- FX_WORD word,
- int32_t charset,
- const CPVT_SecProps& SecProps,
- const CPVT_WordProps& WordProps)
- : m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_Word(word),
- m_nCharset(charset),
- m_SecProps(SecProps),
- m_WordProps(WordProps) {}
-
-CFXEU_Backspace::~CFXEU_Backspace() {}
-
-void CFXEU_Backspace::Redo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->Backspace(FALSE, TRUE);
- }
-}
-
-void CFXEU_Backspace::Undo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- if (m_wpNew.SecCmp(m_wpOld) != 0) {
- m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE);
- } else {
- m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE);
- }
- }
-}
-
-CFXEU_Delete::CFXEU_Delete(CFX_Edit* pEdit,
- const CPVT_WordPlace& wpOldPlace,
- const CPVT_WordPlace& wpNewPlace,
- FX_WORD word,
- int32_t charset,
- const CPVT_SecProps& SecProps,
- const CPVT_WordProps& WordProps,
- FX_BOOL bSecEnd)
- : m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_Word(word),
- m_nCharset(charset),
- m_SecProps(SecProps),
- m_WordProps(WordProps),
- m_bSecEnd(bSecEnd) {}
-
-CFXEU_Delete::~CFXEU_Delete() {}
-
-void CFXEU_Delete::Redo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->Delete(FALSE, TRUE);
- }
-}
-
-void CFXEU_Delete::Undo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- if (m_bSecEnd) {
- m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE);
- } else {
- m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE);
- }
- }
-}
-
-CFXEU_Clear::CFXEU_Clear(CFX_Edit* pEdit,
- const CPVT_WordRange& wrSel,
- const CFX_WideString& swText)
- : m_pEdit(pEdit), m_wrSel(wrSel), m_swText(swText) {}
-
-CFXEU_Clear::~CFXEU_Clear() {}
-
-void CFXEU_Clear::Redo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
- m_pEdit->Clear(FALSE, TRUE);
- }
-}
-
-void CFXEU_Clear::Undo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wrSel.BeginPos);
- m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, NULL, NULL, FALSE,
- TRUE);
- m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
- }
-}
-
-CFXEU_ClearRich::CFXEU_ClearRich(CFX_Edit* pEdit,
- const CPVT_WordPlace& wpOldPlace,
- const CPVT_WordPlace& wpNewPlace,
- const CPVT_WordRange& wrSel,
- FX_WORD word,
- int32_t charset,
- const CPVT_SecProps& SecProps,
- const CPVT_WordProps& WordProps)
- : m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_wrSel(wrSel),
- m_Word(word),
- m_nCharset(charset),
- m_SecProps(SecProps),
- m_WordProps(WordProps) {}
-
-CFXEU_ClearRich::~CFXEU_ClearRich() {}
-
-void CFXEU_ClearRich::Redo() {
- if (m_pEdit && IsLast()) {
- m_pEdit->SelectNone();
- m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
- m_pEdit->Clear(FALSE, TRUE);
- }
-}
-
-void CFXEU_ClearRich::Undo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- if (m_wpNew.SecCmp(m_wpOld) != 0) {
- m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, FALSE);
- } else {
- m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, FALSE);
- }
-
- if (IsFirst()) {
- m_pEdit->PaintInsertText(m_wrSel.BeginPos, m_wrSel.EndPos);
- m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
- }
- }
-}
-CFXEU_InsertText::CFXEU_InsertText(CFX_Edit* pEdit,
- const CPVT_WordPlace& wpOldPlace,
- const CPVT_WordPlace& wpNewPlace,
- const CFX_WideString& swText,
- int32_t charset,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps)
- : m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_swText(swText),
- m_nCharset(charset),
- m_SecProps(),
- m_WordProps() {
- if (pSecProps)
- m_SecProps = *pSecProps;
- if (pWordProps)
- m_WordProps = *pWordProps;
-}
-
-CFXEU_InsertText::~CFXEU_InsertText() {}
-
-void CFXEU_InsertText::Redo() {
- if (m_pEdit && IsLast()) {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->InsertText(m_swText.c_str(), m_nCharset, &m_SecProps, &m_WordProps,
- FALSE, TRUE);
- }
-}
-
-void CFXEU_InsertText::Undo() {
- if (m_pEdit) {
- m_pEdit->SelectNone();
- m_pEdit->SetSel(m_wpOld, m_wpNew);
- m_pEdit->Clear(FALSE, TRUE);
- }
-}
-
-CFXEU_SetSecProps::CFXEU_SetSecProps(CFX_Edit* pEdit,
- const CPVT_WordPlace& place,
- EDIT_PROPS_E ep,
- const CPVT_SecProps& oldsecprops,
- const CPVT_WordProps& oldwordprops,
- const CPVT_SecProps& newsecprops,
- const CPVT_WordProps& newwordprops,
- const CPVT_WordRange& range)
- : m_pEdit(pEdit),
- m_wpPlace(place),
- m_wrPlace(range),
- m_eProps(ep),
- m_OldSecProps(oldsecprops),
- m_NewSecProps(newsecprops),
- m_OldWordProps(oldwordprops),
- m_NewWordProps(newwordprops) {}
-
-CFXEU_SetSecProps::~CFXEU_SetSecProps() {}
-
-void CFXEU_SetSecProps::Redo() {
- if (m_pEdit) {
- m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_NewSecProps, &m_NewWordProps,
- m_wrPlace, FALSE);
- if (IsLast()) {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
- }
- }
-}
-
-void CFXEU_SetSecProps::Undo() {
- if (m_pEdit) {
- m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_OldSecProps, &m_OldWordProps,
- m_wrPlace, FALSE);
- if (IsFirst()) {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
- }
- }
-}
-
-CFXEU_SetWordProps::CFXEU_SetWordProps(CFX_Edit* pEdit,
- const CPVT_WordPlace& place,
- EDIT_PROPS_E ep,
- const CPVT_WordProps& oldprops,
- const CPVT_WordProps& newprops,
- const CPVT_WordRange& range)
- : m_pEdit(pEdit),
- m_wpPlace(place),
- m_wrPlace(range),
- m_eProps(ep),
- m_OldWordProps(oldprops),
- m_NewWordProps(newprops) {}
-
-CFXEU_SetWordProps::~CFXEU_SetWordProps() {}
-
-void CFXEU_SetWordProps::Redo() {
- if (m_pEdit) {
- m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_NewWordProps, m_wrPlace,
- FALSE);
- if (IsLast()) {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
- }
- }
-}
-
-void CFXEU_SetWordProps::Undo() {
- if (m_pEdit) {
- m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_OldWordProps, m_wrPlace,
- FALSE);
- if (IsFirst()) {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
- }
- }
-}
-
-CFX_Edit::CFX_Edit(IPDF_VariableText* pVT)
- : m_pVT(pVT),
- m_pNotify(NULL),
- m_pOprNotify(NULL),
- m_pVTProvide(NULL),
- m_wpCaret(-1, -1, -1),
- m_wpOldCaret(-1, -1, -1),
- m_SelState(),
- m_ptScrollPos(0, 0),
- m_ptRefreshScrollPos(0, 0),
- m_bEnableScroll(FALSE),
- m_pIterator(NULL),
- m_ptCaret(0.0f, 0.0f),
- m_Undo(FX_EDIT_UNDO_MAXITEM),
- m_nAlignment(0),
- m_bNotifyFlag(FALSE),
- m_bEnableOverflow(FALSE),
- m_bEnableRefresh(TRUE),
- m_rcOldContent(0.0f, 0.0f, 0.0f, 0.0f),
- m_bEnableUndo(TRUE),
- m_bNotify(TRUE),
- m_bOprNotify(FALSE),
- m_pGroupUndoItem(NULL) {
- ASSERT(pVT);
-}
-
-CFX_Edit::~CFX_Edit() {
- delete m_pVTProvide;
- m_pVTProvide = NULL;
- delete m_pIterator;
- m_pIterator = NULL;
- ASSERT(!m_pGroupUndoItem);
-}
-
-void CFX_Edit::Initialize() {
- m_pVT->Initialize();
- SetCaret(m_pVT->GetBeginWordPlace());
- SetCaretOrigin();
-}
-
-void CFX_Edit::SetFontMap(IFX_Edit_FontMap* pFontMap) {
- delete m_pVTProvide;
- m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap));
-}
-
-void CFX_Edit::SetVTProvider(IPDF_VariableText_Provider* pProvider) {
- m_pVT->SetProvider(pProvider);
-}
-
-void CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify) {
- m_pNotify = pNotify;
-}
-
-void CFX_Edit::SetOprNotify(IFX_Edit_OprNotify* pOprNotify) {
- m_pOprNotify = pOprNotify;
-}
-
-IFX_Edit_Iterator* CFX_Edit::GetIterator() {
- if (!m_pIterator)
- m_pIterator = new CFX_Edit_Iterator(this, m_pVT->GetIterator());
-
- return m_pIterator;
-}
-
-IPDF_VariableText* CFX_Edit::GetVariableText() {
- return m_pVT;
-}
-
-IFX_Edit_FontMap* CFX_Edit::GetFontMap() {
- if (m_pVTProvide)
- return m_pVTProvide->GetFontMap();
-
- return NULL;
-}
-
-void CFX_Edit::SetPlateRect(const CFX_FloatRect& rect, FX_BOOL bPaint) {
- m_pVT->SetPlateRect(rect);
- m_ptScrollPos = CFX_FloatPoint(rect.left, rect.top);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetAlignmentH(int32_t nFormat, FX_BOOL bPaint) {
- m_pVT->SetAlignment(nFormat);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetAlignmentV(int32_t nFormat, FX_BOOL bPaint) {
- m_nAlignment = nFormat;
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetPasswordChar(FX_WORD wSubWord, FX_BOOL bPaint) {
- m_pVT->SetPasswordChar(wSubWord);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetLimitChar(int32_t nLimitChar, FX_BOOL bPaint) {
- m_pVT->SetLimitChar(nLimitChar);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetCharArray(int32_t nCharArray, FX_BOOL bPaint) {
- m_pVT->SetCharArray(nCharArray);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint) {
- m_pVT->SetCharSpace(fCharSpace);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint) {
- m_pVT->SetHorzScale(nHorzScale);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetMultiLine(FX_BOOL bMultiLine, FX_BOOL bPaint) {
- m_pVT->SetMultiLine(bMultiLine);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetAutoReturn(FX_BOOL bAuto, FX_BOOL bPaint) {
- m_pVT->SetAutoReturn(bAuto);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint) {
- m_pVT->SetLineLeading(fLineLeading);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetAutoFontSize(FX_BOOL bAuto, FX_BOOL bPaint) {
- m_pVT->SetAutoFontSize(bAuto);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint) {
- m_pVT->SetFontSize(fFontSize);
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetAutoScroll(FX_BOOL bAuto, FX_BOOL bPaint) {
- m_bEnableScroll = bAuto;
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetTextOverflow(FX_BOOL bAllowed, FX_BOOL bPaint) {
- m_bEnableOverflow = bAllowed;
- if (bPaint)
- Paint();
-}
-
-void CFX_Edit::SetSel(int32_t nStartChar, int32_t nEndChar) {
- if (m_pVT->IsValid()) {
- if (nStartChar == 0 && nEndChar < 0) {
- SelectAll();
- } else if (nStartChar < 0) {
- SelectNone();
- } else {
- if (nStartChar < nEndChar) {
- SetSel(m_pVT->WordIndexToWordPlace(nStartChar),
- m_pVT->WordIndexToWordPlace(nEndChar));
- } else {
- SetSel(m_pVT->WordIndexToWordPlace(nEndChar),
- m_pVT->WordIndexToWordPlace(nStartChar));
- }
- }
- }
-}
-
-void CFX_Edit::SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) {
- if (m_pVT->IsValid()) {
- SelectNone();
-
- m_SelState.Set(begin, end);
-
- SetCaret(m_SelState.EndPos);
-
- if (m_SelState.IsExist()) {
- ScrollToCaret();
- CPVT_WordRange wr(m_SelState.BeginPos, m_SelState.EndPos);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- } else {
- ScrollToCaret();
- SetCaretInfo();
- }
- }
-}
-
-void CFX_Edit::GetSel(int32_t& nStartChar, int32_t& nEndChar) const {
- nStartChar = -1;
- nEndChar = -1;
-
- if (m_pVT->IsValid()) {
- if (m_SelState.IsExist()) {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0) {
- nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
- nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
- } else {
- nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
- nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
- }
- } else {
- nStartChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
- nEndChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
- }
- }
-}
-
-int32_t CFX_Edit::GetCaret() const {
- if (m_pVT->IsValid())
- return m_pVT->WordPlaceToWordIndex(m_wpCaret);
-
- return -1;
-}
-
-CPVT_WordPlace CFX_Edit::GetCaretWordPlace() const {
- return m_wpCaret;
-}
-
-CFX_WideString CFX_Edit::GetText() const {
- CFX_WideString swRet;
-
- if (m_pVT->IsValid()) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- FX_BOOL bRich = m_pVT->IsRichText();
-
- pIterator->SetAt(0);
-
- CPVT_Word wordinfo;
- CPVT_WordPlace oldplace = pIterator->GetAt();
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
-
- if (pIterator->GetWord(wordinfo)) {
- if (bRich) {
- swRet += wordinfo.Word;
- } else {
- swRet += wordinfo.Word;
- }
- }
-
- if (oldplace.SecCmp(place) != 0) {
- swRet += 0x0D;
- swRet += 0x0A;
- }
-
- oldplace = place;
- }
- }
- }
-
- return swRet;
-}
-
-CFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange& range) const {
- CFX_WideString swRet;
-
- if (m_pVT->IsValid()) {
- FX_BOOL bRich = m_pVT->IsRichText();
-
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- CPVT_WordRange wrTemp = range;
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
-
- CPVT_Word wordinfo;
- CPVT_WordPlace oldplace = wrTemp.BeginPos;
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0)
- break;
-
- if (pIterator->GetWord(wordinfo)) {
- if (bRich) {
- swRet += wordinfo.Word;
- } else {
- swRet += wordinfo.Word;
- }
- }
-
- if (oldplace.SecCmp(place) != 0) {
- swRet += 0x0D;
- swRet += 0x0A;
- }
-
- oldplace = place;
- }
- }
- }
-
- return swRet;
-}
-
-CFX_WideString CFX_Edit::GetSelText() const {
- return GetRangeText(m_SelState.ConvertToWordRange());
-}
-
-int32_t CFX_Edit::GetTotalWords() const {
- return m_pVT->GetTotalWords();
-}
-
-int32_t CFX_Edit::GetTotalLines() const {
- int32_t nLines = 0;
-
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(0);
- while (pIterator->NextLine())
- nLines++;
- }
-
- return nLines + 1;
-}
-
-CPVT_WordRange CFX_Edit::GetSelectWordRange() const {
- return m_SelState.ConvertToWordRange();
-}
-
-CPVT_WordRange CFX_Edit::CombineWordRange(const CPVT_WordRange& wr1,
- const CPVT_WordRange& wr2) {
- CPVT_WordRange wrRet;
-
- if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) {
- wrRet.BeginPos = wr1.BeginPos;
- } else {
- wrRet.BeginPos = wr2.BeginPos;
- }
-
- if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) {
- wrRet.EndPos = wr2.EndPos;
- } else {
- wrRet.EndPos = wr1.EndPos;
- }
-
- return wrRet;
-}
-
-FX_BOOL CFX_Edit::IsRichText() const {
- return m_pVT->IsRichText();
-}
-
-void CFX_Edit::SetRichText(FX_BOOL bRichText, FX_BOOL bPaint) {
- m_pVT->SetRichText(bRichText);
- if (bPaint)
- Paint();
-}
-
-FX_BOOL CFX_Edit::SetRichFontIndex(int32_t nFontIndex) {
- CPVT_WordProps WordProps;
- WordProps.nFontIndex = nFontIndex;
- return SetRichTextProps(EP_FONTINDEX, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichFontSize(FX_FLOAT fFontSize) {
- CPVT_WordProps WordProps;
- WordProps.fFontSize = fFontSize;
- return SetRichTextProps(EP_FONTSIZE, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextColor(FX_COLORREF dwColor) {
- CPVT_WordProps WordProps;
- WordProps.dwWordColor = dwColor;
- return SetRichTextProps(EP_WORDCOLOR, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextScript(int32_t nScriptType) {
- CPVT_WordProps WordProps;
- WordProps.nScriptType = nScriptType;
- return SetRichTextProps(EP_SCRIPTTYPE, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextBold(FX_BOOL bBold) {
- CPVT_WordProps WordProps;
- if (bBold)
- WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
- return SetRichTextProps(EP_BOLD, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextItalic(FX_BOOL bItalic) {
- CPVT_WordProps WordProps;
- if (bItalic)
- WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
- return SetRichTextProps(EP_ITALIC, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextUnderline(FX_BOOL bUnderline) {
- CPVT_WordProps WordProps;
- if (bUnderline)
- WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
- return SetRichTextProps(EP_UNDERLINE, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextCrossout(FX_BOOL bCrossout) {
- CPVT_WordProps WordProps;
- if (bCrossout)
- WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
- return SetRichTextProps(EP_CROSSOUT, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextCharSpace(FX_FLOAT fCharSpace) {
- CPVT_WordProps WordProps;
- WordProps.fCharSpace = fCharSpace;
- return SetRichTextProps(EP_CHARSPACE, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextHorzScale(int32_t nHorzScale) {
- CPVT_WordProps WordProps;
- WordProps.nHorzScale = nHorzScale;
- return SetRichTextProps(EP_HORZSCALE, NULL, &WordProps);
-}
-
-FX_BOOL CFX_Edit::SetRichTextLineLeading(FX_FLOAT fLineLeading) {
- CPVT_SecProps SecProps;
- SecProps.fLineLeading = fLineLeading;
- return SetRichTextProps(EP_LINELEADING, &SecProps, NULL);
-}
-
-FX_BOOL CFX_Edit::SetRichTextLineIndent(FX_FLOAT fLineIndent) {
- CPVT_SecProps SecProps;
- SecProps.fLineIndent = fLineIndent;
- return SetRichTextProps(EP_LINEINDENT, &SecProps, NULL);
-}
-
-FX_BOOL CFX_Edit::SetRichTextAlignment(int32_t nAlignment) {
- CPVT_SecProps SecProps;
- SecProps.nAlignment = nAlignment;
- return SetRichTextProps(EP_ALIGNMENT, &SecProps, NULL);
-}
-
-FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps) {
- FX_BOOL bSet = FALSE;
- FX_BOOL bSet1, bSet2;
- if (m_pVT->IsValid() && m_pVT->IsRichText()) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
-
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
-
- BeginGroupUndo(L"");
- bSet = SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp,
- TRUE);
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0)
- break;
- bSet1 = SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE);
- bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE);
-
- if (!bSet)
- bSet = (bSet1 || bSet2);
- }
-
- EndGroupUndo();
-
- if (bSet) {
- PaintSetProps(eProps, wrTemp);
- }
- }
- }
-
- return bSet;
-}
-
-void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr) {
- switch (eProps) {
- case EP_LINELEADING:
- case EP_LINEINDENT:
- case EP_ALIGNMENT:
- RearrangePart(wr);
- ScrollToCaret();
- Refresh(RP_ANALYSE);
- SetCaretOrigin();
- SetCaretInfo();
- break;
- case EP_WORDCOLOR:
- case EP_UNDERLINE:
- case EP_CROSSOUT:
- Refresh(RP_OPTIONAL, &wr);
- break;
- case EP_FONTINDEX:
- case EP_FONTSIZE:
- case EP_SCRIPTTYPE:
- case EP_CHARSPACE:
- case EP_HORZSCALE:
- case EP_BOLD:
- case EP_ITALIC:
- RearrangePart(wr);
- ScrollToCaret();
-
- CPVT_WordRange wrRefresh(m_pVT->GetSectionBeginPlace(wr.BeginPos),
- m_pVT->GetSectionEndPlace(wr.EndPos));
- Refresh(RP_ANALYSE, &wrRefresh);
-
- SetCaretOrigin();
- SetCaretInfo();
- break;
- }
-}
-
-FX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps,
- const CPVT_WordPlace& place,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps,
- const CPVT_WordRange& wr,
- FX_BOOL bAddUndo) {
- if (m_pVT->IsValid() && m_pVT->IsRichText()) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- FX_BOOL bSet = FALSE;
- CPVT_Section secinfo;
- CPVT_Section OldSecinfo;
-
- CPVT_WordPlace oldplace = pIterator->GetAt();
-
- if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT ||
- eProps == EP_ALIGNMENT) {
- if (pSecProps) {
- pIterator->SetAt(place);
- if (pIterator->GetSection(secinfo)) {
- if (bAddUndo)
- OldSecinfo = secinfo;
-
- switch (eProps) {
- case EP_LINELEADING:
- if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,
- pSecProps->fLineLeading)) {
- secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
- bSet = TRUE;
- }
- break;
- case EP_LINEINDENT:
- if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,
- pSecProps->fLineIndent)) {
- secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
- bSet = TRUE;
- }
- break;
- case EP_ALIGNMENT:
- if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) {
- secinfo.SecProps.nAlignment = pSecProps->nAlignment;
- bSet = TRUE;
- }
- break;
- default:
- break;
- }
- }
- }
- } else {
- if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) {
- pIterator->SetAt(place);
- if (pIterator->GetSection(secinfo)) {
- if (bAddUndo)
- OldSecinfo = secinfo;
-
- switch (eProps) {
- case EP_FONTINDEX:
- if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
- secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
- bSet = TRUE;
- }
- break;
- case EP_FONTSIZE:
- if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,
- pWordProps->fFontSize)) {
- secinfo.WordProps.fFontSize = pWordProps->fFontSize;
- bSet = TRUE;
- }
- break;
- case EP_WORDCOLOR:
- if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
- secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
- bSet = TRUE;
- }
- break;
- case EP_SCRIPTTYPE:
- if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) {
- secinfo.WordProps.nScriptType = pWordProps->nScriptType;
- bSet = TRUE;
- }
- break;
- case EP_CHARSPACE:
- if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,
- pWordProps->fCharSpace)) {
- secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
- bSet = TRUE;
- }
- break;
- case EP_HORZSCALE:
- if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
- secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
- bSet = TRUE;
- }
- break;
- case EP_UNDERLINE:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
- if ((secinfo.WordProps.nWordStyle &
- PVTWORD_STYLE_UNDERLINE) == 0) {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- } else {
- if ((secinfo.WordProps.nWordStyle &
- PVTWORD_STYLE_UNDERLINE) != 0) {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- }
- break;
- case EP_CROSSOUT:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
- 0) {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- } else {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
- 0) {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- }
- break;
- case EP_BOLD:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) ==
- 0) {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- } else {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) !=
- 0) {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- }
- break;
- case EP_ITALIC:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
- 0) {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- } else {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
- 0) {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- }
- break;
- default:
- break;
- }
- }
- }
- }
-
- if (bSet) {
- pIterator->SetSection(secinfo);
-
- if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(new CFXEU_SetSecProps(
- this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps,
- secinfo.SecProps, secinfo.WordProps, wr));
- }
- }
-
- pIterator->SetAt(oldplace);
-
- return bSet;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps,
- const CPVT_WordPlace& place,
- const CPVT_WordProps* pWordProps,
- const CPVT_WordRange& wr,
- FX_BOOL bAddUndo) {
- if (m_pVT->IsValid() && m_pVT->IsRichText()) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- FX_BOOL bSet = FALSE;
- CPVT_Word wordinfo;
- CPVT_Word OldWordinfo;
-
- CPVT_WordPlace oldplace = pIterator->GetAt();
-
- if (pWordProps) {
- pIterator->SetAt(place);
- if (pIterator->GetWord(wordinfo)) {
- if (bAddUndo)
- OldWordinfo = wordinfo;
-
- switch (eProps) {
- case EP_FONTINDEX:
- if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
- if (IFX_Edit_FontMap* pFontMap = GetFontMap()) {
- wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(
- wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex);
- }
- bSet = TRUE;
- }
- break;
- case EP_FONTSIZE:
- if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,
- pWordProps->fFontSize)) {
- wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
- bSet = TRUE;
- }
- break;
- case EP_WORDCOLOR:
- if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
- wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
- bSet = TRUE;
- }
- break;
- case EP_SCRIPTTYPE:
- if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) {
- wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
- bSet = TRUE;
- }
- break;
- case EP_CHARSPACE:
- if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,
- pWordProps->fCharSpace)) {
- wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
- bSet = TRUE;
- }
- break;
- case EP_HORZSCALE:
- if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
- wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
- bSet = TRUE;
- }
- break;
- case EP_UNDERLINE:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
- 0) {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- } else {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
- 0) {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- }
- break;
- case EP_CROSSOUT:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
- 0) {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- } else {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
- 0) {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- }
- break;
- case EP_BOLD:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- } else {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- }
- break;
- case EP_ITALIC:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
- 0) {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- } else {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
- 0) {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- }
- break;
- default:
- break;
- }
- }
- }
-
- if (bSet) {
- pIterator->SetWord(wordinfo);
-
- if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(new CFXEU_SetWordProps(this, place, eProps,
- OldWordinfo.WordProps,
- wordinfo.WordProps, wr));
- }
- }
-
- pIterator->SetAt(oldplace);
- return bSet;
- }
- }
-
- return FALSE;
-}
-
-void CFX_Edit::SetText(const FX_WCHAR* text,
- int32_t charset,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps) {
- SetText(text, charset, pSecProps, pWordProps, TRUE, TRUE);
-}
-
-FX_BOOL CFX_Edit::InsertWord(FX_WORD word,
- int32_t charset,
- const CPVT_WordProps* pWordProps) {
- return InsertWord(word, charset, pWordProps, TRUE, TRUE);
-}
-
-FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps) {
- return InsertReturn(pSecProps, pWordProps, TRUE, TRUE);
-}
-
-FX_BOOL CFX_Edit::Backspace() {
- return Backspace(TRUE, TRUE);
-}
-
-FX_BOOL CFX_Edit::Delete() {
- return Delete(TRUE, TRUE);
-}
-
-FX_BOOL CFX_Edit::Clear() {
- return Clear(TRUE, TRUE);
-}
-
-FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text,
- int32_t charset,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps) {
- return InsertText(text, charset, pSecProps, pWordProps, TRUE, TRUE);
-}
-
-FX_FLOAT CFX_Edit::GetFontSize() const {
- return m_pVT->GetFontSize();
-}
-
-FX_WORD CFX_Edit::GetPasswordChar() const {
- return m_pVT->GetPasswordChar();
-}
-
-int32_t CFX_Edit::GetCharArray() const {
- return m_pVT->GetCharArray();
-}
-
-CFX_FloatRect CFX_Edit::GetPlateRect() const {
- return m_pVT->GetPlateRect();
-}
-
-CFX_FloatRect CFX_Edit::GetContentRect() const {
- return VTToEdit(m_pVT->GetContentRect());
-}
-
-int32_t CFX_Edit::GetHorzScale() const {
- return m_pVT->GetHorzScale();
-}
-
-FX_FLOAT CFX_Edit::GetCharSpace() const {
- return m_pVT->GetCharSpace();
-}
-
-CPVT_WordRange CFX_Edit::GetWholeWordRange() const {
- if (m_pVT->IsValid())
- return CPVT_WordRange(m_pVT->GetBeginWordPlace(), m_pVT->GetEndWordPlace());
-
- return CPVT_WordRange();
-}
-
-CPVT_WordRange CFX_Edit::GetVisibleWordRange() const {
- if (m_bEnableOverflow)
- return GetWholeWordRange();
-
- if (m_pVT->IsValid()) {
- CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
-
- CPVT_WordPlace place1 = m_pVT->SearchWordPlace(
- EditToVT(CFX_FloatPoint(rcPlate.left, rcPlate.top)));
- CPVT_WordPlace place2 = m_pVT->SearchWordPlace(
- EditToVT(CFX_FloatPoint(rcPlate.right, rcPlate.bottom)));
-
- return CPVT_WordRange(place1, place2);
- }
-
- return CPVT_WordRange();
-}
-
-CPVT_WordPlace CFX_Edit::SearchWordPlace(const CFX_FloatPoint& point) const {
- if (m_pVT->IsValid()) {
- return m_pVT->SearchWordPlace(EditToVT(point));
- }
-
- return CPVT_WordPlace();
-}
-
-void CFX_Edit::Paint() {
- if (m_pVT->IsValid()) {
- RearrangeAll();
- ScrollToCaret();
- Refresh(RP_NOANALYSE);
- SetCaretOrigin();
- SetCaretInfo();
- }
-}
-
-void CFX_Edit::RearrangeAll() {
- if (m_pVT->IsValid()) {
- m_pVT->UpdateWordPlace(m_wpCaret);
- m_pVT->RearrangeAll();
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetScrollInfo();
- SetContentChanged();
- }
-}
-
-void CFX_Edit::RearrangePart(const CPVT_WordRange& range) {
- if (m_pVT->IsValid()) {
- m_pVT->UpdateWordPlace(m_wpCaret);
- m_pVT->RearrangePart(range);
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetScrollInfo();
- SetContentChanged();
- }
-}
-
-void CFX_Edit::SetContentChanged() {
- if (m_bNotify && m_pNotify) {
- CFX_FloatRect rcContent = m_pVT->GetContentRect();
- if (rcContent.Width() != m_rcOldContent.Width() ||
- rcContent.Height() != m_rcOldContent.Height()) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnContentChange(rcContent);
- m_bNotifyFlag = FALSE;
- }
- m_rcOldContent = rcContent;
- }
- }
-}
-
-void CFX_Edit::SelectAll() {
- if (m_pVT->IsValid()) {
- m_SelState = CFX_Edit_Select(GetWholeWordRange());
- SetCaret(m_SelState.EndPos);
-
- ScrollToCaret();
- CPVT_WordRange wrVisible = GetVisibleWordRange();
- Refresh(RP_OPTIONAL, &wrVisible);
- SetCaretInfo();
- }
-}
-
-void CFX_Edit::SelectNone() {
- if (m_pVT->IsValid()) {
- if (m_SelState.IsExist()) {
- CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
- m_SelState.Default();
- Refresh(RP_OPTIONAL, &wrTemp);
- }
- }
-}
-
-FX_BOOL CFX_Edit::IsSelected() const {
- return m_SelState.IsExist();
-}
-
-CFX_FloatPoint CFX_Edit::VTToEdit(const CFX_FloatPoint& point) const {
- CFX_FloatRect rcContent = m_pVT->GetContentRect();
- CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
-
- FX_FLOAT fPadding = 0.0f;
-
- switch (m_nAlignment) {
- case 0:
- fPadding = 0.0f;
- break;
- case 1:
- fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
- break;
- case 2:
- fPadding = rcPlate.Height() - rcContent.Height();
- break;
- }
-
- return CFX_FloatPoint(point.x - (m_ptScrollPos.x - rcPlate.left),
- point.y - (m_ptScrollPos.y + fPadding - rcPlate.top));
-}
-
-CFX_FloatPoint CFX_Edit::EditToVT(const CFX_FloatPoint& point) const {
- CFX_FloatRect rcContent = m_pVT->GetContentRect();
- CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
-
- FX_FLOAT fPadding = 0.0f;
-
- switch (m_nAlignment) {
- case 0:
- fPadding = 0.0f;
- break;
- case 1:
- fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
- break;
- case 2:
- fPadding = rcPlate.Height() - rcContent.Height();
- break;
- }
-
- return CFX_FloatPoint(point.x + (m_ptScrollPos.x - rcPlate.left),
- point.y + (m_ptScrollPos.y + fPadding - rcPlate.top));
-}
-
-CFX_FloatRect CFX_Edit::VTToEdit(const CFX_FloatRect& rect) const {
- CFX_FloatPoint ptLeftBottom =
- VTToEdit(CFX_FloatPoint(rect.left, rect.bottom));
- CFX_FloatPoint ptRightTop = VTToEdit(CFX_FloatPoint(rect.right, rect.top));
-
- return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x,
- ptRightTop.y);
-}
-
-CFX_FloatRect CFX_Edit::EditToVT(const CFX_FloatRect& rect) const {
- CFX_FloatPoint ptLeftBottom =
- EditToVT(CFX_FloatPoint(rect.left, rect.bottom));
- CFX_FloatPoint ptRightTop = EditToVT(CFX_FloatPoint(rect.right, rect.top));
-
- return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x,
- ptRightTop.y);
-}
-
-void CFX_Edit::SetScrollInfo() {
- if (m_bNotify && m_pNotify) {
- CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
- CFX_FloatRect rcContent = m_pVT->GetContentRect();
-
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right, rcContent.left,
- rcContent.right, rcPlate.Width() / 3,
- rcPlate.Width());
-
- m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
- rcContent.bottom, rcContent.top,
- rcPlate.Height() / 3, rcPlate.Height());
- m_bNotifyFlag = FALSE;
- }
- }
-}
-
-void CFX_Edit::SetScrollPosX(FX_FLOAT fx) {
- if (!m_bEnableScroll)
- return;
-
- if (m_pVT->IsValid()) {
- if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x, fx)) {
- m_ptScrollPos.x = fx;
- Refresh(RP_NOANALYSE);
-
- if (m_bNotify && m_pNotify) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollPosX(fx);
- m_bNotifyFlag = FALSE;
- }
- }
- }
- }
-}
-
-void CFX_Edit::SetScrollPosY(FX_FLOAT fy) {
- if (!m_bEnableScroll)
- return;
-
- if (m_pVT->IsValid()) {
- if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) {
- m_ptScrollPos.y = fy;
- Refresh(RP_NOANALYSE);
-
- if (m_bNotify && m_pNotify) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollPosY(fy);
- m_bNotifyFlag = FALSE;
- }
- }
- }
- }
-}
-
-void CFX_Edit::SetScrollPos(const CFX_FloatPoint& point) {
- SetScrollPosX(point.x);
- SetScrollPosY(point.y);
- SetScrollLimit();
- SetCaretInfo();
-}
-
-CFX_FloatPoint CFX_Edit::GetScrollPos() const {
- return m_ptScrollPos;
-}
-
-void CFX_Edit::SetScrollLimit() {
- if (m_pVT->IsValid()) {
- CFX_FloatRect rcContent = m_pVT->GetContentRect();
- CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
-
- if (rcPlate.Width() > rcContent.Width()) {
- SetScrollPosX(rcPlate.left);
- } else {
- if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.x, rcContent.left)) {
- SetScrollPosX(rcContent.left);
- } else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.x,
- rcContent.right - rcPlate.Width())) {
- SetScrollPosX(rcContent.right - rcPlate.Width());
- }
- }
-
- if (rcPlate.Height() > rcContent.Height()) {
- SetScrollPosY(rcPlate.top);
- } else {
- if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.y,
- rcContent.bottom + rcPlate.Height())) {
- SetScrollPosY(rcContent.bottom + rcPlate.Height());
- } else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.y, rcContent.top)) {
- SetScrollPosY(rcContent.top);
- }
- }
- }
-}
-
-void CFX_Edit::ScrollToCaret() {
- SetScrollLimit();
-
- if (m_pVT->IsValid()) {
- CFX_FloatPoint ptHead(0, 0);
- CFX_FloatPoint ptFoot(0, 0);
-
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(m_wpCaret);
-
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word)) {
- ptHead.x = word.ptWord.x + word.fWidth;
- ptHead.y = word.ptWord.y + word.fAscent;
- ptFoot.x = word.ptWord.x + word.fWidth;
- ptFoot.y = word.ptWord.y + word.fDescent;
- } else if (pIterator->GetLine(line)) {
- ptHead.x = line.ptLine.x;
- ptHead.y = line.ptLine.y + line.fLineAscent;
- ptFoot.x = line.ptLine.x;
- ptFoot.y = line.ptLine.y + line.fLineDescent;
- }
- }
-
- CFX_FloatPoint ptHeadEdit = VTToEdit(ptHead);
- CFX_FloatPoint ptFootEdit = VTToEdit(ptFoot);
-
- CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
-
- if (!FX_EDIT_IsFloatEqual(rcPlate.left, rcPlate.right)) {
- if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
- FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) {
- SetScrollPosX(ptHead.x);
- } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) {
- SetScrollPosX(ptHead.x - rcPlate.Width());
- }
- }
-
- if (!FX_EDIT_IsFloatEqual(rcPlate.top, rcPlate.bottom)) {
- if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
- FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) {
- if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) {
- SetScrollPosY(ptFoot.y + rcPlate.Height());
- }
- } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) {
- if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) {
- SetScrollPosY(ptHead.y);
- }
- }
- }
- }
-}
-
-void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan,
- const CPVT_WordRange* pRange1,
- const CPVT_WordRange* pRange2) {
- if (m_bEnableRefresh && m_pVT->IsValid()) {
- m_Refresh.BeginRefresh();
- RefreshPushLineRects(GetVisibleWordRange());
-
- m_Refresh.NoAnalyse();
- m_ptRefreshScrollPos = m_ptScrollPos;
-
- if (m_bNotify && m_pNotify) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- if (const CFX_Edit_RectArray* pRects = m_Refresh.GetRefreshRects()) {
- for (int32_t i = 0, sz = pRects->GetSize(); i < sz; i++)
- m_pNotify->IOnInvalidateRect(pRects->GetAt(i));
- }
- m_bNotifyFlag = FALSE;
- }
- }
-
- m_Refresh.EndRefresh();
- }
-}
-
-void CFX_Edit::RefreshPushLineRects(const CPVT_WordRange& wr) {
- if (m_pVT->IsValid()) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- CPVT_WordPlace wpBegin = wr.BeginPos;
- m_pVT->UpdateWordPlace(wpBegin);
- CPVT_WordPlace wpEnd = wr.EndPos;
- m_pVT->UpdateWordPlace(wpEnd);
- pIterator->SetAt(wpBegin);
-
- CPVT_Line lineinfo;
- do {
- if (!pIterator->GetLine(lineinfo))
- break;
- if (lineinfo.lineplace.LineCmp(wpEnd) > 0)
- break;
-
- CFX_FloatRect rcLine(lineinfo.ptLine.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- lineinfo.ptLine.x + lineinfo.fLineWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace, lineinfo.lineEnd),
- VTToEdit(rcLine));
- } while (pIterator->NextLine());
- }
- }
-}
-
-void CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange& wr) {
- if (m_pVT->IsValid()) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- CPVT_WordRange wrTemp = wr;
-
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
-
- CPVT_Word wordinfo;
- CPVT_Line lineinfo;
- CPVT_WordPlace place;
-
- while (pIterator->NextWord()) {
- place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0)
- break;
-
- pIterator->GetWord(wordinfo);
- pIterator->GetLine(lineinfo);
-
- if (place.LineCmp(wrTemp.BeginPos) == 0 ||
- place.LineCmp(wrTemp.EndPos) == 0) {
- CFX_FloatRect rcWord(wordinfo.ptWord.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- wordinfo.ptWord.x + wordinfo.fWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- m_Refresh.AddRefresh(VTToEdit(rcWord));
- } else {
- CFX_FloatRect rcLine(lineinfo.ptLine.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- lineinfo.ptLine.x + lineinfo.fLineWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- m_Refresh.AddRefresh(VTToEdit(rcLine));
-
- pIterator->NextLine();
- }
- }
- }
- }
-}
-
-void CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- CPVT_WordRange wrTemp = wr;
-
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
-
- CPVT_Word wordinfo;
- CPVT_Line lineinfo;
- CPVT_WordPlace place;
-
- while (pIterator->NextWord()) {
- place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0)
- break;
-
- pIterator->GetWord(wordinfo);
- pIterator->GetLine(lineinfo);
-
- if (place.LineCmp(wrTemp.BeginPos) == 0 ||
- place.LineCmp(wrTemp.EndPos) == 0) {
- CFX_FloatRect rcWord(wordinfo.ptWord.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- wordinfo.ptWord.x + wordinfo.fWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- if (m_bNotify && m_pNotify) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- CFX_FloatRect rcRefresh = VTToEdit(rcWord);
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- }
- } else {
- CFX_FloatRect rcLine(lineinfo.ptLine.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- lineinfo.ptLine.x + lineinfo.fLineWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- if (m_bNotify && m_pNotify) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- CFX_FloatRect rcRefresh = VTToEdit(rcLine);
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- }
-
- pIterator->NextLine();
- }
- }
- }
-}
-
-void CFX_Edit::SetCaret(const CPVT_WordPlace& place) {
- m_wpOldCaret = m_wpCaret;
- m_wpCaret = place;
-}
-
-void CFX_Edit::SetCaretInfo() {
- if (m_bNotify && m_pNotify) {
- if (!m_bNotifyFlag) {
- CFX_FloatPoint ptHead(0.0f, 0.0f), ptFoot(0.0f, 0.0f);
-
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(m_wpCaret);
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word)) {
- ptHead.x = word.ptWord.x + word.fWidth;
- ptHead.y = word.ptWord.y + word.fAscent;
- ptFoot.x = word.ptWord.x + word.fWidth;
- ptFoot.y = word.ptWord.y + word.fDescent;
- } else if (pIterator->GetLine(line)) {
- ptHead.x = line.ptLine.x;
- ptHead.y = line.ptLine.y + line.fLineAscent;
- ptFoot.x = line.ptLine.x;
- ptFoot.y = line.ptLine.y + line.fLineDescent;
- }
- }
-
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetCaret(!m_SelState.IsExist(), VTToEdit(ptHead),
- VTToEdit(ptFoot), m_wpCaret);
- m_bNotifyFlag = FALSE;
- }
- }
-
- SetCaretChange();
-}
-
-void CFX_Edit::SetCaretChange() {
- if (m_wpCaret == m_wpOldCaret)
- return;
-
- if (m_bNotify && m_pVT->IsRichText() && m_pNotify) {
- CPVT_SecProps SecProps;
- CPVT_WordProps WordProps;
-
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(m_wpCaret);
- CPVT_Word word;
- CPVT_Section section;
-
- if (pIterator->GetSection(section)) {
- SecProps = section.SecProps;
- WordProps = section.WordProps;
- }
-
- if (pIterator->GetWord(word)) {
- WordProps = word.WordProps;
- }
- }
-
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnCaretChange(SecProps, WordProps);
- m_bNotifyFlag = FALSE;
- }
- }
-}
-
-void CFX_Edit::SetCaret(int32_t nPos) {
- if (m_pVT->IsValid()) {
- SelectNone();
- SetCaret(m_pVT->WordIndexToWordPlace(nPos));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
-}
-
-void CFX_Edit::OnMouseDown(const CFX_FloatPoint& point,
- FX_BOOL bShift,
- FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- SelectNone();
- SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
-}
-
-void CFX_Edit::OnMouseMove(const CFX_FloatPoint& point,
- FX_BOOL bShift,
- FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
-
- if (m_wpCaret != m_wpOldCaret) {
- m_SelState.SetEndPos(m_wpCaret);
-
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
-}
-
-void CFX_Edit::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- SetCaret(m_pVT->GetUpWordPlace(m_wpCaret, m_ptCaret));
-
- if (bShift) {
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret) {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
- } else {
- SelectNone();
-
- ScrollToCaret();
- SetCaretInfo();
- }
- }
-}
-
-void CFX_Edit::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- SetCaret(m_pVT->GetDownWordPlace(m_wpCaret, m_ptCaret));
-
- if (bShift) {
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret) {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
- } else {
- SelectNone();
-
- ScrollToCaret();
- SetCaretInfo();
- }
- }
-}
-
-void CFX_Edit::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- if (bShift) {
- if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
-
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret) {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
- } else {
- if (m_SelState.IsExist()) {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- } else {
- if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
-
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
- }
-}
-
-void CFX_Edit::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- if (bShift) {
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
-
- if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret) {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
- } else {
- if (m_SelState.IsExist()) {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) > 0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- } else {
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
-
- if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
- }
-}
-
-void CFX_Edit::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- if (bShift) {
- if (bCtrl)
- SetCaret(m_pVT->GetBeginWordPlace());
- else
- SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- } else {
- if (m_SelState.IsExist()) {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- } else {
- if (bCtrl)
- SetCaret(m_pVT->GetBeginWordPlace());
- else
- SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
- }
-}
-
-void CFX_Edit::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) {
- if (m_pVT->IsValid()) {
- if (bShift) {
- if (bCtrl)
- SetCaret(m_pVT->GetEndWordPlace());
- else
- SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- } else {
- if (m_SelState.IsExist()) {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) > 0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- } else {
- if (bCtrl)
- SetCaret(m_pVT->GetEndWordPlace());
- else
- SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
- }
-}
-
-void CFX_Edit::SetText(const FX_WCHAR* text,
- int32_t charset,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps,
- FX_BOOL bAddUndo,
- FX_BOOL bPaint) {
- Empty();
- DoInsertText(CPVT_WordPlace(0, 0, -1), text, charset, pSecProps, pWordProps);
- if (bPaint)
- Paint();
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnSetText(m_wpCaret, m_wpOldCaret);
-}
-
-FX_BOOL CFX_Edit::InsertWord(FX_WORD word,
- int32_t charset,
- const CPVT_WordProps* pWordProps,
- FX_BOOL bAddUndo,
- FX_BOOL bPaint) {
- if (IsTextOverflow())
- return FALSE;
-
- if (m_pVT->IsValid()) {
- m_pVT->UpdateWordPlace(m_wpCaret);
-
- SetCaret(m_pVT->InsertWord(
- m_wpCaret, word, GetCharSetFromUnicode(word, charset), pWordProps));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret) {
- if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(new CFXEU_InsertWord(this, m_wpOldCaret, m_wpCaret,
- word, charset, pWordProps));
- }
-
- if (bPaint)
- PaintInsertText(m_wpOldCaret, m_wpCaret);
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret);
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps,
- FX_BOOL bAddUndo,
- FX_BOOL bPaint) {
- if (IsTextOverflow())
- return FALSE;
-
- if (m_pVT->IsValid()) {
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(m_pVT->InsertSection(m_wpCaret, pSecProps, pWordProps));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret) {
- if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(new CFXEU_InsertReturn(this, m_wpOldCaret, m_wpCaret,
- pSecProps, pWordProps));
- }
-
- if (bPaint) {
- RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
- Refresh(RP_ANALYSE, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret);
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint) {
- if (m_pVT->IsValid()) {
- if (m_wpCaret == m_pVT->GetBeginWordPlace())
- return FALSE;
-
- CPVT_Section section;
- CPVT_Word word;
-
- if (bAddUndo) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(m_wpCaret);
- pIterator->GetSection(section);
- pIterator->GetWord(word);
- }
- }
-
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(m_pVT->BackSpaceWord(m_wpCaret));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret) {
- if (bAddUndo && m_bEnableUndo) {
- if (m_wpCaret.SecCmp(m_wpOldCaret) != 0)
- AddEditUndoItem(new CFXEU_Backspace(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, section.WordProps));
- else
- AddEditUndoItem(new CFXEU_Backspace(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, word.WordProps));
- }
-
- if (bPaint) {
- RearrangePart(CPVT_WordRange(m_wpCaret, m_wpOldCaret));
- ScrollToCaret();
-
- CPVT_WordRange wr;
- if (m_wpCaret.SecCmp(m_wpOldCaret) != 0)
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),
- GetVisibleWordRange().EndPos);
- else if (m_wpCaret.LineCmp(m_wpOldCaret) != 0)
- wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),
- m_pVT->GetSectionEndPlace(m_wpCaret));
- else
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),
- m_pVT->GetSectionEndPlace(m_wpCaret));
-
- Refresh(RP_ANALYSE, &wr);
-
- SetCaretOrigin();
- SetCaretInfo();
- }
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret);
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::Delete(FX_BOOL bAddUndo, FX_BOOL bPaint) {
- if (m_pVT->IsValid()) {
- if (m_wpCaret == m_pVT->GetEndWordPlace())
- return FALSE;
-
- CPVT_Section section;
- CPVT_Word word;
-
- if (bAddUndo) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
- pIterator->GetSection(section);
- pIterator->GetWord(word);
- }
- }
-
- m_pVT->UpdateWordPlace(m_wpCaret);
- FX_BOOL bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret));
-
- SetCaret(m_pVT->DeleteWord(m_wpCaret));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (bAddUndo && m_bEnableUndo) {
- if (bSecEnd)
- AddEditUndoItem(new CFXEU_Delete(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, section.WordProps, bSecEnd));
- else
- AddEditUndoItem(new CFXEU_Delete(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, word.WordProps, bSecEnd));
- }
-
- if (bPaint) {
- RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
- ScrollToCaret();
-
- CPVT_WordRange wr;
- if (bSecEnd)
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),
- GetVisibleWordRange().EndPos);
- else if (m_wpCaret.LineCmp(m_wpOldCaret) != 0)
- wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),
- m_pVT->GetSectionEndPlace(m_wpCaret));
- else
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),
- m_pVT->GetSectionEndPlace(m_wpCaret));
-
- Refresh(RP_ANALYSE, &wr);
-
- SetCaretOrigin();
- SetCaretInfo();
- }
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::Empty() {
- if (m_pVT->IsValid()) {
- m_pVT->DeleteWords(GetWholeWordRange());
- SetCaret(m_pVT->GetBeginWordPlace());
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) {
- if (m_pVT->IsValid()) {
- if (m_SelState.IsExist()) {
- CPVT_WordRange range = m_SelState.ConvertToWordRange();
-
- if (bAddUndo && m_bEnableUndo) {
- if (m_pVT->IsRichText()) {
- BeginGroupUndo(L"");
-
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(range.EndPos);
-
- CPVT_Word wordinfo;
- CPVT_Section secinfo;
- do {
- CPVT_WordPlace place = pIterator->GetAt();
- if (place.WordCmp(range.BeginPos) <= 0)
- break;
-
- CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
-
- if (oldplace.SecCmp(place) != 0) {
- if (pIterator->GetSection(secinfo)) {
- AddEditUndoItem(new CFXEU_ClearRich(
- this, oldplace, place, range, wordinfo.Word,
- wordinfo.nCharset, secinfo.SecProps, secinfo.WordProps));
- }
- } else {
- if (pIterator->GetWord(wordinfo)) {
- oldplace = m_pVT->AdjustLineHeader(oldplace, TRUE);
- place = m_pVT->AdjustLineHeader(place, TRUE);
-
- AddEditUndoItem(new CFXEU_ClearRich(
- this, oldplace, place, range, wordinfo.Word,
- wordinfo.nCharset, secinfo.SecProps, wordinfo.WordProps));
- }
- }
- } while (pIterator->PrevWord());
- }
- EndGroupUndo();
- } else {
- AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
- }
- }
-
- SelectNone();
- SetCaret(m_pVT->DeleteWords(range));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (bPaint) {
- RearrangePart(range);
- ScrollToCaret();
-
- CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
- Refresh(RP_ANALYSE, &wr);
-
- SetCaretOrigin();
- SetCaretInfo();
- }
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text,
- int32_t charset,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps,
- FX_BOOL bAddUndo,
- FX_BOOL bPaint) {
- if (IsTextOverflow())
- return FALSE;
-
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(DoInsertText(m_wpCaret, text, charset, pSecProps, pWordProps));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret) {
- if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(new CFXEU_InsertText(this, m_wpOldCaret, m_wpCaret, text,
- charset, pSecProps, pWordProps));
- }
-
- if (bPaint)
- PaintInsertText(m_wpOldCaret, m_wpCaret);
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertText(m_wpCaret, m_wpOldCaret);
-
- return TRUE;
- }
- return FALSE;
-}
-
-void CFX_Edit::PaintInsertText(const CPVT_WordPlace& wpOld,
- const CPVT_WordPlace& wpNew) {
- if (m_pVT->IsValid()) {
- RearrangePart(CPVT_WordRange(wpOld, wpNew));
- ScrollToCaret();
-
- CPVT_WordRange wr;
- if (m_wpCaret.LineCmp(wpOld) != 0)
- wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(wpOld),
- m_pVT->GetSectionEndPlace(wpNew));
- else
- wr = CPVT_WordRange(wpOld, m_pVT->GetSectionEndPlace(wpNew));
- Refresh(RP_ANALYSE, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
-}
-
-FX_BOOL CFX_Edit::Redo() {
- if (m_bEnableUndo) {
- if (m_Undo.CanRedo()) {
- m_Undo.Redo();
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::Undo() {
- if (m_bEnableUndo) {
- if (m_Undo.CanUndo()) {
- m_Undo.Undo();
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-void CFX_Edit::SetCaretOrigin() {
- if (m_pVT->IsValid()) {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- pIterator->SetAt(m_wpCaret);
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word)) {
- m_ptCaret.x = word.ptWord.x + word.fWidth;
- m_ptCaret.y = word.ptWord.y;
- } else if (pIterator->GetLine(line)) {
- m_ptCaret.x = line.ptLine.x;
- m_ptCaret.y = line.ptLine.y;
- }
- }
- }
-}
-
-int32_t CFX_Edit::WordPlaceToWordIndex(const CPVT_WordPlace& place) const {
- if (m_pVT->IsValid())
- return m_pVT->WordPlaceToWordIndex(place);
-
- return -1;
-}
-
-CPVT_WordPlace CFX_Edit::WordIndexToWordPlace(int32_t index) const {
- if (m_pVT->IsValid())
- return m_pVT->WordIndexToWordPlace(index);
-
- return CPVT_WordPlace();
-}
-
-FX_BOOL CFX_Edit::IsTextFull() const {
- int32_t nTotalWords = m_pVT->GetTotalWords();
- int32_t nLimitChar = m_pVT->GetLimitChar();
- int32_t nCharArray = m_pVT->GetCharArray();
-
- return IsTextOverflow() || (nLimitChar > 0 && nTotalWords >= nLimitChar) ||
- (nCharArray > 0 && nTotalWords >= nCharArray);
-}
-
-FX_BOOL CFX_Edit::IsTextOverflow() const {
- if (!m_bEnableScroll && !m_bEnableOverflow) {
- CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
- CFX_FloatRect rcContent = m_pVT->GetContentRect();
-
- if (m_pVT->IsMultiLine() && GetTotalLines() > 1) {
- if (FX_EDIT_IsFloatBigger(rcContent.Height(), rcPlate.Height()))
- return TRUE;
- }
-
- if (FX_EDIT_IsFloatBigger(rcContent.Width(), rcPlate.Width()))
- return TRUE;
- }
-
- return FALSE;
-}
-
-CPVT_WordPlace CFX_Edit::GetLineBeginPlace(const CPVT_WordPlace& place) const {
- return m_pVT->GetLineBeginPlace(place);
-}
-
-CPVT_WordPlace CFX_Edit::GetLineEndPlace(const CPVT_WordPlace& place) const {
- return m_pVT->GetLineEndPlace(place);
-}
-
-CPVT_WordPlace CFX_Edit::GetSectionBeginPlace(
- const CPVT_WordPlace& place) const {
- return m_pVT->GetSectionBeginPlace(place);
-}
-
-CPVT_WordPlace CFX_Edit::GetSectionEndPlace(const CPVT_WordPlace& place) const {
- return m_pVT->GetSectionEndPlace(place);
-}
-
-FX_BOOL CFX_Edit::CanUndo() const {
- if (m_bEnableUndo) {
- return m_Undo.CanUndo();
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::CanRedo() const {
- if (m_bEnableUndo) {
- return m_Undo.CanRedo();
- }
-
- return FALSE;
-}
-
-FX_BOOL CFX_Edit::IsModified() const {
- if (m_bEnableUndo) {
- return m_Undo.IsModified();
- }
-
- return FALSE;
-}
-
-void CFX_Edit::EnableRefresh(FX_BOOL bRefresh) {
- m_bEnableRefresh = bRefresh;
-}
-
-void CFX_Edit::EnableUndo(FX_BOOL bUndo) {
- m_bEnableUndo = bUndo;
-}
-
-void CFX_Edit::EnableNotify(FX_BOOL bNotify) {
- m_bNotify = bNotify;
-}
-
-void CFX_Edit::EnableOprNotify(FX_BOOL bNotify) {
- m_bOprNotify = bNotify;
-}
-
-FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- CPVT_WordPlace wpOld = pIterator->GetAt();
-
- pIterator->SetAt(place);
- CPVT_Line line;
- pIterator->GetLine(line);
-
- pIterator->SetAt(wpOld);
-
- return line.ptLine.y + line.fLineAscent;
- }
-
- return 0.0f;
-}
-
-FX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const {
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
- CPVT_WordPlace wpOld = pIterator->GetAt();
-
- pIterator->SetAt(place);
- CPVT_Line line;
- pIterator->GetLine(line);
-
- pIterator->SetAt(wpOld);
-
- return line.ptLine.y + line.fLineDescent;
- }
-
- return 0.0f;
-}
-
-CPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place,
- const FX_WCHAR* text,
- int32_t charset,
- const CPVT_SecProps* pSecProps,
- const CPVT_WordProps* pWordProps) {
- CPVT_WordPlace wp = place;
-
- if (m_pVT->IsValid()) {
- CFX_WideString sText = text;
-
- for (int32_t i = 0, sz = sText.GetLength(); i < sz; i++) {
- FX_WORD word = sText[i];
- switch (word) {
- case 0x0D:
- wp = m_pVT->InsertSection(wp, pSecProps, pWordProps);
- if (sText[i + 1] == 0x0A)
- i++;
- break;
- case 0x0A:
- wp = m_pVT->InsertSection(wp, pSecProps, pWordProps);
- if (sText[i + 1] == 0x0D)
- i++;
- break;
- case 0x09:
- word = 0x20;
- default:
- wp = m_pVT->InsertWord(wp, word, GetCharSetFromUnicode(word, charset),
- pWordProps);
- break;
- }
- }
- }
-
- return wp;
-}
-
-int32_t CFX_Edit::GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset) {
- if (IFX_Edit_FontMap* pFontMap = GetFontMap())
- return pFontMap->CharSetFromUnicode(word, nOldCharset);
- return nOldCharset;
-}
-
-void CFX_Edit::BeginGroupUndo(const CFX_WideString& sTitle) {
- ASSERT(!m_pGroupUndoItem);
-
- m_pGroupUndoItem = new CFX_Edit_GroupUndoItem(sTitle);
-}
-
-void CFX_Edit::EndGroupUndo() {
- m_pGroupUndoItem->UpdateItems();
- m_Undo.AddItem(m_pGroupUndoItem);
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnAddUndo(m_pGroupUndoItem);
- m_pGroupUndoItem = NULL;
-}
-
-void CFX_Edit::AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem) {
- if (m_pGroupUndoItem) {
- m_pGroupUndoItem->AddUndoItem(pEditUndoItem);
- } else {
- m_Undo.AddItem(pEditUndoItem);
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnAddUndo(pEditUndoItem);
- }
-}
-
-void CFX_Edit::AddUndoItem(IFX_Edit_UndoItem* pUndoItem) {
- m_Undo.AddItem(pUndoItem);
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnAddUndo(pUndoItem);
-}
diff --git a/fpdfsdk/src/fxedit/fxet_list.cpp b/fpdfsdk/src/fxedit/fxet_list.cpp
deleted file mode 100644
index cc9696030e..0000000000
--- a/fpdfsdk/src/fxedit/fxet_list.cpp
+++ /dev/null
@@ -1,822 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fxedit/fxet_list.h"
-
-#include "fpdfsdk/include/fxedit/fxet_edit.h"
-
-CFX_ListItem::CFX_ListItem()
- : m_pEdit(NULL),
- m_bSelected(FALSE),
- m_bCaret(FALSE),
- m_rcListItem(0.0f, 0.0f, 0.0f, 0.0f) {
- m_pEdit = IFX_Edit::NewEdit();
- m_pEdit->SetAlignmentV(1);
- m_pEdit->Initialize();
-}
-
-CFX_ListItem::~CFX_ListItem() {
- IFX_Edit::DelEdit(m_pEdit);
-}
-
-void CFX_ListItem::SetFontMap(IFX_Edit_FontMap* pFontMap) {
- if (m_pEdit)
- m_pEdit->SetFontMap(pFontMap);
-}
-
-IFX_Edit* CFX_ListItem::GetEdit() const {
- return m_pEdit;
-}
-
-IFX_Edit_Iterator* CFX_ListItem::GetIterator() const {
- if (m_pEdit)
- return m_pEdit->GetIterator();
-
- return NULL;
-}
-
-void CFX_ListItem::SetRect(const CLST_Rect& rect) {
- m_rcListItem = rect;
-}
-
-CLST_Rect CFX_ListItem::GetRect() const {
- return m_rcListItem;
-}
-
-FX_BOOL CFX_ListItem::IsSelected() const {
- return m_bSelected;
-}
-
-void CFX_ListItem::SetSelect(FX_BOOL bSelected) {
- m_bSelected = bSelected;
-}
-
-FX_BOOL CFX_ListItem::IsCaret() const {
- return m_bCaret;
-}
-
-void CFX_ListItem::SetCaret(FX_BOOL bCaret) {
- m_bCaret = bCaret;
-}
-
-void CFX_ListItem::SetText(const FX_WCHAR* text) {
- if (m_pEdit)
- m_pEdit->SetText(text);
-}
-
-void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize) {
- if (m_pEdit)
- m_pEdit->SetFontSize(fFontSize);
-}
-
-FX_FLOAT CFX_ListItem::GetItemHeight() const {
- if (m_pEdit)
- return m_pEdit->GetContentRect().Height();
-
- return 0.0f;
-}
-
-FX_WORD CFX_ListItem::GetFirstChar() const {
- CPVT_Word word;
-
- if (IFX_Edit_Iterator* pIterator = GetIterator()) {
- pIterator->SetAt(1);
- pIterator->GetWord(word);
- }
-
- return word.Word;
-}
-
-CFX_WideString CFX_ListItem::GetText() const {
- if (m_pEdit)
- return m_pEdit->GetText();
-
- return L"";
-}
-
-CFX_List::CFX_List()
- : m_fFontSize(0.0f), m_pFontMap(NULL), m_bMultiple(FALSE) {}
-
-CFX_List::~CFX_List() {
- Empty();
-}
-
-void CFX_List::Empty() {
- for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++)
- delete m_aListItems.GetAt(i);
-
- m_aListItems.RemoveAll();
-}
-
-void CFX_List::SetFontMap(IFX_Edit_FontMap* pFontMap) {
- m_pFontMap = pFontMap;
-}
-
-void CFX_List::SetFontSize(FX_FLOAT fFontSize) {
- m_fFontSize = fFontSize;
-}
-
-void CFX_List::AddItem(const FX_WCHAR* str) {
- CFX_ListItem* pListItem = new CFX_ListItem();
- pListItem->SetFontMap(m_pFontMap);
- pListItem->SetFontSize(m_fFontSize);
- pListItem->SetText(str);
- m_aListItems.Add(pListItem);
-}
-
-void CFX_List::ReArrange(int32_t nItemIndex) {
- FX_FLOAT fPosY = 0.0f;
-
- if (CFX_ListItem* pPrevItem = m_aListItems.GetAt(nItemIndex - 1))
- fPosY = pPrevItem->GetRect().bottom;
-
- for (int32_t i = nItemIndex, sz = m_aListItems.GetSize(); i < sz; i++) {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
- FX_FLOAT fListItemHeight = pListItem->GetItemHeight();
- pListItem->SetRect(CLST_Rect(0.0f, fPosY, 0.0f, fPosY + fListItemHeight));
- fPosY += fListItemHeight;
- }
- }
-
- SetContentRect(CLST_Rect(0.0f, 0.0f, 0.0f, fPosY));
-}
-
-IFX_Edit* CFX_List::GetItemEdit(int32_t nIndex) const {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
- return pListItem->GetEdit();
- }
-
- return NULL;
-}
-
-int32_t CFX_List::GetCount() const {
- return m_aListItems.GetSize();
-}
-
-CFX_FloatRect CFX_List::GetPlateRect() const {
- return CFX_ListContainer::GetPlateRect();
-}
-
-CFX_FloatRect CFX_List::GetContentRect() const {
- return InnerToOuter(CFX_ListContainer::GetContentRect());
-}
-
-FX_FLOAT CFX_List::GetFontSize() const {
- return m_fFontSize;
-}
-
-int32_t CFX_List::GetItemIndex(const CFX_FloatPoint& point) const {
- CFX_FloatPoint pt = OuterToInner(point);
-
- FX_BOOL bFirst = TRUE;
- FX_BOOL bLast = TRUE;
-
- for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
- CLST_Rect rcListItem = pListItem->GetRect();
-
- if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top)) {
- bFirst = FALSE;
- }
-
- if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom)) {
- bLast = FALSE;
- }
-
- if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) {
- return i;
- }
- }
- }
-
- if (bFirst)
- return 0;
- if (bLast)
- return m_aListItems.GetSize() - 1;
-
- return -1;
-}
-
-FX_FLOAT CFX_List::GetFirstHeight() const {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(0)) {
- return pListItem->GetItemHeight();
- }
-
- return 1.0f;
-}
-
-int32_t CFX_List::GetFirstSelected() const {
- for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
- if (pListItem->IsSelected())
- return i;
- }
- }
- return -1;
-}
-
-int32_t CFX_List::GetLastSelected() const {
- for (int32_t i = m_aListItems.GetSize() - 1; i >= 0; i--) {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
- if (pListItem->IsSelected())
- return i;
- }
- }
- return -1;
-}
-
-FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const {
- if ((c >= 'a') && (c <= 'z'))
- c = c - ('a' - 'A');
- return c;
-}
-
-int32_t CFX_List::FindNext(int32_t nIndex, FX_WCHAR nChar) const {
- int32_t nCircleIndex = nIndex;
-
- for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
- nCircleIndex++;
- if (nCircleIndex >= sz)
- nCircleIndex = 0;
-
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) {
- if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar))
- return nCircleIndex;
- }
- }
-
- return nCircleIndex;
-}
-
-CFX_FloatRect CFX_List::GetItemRect(int32_t nIndex) const {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
- CFX_FloatRect rcItem = pListItem->GetRect();
- rcItem.left = 0.0f;
- rcItem.right = GetPlateRect().Width();
- return InnerToOuter(rcItem);
- }
-
- return CFX_FloatRect();
-}
-
-FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
- return pListItem->IsSelected();
- }
-
- return FALSE;
-}
-
-void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
- pListItem->SetSelect(bSelected);
- }
-}
-
-void CFX_List::SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret) {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
- pListItem->SetCaret(bCaret);
- }
-}
-
-void CFX_List::SetMultipleSel(FX_BOOL bMultiple) {
- m_bMultiple = bMultiple;
-}
-
-FX_BOOL CFX_List::IsMultipleSel() const {
- return m_bMultiple;
-}
-
-FX_BOOL CFX_List::IsValid(int32_t nItemIndex) const {
- return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize();
-}
-
-CFX_WideString CFX_List::GetItemText(int32_t nIndex) const {
- if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
- return pListItem->GetText();
- }
-
- return L"";
-}
-
-CPLST_Select::CPLST_Select() {}
-
-CPLST_Select::~CPLST_Select() {
- for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++)
- delete m_aItems.GetAt(i);
-
- m_aItems.RemoveAll();
-}
-
-void CPLST_Select::Add(int32_t nItemIndex) {
- int32_t nIndex = Find(nItemIndex);
-
- if (nIndex < 0) {
- m_aItems.Add(new CPLST_Select_Item(nItemIndex, 1));
- } else {
- if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) {
- pItem->nState = 1;
- }
- }
-}
-
-void CPLST_Select::Add(int32_t nBeginIndex, int32_t nEndIndex) {
- if (nBeginIndex > nEndIndex) {
- int32_t nTemp = nEndIndex;
- nEndIndex = nBeginIndex;
- nBeginIndex = nTemp;
- }
-
- for (int32_t i = nBeginIndex; i <= nEndIndex; i++)
- Add(i);
-}
-
-void CPLST_Select::Sub(int32_t nItemIndex) {
- for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) {
- if (CPLST_Select_Item* pItem = m_aItems.GetAt(i))
- if (pItem->nItemIndex == nItemIndex)
- pItem->nState = -1;
- }
-}
-
-void CPLST_Select::Sub(int32_t nBeginIndex, int32_t nEndIndex) {
- if (nBeginIndex > nEndIndex) {
- int32_t nTemp = nEndIndex;
- nEndIndex = nBeginIndex;
- nBeginIndex = nTemp;
- }
-
- for (int32_t i = nBeginIndex; i <= nEndIndex; i++)
- Sub(i);
-}
-
-int32_t CPLST_Select::Find(int32_t nItemIndex) const {
- for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) {
- if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
- if (pItem->nItemIndex == nItemIndex)
- return i;
- }
- }
-
- return -1;
-}
-
-FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const {
- return Find(nItemIndex) >= 0;
-}
-
-int32_t CPLST_Select::GetCount() const {
- return m_aItems.GetSize();
-}
-
-int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const {
- if (nIndex >= 0 && nIndex < m_aItems.GetSize())
- if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex))
- return pItem->nItemIndex;
-
- return -1;
-}
-
-int32_t CPLST_Select::GetState(int32_t nIndex) const {
- if (nIndex >= 0 && nIndex < m_aItems.GetSize())
- if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex))
- return pItem->nState;
-
- return 0;
-}
-
-void CPLST_Select::DeselectAll() {
- for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) {
- if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
- pItem->nState = -1;
- }
- }
-}
-
-void CPLST_Select::Done() {
- for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) {
- if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
- if (pItem->nState == -1) {
- delete pItem;
- m_aItems.RemoveAt(i);
- } else {
- pItem->nState = 0;
- }
- }
- }
-}
-
-CFX_ListCtrl::CFX_ListCtrl()
- : m_pNotify(NULL),
- m_bNotifyFlag(FALSE),
- m_ptScrollPos(0.0f, 0.0f),
- m_nSelItem(-1),
- m_nFootIndex(-1),
- m_bCtrlSel(FALSE),
- m_nCaretIndex(-1) {}
-
-CFX_ListCtrl::~CFX_ListCtrl() {}
-
-void CFX_ListCtrl::SetNotify(IFX_List_Notify* pNotify) {
- m_pNotify = pNotify;
-}
-
-CFX_FloatPoint CFX_ListCtrl::InToOut(const CFX_FloatPoint& point) const {
- CFX_FloatRect rcPlate = GetPlateRect();
-
- return CFX_FloatPoint(point.x - (m_ptScrollPos.x - rcPlate.left),
- point.y - (m_ptScrollPos.y - rcPlate.top));
-}
-
-CFX_FloatPoint CFX_ListCtrl::OutToIn(const CFX_FloatPoint& point) const {
- CFX_FloatRect rcPlate = GetPlateRect();
-
- return CFX_FloatPoint(point.x + (m_ptScrollPos.x - rcPlate.left),
- point.y + (m_ptScrollPos.y - rcPlate.top));
-}
-
-CFX_FloatRect CFX_ListCtrl::InToOut(const CFX_FloatRect& rect) const {
- CFX_FloatPoint ptLeftBottom = InToOut(CFX_FloatPoint(rect.left, rect.bottom));
- CFX_FloatPoint ptRightTop = InToOut(CFX_FloatPoint(rect.right, rect.top));
-
- return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x,
- ptRightTop.y);
-}
-
-CFX_FloatRect CFX_ListCtrl::OutToIn(const CFX_FloatRect& rect) const {
- CFX_FloatPoint ptLeftBottom = OutToIn(CFX_FloatPoint(rect.left, rect.bottom));
- CFX_FloatPoint ptRightTop = OutToIn(CFX_FloatPoint(rect.right, rect.top));
-
- return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x,
- ptRightTop.y);
-}
-
-void CFX_ListCtrl::OnMouseDown(const CFX_FloatPoint& point,
- FX_BOOL bShift,
- FX_BOOL bCtrl) {
- int32_t nHitIndex = GetItemIndex(point);
-
- if (IsMultipleSel()) {
- if (bCtrl) {
- if (IsItemSelected(nHitIndex)) {
- m_aSelItems.Sub(nHitIndex);
- SelectItems();
- m_bCtrlSel = FALSE;
- } else {
- m_aSelItems.Add(nHitIndex);
- SelectItems();
- m_bCtrlSel = TRUE;
- }
-
- m_nFootIndex = nHitIndex;
- } else if (bShift) {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(m_nFootIndex, nHitIndex);
- SelectItems();
- } else {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(nHitIndex);
- SelectItems();
-
- m_nFootIndex = nHitIndex;
- }
-
- SetCaret(nHitIndex);
- } else {
- SetSingleSelect(nHitIndex);
- }
-
- if (!IsItemVisible(nHitIndex))
- ScrollToListItem(nHitIndex);
-}
-
-void CFX_ListCtrl::OnMouseMove(const CFX_FloatPoint& point,
- FX_BOOL bShift,
- FX_BOOL bCtrl) {
- int32_t nHitIndex = GetItemIndex(point);
-
- if (IsMultipleSel()) {
- if (bCtrl) {
- if (m_bCtrlSel)
- m_aSelItems.Add(m_nFootIndex, nHitIndex);
- else
- m_aSelItems.Sub(m_nFootIndex, nHitIndex);
-
- SelectItems();
- } else {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(m_nFootIndex, nHitIndex);
- SelectItems();
- }
-
- SetCaret(nHitIndex);
- } else {
- SetSingleSelect(nHitIndex);
- }
-
- if (!IsItemVisible(nHitIndex))
- ScrollToListItem(nHitIndex);
-}
-
-void CFX_ListCtrl::OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl) {
- if (IsMultipleSel()) {
- if (nItemIndex >= 0 && nItemIndex < GetCount()) {
- if (bCtrl) {
- } else if (bShift) {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(m_nFootIndex, nItemIndex);
- SelectItems();
- } else {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(nItemIndex);
- SelectItems();
- m_nFootIndex = nItemIndex;
- }
-
- SetCaret(nItemIndex);
- }
- } else {
- SetSingleSelect(nItemIndex);
- }
-
- if (!IsItemVisible(nItemIndex))
- ScrollToListItem(nItemIndex);
-}
-
-void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) {
- OnVK(IsMultipleSel() ? GetCaret() - 1 : GetSelect() - 1, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) {
- OnVK(IsMultipleSel() ? GetCaret() + 1 : GetSelect() + 1, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) {
- OnVK(0, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) {
- OnVK(GetCount() - 1, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) {
- OnVK(0, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) {
- OnVK(GetCount() - 1, bShift, bCtrl);
-}
-
-FX_BOOL CFX_ListCtrl::OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl) {
- int32_t nIndex = GetLastSelected();
- int32_t nFindIndex = FindNext(nIndex, nChar);
-
- if (nFindIndex != nIndex) {
- OnVK(nFindIndex, bShift, bCtrl);
- return TRUE;
- }
- return FALSE;
-}
-
-void CFX_ListCtrl::SetPlateRect(const CFX_FloatRect& rect) {
- CFX_ListContainer::SetPlateRect(rect);
- m_ptScrollPos.x = rect.left;
- SetScrollPos(CFX_FloatPoint(rect.left, rect.top));
- ReArrange(0);
- InvalidateItem(-1);
-}
-
-CFX_FloatRect CFX_ListCtrl::GetItemRect(int32_t nIndex) const {
- return InToOut(CFX_List::GetItemRect(nIndex));
-}
-
-void CFX_ListCtrl::AddString(const FX_WCHAR* str) {
- AddItem(str);
- ReArrange(GetCount() - 1);
-}
-
-void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected) {
- if (!IsValid(nItemIndex))
- return;
-
- if (bSelected != IsItemSelected(nItemIndex)) {
- if (bSelected) {
- SetItemSelect(nItemIndex, TRUE);
- InvalidateItem(nItemIndex);
- } else {
- SetItemSelect(nItemIndex, FALSE);
- InvalidateItem(nItemIndex);
- }
- }
-}
-
-void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex) {
- if (!IsValid(nItemIndex))
- return;
-
- if (m_nSelItem != nItemIndex) {
- if (m_nSelItem >= 0) {
- SetItemSelect(m_nSelItem, FALSE);
- InvalidateItem(m_nSelItem);
- }
-
- SetItemSelect(nItemIndex, TRUE);
- InvalidateItem(nItemIndex);
- m_nSelItem = nItemIndex;
- }
-}
-
-void CFX_ListCtrl::SetCaret(int32_t nItemIndex) {
- if (!IsValid(nItemIndex))
- return;
-
- if (IsMultipleSel()) {
- int32_t nOldIndex = m_nCaretIndex;
-
- if (nOldIndex != nItemIndex) {
- m_nCaretIndex = nItemIndex;
-
- SetItemCaret(nOldIndex, FALSE);
- SetItemCaret(nItemIndex, TRUE);
-
- InvalidateItem(nOldIndex);
- InvalidateItem(nItemIndex);
- }
- }
-}
-
-void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex) {
- if (m_pNotify) {
- if (nItemIndex == -1) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- CFX_FloatRect rcRefresh = GetPlateRect();
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- } else {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- CFX_FloatRect rcRefresh = GetItemRect(nItemIndex);
- rcRefresh.left -= 1.0f;
- rcRefresh.right += 1.0f;
- rcRefresh.bottom -= 1.0f;
- rcRefresh.top += 1.0f;
-
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- }
- }
-}
-
-void CFX_ListCtrl::SelectItems() {
- for (int32_t i = 0, sz = m_aSelItems.GetCount(); i < sz; i++) {
- int32_t nItemIndex = m_aSelItems.GetItemIndex(i);
- int32_t nState = m_aSelItems.GetState(i);
-
- switch (nState) {
- case 1:
- SetMultipleSelect(nItemIndex, TRUE);
- break;
- case -1:
- SetMultipleSelect(nItemIndex, FALSE);
- break;
- }
- }
-
- m_aSelItems.Done();
-}
-
-void CFX_ListCtrl::Select(int32_t nItemIndex) {
- if (!IsValid(nItemIndex))
- return;
-
- if (IsMultipleSel()) {
- m_aSelItems.Add(nItemIndex);
- SelectItems();
- } else {
- SetSingleSelect(nItemIndex);
- }
-}
-
-FX_BOOL CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const {
- CFX_FloatRect rcPlate = GetPlateRect();
- CFX_FloatRect rcItem = GetItemRect(nItemIndex);
-
- return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top;
-}
-
-void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) {
- if (!IsValid(nItemIndex))
- return;
-
- CFX_FloatRect rcPlate = GetPlateRect();
- CFX_FloatRect rcItem = CFX_List::GetItemRect(nItemIndex);
- CFX_FloatRect rcItemCtrl = GetItemRect(nItemIndex);
-
- if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom)) {
- if (FX_EDIT_IsFloatSmaller(rcItemCtrl.top, rcPlate.top)) {
- SetScrollPosY(rcItem.bottom + rcPlate.Height());
- }
- } else if (FX_EDIT_IsFloatBigger(rcItemCtrl.top, rcPlate.top)) {
- if (FX_EDIT_IsFloatBigger(rcItemCtrl.bottom, rcPlate.bottom)) {
- SetScrollPosY(rcItem.top);
- }
- }
-}
-
-void CFX_ListCtrl::SetScrollInfo() {
- if (m_pNotify) {
- CFX_FloatRect rcPlate = GetPlateRect();
- CFX_FloatRect rcContent = CFX_List::GetContentRect();
-
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
- rcContent.bottom, rcContent.top,
- GetFirstHeight(), rcPlate.Height());
- m_bNotifyFlag = FALSE;
- }
- }
-}
-
-void CFX_ListCtrl::SetScrollPos(const CFX_FloatPoint& point) {
- SetScrollPosY(point.y);
-}
-
-void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) {
- if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) {
- CFX_FloatRect rcPlate = GetPlateRect();
- CFX_FloatRect rcContent = CFX_List::GetContentRect();
-
- if (rcPlate.Height() > rcContent.Height()) {
- fy = rcPlate.top;
- } else {
- if (FX_EDIT_IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom)) {
- fy = rcContent.bottom + rcPlate.Height();
- } else if (FX_EDIT_IsFloatBigger(fy, rcContent.top)) {
- fy = rcContent.top;
- }
- }
-
- m_ptScrollPos.y = fy;
- InvalidateItem(-1);
-
- if (m_pNotify) {
- if (!m_bNotifyFlag) {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollPosY(fy);
- m_bNotifyFlag = FALSE;
- }
- }
- }
-}
-
-CFX_FloatRect CFX_ListCtrl::GetContentRect() const {
- return InToOut(CFX_List::GetContentRect());
-}
-
-void CFX_ListCtrl::ReArrange(int32_t nItemIndex) {
- CFX_List::ReArrange(nItemIndex);
- SetScrollInfo();
-}
-
-void CFX_ListCtrl::SetTopItem(int32_t nIndex) {
- if (IsValid(nIndex)) {
- GetPlateRect();
- CFX_FloatRect rcItem = CFX_List::GetItemRect(nIndex);
- SetScrollPosY(rcItem.top);
- }
-}
-
-int32_t CFX_ListCtrl::GetTopItem() const {
- int32_t nItemIndex = GetItemIndex(GetBTPoint());
-
- if (!IsItemVisible(nItemIndex) && IsItemVisible(nItemIndex + 1))
- nItemIndex += 1;
-
- return nItemIndex;
-}
-
-void CFX_ListCtrl::Empty() {
- CFX_List::Empty();
- InvalidateItem(-1);
-}
-
-void CFX_ListCtrl::Cancel() {
- m_aSelItems.DeselectAll();
-}
-
-int32_t CFX_ListCtrl::GetItemIndex(const CFX_FloatPoint& point) const {
- return CFX_List::GetItemIndex(OutToIn(point));
-}
-
-CFX_WideString CFX_ListCtrl::GetText() const {
- if (IsMultipleSel())
- return GetItemText(m_nCaretIndex);
- return GetItemText(m_nSelItem);
-}
diff --git a/fpdfsdk/src/fxedit/fxet_module.cpp b/fpdfsdk/src/fxedit/fxet_module.cpp
deleted file mode 100644
index 889b0f81a6..0000000000
--- a/fpdfsdk/src/fxedit/fxet_module.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/fxedit/fxet_edit.h"
-#include "fpdfsdk/include/fxedit/fxet_list.h"
-
-IFX_Edit* IFX_Edit::NewEdit() {
- if (IPDF_VariableText* pVT = IPDF_VariableText::NewVariableText()) {
- return new CFX_Edit(pVT);
- }
-
- return NULL;
-}
-
-void IFX_Edit::DelEdit(IFX_Edit* pEdit) {
- IPDF_VariableText::DelVariableText(pEdit->GetVariableText());
-
- delete (CFX_Edit*)pEdit;
-}
-
-IFX_List* IFX_List::NewList() {
- return new CFX_ListCtrl();
-}
-
-void IFX_List::DelList(IFX_List* pList) {
- ASSERT(pList);
- delete (CFX_ListCtrl*)pList;
-}
diff --git a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp b/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
deleted file mode 100644
index 6d091b7c19..0000000000
--- a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
+++ /dev/null
@@ -1,640 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/include/fpdfapi/fpdf_pageobj.h"
-#include "core/include/fpdfapi/fpdf_render.h"
-#include "fpdfsdk/include/fx_systemhandler.h"
-#include "fpdfsdk/include/fxedit/fx_edit.h"
-#include "fpdfsdk/include/fxedit/fxet_edit.h"
-
-#define FX_EDIT_UNDERLINEHALFWIDTH 0.5f
-#define FX_EDIT_CROSSOUTHALFWIDTH 0.5f
-
-CFX_FloatRect GetUnderLineRect(const CPVT_Word& word) {
- return CFX_FloatRect(word.ptWord.x, word.ptWord.y + word.fDescent * 0.5f,
- word.ptWord.x + word.fWidth,
- word.ptWord.y + word.fDescent * 0.25f);
-}
-
-CFX_FloatRect GetCrossoutRect(const CPVT_Word& word) {
- return CFX_FloatRect(word.ptWord.x,
- word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f +
- word.fDescent * 0.25f,
- word.ptWord.x + word.fWidth,
- word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f);
-}
-
-static void DrawTextString(CFX_RenderDevice* pDevice,
- const CFX_FloatPoint& pt,
- CPDF_Font* pFont,
- FX_FLOAT fFontSize,
- CFX_Matrix* pUser2Device,
- const CFX_ByteString& str,
- FX_ARGB crTextFill,
- FX_ARGB crTextStroke,
- int32_t nHorzScale) {
- FX_FLOAT x = pt.x, y = pt.y;
- pUser2Device->Transform(x, y);
-
- if (pFont) {
- if (nHorzScale != 100) {
- CFX_Matrix mt(nHorzScale / 100.0f, 0, 0, 1, 0, 0);
- mt.Concat(*pUser2Device);
-
- CPDF_RenderOptions ro;
- ro.m_Flags = RENDER_CLEARTYPE;
- ro.m_ColorMode = RENDER_COLOR_NORMAL;
-
- if (crTextStroke != 0) {
- CFX_FloatPoint pt1(0, 0), pt2(1, 0);
- pUser2Device->Transform(pt1.x, pt1.y);
- pUser2Device->Transform(pt2.x, pt2.y);
- CFX_GraphStateData gsd;
- gsd.m_LineWidth =
- (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y));
-
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt,
- str, crTextFill, crTextStroke, &gsd,
- &ro);
- } else {
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt,
- str, crTextFill, 0, NULL, &ro);
- }
- } else {
- CPDF_RenderOptions ro;
- ro.m_Flags = RENDER_CLEARTYPE;
- ro.m_ColorMode = RENDER_COLOR_NORMAL;
-
- if (crTextStroke != 0) {
- CFX_FloatPoint pt1(0, 0), pt2(1, 0);
- pUser2Device->Transform(pt1.x, pt1.y);
- pUser2Device->Transform(pt2.x, pt2.y);
- CFX_GraphStateData gsd;
- gsd.m_LineWidth =
- (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y));
-
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize,
- pUser2Device, str, crTextFill,
- crTextStroke, &gsd, &ro);
- } else {
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize,
- pUser2Device, str, crTextFill, 0,
- NULL, &ro);
- }
- }
- }
-}
-
-void IFX_Edit::DrawUnderline(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- IFX_Edit* pEdit,
- FX_COLORREF color,
- const CFX_FloatRect& rcClip,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange) {
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty()) {
- CFX_FloatRect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- pDevice->SetClip_Rect(rcTemp.ToFxRect());
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (pEdit->GetFontMap()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- CFX_PathData pathUnderline;
- CFX_FloatRect rcUnderline = GetUnderLineRect(word);
- rcUnderline.left += ptOffset.x;
- rcUnderline.right += ptOffset.x;
- rcUnderline.top += ptOffset.y;
- rcUnderline.bottom += ptOffset.y;
- pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
- rcUnderline.right, rcUnderline.top);
-
- pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, color, 0,
- FXFILL_WINDING);
- }
- }
- }
- }
-
- pDevice->RestoreState();
-}
-
-void IFX_Edit::DrawEdit(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- IFX_Edit* pEdit,
- FX_COLORREF crTextFill,
- FX_COLORREF crTextStroke,
- const CFX_FloatRect& rcClip,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange,
- IFX_SystemHandler* pSystemHandler,
- void* pFFLData) {
- const bool bContinuous =
- pEdit->GetCharArray() == 0 && pEdit->GetCharSpace() <= 0.0f;
- FX_WORD SubWord = pEdit->GetPasswordChar();
- FX_FLOAT fFontSize = pEdit->GetFontSize();
- CPVT_WordRange wrSelect = pEdit->GetSelectWordRange();
- int32_t nHorzScale = pEdit->GetHorzScale();
-
- FX_COLORREF crCurFill = crTextFill;
- FX_COLORREF crOldFill = crCurFill;
-
- FX_BOOL bSelect = FALSE;
- const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255);
- const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113);
-
- CFX_ByteTextBuf sTextBuf;
- int32_t nFontIndex = -1;
- CFX_FloatPoint ptBT(0.0f, 0.0f);
-
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty()) {
- CFX_FloatRect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- pDevice->SetClip_Rect(rcTemp.ToFxRect());
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- if (wrSelect.IsExist()) {
- bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
- place.WordCmp(wrSelect.EndPos) <= 0;
- if (bSelect) {
- crCurFill = crWhite;
- } else {
- crCurFill = crTextFill;
- }
- }
- if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
- crCurFill = crTextFill;
- crOldFill = crCurFill;
- }
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- if (bSelect) {
- CPVT_Line line;
- pIterator->GetLine(line);
-
- if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
- CFX_FloatRect rc(word.ptWord.x, line.ptLine.y + line.fLineDescent,
- word.ptWord.x + word.fWidth,
- line.ptLine.y + line.fLineAscent);
- rc.Intersect(rcClip);
- pSystemHandler->OutputSelectedRect(pFFLData, rc);
- } else {
- CFX_PathData pathSelBK;
- pathSelBK.AppendRect(word.ptWord.x,
- line.ptLine.y + line.fLineDescent,
- word.ptWord.x + word.fWidth,
- line.ptLine.y + line.fLineAscent);
-
- pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
- FXFILL_WINDING);
- }
- }
-
- if (bContinuous) {
- if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex ||
- crOldFill != crCurFill) {
- if (sTextBuf.GetLength() > 0) {
- DrawTextString(pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x,
- ptBT.y + ptOffset.y),
- pFontMap->GetPDFFont(nFontIndex), fFontSize,
- pUser2Device, sTextBuf.GetByteString(),
- crOldFill, crTextStroke, nHorzScale);
-
- sTextBuf.Clear();
- }
- nFontIndex = word.nFontIndex;
- ptBT = word.ptWord;
- crOldFill = crCurFill;
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word,
- SubWord);
- } else {
- DrawTextString(
- pDevice, CFX_FloatPoint(word.ptWord.x + ptOffset.x,
- word.ptWord.y + ptOffset.y),
- pFontMap->GetPDFFont(word.nFontIndex), fFontSize, pUser2Device,
- GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord),
- crCurFill, crTextStroke, nHorzScale);
- }
- oldplace = place;
- }
- }
-
- if (sTextBuf.GetLength() > 0) {
- DrawTextString(
- pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
- pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device,
- sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale);
- }
- }
- }
-
- pDevice->RestoreState();
-}
-
-void IFX_Edit::DrawRichEdit(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- IFX_Edit* pEdit,
- const CFX_FloatRect& rcClip,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange) {
- CPVT_WordRange wrSelect = pEdit->GetSelectWordRange();
-
- FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0);
- FX_COLORREF crOld = crCurText;
- FX_BOOL bSelect = FALSE;
- const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255);
- const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113);
-
- CFX_ByteTextBuf sTextBuf;
- CPVT_WordProps wp;
- CFX_FloatPoint ptBT(0.0f, 0.0f);
-
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty()) {
- CFX_FloatRect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- pDevice->SetClip_Rect(rcTemp.ToFxRect());
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- word.WordProps.fFontSize = word.fFontSize;
-
- crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
-
- if (wrSelect.IsExist()) {
- bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
- place.WordCmp(wrSelect.EndPos) <= 0;
- if (bSelect) {
- crCurText = crWhite;
- }
- }
-
- if (bSelect) {
- CPVT_Line line;
- pIterator->GetLine(line);
-
- CFX_PathData pathSelBK;
- pathSelBK.AppendRect(word.ptWord.x + ptOffset.x,
- line.ptLine.y + line.fLineDescent + ptOffset.y,
- word.ptWord.x + word.fWidth + ptOffset.x,
- line.ptLine.y + line.fLineAscent + ptOffset.y);
-
- pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
- FXFILL_WINDING);
- }
-
- if (place.LineCmp(oldplace) != 0 ||
- word.WordProps.fCharSpace > 0.0f ||
- word.WordProps.nHorzScale != 100 ||
- FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
- crOld != crCurText) {
- if (sTextBuf.GetLength() > 0) {
- DrawTextString(pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x,
- ptBT.y + ptOffset.y),
- pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize,
- pUser2Device, sTextBuf.GetByteString(), crOld, 0,
- wp.nHorzScale);
-
- sTextBuf.Clear();
- }
- wp = word.WordProps;
- ptBT = word.ptWord;
- crOld = crCurText;
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
- word.Word, 0);
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) {
- CFX_PathData pathUnderline;
- CFX_FloatRect rcUnderline = GetUnderLineRect(word);
- pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
- rcUnderline.right, rcUnderline.top);
-
- pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0,
- FXFILL_WINDING);
- }
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
- CFX_PathData pathCrossout;
- CFX_FloatRect rcCrossout = GetCrossoutRect(word);
- pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom,
- rcCrossout.right, rcCrossout.top);
-
- pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0,
- FXFILL_WINDING);
- }
-
- oldplace = place;
- }
- }
-
- if (sTextBuf.GetLength() > 0) {
- DrawTextString(
- pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
- pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device,
- sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale);
- }
- }
- }
-
- pDevice->RestoreState();
-}
-
-static void AddRectToPageObjects(CPDF_PageObjectHolder* pObjectHolder,
- FX_COLORREF crFill,
- const CFX_FloatRect& rcFill) {
- std::unique_ptr<CPDF_PathObject> pPathObj(new CPDF_PathObject);
- CFX_PathData* pPathData = pPathObj->m_Path.GetModify();
- pPathData->AppendRect(rcFill.left, rcFill.bottom, rcFill.right, rcFill.top);
-
- FX_FLOAT rgb[3];
- rgb[0] = FXARGB_R(crFill) / 255.0f;
- rgb[1] = FXARGB_G(crFill) / 255.0f;
- rgb[2] = FXARGB_B(crFill) / 255.0f;
- pPathObj->m_ColorState.SetFillColor(
- CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3);
-
- pPathObj->m_FillType = FXFILL_ALTERNATE;
- pPathObj->m_bStroke = FALSE;
- pObjectHolder->GetPageObjectList()->push_back(std::move(pPathObj));
-}
-
-static CPDF_TextObject* AddTextObjToPageObjects(
- CPDF_PageObjectHolder* pObjectHolder,
- FX_COLORREF crText,
- CPDF_Font* pFont,
- FX_FLOAT fFontSize,
- FX_FLOAT fCharSpace,
- int32_t nHorzScale,
- const CFX_FloatPoint& point,
- const CFX_ByteString& text) {
- std::unique_ptr<CPDF_TextObject> pTxtObj(new CPDF_TextObject);
- CPDF_TextStateData* pTextStateData = pTxtObj->m_TextState.GetModify();
- pTextStateData->m_pFont = pFont;
- pTextStateData->m_FontSize = fFontSize;
- pTextStateData->m_CharSpace = fCharSpace;
- pTextStateData->m_WordSpace = 0;
- pTextStateData->m_TextMode = 0;
- pTextStateData->m_Matrix[0] = nHorzScale / 100.0f;
- pTextStateData->m_Matrix[1] = 0;
- pTextStateData->m_Matrix[2] = 0;
- pTextStateData->m_Matrix[3] = 1;
-
- FX_FLOAT rgb[3];
- rgb[0] = FXARGB_R(crText) / 255.0f;
- rgb[1] = FXARGB_G(crText) / 255.0f;
- rgb[2] = FXARGB_B(crText) / 255.0f;
- pTxtObj->m_ColorState.SetFillColor(
- CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3);
- pTxtObj->m_ColorState.SetStrokeColor(
- CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3);
-
- pTxtObj->SetPosition(point.x, point.y);
- pTxtObj->SetText(text);
-
- CPDF_TextObject* pRet = pTxtObj.get();
- pObjectHolder->GetPageObjectList()->push_back(std::move(pTxtObj));
- return pRet;
-}
-
-void IFX_Edit::GeneratePageObjects(
- CPDF_PageObjectHolder* pObjectHolder,
- IFX_Edit* pEdit,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange,
- FX_COLORREF crText,
- CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) {
- FX_FLOAT fFontSize = pEdit->GetFontSize();
-
- int32_t nOldFontIndex = -1;
-
- CFX_ByteTextBuf sTextBuf;
- CFX_FloatPoint ptBT(0.0f, 0.0f);
-
- ObjArray.RemoveAll();
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- if (place.LineCmp(oldplace) != 0 ||
- nOldFontIndex != word.nFontIndex) {
- if (sTextBuf.GetLength() > 0) {
- ObjArray.Add(AddTextObjToPageObjects(
- pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex),
- fFontSize, 0.0f, 100,
- CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
- sTextBuf.GetByteString()));
-
- sTextBuf.Clear();
- }
-
- ptBT = word.ptWord;
- nOldFontIndex = word.nFontIndex;
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0);
- oldplace = place;
- }
- }
-
- if (sTextBuf.GetLength() > 0) {
- ObjArray.Add(AddTextObjToPageObjects(
- pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex),
- fFontSize, 0.0f, 100,
- CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
- sTextBuf.GetByteString()));
- }
- }
- }
-}
-
-void IFX_Edit::GenerateRichPageObjects(
- CPDF_PageObjectHolder* pObjectHolder,
- IFX_Edit* pEdit,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange,
- CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) {
- FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0);
- FX_COLORREF crOld = crCurText;
-
- CFX_ByteTextBuf sTextBuf;
- CPVT_WordProps wp;
- CFX_FloatPoint ptBT(0.0f, 0.0f);
-
- ObjArray.RemoveAll();
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- word.WordProps.fFontSize = word.fFontSize;
-
- crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
-
- if (place.LineCmp(oldplace) != 0 ||
- word.WordProps.fCharSpace > 0.0f ||
- word.WordProps.nHorzScale != 100 ||
- FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
- crOld != crCurText) {
- if (sTextBuf.GetLength() > 0) {
- ObjArray.Add(AddTextObjToPageObjects(
- pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
- wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
- CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
- sTextBuf.GetByteString()));
-
- sTextBuf.Clear();
- }
-
- wp = word.WordProps;
- ptBT = word.ptWord;
- crOld = crCurText;
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
- word.Word, 0);
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) {
- CFX_FloatRect rcUnderline = GetUnderLineRect(word);
- rcUnderline.left += ptOffset.x;
- rcUnderline.right += ptOffset.x;
- rcUnderline.top += ptOffset.y;
- rcUnderline.bottom += ptOffset.y;
-
- AddRectToPageObjects(pObjectHolder, crCurText, rcUnderline);
- }
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
- CFX_FloatRect rcCrossout = GetCrossoutRect(word);
- rcCrossout.left += ptOffset.x;
- rcCrossout.right += ptOffset.x;
- rcCrossout.top += ptOffset.y;
- rcCrossout.bottom += ptOffset.y;
-
- AddRectToPageObjects(pObjectHolder, crCurText, rcCrossout);
- }
-
- oldplace = place;
- }
- }
-
- if (sTextBuf.GetLength() > 0) {
- ObjArray.Add(AddTextObjToPageObjects(
- pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
- wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
- CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
- sTextBuf.GetByteString()));
- }
- }
- }
-}
-
-void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjectHolder* pObjectHolder,
- IFX_Edit* pEdit,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange,
- FX_COLORREF color) {
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (pEdit->GetFontMap()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- CFX_FloatRect rcUnderline = GetUnderLineRect(word);
- rcUnderline.left += ptOffset.x;
- rcUnderline.right += ptOffset.x;
- rcUnderline.top += ptOffset.y;
- rcUnderline.bottom += ptOffset.y;
- AddRectToPageObjects(pObjectHolder, color, rcUnderline);
- }
- }
- }
- }
-}
diff --git a/fpdfsdk/src/javascript/Consts.cpp b/fpdfsdk/src/javascript/Consts.cpp
deleted file mode 100644
index b7cc2d0a46..0000000000
--- a/fpdfsdk/src/javascript/Consts.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/Consts.h"
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-BEGIN_JS_STATIC_CONST(CJS_Border)
-JS_STATIC_CONST_ENTRY_STRING(L"s", L"solid")
-JS_STATIC_CONST_ENTRY_STRING(L"b", L"beveled")
-JS_STATIC_CONST_ENTRY_STRING(L"d", L"dashed")
-JS_STATIC_CONST_ENTRY_STRING(L"i", L"inset")
-JS_STATIC_CONST_ENTRY_STRING(L"u", L"underline")
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Border, border)
-
-BEGIN_JS_STATIC_CONST(CJS_Display)
-JS_STATIC_CONST_ENTRY_NUMBER(L"visible", 0)
-JS_STATIC_CONST_ENTRY_NUMBER(L"hidden", 1)
-JS_STATIC_CONST_ENTRY_NUMBER(L"noPrint", 2)
-JS_STATIC_CONST_ENTRY_NUMBER(L"noView", 3)
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Display, display)
-
-BEGIN_JS_STATIC_CONST(CJS_Font)
-JS_STATIC_CONST_ENTRY_STRING(L"Times", L"Times-Roman")
-JS_STATIC_CONST_ENTRY_STRING(L"TimesB", L"Times-Bold")
-JS_STATIC_CONST_ENTRY_STRING(L"TimesI", L"Times-Italic")
-JS_STATIC_CONST_ENTRY_STRING(L"TimesBI", L"Times-BoldItalic")
-JS_STATIC_CONST_ENTRY_STRING(L"Helv", L"Helvetica")
-JS_STATIC_CONST_ENTRY_STRING(L"HelvB", L"Helvetica-Bold")
-JS_STATIC_CONST_ENTRY_STRING(L"HelvI", L"Helvetica-Oblique")
-JS_STATIC_CONST_ENTRY_STRING(L"HelvBI", L"Helvetica-BoldOblique")
-JS_STATIC_CONST_ENTRY_STRING(L"Cour", L"Courier")
-JS_STATIC_CONST_ENTRY_STRING(L"CourB", L"Courier-Bold")
-JS_STATIC_CONST_ENTRY_STRING(L"CourI", L"Courier-Oblique")
-JS_STATIC_CONST_ENTRY_STRING(L"CourBI", L"Courier-BoldOblique")
-JS_STATIC_CONST_ENTRY_STRING(L"Symbol", L"Symbol")
-JS_STATIC_CONST_ENTRY_STRING(L"ZapfD", L"ZapfDingbats")
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Font, font)
-
-BEGIN_JS_STATIC_CONST(CJS_Highlight)
-JS_STATIC_CONST_ENTRY_STRING(L"n", L"none")
-JS_STATIC_CONST_ENTRY_STRING(L"i", L"invert")
-JS_STATIC_CONST_ENTRY_STRING(L"p", L"push")
-JS_STATIC_CONST_ENTRY_STRING(L"o", L"outline")
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Highlight, highlight)
-
-BEGIN_JS_STATIC_CONST(CJS_Position)
-JS_STATIC_CONST_ENTRY_NUMBER(L"textOnly", 0)
-JS_STATIC_CONST_ENTRY_NUMBER(L"iconOnly", 1)
-JS_STATIC_CONST_ENTRY_NUMBER(L"iconTextV", 2)
-JS_STATIC_CONST_ENTRY_NUMBER(L"textIconV", 3)
-JS_STATIC_CONST_ENTRY_NUMBER(L"iconTextH", 4)
-JS_STATIC_CONST_ENTRY_NUMBER(L"textIconH", 5)
-JS_STATIC_CONST_ENTRY_NUMBER(L"overlay", 6)
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Position, position)
-
-BEGIN_JS_STATIC_CONST(CJS_ScaleHow)
-JS_STATIC_CONST_ENTRY_NUMBER(L"proportional", 0)
-JS_STATIC_CONST_ENTRY_NUMBER(L"anamorphic", 1)
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow, scaleHow)
-
-BEGIN_JS_STATIC_CONST(CJS_ScaleWhen)
-JS_STATIC_CONST_ENTRY_NUMBER(L"always", 0)
-JS_STATIC_CONST_ENTRY_NUMBER(L"never", 1)
-JS_STATIC_CONST_ENTRY_NUMBER(L"tooBig", 2)
-JS_STATIC_CONST_ENTRY_NUMBER(L"tooSmall", 3)
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen, scaleWhen)
-
-BEGIN_JS_STATIC_CONST(CJS_Style)
-JS_STATIC_CONST_ENTRY_STRING(L"ch", L"check")
-JS_STATIC_CONST_ENTRY_STRING(L"cr", L"cross")
-JS_STATIC_CONST_ENTRY_STRING(L"di", L"diamond")
-JS_STATIC_CONST_ENTRY_STRING(L"ci", L"circle")
-JS_STATIC_CONST_ENTRY_STRING(L"st", L"star")
-JS_STATIC_CONST_ENTRY_STRING(L"sq", L"square")
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Style, style)
-
-BEGIN_JS_STATIC_CONST(CJS_Zoomtype)
-JS_STATIC_CONST_ENTRY_STRING(L"none", L"NoVary")
-JS_STATIC_CONST_ENTRY_STRING(L"fitP", L"FitPage")
-JS_STATIC_CONST_ENTRY_STRING(L"fitW", L"FitWidth")
-JS_STATIC_CONST_ENTRY_STRING(L"fitH", L"FitHeight")
-JS_STATIC_CONST_ENTRY_STRING(L"fitV", L"FitVisibleWidth")
-JS_STATIC_CONST_ENTRY_STRING(L"pref", L"Preferred")
-JS_STATIC_CONST_ENTRY_STRING(L"refW", L"ReflowWidth")
-END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype, zoomtype)
-
-#define GLOBAL_STRING(rt, name, value) \
- FXJS_DefineGlobalConst( \
- (rt)->GetIsolate(), (name), \
- [](const v8::FunctionCallbackInfo<v8::Value>& info) { \
- info.GetReturnValue().Set(FXJS_NewString(info.GetIsolate(), (value))); \
- })
-
-void CJS_GlobalConsts::DefineJSObjects(CJS_Runtime* pRuntime) {
- GLOBAL_STRING(pRuntime, L"IDS_GREATER_THAN",
- L"Invalid value: must be greater than or equal to % s.");
-
- GLOBAL_STRING(pRuntime, L"IDS_GT_AND_LT",
- L"Invalid value: must be greater than or equal to % s "
- L"and less than or equal to % s.");
-
- GLOBAL_STRING(pRuntime, L"IDS_LESS_THAN",
- L"Invalid value: must be less than or equal to % s.");
-
- GLOBAL_STRING(pRuntime, L"IDS_INVALID_MONTH", L"**Invalid**");
- GLOBAL_STRING(
- pRuntime, L"IDS_INVALID_DATE",
- L"Invalid date / time: please ensure that the date / time exists.Field");
-
- GLOBAL_STRING(pRuntime, L"IDS_INVALID_VALUE",
- L"The value entered does not match the format of the field");
-
- GLOBAL_STRING(pRuntime, L"IDS_AM", L"am");
- GLOBAL_STRING(pRuntime, L"IDS_PM", L"pm");
- GLOBAL_STRING(pRuntime, L"IDS_MONTH_INFO",
- L"January[1] February[2] March[3] April[4] May[5] "
- L"June[6] July[7] August[8] September[9] October[10] "
- L"November[11] December[12] Sept[9] Jan[1] Feb[2] Mar[3] "
- L"Apr[4] Jun[6] Jul[7] Aug[8] Sep[9] Oct[10] Nov[11] "
- L"Dec[12]");
-
- GLOBAL_STRING(pRuntime, L"IDS_STARTUP_CONSOLE_MSG", L"** ^ _ ^ **");
-}
-
-#define GLOBAL_ARRAY(rt, name, ...) \
- { \
- const FX_WCHAR* values[] = {__VA_ARGS__}; \
- v8::Local<v8::Array> array = FXJS_NewArray((rt)->GetIsolate()); \
- for (size_t i = 0; i < FX_ArraySize(values); ++i) \
- array->Set(i, FXJS_NewString((rt)->GetIsolate(), values[i])); \
- rt->SetConstArray(name, array); \
- FXJS_DefineGlobalConst( \
- (rt)->GetIsolate(), (name), \
- [](const v8::FunctionCallbackInfo<v8::Value>& info) { \
- CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>( \
- FXJS_GetRuntimeFromIsolate(info.GetIsolate())); \
- if (pRuntime) \
- info.GetReturnValue().Set(pRuntime->GetConstArray(name)); \
- }); \
- }
-
-void CJS_GlobalArrays::DefineJSObjects(CJS_Runtime* pRuntime) {
- GLOBAL_ARRAY(pRuntime, L"RE_NUMBER_ENTRY_DOT_SEP", L"[+-]?\\d*\\.?\\d*");
- GLOBAL_ARRAY(pRuntime, L"RE_NUMBER_COMMIT_DOT_SEP",
- L"[+-]?\\d+(\\.\\d+)?", // -1.0 or -1
- L"[+-]?\\.\\d+", // -.1
- L"[+-]?\\d+\\."); // -1.
-
- GLOBAL_ARRAY(pRuntime, L"RE_NUMBER_ENTRY_COMMA_SEP", L"[+-]?\\d*,?\\d*");
- GLOBAL_ARRAY(pRuntime, L"RE_NUMBER_COMMIT_COMMA_SEP",
- L"[+-]?\\d+([.,]\\d+)?", // -1,0 or -1
- L"[+-]?[.,]\\d+", // -,1
- L"[+-]?\\d+[.,]"); // -1,
-
- GLOBAL_ARRAY(pRuntime, L"RE_ZIP_ENTRY", L"\\d{0,5}");
- GLOBAL_ARRAY(pRuntime, L"RE_ZIP_COMMIT", L"\\d{5}");
- GLOBAL_ARRAY(pRuntime, L"RE_ZIP4_ENTRY", L"\\d{0,5}(\\.|[- ])?\\d{0,4}");
- GLOBAL_ARRAY(pRuntime, L"RE_ZIP4_COMMIT", L"\\d{5}(\\.|[- ])?\\d{4}");
- GLOBAL_ARRAY(pRuntime, L"RE_PHONE_ENTRY",
- // 555-1234 or 408 555-1234
- L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",
-
- // (408
- L"\\(\\d{0,3}",
-
- // (408) 555-1234
- // (allow the addition of parens as an afterthought)
- L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",
-
- // (408 555-1234
- L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",
-
- // 408) 555-1234
- L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",
-
- // international
- L"011(\\.|[- \\d])*");
-
- GLOBAL_ARRAY(
- pRuntime, L"RE_PHONE_COMMIT", L"\\d{3}(\\.|[- ])?\\d{4}", // 555-1234
- L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", // 408 555-1234
- L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", // (408) 555-1234
- L"011(\\.|[- \\d])*"); // international
-
- GLOBAL_ARRAY(pRuntime, L"RE_SSN_ENTRY",
- L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}");
-
- GLOBAL_ARRAY(pRuntime, L"RE_SSN_COMMIT",
- L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}");
-}
diff --git a/fpdfsdk/src/javascript/Consts.h b/fpdfsdk/src/javascript/Consts.h
deleted file mode 100644
index 6cd1d1d809..0000000000
--- a/fpdfsdk/src/javascript/Consts.h
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_CONSTS_H_
-#define FPDFSDK_SRC_JAVASCRIPT_CONSTS_H_
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-/* ------------------------------ border ------------------------------ */
-
-class CJS_Border : public CJS_Object {
- public:
- explicit CJS_Border(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Border() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ display ------------------------------ */
-
-class CJS_Display : public CJS_Object {
- public:
- explicit CJS_Display(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Display() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ font ------------------------------ */
-
-class CJS_Font : public CJS_Object {
- public:
- explicit CJS_Font(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Font() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ highlight ------------------------------ */
-
-class CJS_Highlight : public CJS_Object {
- public:
- explicit CJS_Highlight(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Highlight() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ position ------------------------------ */
-
-class CJS_Position : public CJS_Object {
- public:
- explicit CJS_Position(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Position() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ scaleHow ------------------------------ */
-
-class CJS_ScaleHow : public CJS_Object {
- public:
- explicit CJS_ScaleHow(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_ScaleHow() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ scaleWhen ------------------------------ */
-
-class CJS_ScaleWhen : public CJS_Object {
- public:
- explicit CJS_ScaleWhen(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_ScaleWhen() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ style ------------------------------ */
-
-class CJS_Style : public CJS_Object {
- public:
- explicit CJS_Style(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Style() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ zoomtype ------------------------------ */
-
-class CJS_Zoomtype : public CJS_Object {
- public:
- explicit CJS_Zoomtype(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Zoomtype() override {}
-
- DECLARE_JS_CLASS_CONST();
-};
-
-/* ------------------------------ CJS_GlobalConsts -------------------------- */
-
-class CJS_GlobalConsts : public CJS_Object {
- public:
- static void DefineJSObjects(CJS_Runtime* pRuntime);
-};
-
-/* ------------------------------ CJS_GlobalArrays -------------------------- */
-
-class CJS_GlobalArrays : public CJS_Object {
- public:
- static void DefineJSObjects(CJS_Runtime* pRuntmie);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_CONSTS_H_
diff --git a/fpdfsdk/src/javascript/Document.cpp b/fpdfsdk/src/javascript/Document.cpp
deleted file mode 100644
index 672a3a3874..0000000000
--- a/fpdfsdk/src/javascript/Document.cpp
+++ /dev/null
@@ -1,1633 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/Document.h"
-
-#include <vector>
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/Field.h"
-#include "fpdfsdk/src/javascript/Icon.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/app.h"
-#include "fpdfsdk/src/javascript/resource.h"
-#include "third_party/base/numerics/safe_math.h"
-
-static v8::Isolate* GetIsolate(IJS_Context* cc) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- return pRuntime->GetIsolate();
-}
-
-BEGIN_JS_STATIC_CONST(CJS_PrintParamsObj)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_PrintParamsObj)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_PrintParamsObj)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj)
-
-PrintParamsObj::PrintParamsObj(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject) {
- bUI = TRUE;
- nStart = 0;
- nEnd = 0;
- bSilent = FALSE;
- bShrinkToFit = FALSE;
- bPrintAsImage = FALSE;
- bReverse = FALSE;
- bAnnotations = TRUE;
-}
-
-/* ---------------------- Document ---------------------- */
-
-#define MINWIDTH 5.0f
-#define MINHEIGHT 5.0f
-
-BEGIN_JS_STATIC_CONST(CJS_Document)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Document)
-JS_STATIC_PROP_ENTRY(ADBE)
-JS_STATIC_PROP_ENTRY(author)
-JS_STATIC_PROP_ENTRY(baseURL)
-JS_STATIC_PROP_ENTRY(bookmarkRoot)
-JS_STATIC_PROP_ENTRY(calculate)
-JS_STATIC_PROP_ENTRY(Collab)
-JS_STATIC_PROP_ENTRY(creationDate)
-JS_STATIC_PROP_ENTRY(creator)
-JS_STATIC_PROP_ENTRY(delay)
-JS_STATIC_PROP_ENTRY(dirty)
-JS_STATIC_PROP_ENTRY(documentFileName)
-JS_STATIC_PROP_ENTRY(external)
-JS_STATIC_PROP_ENTRY(filesize)
-JS_STATIC_PROP_ENTRY(icons)
-JS_STATIC_PROP_ENTRY(info)
-JS_STATIC_PROP_ENTRY(keywords)
-JS_STATIC_PROP_ENTRY(layout)
-JS_STATIC_PROP_ENTRY(media)
-JS_STATIC_PROP_ENTRY(modDate)
-JS_STATIC_PROP_ENTRY(mouseX)
-JS_STATIC_PROP_ENTRY(mouseY)
-JS_STATIC_PROP_ENTRY(numFields)
-JS_STATIC_PROP_ENTRY(numPages)
-JS_STATIC_PROP_ENTRY(pageNum)
-JS_STATIC_PROP_ENTRY(pageWindowRect)
-JS_STATIC_PROP_ENTRY(path)
-JS_STATIC_PROP_ENTRY(producer)
-JS_STATIC_PROP_ENTRY(subject)
-JS_STATIC_PROP_ENTRY(title)
-JS_STATIC_PROP_ENTRY(zoom)
-JS_STATIC_PROP_ENTRY(zoomType)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Document)
-JS_STATIC_METHOD_ENTRY(addAnnot)
-JS_STATIC_METHOD_ENTRY(addField)
-JS_STATIC_METHOD_ENTRY(addLink)
-JS_STATIC_METHOD_ENTRY(addIcon)
-JS_STATIC_METHOD_ENTRY(calculateNow)
-JS_STATIC_METHOD_ENTRY(closeDoc)
-JS_STATIC_METHOD_ENTRY(createDataObject)
-JS_STATIC_METHOD_ENTRY(deletePages)
-JS_STATIC_METHOD_ENTRY(exportAsText)
-JS_STATIC_METHOD_ENTRY(exportAsFDF)
-JS_STATIC_METHOD_ENTRY(exportAsXFDF)
-JS_STATIC_METHOD_ENTRY(extractPages)
-JS_STATIC_METHOD_ENTRY(getAnnot)
-JS_STATIC_METHOD_ENTRY(getAnnots)
-JS_STATIC_METHOD_ENTRY(getAnnot3D)
-JS_STATIC_METHOD_ENTRY(getAnnots3D)
-JS_STATIC_METHOD_ENTRY(getField)
-JS_STATIC_METHOD_ENTRY(getIcon)
-JS_STATIC_METHOD_ENTRY(getLinks)
-JS_STATIC_METHOD_ENTRY(getNthFieldName)
-JS_STATIC_METHOD_ENTRY(getOCGs)
-JS_STATIC_METHOD_ENTRY(getPageBox)
-JS_STATIC_METHOD_ENTRY(getPageNthWord)
-JS_STATIC_METHOD_ENTRY(getPageNthWordQuads)
-JS_STATIC_METHOD_ENTRY(getPageNumWords)
-JS_STATIC_METHOD_ENTRY(getPrintParams)
-JS_STATIC_METHOD_ENTRY(getURL)
-JS_STATIC_METHOD_ENTRY(importAnFDF)
-JS_STATIC_METHOD_ENTRY(importAnXFDF)
-JS_STATIC_METHOD_ENTRY(importTextData)
-JS_STATIC_METHOD_ENTRY(insertPages)
-JS_STATIC_METHOD_ENTRY(mailForm)
-JS_STATIC_METHOD_ENTRY(print)
-JS_STATIC_METHOD_ENTRY(removeField)
-JS_STATIC_METHOD_ENTRY(replacePages)
-JS_STATIC_METHOD_ENTRY(resetForm)
-JS_STATIC_METHOD_ENTRY(removeIcon)
-JS_STATIC_METHOD_ENTRY(saveAs)
-JS_STATIC_METHOD_ENTRY(submitForm)
-JS_STATIC_METHOD_ENTRY(mailDoc)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Document, Document)
-
-void CJS_Document::InitInstance(IJS_Runtime* pIRuntime) {
- CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime);
- Document* pDoc = static_cast<Document*>(GetEmbedObject());
- pDoc->AttachDoc(pRuntime->GetReaderDocument());
- pDoc->SetIsolate(pRuntime->GetIsolate());
-}
-
-/* --------------------------------- Document ---------------------------------
- */
-
-Document::Document(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject),
- m_isolate(NULL),
- m_pDocument(NULL),
- m_cwBaseURL(L""),
- m_bDelay(FALSE) {}
-
-Document::~Document() {
- for (int i = 0; i < m_DelayData.GetSize(); i++) {
- delete m_DelayData.GetAt(i);
- }
-
- m_DelayData.RemoveAll();
-}
-
-// the total number of fileds in document.
-FX_BOOL Document::numFields(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- vp << (int)pPDFForm->CountFields();
- return TRUE;
-}
-
-FX_BOOL Document::dirty(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- if (m_pDocument->GetChangeMark())
- vp << true;
- else
- vp << false;
- } else {
- bool bChanged = false;
-
- vp >> bChanged;
-
- if (bChanged)
- m_pDocument->SetChangeMark();
- else
- m_pDocument->ClearChangeMark();
- }
-
- return TRUE;
-}
-
-FX_BOOL Document::ADBE(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- vp.SetNull();
- } else {
- }
-
- return TRUE;
-}
-
-FX_BOOL Document::pageNum(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- if (CPDFSDK_PageView* pPageView = m_pDocument->GetCurrentView()) {
- vp << pPageView->GetPageIndex();
- }
- } else {
- int iPageCount = m_pDocument->GetPageCount();
- int iPageNum = 0;
- vp >> iPageNum;
-
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- if (iPageNum >= 0 && iPageNum < iPageCount) {
- pEnv->JS_docgotoPage(iPageNum);
- } else if (iPageNum >= iPageCount) {
- pEnv->JS_docgotoPage(iPageCount - 1);
- } else if (iPageNum < 0) {
- pEnv->JS_docgotoPage(0);
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL Document::addAnnot(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Not supported.
- return TRUE;
-}
-
-FX_BOOL Document::addField(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Not supported.
- return TRUE;
-}
-
-FX_BOOL Document::exportAsText(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::exportAsFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::exportAsXFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-// Maps a field object in PDF document to a JavaScript variable
-// comment:
-// note: the paremter cName, this is clue how to treat if the cName is not a
-// valiable filed name in this document
-
-FX_BOOL Document::getField(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() < 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString wideName = params[0].ToCFXWideString();
-
- CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- if (pPDFForm->CountFields(wideName) <= 0) {
- vRet.SetNull();
- return TRUE;
- }
-
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- v8::Local<v8::Object> pFieldObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Field::g_nObjDefnID);
-
- v8::Isolate* isolate = GetIsolate(cc);
- CJS_Field* pJSField = (CJS_Field*)FXJS_GetPrivate(isolate, pFieldObj);
- Field* pField = (Field*)pJSField->GetEmbedObject();
- pField->AttachField(this, wideName);
-
- vRet = pJSField;
- return TRUE;
-}
-
-// Gets the name of the nth field in the document
-FX_BOOL Document::getNthFieldName(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- int nIndex = params[0].ToInt();
- if (nIndex < 0) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
- return FALSE;
- }
-
- CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- CPDF_FormField* pField = pPDFForm->GetField(nIndex);
- if (!pField)
- return FALSE;
-
- vRet = pField->GetFullName().c_str();
- return TRUE;
-}
-
-FX_BOOL Document::importAnFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::importAnXFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::importTextData(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-// exports the form data and mails the resulting fdf file as an attachment to
-// all recipients.
-// comment: need reader supports
-// note:
-// int CPDFSDK_Document::mailForm(FX_BOOL bUI,String cto,string ccc,string
-// cbcc,string cSubject,string cms);
-
-FX_BOOL Document::mailForm(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
- return FALSE;
-
- int iLength = params.size();
-
- FX_BOOL bUI = iLength > 0 ? params[0].ToBool() : TRUE;
- CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString() : L"";
- CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString() : L"";
- CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString() : L"";
- CFX_WideString cSubject = iLength > 4 ? params[4].ToCFXWideString() : L"";
- CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString() : L"";
-
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CFX_ByteTextBuf textBuf;
- if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CPDFDoc_Environment* pEnv = pContext->GetReaderApp();
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
-
- pRuntime->BeginBlock();
- pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI,
- cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(),
- cMsg.c_str());
- pRuntime->EndBlock();
- return TRUE;
-}
-
-FX_BOOL Document::print(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- FX_BOOL bUI = TRUE;
- int nStart = 0;
- int nEnd = 0;
- FX_BOOL bSilent = FALSE;
- FX_BOOL bShrinkToFit = FALSE;
- FX_BOOL bPrintAsImage = FALSE;
- FX_BOOL bReverse = FALSE;
- FX_BOOL bAnnotations = FALSE;
-
- int nlength = params.size();
- if (nlength == 9) {
- if (params[8].GetType() == CJS_Value::VT_fxobject) {
- v8::Local<v8::Object> pObj = params[8].ToV8Object();
- {
- if (FXJS_GetObjDefnID(pObj) == CJS_PrintParamsObj::g_nObjDefnID) {
- if (CJS_Object* pJSObj = params[8].ToCJSObject()) {
- if (PrintParamsObj* pprintparamsObj =
- (PrintParamsObj*)pJSObj->GetEmbedObject()) {
- bUI = pprintparamsObj->bUI;
- nStart = pprintparamsObj->nStart;
- nEnd = pprintparamsObj->nEnd;
- bSilent = pprintparamsObj->bSilent;
- bShrinkToFit = pprintparamsObj->bShrinkToFit;
- bPrintAsImage = pprintparamsObj->bPrintAsImage;
- bReverse = pprintparamsObj->bReverse;
- bAnnotations = pprintparamsObj->bAnnotations;
- }
- }
- }
- }
- }
- } else {
- if (nlength >= 1)
- bUI = params[0].ToBool();
- if (nlength >= 2)
- nStart = params[1].ToInt();
- if (nlength >= 3)
- nEnd = params[2].ToInt();
- if (nlength >= 4)
- bSilent = params[3].ToBool();
- if (nlength >= 5)
- bShrinkToFit = params[4].ToBool();
- if (nlength >= 6)
- bPrintAsImage = params[5].ToBool();
- if (nlength >= 7)
- bReverse = params[6].ToBool();
- if (nlength >= 8)
- bAnnotations = params[7].ToBool();
- }
-
- if (CPDFDoc_Environment* pEnv = m_pDocument->GetEnv()) {
- pEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit, bPrintAsImage,
- bReverse, bAnnotations);
- return TRUE;
- }
- return FALSE;
-}
-
-// removes the specified field from the document.
-// comment:
-// note: if the filed name is not retional, adobe is dumb for it.
-
-FX_BOOL Document::removeField(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
- m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM)))
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString sFieldName = params[0].ToCFXWideString();
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
-
- std::vector<CPDFSDK_Widget*> widgets;
- pInterForm->GetWidgets(sFieldName, &widgets);
-
- if (widgets.empty())
- return TRUE;
-
- for (CPDFSDK_Widget* pWidget : widgets) {
- CFX_FloatRect rcAnnot = pWidget->GetRect();
- --rcAnnot.left;
- --rcAnnot.bottom;
- ++rcAnnot.right;
- ++rcAnnot.top;
-
- CFX_RectArray aRefresh;
- aRefresh.Add(rcAnnot);
-
- UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
- ASSERT(pPage);
-
- CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage);
- pPageView->DeleteAnnot(pWidget);
- pPageView->UpdateRects(aRefresh);
- }
- m_pDocument->SetChangeMark();
-
- return TRUE;
-}
-
-// reset filed values within a document.
-// comment:
-// note: if the fields names r not rational, aodbe is dumb for it.
-
-FX_BOOL Document::resetForm(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
- m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_FILL_FORM)))
- return FALSE;
-
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array aName(pRuntime);
-
- if (params.empty()) {
- pPDFForm->ResetForm(TRUE);
- m_pDocument->SetChangeMark();
- return TRUE;
- }
-
- switch (params[0].GetType()) {
- default:
- aName.Attach(params[0].ToV8Array());
- break;
- case CJS_Value::VT_string:
- aName.SetElement(0, params[0]);
- break;
- }
-
- std::vector<CPDF_FormField*> aFields;
- for (int i = 0, isz = aName.GetLength(); i < isz; ++i) {
- CJS_Value valElement(pRuntime);
- aName.GetElement(i, valElement);
- CFX_WideString swVal = valElement.ToCFXWideString();
- for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j)
- aFields.push_back(pPDFForm->GetField(j, swVal));
- }
-
- if (!aFields.empty()) {
- pPDFForm->ResetForm(aFields, TRUE, TRUE);
- m_pDocument->SetChangeMark();
- }
-
- return TRUE;
-}
-
-FX_BOOL Document::saveAs(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::submitForm(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- int nSize = params.size();
- if (nSize < 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- v8::Isolate* isolate = pRuntime->GetIsolate();
- CJS_Array aFields(pRuntime);
- CFX_WideString strURL;
- FX_BOOL bFDF = TRUE;
- FX_BOOL bEmpty = FALSE;
-
- CJS_Value v = params[0];
- if (v.GetType() == CJS_Value::VT_string) {
- strURL = params[0].ToCFXWideString();
- if (nSize > 1)
- bFDF = params[1].ToBool();
- if (nSize > 2)
- bEmpty = params[2].ToBool();
- if (nSize > 3)
- aFields.Attach(params[3].ToV8Array());
- } else if (v.GetType() == CJS_Value::VT_object) {
- v8::Local<v8::Object> pObj = params[0].ToV8Object();
- v8::Local<v8::Value> pValue = FXJS_GetObjectElement(isolate, pObj, L"cURL");
- if (!pValue.IsEmpty())
- strURL =
- CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"bFDF");
- bFDF = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToBool();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"bEmpty");
- bEmpty = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToBool();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"aFields");
- aFields.Attach(
- CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToV8Array());
- }
-
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
- if (aFields.GetLength() == 0 && bEmpty) {
- if (pPDFInterForm->CheckRequiredFields(nullptr, true)) {
- pRuntime->BeginBlock();
- pInterForm->SubmitForm(strURL, FALSE);
- pRuntime->EndBlock();
- }
- return TRUE;
- }
-
- std::vector<CPDF_FormField*> fieldObjects;
- for (int i = 0, sz = aFields.GetLength(); i < sz; ++i) {
- CJS_Value valName(pRuntime);
- aFields.GetElement(i, valName);
-
- CFX_WideString sName = valName.ToCFXWideString();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) {
- CPDF_FormField* pField = pPDFForm->GetField(j, sName);
- if (!bEmpty && pField->GetValue().IsEmpty())
- continue;
-
- fieldObjects.push_back(pField);
- }
- }
-
- if (pPDFInterForm->CheckRequiredFields(&fieldObjects, true)) {
- pRuntime->BeginBlock();
- pInterForm->SubmitFields(strURL, fieldObjects, true, !bFDF);
- pRuntime->EndBlock();
- }
- return TRUE;
-}
-
-void Document::AttachDoc(CPDFSDK_Document* pDoc) {
- m_pDocument = pDoc;
-}
-
-CPDFSDK_Document* Document::GetReaderDoc() {
- return m_pDocument;
-}
-
-FX_BOOL Document::bookmarkRoot(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::mailDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- FX_BOOL bUI = TRUE;
- CFX_WideString cTo = L"";
- CFX_WideString cCc = L"";
- CFX_WideString cBcc = L"";
- CFX_WideString cSubject = L"";
- CFX_WideString cMsg = L"";
-
- if (params.size() >= 1)
- bUI = params[0].ToBool();
- if (params.size() >= 2)
- cTo = params[1].ToCFXWideString();
- if (params.size() >= 3)
- cCc = params[2].ToCFXWideString();
- if (params.size() >= 4)
- cBcc = params[3].ToCFXWideString();
- if (params.size() >= 5)
- cSubject = params[4].ToCFXWideString();
- if (params.size() >= 6)
- cMsg = params[5].ToCFXWideString();
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- v8::Isolate* isolate = pRuntime->GetIsolate();
-
- if (params.size() >= 1 && params[0].GetType() == CJS_Value::VT_object) {
- v8::Local<v8::Object> pObj = params[0].ToV8Object();
-
- v8::Local<v8::Value> pValue = FXJS_GetObjectElement(isolate, pObj, L"bUI");
- bUI = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToInt();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"cTo");
- cTo = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"cCc");
- cCc = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"cBcc");
- cBcc =
- CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"cSubject");
- cSubject =
- CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = FXJS_GetObjectElement(isolate, pObj, L"cMsg");
- cMsg =
- CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
- }
-
- pRuntime->BeginBlock();
- CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp();
- pEnv->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(),
- cBcc.c_str(), cMsg.c_str());
- pRuntime->EndBlock();
-
- return TRUE;
-}
-
-FX_BOOL Document::author(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("Author");
- return TRUE;
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csAuthor;
- vp >> csAuthor;
- pDictionary->SetAtString("Author", PDF_EncodeText(csAuthor));
- m_pDocument->SetChangeMark();
- return TRUE;
- }
-}
-
-FX_BOOL Document::info(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- CFX_WideString cwAuthor = pDictionary->GetUnicodeTextBy("Author");
- CFX_WideString cwTitle = pDictionary->GetUnicodeTextBy("Title");
- CFX_WideString cwSubject = pDictionary->GetUnicodeTextBy("Subject");
- CFX_WideString cwKeywords = pDictionary->GetUnicodeTextBy("Keywords");
- CFX_WideString cwCreator = pDictionary->GetUnicodeTextBy("Creator");
- CFX_WideString cwProducer = pDictionary->GetUnicodeTextBy("Producer");
- CFX_WideString cwCreationDate = pDictionary->GetUnicodeTextBy("CreationDate");
- CFX_WideString cwModDate = pDictionary->GetUnicodeTextBy("ModDate");
- CFX_WideString cwTrapped = pDictionary->GetUnicodeTextBy("Trapped");
-
- v8::Isolate* isolate = GetIsolate(cc);
- if (vp.IsGetting()) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- v8::Local<v8::Object> pObj =
- FXJS_NewFxDynamicObj(pRuntime->GetIsolate(), pRuntime, -1);
- FXJS_PutObjectString(isolate, pObj, L"Author", cwAuthor.c_str());
- FXJS_PutObjectString(isolate, pObj, L"Title", cwTitle.c_str());
- FXJS_PutObjectString(isolate, pObj, L"Subject", cwSubject.c_str());
- FXJS_PutObjectString(isolate, pObj, L"Keywords", cwKeywords.c_str());
- FXJS_PutObjectString(isolate, pObj, L"Creator", cwCreator.c_str());
- FXJS_PutObjectString(isolate, pObj, L"Producer", cwProducer.c_str());
- FXJS_PutObjectString(isolate, pObj, L"CreationDate",
- cwCreationDate.c_str());
- FXJS_PutObjectString(isolate, pObj, L"ModDate", cwModDate.c_str());
- FXJS_PutObjectString(isolate, pObj, L"Trapped", cwTrapped.c_str());
-
- // It's to be compatible to non-standard info dictionary.
- for (const auto& it : *pDictionary) {
- const CFX_ByteString& bsKey = it.first;
- CPDF_Object* pValueObj = it.second;
- CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey, bsKey.GetLength());
-
- if (pValueObj->IsString() || pValueObj->IsName()) {
- FXJS_PutObjectString(isolate, pObj, wsKey.c_str(),
- pValueObj->GetUnicodeText().c_str());
- } else if (pValueObj->IsNumber()) {
- FXJS_PutObjectNumber(isolate, pObj, wsKey.c_str(),
- (float)pValueObj->GetNumber());
- } else if (pValueObj->IsBoolean()) {
- FXJS_PutObjectBoolean(isolate, pObj, wsKey.c_str(),
- !!pValueObj->GetInteger());
- }
- }
- vp << pObj;
- }
- return TRUE;
-}
-
-FX_BOOL Document::creationDate(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("CreationDate");
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csCreationDate;
- vp >> csCreationDate;
- pDictionary->SetAtString("CreationDate", PDF_EncodeText(csCreationDate));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
-}
-
-FX_BOOL Document::creator(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("Creator");
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csCreator;
- vp >> csCreator;
- pDictionary->SetAtString("Creator", PDF_EncodeText(csCreator));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
-}
-
-FX_BOOL Document::delay(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- vp << m_bDelay;
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- vp >> m_bDelay;
- if (m_bDelay) {
- for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++)
- delete m_DelayData.GetAt(i);
-
- m_DelayData.RemoveAll();
- } else {
- CFX_ArrayTemplate<CJS_DelayData*> DelayDataToProcess;
- for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) {
- if (CJS_DelayData* pData = m_DelayData.GetAt(i)) {
- DelayDataToProcess.Add(pData);
- m_DelayData.SetAt(i, NULL);
- }
- }
- m_DelayData.RemoveAll();
- for (int i = 0, sz = DelayDataToProcess.GetSize(); i < sz; i++) {
- CJS_DelayData* pData = DelayDataToProcess.GetAt(i);
- Field::DoDelay(m_pDocument, pData);
- DelayDataToProcess.SetAt(i, NULL);
- delete pData;
- }
- }
- }
- return TRUE;
-}
-
-FX_BOOL Document::keywords(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("Keywords");
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csKeywords;
- vp >> csKeywords;
- pDictionary->SetAtString("Keywords", PDF_EncodeText(csKeywords));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
-}
-
-FX_BOOL Document::modDate(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("ModDate");
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csmodDate;
- vp >> csmodDate;
- pDictionary->SetAtString("ModDate", PDF_EncodeText(csmodDate));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
-}
-
-FX_BOOL Document::producer(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("Producer");
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csproducer;
- vp >> csproducer;
- pDictionary->SetAtString("Producer", PDF_EncodeText(csproducer));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
-}
-
-FX_BOOL Document::subject(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("Subject");
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString cssubject;
- vp >> cssubject;
- pDictionary->SetAtString("Subject", PDF_EncodeText(cssubject));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
-}
-
-FX_BOOL Document::title(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!m_pDocument || !m_pDocument->GetUnderlyingDocument())
- return FALSE;
-
- CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
-
- if (vp.IsGetting()) {
- vp << pDictionary->GetUnicodeTextBy("Title");
- } else {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString cstitle;
- vp >> cstitle;
- pDictionary->SetAtString("Title", PDF_EncodeText(cstitle));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
-}
-
-FX_BOOL Document::numPages(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- vp << m_pDocument->GetPageCount();
- return TRUE;
-}
-
-FX_BOOL Document::external(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- // In Chrome case,should always return true.
- if (vp.IsGetting()) {
- vp << true;
- }
- return TRUE;
-}
-
-FX_BOOL Document::filesize(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- vp << 0;
- return TRUE;
-}
-
-FX_BOOL Document::mouseX(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::mouseY(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::baseURL(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- vp << m_cwBaseURL;
- } else {
- vp >> m_cwBaseURL;
- }
- return TRUE;
-}
-
-FX_BOOL Document::calculate(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
-
- if (vp.IsGetting()) {
- if (pInterForm->IsCalculateEnabled())
- vp << true;
- else
- vp << false;
- } else {
- bool bCalculate;
- vp >> bCalculate;
-
- pInterForm->EnableCalculate(bCalculate);
- }
-
- return TRUE;
-}
-
-FX_BOOL Document::documentFileName(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- CFX_WideString wsFilePath = m_pDocument->GetPath();
- int32_t i = wsFilePath.GetLength() - 1;
- for (; i >= 0; i--) {
- if (wsFilePath.GetAt(i) == L'\\' || wsFilePath.GetAt(i) == L'/')
- break;
- }
- if (i >= 0 && i < wsFilePath.GetLength() - 1) {
- vp << (wsFilePath.GetBuffer(wsFilePath.GetLength()) + i + 1);
- } else {
- vp << L"";
- }
- return TRUE;
-}
-
-FX_BOOL Document::path(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- vp << app::SysPathToPDFPath(m_pDocument->GetPath());
- return TRUE;
-}
-
-FX_BOOL Document::pageWindowRect(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::layout(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::addLink(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::closeDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::getPageBox(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::getAnnot(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::getAnnots(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- vRet.SetNull();
- return TRUE;
-}
-
-FX_BOOL Document::getAnnot3D(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- vRet.SetNull();
- return TRUE;
-}
-
-FX_BOOL Document::getAnnots3D(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- vRet = CJS_Value::VT_undefined;
- return TRUE;
-}
-
-FX_BOOL Document::getOCGs(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::getLinks(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) {
- return (rect.left <= LinkRect.left && rect.top <= LinkRect.top &&
- rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom);
-}
-
-FX_BOOL Document::addIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 2) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- CFX_WideString swIconName = params[0].ToCFXWideString();
-
- if (params[1].GetType() != CJS_Value::VT_object) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR);
- return FALSE;
- }
-
- v8::Local<v8::Object> pJSIcon = params[1].ToV8Object();
- if (FXJS_GetObjDefnID(pJSIcon) != CJS_Icon::g_nObjDefnID) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR);
- return FALSE;
- }
-
- CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject();
- if (!pEmbedObj) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR);
- return FALSE;
- }
-
- m_IconList.push_back(std::unique_ptr<IconElement>(
- new IconElement(swIconName, (Icon*)pEmbedObj)));
- return TRUE;
-}
-
-FX_BOOL Document::icons(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
-
- if (m_IconList.empty()) {
- vp.SetNull();
- return TRUE;
- }
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array Icons(pRuntime);
-
- int i = 0;
- for (const auto& pIconElement : m_IconList) {
- v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Icon::g_nObjDefnID);
- if (pObj.IsEmpty())
- return FALSE;
-
- CJS_Icon* pJS_Icon = (CJS_Icon*)FXJS_GetPrivate(m_isolate, pObj);
- if (!pJS_Icon)
- return FALSE;
-
- Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
- if (!pIcon)
- return FALSE;
-
- pIcon->SetStream(pIconElement->IconStream->GetStream());
- pIcon->SetIconName(pIconElement->IconName);
- Icons.SetElement(i++, CJS_Value(pRuntime, pJS_Icon));
- }
-
- vp << Icons;
- return TRUE;
-}
-
-FX_BOOL Document::getIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if (m_IconList.empty())
- return FALSE;
-
- CFX_WideString swIconName = params[0].ToCFXWideString();
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
-
- for (const auto& pIconElement : m_IconList) {
- if (pIconElement->IconName == swIconName) {
- Icon* pRetIcon = pIconElement->IconStream;
-
- v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Icon::g_nObjDefnID);
- if (pObj.IsEmpty())
- return FALSE;
-
- CJS_Icon* pJS_Icon = (CJS_Icon*)FXJS_GetPrivate(m_isolate, pObj);
- if (!pJS_Icon)
- return FALSE;
-
- Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
- if (!pIcon)
- return FALSE;
-
- pIcon->SetIconName(swIconName);
- pIcon->SetStream(pRetIcon->GetStream());
- vRet = pJS_Icon;
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL Document::removeIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, no supported.
- return TRUE;
-}
-
-FX_BOOL Document::createDataObject(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not implemented.
- return TRUE;
-}
-
-FX_BOOL Document::media(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::calculateNow(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
- m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_FILL_FORM)))
- return FALSE;
-
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- pInterForm->OnCalculate();
- return TRUE;
-}
-
-FX_BOOL Document::Collab(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::getPageNthWord(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
- return FALSE;
-
- int nPageNo = params.size() > 0 ? params[0].ToInt() : 0;
- int nWordNo = params.size() > 1 ? params[1].ToInt() : 0;
- bool bStrip = params.size() > 2 ? params[2].ToBool() : true;
-
- CPDF_Document* pDocument = m_pDocument->GetPDFDocument();
- if (!pDocument)
- return FALSE;
-
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
- return FALSE;
- }
-
- CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
- if (!pPageDict)
- return FALSE;
-
- CPDF_Page page;
- page.Load(pDocument, pPageDict);
- page.ParseContent(nullptr);
-
- int nWords = 0;
- CFX_WideString swRet;
- for (auto& pPageObj : *page.GetPageObjectList()) {
- if (pPageObj->IsText()) {
- CPDF_TextObject* pTextObj = pPageObj->AsText();
- int nObjWords = CountWords(pTextObj);
- if (nWords + nObjWords >= nWordNo) {
- swRet = GetObjWordStr(pTextObj, nWordNo - nWords);
- break;
- }
- nWords += nObjWords;
- }
- }
-
- if (bStrip) {
- swRet.TrimLeft();
- swRet.TrimRight();
- }
-
- vRet = swRet.c_str();
- return TRUE;
-}
-
-FX_BOOL Document::getPageNthWordQuads(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
- return FALSE;
-
- return FALSE;
-}
-
-FX_BOOL Document::getPageNumWords(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
- return FALSE;
-
- int nPageNo = params.size() > 0 ? params[0].ToInt() : 0;
- CPDF_Document* pDocument = m_pDocument->GetPDFDocument();
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
- return FALSE;
- }
-
- CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
- if (!pPageDict)
- return FALSE;
-
- CPDF_Page page;
- page.Load(pDocument, pPageDict);
- page.ParseContent(nullptr);
-
- int nWords = 0;
- for (auto& pPageObj : *page.GetPageObjectList()) {
- if (pPageObj->IsText())
- nWords += CountWords(pPageObj->AsText());
- }
-
- vRet = nWords;
- return TRUE;
-}
-
-FX_BOOL Document::getPrintParams(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- v8::Local<v8::Object> pRetObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_PrintParamsObj::g_nObjDefnID);
-
- // Not implemented yet.
-
- vRet = pRetObj;
- return TRUE;
-}
-
-#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
-
-int Document::CountWords(CPDF_TextObject* pTextObj) {
- if (!pTextObj)
- return 0;
-
- int nWords = 0;
-
- CPDF_Font* pFont = pTextObj->GetFont();
- if (!pFont)
- return 0;
-
- FX_BOOL bIsLatin = FALSE;
-
- for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
- FX_DWORD charcode = -1;
- FX_FLOAT kerning;
-
- pTextObj->GetCharInfo(i, charcode, kerning);
- CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
-
- FX_WORD unicode = 0;
- if (swUnicode.GetLength() > 0)
- unicode = swUnicode[0];
-
- if (ISLATINWORD(unicode) && bIsLatin)
- continue;
-
- bIsLatin = ISLATINWORD(unicode);
- if (unicode != 0x20)
- nWords++;
- }
-
- return nWords;
-}
-
-CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj,
- int nWordIndex) {
- CFX_WideString swRet;
-
- CPDF_Font* pFont = pTextObj->GetFont();
- if (!pFont)
- return L"";
-
- int nWords = 0;
- FX_BOOL bIsLatin = FALSE;
-
- for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
- FX_DWORD charcode = -1;
- FX_FLOAT kerning;
-
- pTextObj->GetCharInfo(i, charcode, kerning);
- CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
-
- FX_WORD unicode = 0;
- if (swUnicode.GetLength() > 0)
- unicode = swUnicode[0];
-
- if (ISLATINWORD(unicode) && bIsLatin) {
- } else {
- bIsLatin = ISLATINWORD(unicode);
- if (unicode != 0x20)
- nWords++;
- }
-
- if (nWords - 1 == nWordIndex)
- swRet += unicode;
- }
-
- return swRet;
-}
-
-FX_BOOL Document::zoom(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-/**
-(none, NoVary)
-(fitP, FitPage)
-(fitW, FitWidth)
-(fitH, FitHeight)
-(fitV, FitVisibleWidth)
-(pref, Preferred)
-(refW, ReflowWidth)
-*/
-
-FX_BOOL Document::zoomType(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Document::deletePages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, no supported.
- return TRUE;
-}
-
-FX_BOOL Document::extractPages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::insertPages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::replacePages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Document::getURL(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-void Document::AddDelayData(CJS_DelayData* pData) {
- m_DelayData.Add(pData);
-}
-
-void Document::DoFieldDelay(const CFX_WideString& sFieldName,
- int nControlIndex) {
- CFX_DWordArray DelArray;
- CFX_ArrayTemplate<CJS_DelayData*> DelayDataForFieldAndControlIndex;
-
- for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) {
- if (CJS_DelayData* pData = m_DelayData.GetAt(i)) {
- if (pData->sFieldName == sFieldName &&
- pData->nControlIndex == nControlIndex) {
- DelayDataForFieldAndControlIndex.Add(pData);
- m_DelayData.SetAt(i, NULL);
- DelArray.Add(i);
- }
- }
- }
-
- for (int j = DelArray.GetSize() - 1; j >= 0; j--) {
- m_DelayData.RemoveAt(DelArray[j]);
- }
-
- for (int i = 0, sz = DelayDataForFieldAndControlIndex.GetSize(); i < sz;
- i++) {
- CJS_DelayData* pData = DelayDataForFieldAndControlIndex.GetAt(i);
- Field::DoDelay(m_pDocument, pData);
- DelayDataForFieldAndControlIndex.SetAt(i, NULL);
- delete pData;
- }
-}
-
-CJS_Document* Document::GetCJSDoc() const {
- return static_cast<CJS_Document*>(m_pJSObject);
-}
diff --git a/fpdfsdk/src/javascript/Document.h b/fpdfsdk/src/javascript/Document.h
deleted file mode 100644
index 06c4121510..0000000000
--- a/fpdfsdk/src/javascript/Document.h
+++ /dev/null
@@ -1,365 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_
-#define FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_
-
-#include <list>
-#include <memory>
-#include <vector>
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class PrintParamsObj : public CJS_EmbedObj {
- public:
- PrintParamsObj(CJS_Object* pJSObject);
- ~PrintParamsObj() override {}
-
- public:
- FX_BOOL bUI;
- int nStart;
- int nEnd;
- FX_BOOL bSilent;
- FX_BOOL bShrinkToFit;
- FX_BOOL bPrintAsImage;
- FX_BOOL bReverse;
- FX_BOOL bAnnotations;
-};
-
-class CJS_PrintParamsObj : public CJS_Object {
- public:
- CJS_PrintParamsObj(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_PrintParamsObj() override {}
-
- DECLARE_JS_CLASS();
-};
-
-class Icon;
-class Field;
-
-struct IconElement {
- IconElement(const CFX_WideString& name, Icon* stream)
- : IconName(name), IconStream(stream) {}
-
- CFX_WideString IconName;
- Icon* IconStream;
-};
-
-struct CJS_DelayData;
-struct CJS_DelayAnnot;
-struct CJS_AnnotObj;
-
-class Document : public CJS_EmbedObj {
- public:
- Document(CJS_Object* pJSObject);
- ~Document() override;
-
- FX_BOOL ADBE(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL author(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL baseURL(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL bookmarkRoot(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL calculate(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL Collab(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL creationDate(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL creator(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL delay(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL dirty(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL documentFileName(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL external(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL filesize(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL icons(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL info(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL keywords(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL layout(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL media(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL modDate(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL mouseX(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL mouseY(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL numFields(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL numPages(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL pageNum(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL pageWindowRect(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL path(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL producer(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL subject(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL title(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL zoom(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL zoomType(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
-
- FX_BOOL addAnnot(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL addField(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL addLink(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL addIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL calculateNow(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL closeDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL createDataObject(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL deletePages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL exportAsText(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL exportAsFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL exportAsXFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL extractPages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getAnnot(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getAnnots(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getAnnot3D(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getAnnots3D(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getField(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getLinks(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getNthFieldName(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getOCGs(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getPageBox(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getPageNthWord(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getPageNthWordQuads(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getPageNumWords(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getPrintParams(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getURL(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL importAnFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL importAnXFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL importTextData(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL insertPages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL mailForm(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL print(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL removeField(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL replacePages(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL resetForm(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL saveAs(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL submitForm(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL mailDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL removeIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-
- void AttachDoc(CPDFSDK_Document* pDoc);
- CPDFSDK_Document* GetReaderDoc();
- void AddDelayData(CJS_DelayData* pData);
- void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex);
- void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; }
- CJS_Document* GetCJSDoc() const;
-
- private:
- bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect);
- int CountWords(CPDF_TextObject* pTextObj);
- CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex);
-
- v8::Isolate* m_isolate;
- std::list<std::unique_ptr<IconElement>> m_IconList;
- CPDFSDK_Document* m_pDocument;
- CFX_WideString m_cwBaseURL;
- bool m_bDelay;
- CFX_ArrayTemplate<CJS_DelayData*> m_DelayData;
-};
-
-class CJS_Document : public CJS_Object {
- public:
- explicit CJS_Document(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Document() override {}
-
- // CJS_Object
- void InitInstance(IJS_Runtime* pIRuntime) override;
-
- DECLARE_JS_CLASS();
-
- JS_STATIC_PROP(ADBE, Document);
- JS_STATIC_PROP(author, Document);
- JS_STATIC_PROP(baseURL, Document);
- JS_STATIC_PROP(bookmarkRoot, Document);
- JS_STATIC_PROP(calculate, Document);
- JS_STATIC_PROP(Collab, Document);
- JS_STATIC_PROP(creationDate, Document);
- JS_STATIC_PROP(creator, Document);
- JS_STATIC_PROP(delay, Document);
- JS_STATIC_PROP(dirty, Document);
- JS_STATIC_PROP(documentFileName, Document);
- JS_STATIC_PROP(external, Document);
- JS_STATIC_PROP(filesize, Document);
- JS_STATIC_PROP(icons, Document);
- JS_STATIC_PROP(info, Document);
- JS_STATIC_PROP(keywords, Document);
- JS_STATIC_PROP(layout, Document);
- JS_STATIC_PROP(media, Document);
- JS_STATIC_PROP(modDate, Document);
- JS_STATIC_PROP(mouseX, Document);
- JS_STATIC_PROP(mouseY, Document);
- JS_STATIC_PROP(numFields, Document);
- JS_STATIC_PROP(numPages, Document);
- JS_STATIC_PROP(pageNum, Document);
- JS_STATIC_PROP(pageWindowRect, Document);
- JS_STATIC_PROP(path, Document);
- JS_STATIC_PROP(producer, Document);
- JS_STATIC_PROP(subject, Document);
- JS_STATIC_PROP(title, Document);
- JS_STATIC_PROP(zoom, Document);
- JS_STATIC_PROP(zoomType, Document);
-
- JS_STATIC_METHOD(addAnnot, Document);
- JS_STATIC_METHOD(addField, Document);
- JS_STATIC_METHOD(addLink, Document);
- JS_STATIC_METHOD(addIcon, Document);
- JS_STATIC_METHOD(calculateNow, Document);
- JS_STATIC_METHOD(closeDoc, Document);
- JS_STATIC_METHOD(createDataObject, Document);
- JS_STATIC_METHOD(deletePages, Document);
- JS_STATIC_METHOD(exportAsText, Document);
- JS_STATIC_METHOD(exportAsFDF, Document);
- JS_STATIC_METHOD(exportAsXFDF, Document);
- JS_STATIC_METHOD(extractPages, Document);
- JS_STATIC_METHOD(getAnnot, Document);
- JS_STATIC_METHOD(getAnnots, Document);
- JS_STATIC_METHOD(getAnnot3D, Document);
- JS_STATIC_METHOD(getAnnots3D, Document);
- JS_STATIC_METHOD(getField, Document);
- JS_STATIC_METHOD(getIcon, Document);
- JS_STATIC_METHOD(getLinks, Document);
- JS_STATIC_METHOD(getNthFieldName, Document);
- JS_STATIC_METHOD(getOCGs, Document);
- JS_STATIC_METHOD(getPageBox, Document);
- JS_STATIC_METHOD(getPageNthWord, Document);
- JS_STATIC_METHOD(getPageNthWordQuads, Document);
- JS_STATIC_METHOD(getPageNumWords, Document);
- JS_STATIC_METHOD(getPrintParams, Document);
- JS_STATIC_METHOD(getURL, Document);
- JS_STATIC_METHOD(importAnFDF, Document);
- JS_STATIC_METHOD(importAnXFDF, Document);
- JS_STATIC_METHOD(importTextData, Document);
- JS_STATIC_METHOD(insertPages, Document);
- JS_STATIC_METHOD(mailForm, Document);
- JS_STATIC_METHOD(print, Document);
- JS_STATIC_METHOD(removeField, Document);
- JS_STATIC_METHOD(replacePages, Document);
- JS_STATIC_METHOD(removeIcon, Document);
- JS_STATIC_METHOD(resetForm, Document);
- JS_STATIC_METHOD(saveAs, Document);
- JS_STATIC_METHOD(submitForm, Document);
- JS_STATIC_METHOD(mailDoc, Document);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_
diff --git a/fpdfsdk/src/javascript/Field.cpp b/fpdfsdk/src/javascript/Field.cpp
deleted file mode 100644
index 0c0dfd17bf..0000000000
--- a/fpdfsdk/src/javascript/Field.cpp
+++ /dev/null
@@ -1,3600 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/Field.h"
-
-#include <algorithm>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment.
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/Document.h"
-#include "fpdfsdk/src/javascript/Icon.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/PublicMethods.h"
-#include "fpdfsdk/src/javascript/color.h"
-
-BEGIN_JS_STATIC_CONST(CJS_Field)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Field)
-JS_STATIC_PROP_ENTRY(alignment)
-JS_STATIC_PROP_ENTRY(borderStyle)
-JS_STATIC_PROP_ENTRY(buttonAlignX)
-JS_STATIC_PROP_ENTRY(buttonAlignY)
-JS_STATIC_PROP_ENTRY(buttonFitBounds)
-JS_STATIC_PROP_ENTRY(buttonPosition)
-JS_STATIC_PROP_ENTRY(buttonScaleHow)
-JS_STATIC_PROP_ENTRY(buttonScaleWhen)
-JS_STATIC_PROP_ENTRY(calcOrderIndex)
-JS_STATIC_PROP_ENTRY(charLimit)
-JS_STATIC_PROP_ENTRY(comb)
-JS_STATIC_PROP_ENTRY(commitOnSelChange)
-JS_STATIC_PROP_ENTRY(currentValueIndices)
-JS_STATIC_PROP_ENTRY(defaultStyle)
-JS_STATIC_PROP_ENTRY(defaultValue)
-JS_STATIC_PROP_ENTRY(doNotScroll)
-JS_STATIC_PROP_ENTRY(doNotSpellCheck)
-JS_STATIC_PROP_ENTRY(delay)
-JS_STATIC_PROP_ENTRY(display)
-JS_STATIC_PROP_ENTRY(doc)
-JS_STATIC_PROP_ENTRY(editable)
-JS_STATIC_PROP_ENTRY(exportValues)
-JS_STATIC_PROP_ENTRY(hidden)
-JS_STATIC_PROP_ENTRY(fileSelect)
-JS_STATIC_PROP_ENTRY(fillColor)
-JS_STATIC_PROP_ENTRY(lineWidth)
-JS_STATIC_PROP_ENTRY(highlight)
-JS_STATIC_PROP_ENTRY(multiline)
-JS_STATIC_PROP_ENTRY(multipleSelection)
-JS_STATIC_PROP_ENTRY(name)
-JS_STATIC_PROP_ENTRY(numItems)
-JS_STATIC_PROP_ENTRY(page)
-JS_STATIC_PROP_ENTRY(password)
-JS_STATIC_PROP_ENTRY(print)
-JS_STATIC_PROP_ENTRY(radiosInUnison)
-JS_STATIC_PROP_ENTRY(readonly)
-JS_STATIC_PROP_ENTRY(rect)
-JS_STATIC_PROP_ENTRY(required)
-JS_STATIC_PROP_ENTRY(richText)
-JS_STATIC_PROP_ENTRY(richValue)
-JS_STATIC_PROP_ENTRY(rotation)
-JS_STATIC_PROP_ENTRY(strokeColor)
-JS_STATIC_PROP_ENTRY(style)
-JS_STATIC_PROP_ENTRY(submitName)
-JS_STATIC_PROP_ENTRY(textColor)
-JS_STATIC_PROP_ENTRY(textFont)
-JS_STATIC_PROP_ENTRY(textSize)
-JS_STATIC_PROP_ENTRY(type)
-JS_STATIC_PROP_ENTRY(userName)
-JS_STATIC_PROP_ENTRY(value)
-JS_STATIC_PROP_ENTRY(valueAsString)
-JS_STATIC_PROP_ENTRY(source)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Field)
-JS_STATIC_METHOD_ENTRY(browseForFileToSubmit)
-JS_STATIC_METHOD_ENTRY(buttonGetCaption)
-JS_STATIC_METHOD_ENTRY(buttonGetIcon)
-JS_STATIC_METHOD_ENTRY(buttonImportIcon)
-JS_STATIC_METHOD_ENTRY(buttonSetCaption)
-JS_STATIC_METHOD_ENTRY(buttonSetIcon)
-JS_STATIC_METHOD_ENTRY(checkThisBox)
-JS_STATIC_METHOD_ENTRY(clearItems)
-JS_STATIC_METHOD_ENTRY(defaultIsChecked)
-JS_STATIC_METHOD_ENTRY(deleteItemAt)
-JS_STATIC_METHOD_ENTRY(getArray)
-JS_STATIC_METHOD_ENTRY(getItemAt)
-JS_STATIC_METHOD_ENTRY(getLock)
-JS_STATIC_METHOD_ENTRY(insertItemAt)
-JS_STATIC_METHOD_ENTRY(isBoxChecked)
-JS_STATIC_METHOD_ENTRY(isDefaultChecked)
-JS_STATIC_METHOD_ENTRY(setAction)
-JS_STATIC_METHOD_ENTRY(setFocus)
-JS_STATIC_METHOD_ENTRY(setItems)
-JS_STATIC_METHOD_ENTRY(setLock)
-JS_STATIC_METHOD_ENTRY(signatureGetModifications)
-JS_STATIC_METHOD_ENTRY(signatureGetSeedValue)
-JS_STATIC_METHOD_ENTRY(signatureInfo)
-JS_STATIC_METHOD_ENTRY(signatureSetSeedValue)
-JS_STATIC_METHOD_ENTRY(signatureSign)
-JS_STATIC_METHOD_ENTRY(signatureValidate)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Field, Field)
-
-void CJS_Field::InitInstance(IJS_Runtime* pIRuntime) {
- CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime);
- Field* pField = static_cast<Field*>(GetEmbedObject());
- pField->SetIsolate(pRuntime->GetIsolate());
-}
-
-Field::Field(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject),
- m_pJSDoc(NULL),
- m_pDocument(NULL),
- m_nFormControlIndex(-1),
- m_bCanSet(FALSE),
- m_bDelay(FALSE),
- m_isolate(NULL) {}
-
-Field::~Field() {}
-
-// note: iControlNo = -1, means not a widget.
-void Field::ParseFieldName(const std::wstring& strFieldNameParsed,
- std::wstring& strFieldName,
- int& iControlNo) {
- int iStart = strFieldNameParsed.find_last_of(L'.');
- if (iStart == -1) {
- strFieldName = strFieldNameParsed;
- iControlNo = -1;
- return;
- }
- std::wstring suffixal = strFieldNameParsed.substr(iStart + 1);
- iControlNo = FXSYS_wtoi(suffixal.c_str());
- if (iControlNo == 0) {
- int iStart;
- while ((iStart = suffixal.find_last_of(L" ")) != -1) {
- suffixal.erase(iStart, 1);
- }
-
- if (suffixal.compare(L"0") != 0) {
- strFieldName = strFieldNameParsed;
- iControlNo = -1;
- return;
- }
- }
- strFieldName = strFieldNameParsed.substr(0, iStart);
-}
-
-FX_BOOL Field::AttachField(Document* pDocument,
- const CFX_WideString& csFieldName) {
- m_pJSDoc = pDocument;
- m_pDocument = pDocument->GetReaderDoc();
- m_bCanSet = m_pDocument->GetPermissions(FPDFPERM_FILL_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_MODIFY);
-
- CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
- CFX_WideString swFieldNameTemp = csFieldName;
- swFieldNameTemp.Replace(L"..", L".");
-
- if (pInterForm->CountFields(swFieldNameTemp) <= 0) {
- std::wstring strFieldName;
- int iControlNo = -1;
- ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo);
- if (iControlNo == -1)
- return FALSE;
-
- m_FieldName = strFieldName.c_str();
- m_nFormControlIndex = iControlNo;
- return TRUE;
- }
-
- m_FieldName = swFieldNameTemp;
- m_nFormControlIndex = -1;
-
- return TRUE;
-}
-
-std::vector<CPDF_FormField*> Field::GetFormFields(
- CPDFSDK_Document* pDocument,
- const CFX_WideString& csFieldName) {
- std::vector<CPDF_FormField*> fields;
- CPDFSDK_InterForm* pReaderInterForm = pDocument->GetInterForm();
- CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
- for (int i = 0, sz = pInterForm->CountFields(csFieldName); i < sz; ++i) {
- if (CPDF_FormField* pFormField = pInterForm->GetField(i, csFieldName))
- fields.push_back(pFormField);
- }
- return fields;
-}
-
-std::vector<CPDF_FormField*> Field::GetFormFields(
- const CFX_WideString& csFieldName) const {
- return Field::GetFormFields(m_pDocument, csFieldName);
-}
-
-void Field::UpdateFormField(CPDFSDK_Document* pDocument,
- CPDF_FormField* pFormField,
- FX_BOOL bChangeMark,
- FX_BOOL bResetAP,
- FX_BOOL bRefresh) {
- std::vector<CPDFSDK_Widget*> widgets;
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- pInterForm->GetWidgets(pFormField, &widgets);
-
- if (bResetAP) {
- int nFieldType = pFormField->GetFieldType();
- if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) {
- for (CPDFSDK_Widget* pWidget : widgets) {
- FX_BOOL bFormatted = FALSE;
- CFX_WideString sValue = pWidget->OnFormat(bFormatted);
- pWidget->ResetAppearance(bFormatted ? sValue.c_str() : nullptr, FALSE);
- }
- } else {
- for (CPDFSDK_Widget* pWidget : widgets) {
- pWidget->ResetAppearance(nullptr, FALSE);
- }
- }
- }
-
- if (bRefresh) {
- for (CPDFSDK_Widget* pWidget : widgets) {
- CPDFSDK_Document* pDoc = pWidget->GetInterForm()->GetDocument();
- pDoc->UpdateAllViews(nullptr, pWidget);
- }
- }
-
- if (bChangeMark)
- pDocument->SetChangeMark();
-}
-
-void Field::UpdateFormControl(CPDFSDK_Document* pDocument,
- CPDF_FormControl* pFormControl,
- FX_BOOL bChangeMark,
- FX_BOOL bResetAP,
- FX_BOOL bRefresh) {
- ASSERT(pFormControl);
-
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl);
-
- if (pWidget) {
- if (bResetAP) {
- int nFieldType = pWidget->GetFieldType();
- if (nFieldType == FIELDTYPE_COMBOBOX ||
- nFieldType == FIELDTYPE_TEXTFIELD) {
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = pWidget->OnFormat(bFormated);
- if (bFormated)
- pWidget->ResetAppearance(sValue.c_str(), FALSE);
- else
- pWidget->ResetAppearance(NULL, FALSE);
- } else {
- pWidget->ResetAppearance(NULL, FALSE);
- }
- }
-
- if (bRefresh) {
- CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
- CPDFSDK_Document* pDoc = pInterForm->GetDocument();
- pDoc->UpdateAllViews(NULL, pWidget);
- }
- }
-
- if (bChangeMark)
- pDocument->SetChangeMark();
-}
-
-CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument,
- CPDF_FormControl* pFormControl) {
- CPDFSDK_InterForm* pInterForm =
- static_cast<CPDFSDK_InterForm*>(pDocument->GetInterForm());
- return pInterForm ? pInterForm->GetWidget(pFormControl) : nullptr;
-}
-
-FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField,
- CFX_WideString csOptLabel) {
- for (int i = 0, sz = pFormField->CountOptions(); i < sz; i++) {
- if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-CPDF_FormControl* Field::GetSmartFieldControl(CPDF_FormField* pFormField) {
- if (!pFormField->CountControls() ||
- m_nFormControlIndex >= pFormField->CountControls())
- return NULL;
-
- if (m_nFormControlIndex < 0)
- return pFormField->GetControl(0);
-
- return pFormField->GetControl(m_nFormControlIndex);
-}
-
-FX_BOOL Field::alignment(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_ByteString alignStr;
- vp >> alignStr;
-
- if (m_bDelay) {
- AddDelay_String(FP_ALIGNMENT, alignStr);
- } else {
- Field::SetAlignment(m_pDocument, m_FieldName, m_nFormControlIndex,
- alignStr);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- switch (pFormControl->GetControlAlignment()) {
- case 1:
- vp << L"center";
- break;
- case 0:
- vp << L"left";
- break;
- case 2:
- vp << L"right";
- break;
- default:
- vp << L"";
- }
- }
-
- return TRUE;
-}
-
-void Field::SetAlignment(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string) {
- // Not supported.
-}
-
-FX_BOOL Field::borderStyle(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_ByteString strType = "";
- vp >> strType;
-
- if (m_bDelay) {
- AddDelay_String(FP_BORDERSTYLE, strType);
- } else {
- Field::SetBorderStyle(m_pDocument, m_FieldName, m_nFormControlIndex,
- strType);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (!pFormField)
- return FALSE;
-
- CPDFSDK_Widget* pWidget =
- GetWidget(m_pDocument, GetSmartFieldControl(pFormField));
- if (!pWidget)
- return FALSE;
-
- int nBorderstyle = pWidget->GetBorderStyle();
-
- switch (nBorderstyle) {
- case BBS_SOLID:
- vp << L"solid";
- break;
- case BBS_DASH:
- vp << L"dashed";
- break;
- case BBS_BEVELED:
- vp << L"beveled";
- break;
- case BBS_INSET:
- vp << L"inset";
- break;
- case BBS_UNDERLINE:
- vp << L"underline";
- break;
- default:
- vp << L"";
- break;
- }
- }
-
- return TRUE;
-}
-
-void Field::SetBorderStyle(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string) {
- ASSERT(pDocument);
-
- int nBorderStyle = 0;
-
- if (string == "solid")
- nBorderStyle = BBS_SOLID;
- else if (string == "beveled")
- nBorderStyle = BBS_BEVELED;
- else if (string == "dashed")
- nBorderStyle = BBS_DASH;
- else if (string == "inset")
- nBorderStyle = BBS_INSET;
- else if (string == "underline")
- nBorderStyle = BBS_UNDERLINE;
- else
- return;
-
- std::vector<CPDF_FormField*> FieldArray =
- GetFormFields(pDocument, swFieldName);
- for (CPDF_FormField* pFormField : FieldArray) {
- if (nControlIndex < 0) {
- FX_BOOL bSet = FALSE;
- for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) {
- if (CPDFSDK_Widget* pWidget =
- GetWidget(pDocument, pFormField->GetControl(i))) {
- if (pWidget->GetBorderStyle() != nBorderStyle) {
- pWidget->SetBorderStyle(nBorderStyle);
- bSet = TRUE;
- }
- }
- }
- if (bSet)
- UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
- } else {
- if (nControlIndex >= pFormField->CountControls())
- return;
- if (CPDF_FormControl* pFormControl =
- pFormField->GetControl(nControlIndex)) {
- if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl)) {
- if (pWidget->GetBorderStyle() != nBorderStyle) {
- pWidget->SetBorderStyle(nBorderStyle);
- UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
- }
- }
- }
- }
- }
-}
-
-FX_BOOL Field::buttonAlignX(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_BUTTONALIGNX, nVP);
- } else {
- Field::SetButtonAlignX(m_pDocument, m_FieldName, m_nFormControlIndex,
- nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
-
- FX_FLOAT fLeft, fBottom;
- IconFit.GetIconPosition(fLeft, fBottom);
-
- vp << (int32_t)fLeft;
- }
-
- return TRUE;
-}
-
-void Field::SetButtonAlignX(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::buttonAlignY(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_BUTTONALIGNY, nVP);
- } else {
- Field::SetButtonAlignY(m_pDocument, m_FieldName, m_nFormControlIndex,
- nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
-
- FX_FLOAT fLeft, fBottom;
- IconFit.GetIconPosition(fLeft, fBottom);
-
- vp << (int32_t)fBottom;
- }
-
- return TRUE;
-}
-
-void Field::SetButtonAlignY(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::buttonFitBounds(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_BUTTONFITBOUNDS, bVP);
- } else {
- Field::SetButtonFitBounds(m_pDocument, m_FieldName, m_nFormControlIndex,
- bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
- vp << IconFit.GetFittingBounds();
- }
-
- return TRUE;
-}
-
-void Field::SetButtonFitBounds(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::buttonPosition(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_BUTTONPOSITION, nVP);
- } else {
- Field::SetButtonPosition(m_pDocument, m_FieldName, m_nFormControlIndex,
- nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- vp << pFormControl->GetTextPosition();
- }
- return TRUE;
-}
-
-void Field::SetButtonPosition(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::buttonScaleHow(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_BUTTONSCALEHOW, nVP);
- } else {
- Field::SetButtonScaleHow(m_pDocument, m_FieldName, m_nFormControlIndex,
- nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
- if (IconFit.IsProportionalScale())
- vp << (int32_t)0;
- else
- vp << (int32_t)1;
- }
-
- return TRUE;
-}
-
-void Field::SetButtonScaleHow(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::buttonScaleWhen(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_BUTTONSCALEWHEN, nVP);
- } else {
- Field::SetButtonScaleWhen(m_pDocument, m_FieldName, m_nFormControlIndex,
- nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
- int ScaleM = IconFit.GetScaleMethod();
- switch (ScaleM) {
- case CPDF_IconFit::Always:
- vp << (int32_t)CPDF_IconFit::Always;
- break;
- case CPDF_IconFit::Bigger:
- vp << (int32_t)CPDF_IconFit::Bigger;
- break;
- case CPDF_IconFit::Never:
- vp << (int32_t)CPDF_IconFit::Never;
- break;
- case CPDF_IconFit::Smaller:
- vp << (int32_t)CPDF_IconFit::Smaller;
- break;
- }
- }
-
- return TRUE;
-}
-
-void Field::SetButtonScaleWhen(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::calcOrderIndex(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_CALCORDERINDEX, nVP);
- } else {
- Field::SetCalcOrderIndex(m_pDocument, m_FieldName, m_nFormControlIndex,
- nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
- pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) {
- return FALSE;
- }
-
- CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
- vp << (int32_t)pInterForm->FindFieldInCalculationOrder(pFormField);
- }
-
- return TRUE;
-}
-
-void Field::SetCalcOrderIndex(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::charLimit(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_CHARLIMIT, nVP);
- } else {
- Field::SetCharLimit(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- vp << (int32_t)pFormField->GetMaxLen();
- }
- return TRUE;
-}
-
-void Field::SetCharLimit(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::comb(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_COMB, bVP);
- } else {
- Field::SetComb(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_COMB)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetComb(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::commitOnSelChange(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_COMMITONSELCHANGE, bVP);
- } else {
- Field::SetCommitOnSelChange(m_pDocument, m_FieldName, m_nFormControlIndex,
- bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
- pFormField->GetFieldType() != FIELDTYPE_LISTBOX) {
- return FALSE;
- }
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_COMMITONSELCHANGE)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetCommitOnSelChange(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::currentValueIndices(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_DWordArray array;
-
- if (vp.GetType() == CJS_Value::VT_number) {
- int iSelecting = 0;
- vp >> iSelecting;
- array.Add(iSelecting);
- } else if (vp.IsArrayObject()) {
- CJS_Array SelArray(pRuntime);
- CJS_Value SelValue(pRuntime);
- int iSelecting;
- vp >> SelArray;
- for (int i = 0, sz = SelArray.GetLength(); i < sz; i++) {
- SelArray.GetElement(i, SelValue);
- iSelecting = SelValue.ToInt();
- array.Add(iSelecting);
- }
- }
-
- if (m_bDelay) {
- AddDelay_WordArray(FP_CURRENTVALUEINDICES, array);
- } else {
- Field::SetCurrentValueIndices(m_pDocument, m_FieldName,
- m_nFormControlIndex, array);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
- pFormField->GetFieldType() != FIELDTYPE_LISTBOX) {
- return FALSE;
- }
-
- if (pFormField->CountSelectedItems() == 1) {
- vp << pFormField->GetSelectedIndex(0);
- } else if (pFormField->CountSelectedItems() > 1) {
- CJS_Array SelArray(pRuntime);
- for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
- SelArray.SetElement(
- i, CJS_Value(pRuntime, pFormField->GetSelectedIndex(i)));
- }
- vp << SelArray;
- } else {
- vp << -1;
- }
- }
-
- return TRUE;
-}
-
-void Field::SetCurrentValueIndices(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_DWordArray& array) {
- ASSERT(pDocument);
-
- std::vector<CPDF_FormField*> FieldArray =
- GetFormFields(pDocument, swFieldName);
- for (CPDF_FormField* pFormField : FieldArray) {
- int nFieldType = pFormField->GetFieldType();
- if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX) {
- FX_DWORD dwFieldFlags = pFormField->GetFieldFlags();
- pFormField->ClearSelection(TRUE);
-
- for (int i = 0, sz = array.GetSize(); i < sz; i++) {
- if (i > 0 && !(dwFieldFlags & (1 << 21))) {
- break;
- }
-
- int iSelecting = (int32_t)array.GetAt(i);
- if (iSelecting < pFormField->CountOptions() &&
- !pFormField->IsItemSelected(iSelecting))
- pFormField->SetItemSelection(iSelecting, TRUE);
- }
- UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
- }
- }
-}
-
-FX_BOOL Field::defaultStyle(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-void Field::SetDefaultStyle(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex) {
- // Not supported.
-}
-
-FX_BOOL Field::defaultValue(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_WideString WideStr;
- vp >> WideStr;
-
- if (m_bDelay) {
- AddDelay_WideString(FP_DEFAULTVALUE, WideStr);
- } else {
- Field::SetDefaultValue(m_pDocument, m_FieldName, m_nFormControlIndex,
- WideStr);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON ||
- pFormField->GetFieldType() == FIELDTYPE_SIGNATURE) {
- return FALSE;
- }
-
- vp << pFormField->GetDefaultValue();
- }
- return TRUE;
-}
-
-void Field::SetDefaultValue(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_WideString& string) {
- // Not supported.
-}
-
-FX_BOOL Field::doNotScroll(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_DONOTSCROLL, bVP);
- } else {
- Field::SetDoNotScroll(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSCROLL)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetDoNotScroll(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::doNotSpellCheck(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD &&
- pFormField->GetFieldType() != FIELDTYPE_COMBOBOX) {
- return FALSE;
- }
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSPELLCHECK)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetDelay(FX_BOOL bDelay) {
- m_bDelay = bDelay;
-
- if (!m_bDelay) {
- if (m_pJSDoc)
- m_pJSDoc->DoFieldDelay(m_FieldName, m_nFormControlIndex);
- }
-}
-
-FX_BOOL Field::delay(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- SetDelay(bVP);
- } else {
- vp << m_bDelay;
- }
- return TRUE;
-}
-
-FX_BOOL Field::display(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_DISPLAY, nVP);
- } else {
- Field::SetDisplay(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- ASSERT(pFormField);
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CPDFSDK_Widget* pWidget =
- pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget)
- return FALSE;
-
- FX_DWORD dwFlag = pWidget->GetFlags();
-
- if (ANNOTFLAG_INVISIBLE & dwFlag || ANNOTFLAG_HIDDEN & dwFlag) {
- vp << (int32_t)1;
- } else {
- if (ANNOTFLAG_PRINT & dwFlag) {
- if (ANNOTFLAG_NOVIEW & dwFlag) {
- vp << (int32_t)3;
- } else {
- vp << (int32_t)0;
- }
- } else {
- vp << (int32_t)2;
- }
- }
- }
-
- return TRUE;
-}
-
-void Field::SetDisplay(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- std::vector<CPDF_FormField*> FieldArray =
- GetFormFields(pDocument, swFieldName);
- for (CPDF_FormField* pFormField : FieldArray) {
- if (nControlIndex < 0) {
- FX_BOOL bSet = FALSE;
- for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) {
- CPDF_FormControl* pFormControl = pFormField->GetControl(i);
- ASSERT(pFormControl);
-
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- FX_DWORD dwFlag = pWidget->GetFlags();
- switch (number) {
- case 0:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= ANNOTFLAG_PRINT;
- break;
- case 1:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- break;
- case 2:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_PRINT);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- break;
- case 3:
- dwFlag |= ANNOTFLAG_NOVIEW;
- dwFlag |= ANNOTFLAG_PRINT;
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- break;
- }
-
- if (dwFlag != pWidget->GetFlags()) {
- pWidget->SetFlags(dwFlag);
- bSet = TRUE;
- }
- }
- }
-
- if (bSet)
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- } else {
- if (nControlIndex >= pFormField->CountControls())
- return;
- if (CPDF_FormControl* pFormControl =
- pFormField->GetControl(nControlIndex)) {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- FX_DWORD dwFlag = pWidget->GetFlags();
- switch (number) {
- case 0:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= ANNOTFLAG_PRINT;
- break;
- case 1:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- break;
- case 2:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_PRINT);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- break;
- case 3:
- dwFlag |= ANNOTFLAG_NOVIEW;
- dwFlag |= ANNOTFLAG_PRINT;
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- break;
- }
- if (dwFlag != pWidget->GetFlags()) {
- pWidget->SetFlags(dwFlag);
- UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
- }
- }
- }
- }
- }
-}
-
-FX_BOOL Field::doc(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
- if (!vp.IsGetting()) {
- return FALSE;
- }
- vp << m_pJSDoc->GetCJSDoc();
- return TRUE;
-}
-
-FX_BOOL Field::editable(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_EDIT)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::exportValues(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX &&
- pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON) {
- return FALSE;
- }
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- if (!vp.IsArrayObject())
- return FALSE;
- } else {
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array ExportValusArray(pRuntime);
- if (m_nFormControlIndex < 0) {
- for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
- CPDF_FormControl* pFormControl = pFormField->GetControl(i);
- ExportValusArray.SetElement(
- i, CJS_Value(pRuntime, pFormControl->GetExportValue().c_str()));
- }
- } else {
- if (m_nFormControlIndex >= pFormField->CountControls())
- return FALSE;
-
- CPDF_FormControl* pFormControl =
- pFormField->GetControl(m_nFormControlIndex);
- if (!pFormControl)
- return FALSE;
-
- ExportValusArray.SetElement(
- 0, CJS_Value(pRuntime, pFormControl->GetExportValue().c_str()));
- }
- vp << ExportValusArray;
- }
- return TRUE;
-}
-
-FX_BOOL Field::fileSelect(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
- } else {
- if (pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT)
- vp << true;
- else
- vp << false;
- }
- return TRUE;
-}
-
-FX_BOOL Field::fillColor(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array crArray(pRuntime);
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- if (!vp.IsArrayObject())
- return FALSE;
-
- vp >> crArray;
-
- CPWL_Color color;
- color::ConvertArrayToPWLColor(crArray, color);
- if (m_bDelay) {
- AddDelay_Color(FP_FILLCOLOR, color);
- } else {
- Field::SetFillColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
- }
- } else {
- CPDF_FormField* pFormField = FieldArray[0];
- ASSERT(pFormField);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- int iColorType;
- pFormControl->GetBackgroundColor(iColorType);
-
- CPWL_Color color;
- if (iColorType == COLORTYPE_TRANSPARENT) {
- color = CPWL_Color(COLORTYPE_TRANSPARENT);
- } else if (iColorType == COLORTYPE_GRAY) {
- color = CPWL_Color(COLORTYPE_GRAY,
- pFormControl->GetOriginalBackgroundColor(0));
- } else if (iColorType == COLORTYPE_RGB) {
- color =
- CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBackgroundColor(0),
- pFormControl->GetOriginalBackgroundColor(1),
- pFormControl->GetOriginalBackgroundColor(2));
- } else if (iColorType == COLORTYPE_CMYK) {
- color = CPWL_Color(COLORTYPE_CMYK,
- pFormControl->GetOriginalBackgroundColor(0),
- pFormControl->GetOriginalBackgroundColor(1),
- pFormControl->GetOriginalBackgroundColor(2),
- pFormControl->GetOriginalBackgroundColor(3));
- } else {
- return FALSE;
- }
-
- color::ConvertPWLColorToArray(color, crArray);
- vp << crArray;
- }
-
- return TRUE;
-}
-
-void Field::SetFillColor(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CPWL_Color& color) {
- // Not supported.
-}
-
-FX_BOOL Field::hidden(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_HIDDEN, bVP);
- } else {
- Field::SetHidden(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- ASSERT(pFormField);
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CPDFSDK_Widget* pWidget =
- pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget)
- return FALSE;
-
- FX_DWORD dwFlags = pWidget->GetFlags();
-
- if (ANNOTFLAG_INVISIBLE & dwFlags || ANNOTFLAG_HIDDEN & dwFlags)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetHidden(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- std::vector<CPDF_FormField*> FieldArray =
- GetFormFields(pDocument, swFieldName);
- for (CPDF_FormField* pFormField : FieldArray) {
- if (nControlIndex < 0) {
- FX_BOOL bSet = FALSE;
- for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) {
- if (CPDFSDK_Widget* pWidget =
- pInterForm->GetWidget(pFormField->GetControl(i))) {
- FX_DWORD dwFlags = pWidget->GetFlags();
-
- if (b) {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- } else {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_HIDDEN);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= ANNOTFLAG_PRINT;
- }
-
- if (dwFlags != pWidget->GetFlags()) {
- pWidget->SetFlags(dwFlags);
- bSet = TRUE;
- }
- }
- }
-
- if (bSet)
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- } else {
- if (nControlIndex >= pFormField->CountControls())
- return;
- if (CPDF_FormControl* pFormControl =
- pFormField->GetControl(nControlIndex)) {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- FX_DWORD dwFlags = pWidget->GetFlags();
-
- if (b) {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- } else {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_HIDDEN);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= ANNOTFLAG_PRINT;
- }
-
- if (dwFlags != pWidget->GetFlags()) {
- pWidget->SetFlags(dwFlags);
- UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
- }
- }
- }
- }
- }
-}
-
-FX_BOOL Field::highlight(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_ByteString strMode;
- vp >> strMode;
-
- if (m_bDelay) {
- AddDelay_String(FP_HIGHLIGHT, strMode);
- } else {
- Field::SetHighlight(m_pDocument, m_FieldName, m_nFormControlIndex,
- strMode);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- int eHM = pFormControl->GetHighlightingMode();
- switch (eHM) {
- case CPDF_FormControl::None:
- vp << L"none";
- break;
- case CPDF_FormControl::Push:
- vp << L"push";
- break;
- case CPDF_FormControl::Invert:
- vp << L"invert";
- break;
- case CPDF_FormControl::Outline:
- vp << L"outline";
- break;
- case CPDF_FormControl::Toggle:
- vp << L"toggle";
- break;
- }
- }
-
- return TRUE;
-}
-
-void Field::SetHighlight(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string) {
- // Not supported.
-}
-
-FX_BOOL Field::lineWidth(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int iWidth;
- vp >> iWidth;
-
- if (m_bDelay) {
- AddDelay_Int(FP_LINEWIDTH, iWidth);
- } else {
- Field::SetLineWidth(m_pDocument, m_FieldName, m_nFormControlIndex,
- iWidth);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- ASSERT(pFormField);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- if (!pFormField->CountControls())
- return FALSE;
-
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
- if (!pWidget)
- return FALSE;
-
- vp << (int32_t)pWidget->GetBorderWidth();
- }
-
- return TRUE;
-}
-
-void Field::SetLineWidth(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
-
- std::vector<CPDF_FormField*> FieldArray =
- GetFormFields(pDocument, swFieldName);
- for (CPDF_FormField* pFormField : FieldArray) {
- if (nControlIndex < 0) {
- FX_BOOL bSet = FALSE;
- for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) {
- CPDF_FormControl* pFormControl = pFormField->GetControl(i);
- ASSERT(pFormControl);
-
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- if (number != pWidget->GetBorderWidth()) {
- pWidget->SetBorderWidth(number);
- bSet = TRUE;
- }
- }
- }
- if (bSet)
- UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
- } else {
- if (nControlIndex >= pFormField->CountControls())
- return;
- if (CPDF_FormControl* pFormControl =
- pFormField->GetControl(nControlIndex)) {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- if (number != pWidget->GetBorderWidth()) {
- pWidget->SetBorderWidth(number);
- UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
- }
- }
- }
- }
- }
-}
-
-FX_BOOL Field::multiline(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_MULTILINE, bVP);
- } else {
- Field::SetMultiline(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_MULTILINE)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetMultiline(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::multipleSelection(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_MULTIPLESELECTION, bVP);
- } else {
- Field::SetMultipleSelection(m_pDocument, m_FieldName, m_nFormControlIndex,
- bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_MULTISELECT)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetMultipleSelection(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::name(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- vp << m_FieldName;
-
- return TRUE;
-}
-
-FX_BOOL Field::numItems(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
- pFormField->GetFieldType() != FIELDTYPE_LISTBOX) {
- return FALSE;
- }
-
- vp << (int32_t)pFormField->CountOptions();
- return TRUE;
-}
-
-FX_BOOL Field::page(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (!pFormField)
- return FALSE;
-
- std::vector<CPDFSDK_Widget*> widgets;
- m_pDocument->GetInterForm()->GetWidgets(pFormField, &widgets);
-
- if (widgets.empty()) {
- vp << (int32_t)-1;
- return TRUE;
- }
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array PageArray(pRuntime);
- for (size_t i = 0; i < widgets.size(); ++i) {
- CPDFSDK_PageView* pPageView = widgets[i]->GetPageView();
- if (!pPageView)
- return FALSE;
-
- PageArray.SetElement(
- i, CJS_Value(pRuntime, (int32_t)pPageView->GetPageIndex()));
- }
-
- vp << PageArray;
- return TRUE;
-}
-
-FX_BOOL Field::password(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_PASSWORD, bVP);
- } else {
- Field::SetPassword(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_PASSWORD)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetPassword(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::print(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- for (CPDF_FormField* pFormField : FieldArray) {
- if (m_nFormControlIndex < 0) {
- FX_BOOL bSet = FALSE;
- for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) {
- if (CPDFSDK_Widget* pWidget =
- pInterForm->GetWidget(pFormField->GetControl(i))) {
- FX_DWORD dwFlags = pWidget->GetFlags();
- if (bVP)
- dwFlags |= ANNOTFLAG_PRINT;
- else
- dwFlags &= ~ANNOTFLAG_PRINT;
-
- if (dwFlags != pWidget->GetFlags()) {
- pWidget->SetFlags(dwFlags);
- bSet = TRUE;
- }
- }
- }
-
- if (bSet)
- UpdateFormField(m_pDocument, pFormField, TRUE, FALSE, TRUE);
- } else {
- if (m_nFormControlIndex >= pFormField->CountControls())
- return FALSE;
- if (CPDF_FormControl* pFormControl =
- pFormField->GetControl(m_nFormControlIndex)) {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- FX_DWORD dwFlags = pWidget->GetFlags();
- if (bVP)
- dwFlags |= ANNOTFLAG_PRINT;
- else
- dwFlags &= ~ANNOTFLAG_PRINT;
-
- if (dwFlags != pWidget->GetFlags()) {
- pWidget->SetFlags(dwFlags);
- UpdateFormControl(m_pDocument,
- pFormField->GetControl(m_nFormControlIndex),
- TRUE, FALSE, TRUE);
- }
- }
- }
- }
- }
- } else {
- CPDF_FormField* pFormField = FieldArray[0];
- CPDFSDK_Widget* pWidget =
- pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget)
- return FALSE;
-
- if (pWidget->GetFlags() & ANNOTFLAG_PRINT)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::radiosInUnison(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- } else {
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::readonly(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- } else {
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldFlags() & FIELDFLAG_READONLY)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::rect(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Value Upper_Leftx(pRuntime);
- CJS_Value Upper_Lefty(pRuntime);
- CJS_Value Lower_Rightx(pRuntime);
- CJS_Value Lower_Righty(pRuntime);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
- if (!vp.IsArrayObject())
- return FALSE;
-
- CJS_Array rcArray(pRuntime);
- vp >> rcArray;
- rcArray.GetElement(0, Upper_Leftx);
- rcArray.GetElement(1, Upper_Lefty);
- rcArray.GetElement(2, Lower_Rightx);
- rcArray.GetElement(3, Lower_Righty);
-
- FX_FLOAT pArray[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt();
- pArray[1] = (FX_FLOAT)Lower_Righty.ToInt();
- pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt();
- pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt();
-
- CFX_FloatRect crRect(pArray);
- if (m_bDelay) {
- AddDelay_Rect(FP_RECT, crRect);
- } else {
- Field::SetRect(m_pDocument, m_FieldName, m_nFormControlIndex, crRect);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CPDFSDK_Widget* pWidget =
- pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget)
- return FALSE;
-
- CFX_FloatRect crRect = pWidget->GetRect();
- Upper_Leftx = (int32_t)crRect.left;
- Upper_Lefty = (int32_t)crRect.top;
- Lower_Rightx = (int32_t)crRect.right;
- Lower_Righty = (int32_t)crRect.bottom;
-
- CJS_Array rcArray(pRuntime);
- rcArray.SetElement(0, Upper_Leftx);
- rcArray.SetElement(1, Upper_Lefty);
- rcArray.SetElement(2, Lower_Rightx);
- rcArray.SetElement(3, Lower_Righty);
- vp << rcArray;
- }
- return TRUE;
-}
-
-void Field::SetRect(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_FloatRect& rect) {
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
-
- std::vector<CPDF_FormField*> FieldArray =
- GetFormFields(pDocument, swFieldName);
- for (CPDF_FormField* pFormField : FieldArray) {
- if (nControlIndex < 0) {
- FX_BOOL bSet = FALSE;
- for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) {
- CPDF_FormControl* pFormControl = pFormField->GetControl(i);
- ASSERT(pFormControl);
-
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- CFX_FloatRect crRect = rect;
-
- CPDF_Page* pPDFPage = pWidget->GetPDFPage();
- crRect.Intersect(pPDFPage->GetPageBBox());
-
- if (!crRect.IsEmpty()) {
- CFX_FloatRect rcOld = pWidget->GetRect();
- if (crRect.left != rcOld.left || crRect.right != rcOld.right ||
- crRect.top != rcOld.top || crRect.bottom != rcOld.bottom) {
- pWidget->SetRect(crRect);
- bSet = TRUE;
- }
- }
- }
- }
-
- if (bSet)
- UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
- } else {
- if (nControlIndex >= pFormField->CountControls())
- return;
- if (CPDF_FormControl* pFormControl =
- pFormField->GetControl(nControlIndex)) {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
- CFX_FloatRect crRect = rect;
-
- CPDF_Page* pPDFPage = pWidget->GetPDFPage();
- crRect.Intersect(pPDFPage->GetPageBBox());
-
- if (!crRect.IsEmpty()) {
- CFX_FloatRect rcOld = pWidget->GetRect();
- if (crRect.left != rcOld.left || crRect.right != rcOld.right ||
- crRect.top != rcOld.top || crRect.bottom != rcOld.bottom) {
- pWidget->SetRect(crRect);
- UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
- }
- }
- }
- }
- }
- }
-}
-
-FX_BOOL Field::required(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- } else {
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_REQUIRED)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::richText(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay) {
- AddDelay_Bool(FP_RICHTEXT, bVP);
- } else {
- Field::SetRichText(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
-
- if (pFormField->GetFieldFlags() & FIELDFLAG_RICHTEXT)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
-
-void Field::SetRichText(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b) {
- // Not supported.
-}
-
-FX_BOOL Field::richValue(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-void Field::SetRichValue(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex) {
- // Not supported.
-}
-
-FX_BOOL Field::rotation(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_ROTATION, nVP);
- } else {
- Field::SetRotation(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- vp << (int32_t)pFormControl->GetRotation();
- }
-
- return TRUE;
-}
-
-void Field::SetRotation(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::strokeColor(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array crArray(pRuntime);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- if (!vp.IsArrayObject())
- return FALSE;
-
- vp >> crArray;
-
- CPWL_Color color;
- color::ConvertArrayToPWLColor(crArray, color);
-
- if (m_bDelay) {
- AddDelay_Color(FP_STROKECOLOR, color);
- } else {
- Field::SetStrokeColor(m_pDocument, m_FieldName, m_nFormControlIndex,
- color);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- int iColorType;
- pFormControl->GetBorderColor(iColorType);
-
- CPWL_Color color;
- if (iColorType == COLORTYPE_TRANSPARENT) {
- color = CPWL_Color(COLORTYPE_TRANSPARENT);
- } else if (iColorType == COLORTYPE_GRAY) {
- color =
- CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBorderColor(0));
- } else if (iColorType == COLORTYPE_RGB) {
- color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBorderColor(0),
- pFormControl->GetOriginalBorderColor(1),
- pFormControl->GetOriginalBorderColor(2));
- } else if (iColorType == COLORTYPE_CMYK) {
- color =
- CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBorderColor(0),
- pFormControl->GetOriginalBorderColor(1),
- pFormControl->GetOriginalBorderColor(2),
- pFormControl->GetOriginalBorderColor(3));
- } else {
- return FALSE;
- }
-
- color::ConvertPWLColorToArray(color, crArray);
- vp << crArray;
- }
- return TRUE;
-}
-
-void Field::SetStrokeColor(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CPWL_Color& color) {
- // Not supported.
-}
-
-FX_BOOL Field::style(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_ByteString csBCaption;
- vp >> csBCaption;
-
- if (m_bDelay) {
- AddDelay_String(FP_STYLE, csBCaption);
- } else {
- Field::SetStyle(m_pDocument, m_FieldName, m_nFormControlIndex,
- csBCaption);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON &&
- pFormField->GetFieldType() != FIELDTYPE_CHECKBOX) {
- return FALSE;
- }
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CFX_WideString csWCaption = pFormControl->GetNormalCaption();
- CFX_ByteString csBCaption;
-
- switch (csWCaption[0]) {
- case L'l':
- csBCaption = "circle";
- break;
- case L'8':
- csBCaption = "cross";
- break;
- case L'u':
- csBCaption = "diamond";
- break;
- case L'n':
- csBCaption = "square";
- break;
- case L'H':
- csBCaption = "star";
- break;
- default: // L'4'
- csBCaption = "check";
- break;
- }
- vp << csBCaption;
- }
-
- return TRUE;
-}
-
-void Field::SetStyle(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string) {
- // Not supported.
-}
-
-FX_BOOL Field::submitName(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Field::textColor(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array crArray(pRuntime);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- if (!vp.IsArrayObject())
- return FALSE;
-
- vp >> crArray;
-
- CPWL_Color color;
- color::ConvertArrayToPWLColor(crArray, color);
-
- if (m_bDelay) {
- AddDelay_Color(FP_TEXTCOLOR, color);
- } else {
- Field::SetTextColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- int iColorType;
- FX_ARGB color;
- CPDF_DefaultAppearance FieldAppearance =
- pFormControl->GetDefaultAppearance();
- FieldAppearance.GetColor(color, iColorType);
- int32_t a, r, g, b;
- ArgbDecode(color, a, r, g, b);
-
- CPWL_Color crRet =
- CPWL_Color(COLORTYPE_RGB, r / 255.0f, g / 255.0f, b / 255.0f);
-
- if (iColorType == COLORTYPE_TRANSPARENT)
- crRet = CPWL_Color(COLORTYPE_TRANSPARENT);
-
- color::ConvertPWLColorToArray(crRet, crArray);
- vp << crArray;
- }
- return TRUE;
-}
-
-void Field::SetTextColor(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CPWL_Color& color) {
- // Not supported.
-}
-
-FX_BOOL Field::textFont(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_ByteString csFontName;
- vp >> csFontName;
- if (csFontName.IsEmpty())
- return FALSE;
-
- if (m_bDelay) {
- AddDelay_String(FP_TEXTFONT, csFontName);
- } else {
- Field::SetTextFont(m_pDocument, m_FieldName, m_nFormControlIndex,
- csFontName);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- ASSERT(pFormField);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- int nFieldType = pFormField->GetFieldType();
-
- if (nFieldType == FIELDTYPE_PUSHBUTTON ||
- nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX ||
- nFieldType == FIELDTYPE_TEXTFIELD) {
- CPDF_Font* pFont = pFormControl->GetDefaultControlFont();
- if (!pFont)
- return FALSE;
-
- vp << pFont->GetBaseFont();
- } else {
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-void Field::SetTextFont(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string) {
- // Not supported.
-}
-
-FX_BOOL Field::textSize(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- int nVP;
- vp >> nVP;
-
- if (m_bDelay) {
- AddDelay_Int(FP_TEXTSIZE, nVP);
- } else {
- Field::SetTextSize(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- ASSERT(pFormField);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CPDF_DefaultAppearance FieldAppearance =
- pFormControl->GetDefaultAppearance();
-
- CFX_ByteString csFontNameTag;
- FX_FLOAT fFontSize;
- FieldAppearance.GetFont(csFontNameTag, fFontSize);
-
- vp << (int)fFontSize;
- }
-
- return TRUE;
-}
-
-void Field::SetTextSize(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number) {
- // Not supported.
-}
-
-FX_BOOL Field::type(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- switch (pFormField->GetFieldType()) {
- case FIELDTYPE_UNKNOWN:
- vp << L"unknown";
- break;
- case FIELDTYPE_PUSHBUTTON:
- vp << L"button";
- break;
- case FIELDTYPE_CHECKBOX:
- vp << L"checkbox";
- break;
- case FIELDTYPE_RADIOBUTTON:
- vp << L"radiobutton";
- break;
- case FIELDTYPE_COMBOBOX:
- vp << L"combobox";
- break;
- case FIELDTYPE_LISTBOX:
- vp << L"listbox";
- break;
- case FIELDTYPE_TEXTFIELD:
- vp << L"text";
- break;
- case FIELDTYPE_SIGNATURE:
- vp << L"signature";
- break;
- default:
- vp << L"unknown";
- break;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::userName(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CFX_WideString swName;
- vp >> swName;
-
- if (m_bDelay) {
- AddDelay_WideString(FP_USERNAME, swName);
- } else {
- Field::SetUserName(m_pDocument, m_FieldName, m_nFormControlIndex, swName);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- vp << (CFX_WideString)pFormField->GetAlternateName();
- }
-
- return TRUE;
-}
-
-void Field::SetUserName(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_WideString& string) {
- // Not supported.
-}
-
-FX_BOOL Field::value(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
-
- if (vp.IsSetting()) {
- if (!m_bCanSet)
- return FALSE;
-
- CJS_WideStringArray strArray;
-
- if (vp.IsArrayObject()) {
- CJS_Array ValueArray(pRuntime);
- vp.ConvertToArray(ValueArray);
- for (int i = 0, sz = ValueArray.GetLength(); i < sz; i++) {
- CJS_Value ElementValue(pRuntime);
- ValueArray.GetElement(i, ElementValue);
- strArray.Add(ElementValue.ToCFXWideString());
- }
- } else {
- CFX_WideString swValue;
- vp >> swValue;
- strArray.Add(swValue);
- }
-
- if (m_bDelay) {
- AddDelay_WideStringArray(FP_VALUE, strArray);
- } else {
- Field::SetValue(m_pDocument, m_FieldName, m_nFormControlIndex, strArray);
- }
- } else {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- switch (pFormField->GetFieldType()) {
- case FIELDTYPE_PUSHBUTTON:
- return FALSE;
- case FIELDTYPE_COMBOBOX:
- case FIELDTYPE_TEXTFIELD: {
- vp << pFormField->GetValue();
- } break;
- case FIELDTYPE_LISTBOX: {
- if (pFormField->CountSelectedItems() > 1) {
- CJS_Array ValueArray(pRuntime);
- CJS_Value ElementValue(pRuntime);
- int iIndex;
- for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
- iIndex = pFormField->GetSelectedIndex(i);
- ElementValue = pFormField->GetOptionValue(iIndex).c_str();
- if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0)
- ElementValue = pFormField->GetOptionLabel(iIndex).c_str();
- ValueArray.SetElement(i, ElementValue);
- }
- vp << ValueArray;
- } else {
- vp << pFormField->GetValue();
- }
- } break;
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON: {
- bool bFind = false;
- for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
- if (pFormField->GetControl(i)->IsChecked()) {
- vp << pFormField->GetControl(i)->GetExportValue();
- bFind = true;
- break;
- }
- }
- if (!bFind)
- vp << L"Off";
- } break;
- default:
- vp << pFormField->GetValue();
- break;
- }
- }
- vp.MaybeCoerceToNumber();
- return TRUE;
-}
-
-void Field::SetValue(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CJS_WideStringArray& strArray) {
- ASSERT(pDocument);
-
- if (strArray.GetSize() < 1)
- return;
-
- std::vector<CPDF_FormField*> FieldArray =
- GetFormFields(pDocument, swFieldName);
-
- for (CPDF_FormField* pFormField : FieldArray) {
- if (pFormField->GetFullName().Compare(swFieldName) != 0)
- continue;
-
- switch (pFormField->GetFieldType()) {
- case FIELDTYPE_TEXTFIELD:
- case FIELDTYPE_COMBOBOX:
- if (pFormField->GetValue() != strArray.GetAt(0)) {
- CFX_WideString WideString = strArray.GetAt(0);
- pFormField->SetValue(strArray.GetAt(0), TRUE);
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- break;
- case FIELDTYPE_CHECKBOX: // mantis: 0004493
- case FIELDTYPE_RADIOBUTTON: {
- if (pFormField->GetValue() != strArray.GetAt(0)) {
- pFormField->SetValue(strArray.GetAt(0), TRUE);
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- } break;
- case FIELDTYPE_LISTBOX: {
- FX_BOOL bModified = FALSE;
-
- for (int i = 0, sz = strArray.GetSize(); i < sz; i++) {
- int iIndex = pFormField->FindOption(strArray.GetAt(i));
-
- if (!pFormField->IsItemSelected(iIndex)) {
- bModified = TRUE;
- break;
- }
- }
-
- if (bModified) {
- pFormField->ClearSelection(TRUE);
- for (int i = 0, sz = strArray.GetSize(); i < sz; i++) {
- int iIndex = pFormField->FindOption(strArray.GetAt(i));
- pFormField->SetItemSelection(iIndex, TRUE, TRUE);
- }
-
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- } break;
- default:
- break;
- }
- }
-}
-
-FX_BOOL Field::valueAsString(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- if (pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) {
- if (!pFormField->CountControls())
- return FALSE;
-
- if (pFormField->GetControl(0)->IsChecked())
- vp << L"Yes";
- else
- vp << L"Off";
- } else if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON &&
- !(pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)) {
- for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
- if (pFormField->GetControl(i)->IsChecked()) {
- vp << pFormField->GetControl(i)->GetExportValue().c_str();
- break;
- } else {
- vp << L"Off";
- }
- }
- } else if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX &&
- (pFormField->CountSelectedItems() > 1)) {
- vp << L"";
- } else {
- vp << pFormField->GetValue().c_str();
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::browseForFileToSubmit(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- CPDFDoc_Environment* pApp = m_pDocument->GetEnv();
- if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) &&
- (pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD)) {
- CFX_WideString wsFileName = pApp->JS_fieldBrowse();
- if (!wsFileName.IsEmpty()) {
- pFormField->SetValue(wsFileName);
- UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
- }
- return TRUE;
- }
- return FALSE;
-}
-
-FX_BOOL Field::buttonGetCaption(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int nface = 0;
- int iSize = params.size();
- if (iSize >= 1)
- nface = params[0].ToInt();
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- if (nface == 0)
- vRet = pFormControl->GetNormalCaption().c_str();
- else if (nface == 1)
- vRet = pFormControl->GetDownCaption().c_str();
- else if (nface == 2)
- vRet = pFormControl->GetRolloverCaption().c_str();
- else
- return FALSE;
-
- return TRUE;
-}
-
-FX_BOOL Field::buttonGetIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int nface = 0;
- int iSize = params.size();
- if (iSize >= 1)
- nface = params[0].ToInt();
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Icon::g_nObjDefnID);
- ASSERT(pObj.IsEmpty() == FALSE);
-
- CJS_Icon* pJS_Icon = (CJS_Icon*)FXJS_GetPrivate(pRuntime->GetIsolate(), pObj);
- Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
-
- CPDF_Stream* pIconStream = NULL;
- if (nface == 0)
- pIconStream = pFormControl->GetNormalIcon();
- else if (nface == 1)
- pIconStream = pFormControl->GetDownIcon();
- else if (nface == 2)
- pIconStream = pFormControl->GetRolloverIcon();
- else
- return FALSE;
-
- pIcon->SetStream(pIconStream);
- vRet = pJS_Icon;
-
- return TRUE;
-}
-
-FX_BOOL Field::buttonImportIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Field::buttonSetCaption(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::buttonSetIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::checkThisBox(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- ASSERT(m_pDocument);
-
- if (!m_bCanSet)
- return FALSE;
-
- int iSize = params.size();
- if (iSize < 1)
- return FALSE;
-
- int nWidget = params[0].ToInt();
-
- bool bCheckit = true;
- if (iSize >= 2)
- bCheckit = params[1].ToBool();
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX &&
- pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
- return FALSE;
- if (nWidget < 0 || nWidget >= pFormField->CountControls())
- return FALSE;
- // TODO(weili): Check whether anything special needed for radio button,
- // otherwise merge these branches.
- if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)
- pFormField->CheckControl(nWidget, bCheckit, true);
- else
- pFormField->CheckControl(nWidget, bCheckit, true);
-
- UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
- return TRUE;
-}
-
-FX_BOOL Field::clearItems(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Field::defaultIsChecked(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (!m_bCanSet)
- return FALSE;
-
- int iSize = params.size();
- if (iSize < 1)
- return FALSE;
-
- int nWidget = params[0].ToInt();
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (nWidget < 0 || nWidget >= pFormField->CountControls()) {
- vRet = FALSE;
- return FALSE;
- }
- vRet = pFormField->GetFieldType() == FIELDTYPE_CHECKBOX ||
- pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON;
-
- return TRUE;
-}
-
-FX_BOOL Field::deleteItemAt(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Field::getArray(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- std::vector<std::unique_ptr<CFX_WideString>> swSort;
- for (CPDF_FormField* pFormField : FieldArray) {
- swSort.push_back(std::unique_ptr<CFX_WideString>(
- new CFX_WideString(pFormField->GetFullName())));
- }
-
- std::sort(
- swSort.begin(), swSort.end(),
- [](const std::unique_ptr<CFX_WideString>& p1,
- const std::unique_ptr<CFX_WideString>& p2) { return *p1 < *p2; });
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CJS_Array FormFieldArray(pRuntime);
-
- int j = 0;
- for (const auto& pStr : swSort) {
- v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Field::g_nObjDefnID);
- ASSERT(!pObj.IsEmpty());
-
- CJS_Field* pJSField =
- static_cast<CJS_Field*>(FXJS_GetPrivate(pRuntime->GetIsolate(), pObj));
- Field* pField = static_cast<Field*>(pJSField->GetEmbedObject());
- pField->AttachField(m_pJSDoc, *pStr);
-
- CJS_Value FormFieldValue(pRuntime);
- FormFieldValue = pJSField;
- FormFieldArray.SetElement(j++, FormFieldValue);
- }
-
- vRet = FormFieldArray;
- return TRUE;
-}
-
-FX_BOOL Field::getItemAt(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int iSize = params.size();
-
- int nIdx = -1;
- if (iSize >= 1)
- nIdx = params[0].ToInt();
-
- FX_BOOL bExport = TRUE;
- if (iSize >= 2)
- bExport = params[1].ToBool();
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if ((pFormField->GetFieldType() == FIELDTYPE_LISTBOX) ||
- (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX)) {
- if (nIdx == -1 || nIdx > pFormField->CountOptions())
- nIdx = pFormField->CountOptions() - 1;
- if (bExport) {
- CFX_WideString strval = pFormField->GetOptionValue(nIdx);
- if (strval.IsEmpty())
- vRet = pFormField->GetOptionLabel(nIdx).c_str();
- else
- vRet = strval.c_str();
- } else {
- vRet = pFormField->GetOptionLabel(nIdx).c_str();
- }
- } else {
- return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::getLock(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::insertItemAt(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Field::isBoxChecked(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int nIndex = -1;
- if (params.size() >= 1)
- nIndex = params[0].ToInt();
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (nIndex < 0 || nIndex >= pFormField->CountControls()) {
- vRet = FALSE;
- return FALSE;
- }
-
- if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) ||
- (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) {
- if (pFormField->GetControl(nIndex)->IsChecked() != 0)
- vRet = TRUE;
- else
- vRet = FALSE;
- } else {
- vRet = FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::isDefaultChecked(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int nIndex = -1;
- if (params.size() >= 1)
- nIndex = params[0].ToInt();
-
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- if (nIndex < 0 || nIndex >= pFormField->CountControls()) {
- vRet = FALSE;
- return FALSE;
- }
- if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) ||
- (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) {
- if (pFormField->GetControl(nIndex)->IsDefaultChecked() != 0)
- vRet = TRUE;
- else
- vRet = FALSE;
- } else {
- vRet = FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::setAction(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Field::setFocus(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
- if (FieldArray.empty())
- return FALSE;
-
- CPDF_FormField* pFormField = FieldArray[0];
- int32_t nCount = pFormField->CountControls();
- if (nCount < 1)
- return FALSE;
-
- CPDFSDK_InterForm* pInterForm =
- (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CPDFSDK_Widget* pWidget = NULL;
- if (nCount == 1) {
- pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
- } else {
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- UnderlyingPageType* pPage = UnderlyingFromFPDFPage(
- pEnv->FFI_GetCurrentPage(m_pDocument->GetUnderlyingDocument()));
- if (!pPage)
- return FALSE;
- if (CPDFSDK_PageView* pCurPageView = m_pDocument->GetPageView(pPage)) {
- for (int32_t i = 0; i < nCount; i++) {
- if (CPDFSDK_Widget* pTempWidget =
- pInterForm->GetWidget(pFormField->GetControl(i))) {
- if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage()) {
- pWidget = pTempWidget;
- break;
- }
- }
- }
- }
- }
-
- if (pWidget) {
- m_pDocument->SetFocusAnnot(pWidget);
- }
-
- return TRUE;
-}
-
-FX_BOOL Field::setItems(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL Field::setLock(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::signatureGetModifications(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::signatureGetSeedValue(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::signatureInfo(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::signatureSetSeedValue(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::signatureSign(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::signatureValidate(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL Field::source(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- vp << (CJS_Object*)NULL;
- }
-
- return TRUE;
-}
-
-void Field::AddDelay_Int(enum FIELD_PROP prop, int32_t n) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->num = n;
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::AddDelay_Bool(enum FIELD_PROP prop, bool b) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->b = b;
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::AddDelay_String(enum FIELD_PROP prop,
- const CFX_ByteString& string) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->string = string;
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::AddDelay_WideString(enum FIELD_PROP prop,
- const CFX_WideString& string) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->widestring = string;
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::AddDelay_Rect(enum FIELD_PROP prop, const CFX_FloatRect& rect) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->rect = rect;
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->color = color;
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::AddDelay_WordArray(enum FIELD_PROP prop,
- const CFX_DWordArray& array) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
-
- for (int i = 0, sz = array.GetSize(); i < sz; i++)
- pNewData->wordarray.Add(array.GetAt(i));
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::AddDelay_WideStringArray(enum FIELD_PROP prop,
- const CJS_WideStringArray& array) {
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- for (int i = 0, sz = array.GetSize(); i < sz; i++)
- pNewData->widestringarray.Add(array.GetAt(i));
-
- m_pJSDoc->AddDelayData(pNewData);
-}
-
-void Field::DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData) {
- ASSERT(pDocument);
-
- switch (pData->eProp) {
- case FP_ALIGNMENT:
- Field::SetAlignment(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->string);
- break;
- case FP_BORDERSTYLE:
- Field::SetBorderStyle(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->string);
- break;
- case FP_BUTTONALIGNX:
- Field::SetButtonAlignX(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->num);
- break;
- case FP_BUTTONALIGNY:
- Field::SetButtonAlignY(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->num);
- break;
- case FP_BUTTONFITBOUNDS:
- Field::SetButtonFitBounds(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->b);
- break;
- case FP_BUTTONPOSITION:
- Field::SetButtonPosition(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->num);
- break;
- case FP_BUTTONSCALEHOW:
- Field::SetButtonScaleHow(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->num);
- break;
- case FP_BUTTONSCALEWHEN:
- Field::SetButtonScaleWhen(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->num);
- break;
- case FP_CALCORDERINDEX:
- Field::SetCalcOrderIndex(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->num);
- break;
- case FP_CHARLIMIT:
- Field::SetCharLimit(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->num);
- break;
- case FP_COMB:
- Field::SetComb(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->b);
- break;
- case FP_COMMITONSELCHANGE:
- Field::SetCommitOnSelChange(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->b);
- break;
- case FP_CURRENTVALUEINDICES:
- Field::SetCurrentValueIndices(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->wordarray);
- break;
- case FP_DEFAULTVALUE:
- Field::SetDefaultValue(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->widestring);
- break;
- case FP_DONOTSCROLL:
- Field::SetDoNotScroll(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->b);
- break;
- case FP_DISPLAY:
- Field::SetDisplay(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->num);
- break;
- case FP_FILLCOLOR:
- Field::SetFillColor(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->color);
- break;
- case FP_HIDDEN:
- Field::SetHidden(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->b);
- break;
- case FP_HIGHLIGHT:
- Field::SetHighlight(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->string);
- break;
- case FP_LINEWIDTH:
- Field::SetLineWidth(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->num);
- break;
- case FP_MULTILINE:
- Field::SetMultiline(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->b);
- break;
- case FP_MULTIPLESELECTION:
- Field::SetMultipleSelection(pDocument, pData->sFieldName,
- pData->nControlIndex, pData->b);
- break;
- case FP_PASSWORD:
- Field::SetPassword(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->b);
- break;
- case FP_RECT:
- Field::SetRect(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->rect);
- break;
- case FP_RICHTEXT:
- Field::SetRichText(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->b);
- break;
- case FP_RICHVALUE:
- break;
- case FP_ROTATION:
- Field::SetRotation(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->num);
- break;
- case FP_STROKECOLOR:
- Field::SetStrokeColor(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->color);
- break;
- case FP_STYLE:
- Field::SetStyle(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->string);
- break;
- case FP_TEXTCOLOR:
- Field::SetTextColor(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->color);
- break;
- case FP_TEXTFONT:
- Field::SetTextFont(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->string);
- break;
- case FP_TEXTSIZE:
- Field::SetTextSize(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->num);
- break;
- case FP_USERNAME:
- Field::SetUserName(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->widestring);
- break;
- case FP_VALUE:
- Field::SetValue(pDocument, pData->sFieldName, pData->nControlIndex,
- pData->widestringarray);
- break;
- }
-}
-
-void Field::AddField(CPDFSDK_Document* pDocument,
- int nPageIndex,
- int nFieldType,
- const CFX_WideString& sName,
- const CFX_FloatRect& rcCoords) {
- // Not supported.
-}
diff --git a/fpdfsdk/src/javascript/Field.h b/fpdfsdk/src/javascript/Field.h
deleted file mode 100644
index 49103c8284..0000000000
--- a/fpdfsdk/src/javascript/Field.h
+++ /dev/null
@@ -1,585 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_FIELD_H_
-#define FPDFSDK_SRC_JAVASCRIPT_FIELD_H_
-
-#include <string>
-#include <vector>
-
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h" // For CPWL_Color.
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class CPDFSDK_Widget;
-class Document;
-
-enum FIELD_PROP {
- FP_ALIGNMENT,
- FP_BORDERSTYLE,
- FP_BUTTONALIGNX,
- FP_BUTTONALIGNY,
- FP_BUTTONFITBOUNDS,
- FP_BUTTONPOSITION,
- FP_BUTTONSCALEHOW,
- FP_BUTTONSCALEWHEN,
- FP_CALCORDERINDEX,
- FP_CHARLIMIT,
- FP_COMB,
- FP_COMMITONSELCHANGE,
- FP_CURRENTVALUEINDICES,
- FP_DEFAULTVALUE,
- FP_DONOTSCROLL,
- FP_DISPLAY,
- FP_FILLCOLOR,
- FP_HIDDEN,
- FP_HIGHLIGHT,
- FP_LINEWIDTH,
- FP_MULTILINE,
- FP_MULTIPLESELECTION,
- FP_PASSWORD,
- FP_RECT,
- FP_RICHTEXT,
- FP_RICHVALUE,
- FP_ROTATION,
- FP_STROKECOLOR,
- FP_STYLE,
- FP_TEXTCOLOR,
- FP_TEXTFONT,
- FP_TEXTSIZE,
- FP_USERNAME,
- FP_VALUE
-};
-
-class CJS_WideStringArray {
- public:
- CJS_WideStringArray() {}
- virtual ~CJS_WideStringArray() {
- for (int i = 0, sz = m_Data.GetSize(); i < sz; i++)
- delete m_Data.GetAt(i);
- m_Data.RemoveAll();
- }
-
- void Add(const CFX_WideString& string) {
- m_Data.Add(new CFX_WideString(string));
- }
-
- int GetSize() const { return m_Data.GetSize(); }
-
- CFX_WideString GetAt(int i) const { return *m_Data.GetAt(i); }
-
- private:
- CFX_ArrayTemplate<CFX_WideString*> m_Data;
-};
-
-struct CJS_DelayData {
- CFX_WideString sFieldName;
- int nControlIndex;
- enum FIELD_PROP eProp;
- int32_t num;
- bool b;
- CFX_ByteString string;
- CFX_WideString widestring;
- CFX_FloatRect rect;
- CPWL_Color color;
- CFX_DWordArray wordarray;
- CJS_WideStringArray widestringarray;
-};
-
-class Field : public CJS_EmbedObj {
- public:
- explicit Field(CJS_Object* pJSObject);
- ~Field() override;
-
- FX_BOOL alignment(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL borderStyle(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL buttonAlignX(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL buttonAlignY(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL buttonFitBounds(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL buttonPosition(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL buttonScaleHow(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL buttonScaleWhen(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL calcOrderIndex(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL charLimit(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL comb(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL commitOnSelChange(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL currentValueIndices(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL defaultStyle(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL defaultValue(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL doNotScroll(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL doNotSpellCheck(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL delay(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL display(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL doc(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL editable(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL exportValues(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL fileSelect(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL fillColor(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL hidden(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL highlight(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL lineWidth(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL multiline(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL multipleSelection(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL name(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL numItems(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL page(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL password(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL print(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL radiosInUnison(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL readonly(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL rect(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL required(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richText(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richValue(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL rotation(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL strokeColor(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL style(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL submitName(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL textColor(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL textFont(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL textSize(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL type(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL userName(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL value(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL valueAsString(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL source(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
-
- FX_BOOL browseForFileToSubmit(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL buttonGetCaption(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL buttonGetIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL buttonImportIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL buttonSetCaption(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL buttonSetIcon(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL checkThisBox(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL clearItems(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL defaultIsChecked(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL deleteItemAt(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getArray(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getItemAt(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL getLock(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL insertItemAt(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL isBoxChecked(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL isDefaultChecked(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL setAction(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL setFocus(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL setItems(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL setLock(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL signatureGetModifications(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL signatureGetSeedValue(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL signatureInfo(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL signatureSetSeedValue(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL signatureSign(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL signatureValidate(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-
- static void SetAlignment(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string);
- static void SetBorderStyle(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string);
- static void SetButtonAlignX(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetButtonAlignY(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetButtonFitBounds(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetButtonPosition(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetButtonScaleHow(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetButtonScaleWhen(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetCalcOrderIndex(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetCharLimit(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetComb(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetCommitOnSelChange(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetCurrentValueIndices(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_DWordArray& array);
- static void SetDefaultStyle(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex);
- static void SetDefaultValue(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_WideString& string);
- static void SetDoNotScroll(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetDisplay(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetFillColor(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CPWL_Color& color);
- static void SetHidden(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetHighlight(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string);
- static void SetLineWidth(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetMultiline(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetMultipleSelection(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetPassword(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetRect(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_FloatRect& rect);
- static void SetRichText(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- bool b);
- static void SetRichValue(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex);
- static void SetRotation(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetStrokeColor(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CPWL_Color& color);
- static void SetStyle(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string);
- static void SetTextColor(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CPWL_Color& color);
- static void SetTextFont(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_ByteString& string);
- static void SetTextSize(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- int number);
- static void SetUserName(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CFX_WideString& string);
- static void SetValue(CPDFSDK_Document* pDocument,
- const CFX_WideString& swFieldName,
- int nControlIndex,
- const CJS_WideStringArray& strArray);
-
- static void AddField(CPDFSDK_Document* pDocument,
- int nPageIndex,
- int nFieldType,
- const CFX_WideString& sName,
- const CFX_FloatRect& rcCoords);
-
- static void UpdateFormField(CPDFSDK_Document* pDocument,
- CPDF_FormField* pFormField,
- FX_BOOL bChangeMark,
- FX_BOOL bResetAP,
- FX_BOOL bRefresh);
- static void UpdateFormControl(CPDFSDK_Document* pDocument,
- CPDF_FormControl* pFormControl,
- FX_BOOL bChangeMark,
- FX_BOOL bResetAP,
- FX_BOOL bRefresh);
-
- static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument,
- CPDF_FormControl* pFormControl);
- static std::vector<CPDF_FormField*> GetFormFields(
- CPDFSDK_Document* pDocument,
- const CFX_WideString& csFieldName);
-
- static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData);
-
- FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName);
- void SetDelay(FX_BOOL bDelay);
- void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; }
-
- protected:
- void ParseFieldName(const std::wstring& strFieldNameParsed,
- std::wstring& strFieldName,
- int& iControlNo);
- std::vector<CPDF_FormField*> GetFormFields(
- const CFX_WideString& csFieldName) const;
- CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField);
- FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel);
-
- void AddDelay_Int(enum FIELD_PROP prop, int32_t n);
- void AddDelay_Bool(enum FIELD_PROP prop, bool b);
- void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string);
- void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string);
- void AddDelay_Rect(enum FIELD_PROP prop, const CFX_FloatRect& rect);
- void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color);
- void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array);
- void AddDelay_WideStringArray(enum FIELD_PROP prop,
- const CJS_WideStringArray& array);
-
- void DoDelay();
-
- public:
- Document* m_pJSDoc;
- CPDFSDK_Document* m_pDocument;
- CFX_WideString m_FieldName;
- int m_nFormControlIndex;
- FX_BOOL m_bCanSet;
-
- FX_BOOL m_bDelay;
- v8::Isolate* m_isolate;
-};
-
-class CJS_Field : public CJS_Object {
- public:
- explicit CJS_Field(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Field(void) override {}
-
- void InitInstance(IJS_Runtime* pIRuntime) override;
-
- DECLARE_JS_CLASS();
- JS_STATIC_PROP(alignment, Field);
- JS_STATIC_PROP(borderStyle, Field);
- JS_STATIC_PROP(buttonAlignX, Field);
- JS_STATIC_PROP(buttonAlignY, Field);
- JS_STATIC_PROP(buttonFitBounds, Field);
- JS_STATIC_PROP(buttonPosition, Field);
- JS_STATIC_PROP(buttonScaleHow, Field);
- JS_STATIC_PROP(buttonScaleWhen, Field);
- JS_STATIC_PROP(calcOrderIndex, Field);
- JS_STATIC_PROP(charLimit, Field);
- JS_STATIC_PROP(comb, Field);
- JS_STATIC_PROP(commitOnSelChange, Field);
- JS_STATIC_PROP(currentValueIndices, Field);
- JS_STATIC_PROP(defaultStyle, Field);
- JS_STATIC_PROP(defaultValue, Field);
- JS_STATIC_PROP(doNotScroll, Field);
- JS_STATIC_PROP(doNotSpellCheck, Field);
- JS_STATIC_PROP(delay, Field);
- JS_STATIC_PROP(display, Field);
- JS_STATIC_PROP(doc, Field);
- JS_STATIC_PROP(editable, Field);
- JS_STATIC_PROP(exportValues, Field);
- JS_STATIC_PROP(fileSelect, Field);
- JS_STATIC_PROP(fillColor, Field);
- JS_STATIC_PROP(hidden, Field);
- JS_STATIC_PROP(highlight, Field);
- JS_STATIC_PROP(lineWidth, Field);
- JS_STATIC_PROP(multiline, Field);
- JS_STATIC_PROP(multipleSelection, Field);
- JS_STATIC_PROP(name, Field);
- JS_STATIC_PROP(numItems, Field);
- JS_STATIC_PROP(page, Field);
- JS_STATIC_PROP(password, Field);
- JS_STATIC_PROP(print, Field);
- JS_STATIC_PROP(radiosInUnison, Field);
- JS_STATIC_PROP(readonly, Field);
- JS_STATIC_PROP(rect, Field);
- JS_STATIC_PROP(required, Field);
- JS_STATIC_PROP(richText, Field);
- JS_STATIC_PROP(richValue, Field);
- JS_STATIC_PROP(rotation, Field);
- JS_STATIC_PROP(strokeColor, Field);
- JS_STATIC_PROP(style, Field);
- JS_STATIC_PROP(submitName, Field);
- JS_STATIC_PROP(textColor, Field);
- JS_STATIC_PROP(textFont, Field);
- JS_STATIC_PROP(textSize, Field);
- JS_STATIC_PROP(type, Field);
- JS_STATIC_PROP(userName, Field);
- JS_STATIC_PROP(value, Field);
- JS_STATIC_PROP(valueAsString, Field);
- JS_STATIC_PROP(source, Field);
-
- JS_STATIC_METHOD(browseForFileToSubmit, Field);
- JS_STATIC_METHOD(buttonGetCaption, Field);
- JS_STATIC_METHOD(buttonGetIcon, Field);
- JS_STATIC_METHOD(buttonImportIcon, Field);
- JS_STATIC_METHOD(buttonSetCaption, Field);
- JS_STATIC_METHOD(buttonSetIcon, Field);
- JS_STATIC_METHOD(checkThisBox, Field);
- JS_STATIC_METHOD(clearItems, Field);
- JS_STATIC_METHOD(defaultIsChecked, Field);
- JS_STATIC_METHOD(deleteItemAt, Field);
- JS_STATIC_METHOD(getArray, Field);
- JS_STATIC_METHOD(getItemAt, Field);
- JS_STATIC_METHOD(getLock, Field);
- JS_STATIC_METHOD(insertItemAt, Field);
- JS_STATIC_METHOD(isBoxChecked, Field);
- JS_STATIC_METHOD(isDefaultChecked, Field);
- JS_STATIC_METHOD(setAction, Field);
- JS_STATIC_METHOD(setFocus, Field);
- JS_STATIC_METHOD(setItems, Field);
- JS_STATIC_METHOD(setLock, Field);
- JS_STATIC_METHOD(signatureGetModifications, Field);
- JS_STATIC_METHOD(signatureGetSeedValue, Field);
- JS_STATIC_METHOD(signatureInfo, Field);
- JS_STATIC_METHOD(signatureSetSeedValue, Field);
- JS_STATIC_METHOD(signatureSign, Field);
- JS_STATIC_METHOD(signatureValidate, Field);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_FIELD_H_
diff --git a/fpdfsdk/src/javascript/Icon.cpp b/fpdfsdk/src/javascript/Icon.cpp
deleted file mode 100644
index 0bad2c5656..0000000000
--- a/fpdfsdk/src/javascript/Icon.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/Icon.h"
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-/* ---------------------- Icon ---------------------- */
-
-BEGIN_JS_STATIC_CONST(CJS_Icon)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Icon)
-JS_STATIC_PROP_ENTRY(name)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Icon)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Icon, Icon)
-
-Icon::Icon(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject), m_pIconStream(NULL), m_swIconName(L"") {}
-
-Icon::~Icon() {}
-
-void Icon::SetStream(CPDF_Stream* pIconStream) {
- if (pIconStream)
- m_pIconStream = pIconStream;
-}
-
-CPDF_Stream* Icon::GetStream() {
- return m_pIconStream;
-}
-
-void Icon::SetIconName(CFX_WideString name) {
- m_swIconName = name;
-}
-
-CFX_WideString Icon::GetIconName() {
- return m_swIconName;
-}
-
-FX_BOOL Icon::name(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- vp << m_swIconName;
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/Icon.h b/fpdfsdk/src/javascript/Icon.h
deleted file mode 100644
index 512002dce1..0000000000
--- a/fpdfsdk/src/javascript/Icon.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_ICON_H_
-#define FPDFSDK_SRC_JAVASCRIPT_ICON_H_
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class Icon : public CJS_EmbedObj {
- public:
- Icon(CJS_Object* pJSObject);
- ~Icon() override;
-
- FX_BOOL name(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- void SetStream(CPDF_Stream* pIconStream);
- CPDF_Stream* GetStream();
- void SetIconName(CFX_WideString name);
- CFX_WideString GetIconName();
-
- private:
- CPDF_Stream* m_pIconStream;
- CFX_WideString m_swIconName;
-};
-
-class CJS_Icon : public CJS_Object {
- public:
- CJS_Icon(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Icon() override {}
-
- DECLARE_JS_CLASS();
- JS_STATIC_PROP(name, Icon);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_ICON_H_
diff --git a/fpdfsdk/src/javascript/JS_Context.cpp b/fpdfsdk/src/javascript/JS_Context.cpp
deleted file mode 100644
index 304abfaae2..0000000000
--- a/fpdfsdk/src/javascript/JS_Context.cpp
+++ /dev/null
@@ -1,284 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/JS_Context.h"
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/resource.h"
-
-/* -------------------------- CJS_Context -------------------------- */
-
-CJS_Context::CJS_Context(CJS_Runtime* pRuntime)
- : m_pRuntime(pRuntime), m_bBusy(FALSE), m_bMsgBoxEnable(TRUE) {
- m_pEventHandler = new CJS_EventHandler(this);
-}
-
-CJS_Context::~CJS_Context() {
- delete m_pEventHandler;
-}
-
-CPDFSDK_Document* CJS_Context::GetReaderDocument() {
- return m_pRuntime->GetReaderDocument();
-}
-
-CPDFDoc_Environment* CJS_Context::GetReaderApp() {
- return m_pRuntime->GetReaderApp();
-}
-
-FX_BOOL CJS_Context::RunScript(const CFX_WideString& script,
- CFX_WideString* info) {
- v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(m_pRuntime->GetIsolate());
-#endif // PDF_ENABLE_XFA
- v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
- v8::Local<v8::Context> context = m_pRuntime->NewJSContext();
- v8::Context::Scope context_scope(context);
-
- if (m_bBusy) {
- *info = JSGetStringFromID(this, IDS_STRING_JSBUSY);
- return FALSE;
- }
- m_bBusy = TRUE;
-
- ASSERT(m_pEventHandler->IsValid());
- CJS_Runtime::FieldEvent event(m_pEventHandler->TargetName(),
- m_pEventHandler->EventType());
- if (!m_pRuntime->AddEventToSet(event)) {
- *info = JSGetStringFromID(this, IDS_STRING_JSEVENT);
- return FALSE;
- }
-
- CFX_WideString sErrorMessage;
- int nRet = 0;
- if (script.GetLength() > 0) {
- nRet = m_pRuntime->Execute(this, script.c_str(), &sErrorMessage);
- }
-
- if (nRet < 0) {
- *info += sErrorMessage;
- } else {
- *info = JSGetStringFromID(this, IDS_STRING_RUN);
- }
-
- m_pRuntime->RemoveEventFromSet(event);
- m_pEventHandler->Destroy();
- m_bBusy = FALSE;
-
- return nRet >= 0;
-}
-
-void CJS_Context::OnApp_Init() {
- m_pEventHandler->OnApp_Init();
-}
-
-void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc,
- const CFX_WideString& strTargetName) {
- m_pEventHandler->OnDoc_Open(pDoc, strTargetName);
-}
-
-void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc) {
- m_pEventHandler->OnDoc_WillPrint(pDoc);
-}
-
-void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc) {
- m_pEventHandler->OnDoc_DidPrint(pDoc);
-}
-
-void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc) {
- m_pEventHandler->OnDoc_WillSave(pDoc);
-}
-
-void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc) {
- m_pEventHandler->OnDoc_DidSave(pDoc);
-}
-
-void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc) {
- m_pEventHandler->OnDoc_WillClose(pDoc);
-}
-
-void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget) {
- m_pEventHandler->OnPage_Open(pTarget);
-}
-
-void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget) {
- m_pEventHandler->OnPage_Close(pTarget);
-}
-
-void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget) {
- m_pEventHandler->OnPage_InView(pTarget);
-}
-
-void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget) {
- m_pEventHandler->OnPage_OutView(pTarget);
-}
-
-void CJS_Context::OnField_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget);
-}
-
-void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget);
-}
-
-void CJS_Context::OnField_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget);
-}
-
-void CJS_Context::OnField_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget);
-}
-
-void CJS_Context::OnField_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) {
- m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value);
-}
-
-void CJS_Context::OnField_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) {
- m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value);
-}
-
-void CJS_Context::OnField_Calculate(CPDF_FormField* pSource,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) {
- m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc);
-}
-
-void CJS_Context::OnField_Format(CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit) {
- m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit);
-}
-
-void CJS_Context::OnField_Keystroke(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown,
- FX_BOOL bModifier,
- int& nSelEnd,
- int& nSelStart,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit,
- FX_BOOL bFieldFull,
- FX_BOOL& bRc) {
- m_pEventHandler->OnField_Keystroke(
- strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, bShift,
- pTarget, Value, bWillCommit, bFieldFull, bRc);
-}
-
-void CJS_Context::OnField_Validate(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown,
- FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) {
- m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier,
- bShift, pTarget, Value, bRc);
-}
-
-void CJS_Context::OnScreen_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_Open(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_Close(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_InView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnScreen_OutView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen);
-}
-
-void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) {
- m_pEventHandler->OnBookmark_MouseUp(pBookMark);
-}
-
-void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget) {
- m_pEventHandler->OnLink_MouseUp(pTarget);
-}
-
-void CJS_Context::OnConsole_Exec() {
- m_pEventHandler->OnConsole_Exec();
-}
-
-void CJS_Context::OnExternal_Exec() {
- m_pEventHandler->OnExternal_Exec();
-}
-
-void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget) {
- m_pEventHandler->OnBatchExec(pTarget);
-}
-
-void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget,
- const CFX_WideString& strTargetName) {
- m_pEventHandler->OnMenu_Exec(pTarget, strTargetName);
-}
diff --git a/fpdfsdk/src/javascript/JS_Context.h b/fpdfsdk/src/javascript/JS_Context.h
deleted file mode 100644
index 93ef1523a3..0000000000
--- a/fpdfsdk/src/javascript/JS_Context.h
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_JS_CONTEXT_H_
-#define FPDFSDK_SRC_JAVASCRIPT_JS_CONTEXT_H_
-
-#include "core/include/fxcrt/fx_string.h"
-#include "core/include/fxcrt/fx_system.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-
-class CJS_EventHandler;
-class CJS_Runtime;
-
-class CJS_Context : public IJS_Context {
- public:
- explicit CJS_Context(CJS_Runtime* pRuntime);
- ~CJS_Context() override;
-
- // IJS_Context
- FX_BOOL RunScript(const CFX_WideString& script,
- CFX_WideString* info) override;
- void OnApp_Init() override;
- void OnDoc_Open(CPDFSDK_Document* pDoc,
- const CFX_WideString& strTargetName) override;
- void OnDoc_WillPrint(CPDFSDK_Document* pDoc) override;
- void OnDoc_DidPrint(CPDFSDK_Document* pDoc) override;
- void OnDoc_WillSave(CPDFSDK_Document* pDoc) override;
- void OnDoc_DidSave(CPDFSDK_Document* pDoc) override;
- void OnDoc_WillClose(CPDFSDK_Document* pDoc) override;
- void OnPage_Open(CPDFSDK_Document* pTarget) override;
- void OnPage_Close(CPDFSDK_Document* pTarget) override;
- void OnPage_InView(CPDFSDK_Document* pTarget) override;
- void OnPage_OutView(CPDFSDK_Document* pTarget) override;
- void OnField_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override;
- void OnField_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override;
- void OnField_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override;
- void OnField_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override;
- void OnField_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) override;
- void OnField_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) override;
- void OnField_Calculate(CPDF_FormField* pSource,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) override;
- void OnField_Format(CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit) override;
- void OnField_Keystroke(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown,
- FX_BOOL bModifier,
- int& nSelEnd,
- int& nSelStart,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit,
- FX_BOOL bFieldFull,
- FX_BOOL& bRc) override;
- void OnField_Validate(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown,
- FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) override;
- void OnScreen_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_Open(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_Close(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_InView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnScreen_OutView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override;
- void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override;
- void OnLink_MouseUp(CPDFSDK_Document* pTarget) override;
- void OnMenu_Exec(CPDFSDK_Document* pTarget,
- const CFX_WideString& strTargetName) override;
- void OnBatchExec(CPDFSDK_Document* pTarget) override;
- void OnConsole_Exec() override;
- void OnExternal_Exec() override;
- void EnableMessageBox(FX_BOOL bEnable) override { m_bMsgBoxEnable = bEnable; }
-
- FX_BOOL IsMsgBoxEnabled() const { return m_bMsgBoxEnable; }
-
- CPDFDoc_Environment* GetReaderApp();
- CJS_Runtime* GetJSRuntime() const { return m_pRuntime; }
- CJS_EventHandler* GetEventHandler() const { return m_pEventHandler; }
- CPDFSDK_Document* GetReaderDocument();
-
- private:
- CJS_Runtime* m_pRuntime;
- CJS_EventHandler* m_pEventHandler;
- FX_BOOL m_bBusy;
- FX_BOOL m_bMsgBoxEnable;
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_JS_CONTEXT_H_
diff --git a/fpdfsdk/src/javascript/JS_Define.h b/fpdfsdk/src/javascript/JS_Define.h
deleted file mode 100644
index e16c5a097a..0000000000
--- a/fpdfsdk/src/javascript/JS_Define.h
+++ /dev/null
@@ -1,493 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_JS_DEFINE_H_
-#define FPDFSDK_SRC_JAVASCRIPT_JS_DEFINE_H_
-
-#include <vector>
-
-#include "fpdfsdk/include/jsapi/fxjs_v8.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/resource.h"
-
-struct JSConstSpec {
- const wchar_t* pName;
- double number;
- const wchar_t* string; // NOLINT
- uint8_t t; // 0:double 1:str
-};
-
-struct JSPropertySpec {
- const wchar_t* pName;
- v8::AccessorGetterCallback pPropGet;
- v8::AccessorSetterCallback pPropPut;
-};
-
-struct JSMethodSpec {
- const wchar_t* pName;
- v8::FunctionCallback pMethodCall;
-};
-
-#define JS_WIDESTRING(widestring) L## #widestring
-#define BEGIN_JS_STATIC_CONST(js_class_name) \
- JSConstSpec js_class_name::JS_Class_Consts[] = {
-#define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) \
- { const_name, pValue, L"", 0 } \
- ,
-
-#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) \
- { const_name, 0, pValue, 1 } \
- ,
-
-#define END_JS_STATIC_CONST() \
- { 0, 0, 0, 0 } \
- } \
- ; // NOLINT
-
-#define BEGIN_JS_STATIC_PROP(js_class_name) \
- JSPropertySpec js_class_name::JS_Class_Properties[] = {
-#define JS_STATIC_PROP_ENTRY(prop_name) \
- { \
- JS_WIDESTRING(prop_name), get_##prop_name##_static, \
- set_##prop_name##_static \
- } \
- ,
-
-#define END_JS_STATIC_PROP() \
- { 0, 0, 0 } \
- } \
- ; // NOLINT
-
-#define BEGIN_JS_STATIC_METHOD(js_class_name) \
- JSMethodSpec js_class_name::JS_Class_Methods[] = {
-#define JS_STATIC_METHOD_ENTRY(method_name) \
- { JS_WIDESTRING(method_name), method_name##_static } \
- ,
-
-#define END_JS_STATIC_METHOD() \
- { 0, 0 } \
- } \
- ; // NOLINT
-
-template <class C,
- FX_BOOL (C::*M)(IJS_Context*, CJS_PropValue&, CFX_WideString&)>
-void JSPropGetter(const char* prop_name_string,
- const char* class_name_string,
- v8::Local<v8::String> property,
- const v8::PropertyCallbackInfo<v8::Value>& info) {
- v8::Isolate* isolate = info.GetIsolate();
- CJS_Runtime* pRuntime =
- static_cast<CJS_Runtime*>(FXJS_GetRuntimeFromIsolate(isolate));
- if (!pRuntime)
- return;
- IJS_Context* pContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
- C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
- CFX_WideString sError;
- CJS_PropValue value(pRuntime);
- value.StartGetting();
- if (!(pObj->*M)(pContext, value, sError)) {
- FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string,
- sError));
- return;
- }
- info.GetReturnValue().Set((v8::Local<v8::Value>)value);
-}
-
-template <class C,
- FX_BOOL (C::*M)(IJS_Context*, CJS_PropValue&, CFX_WideString&)>
-void JSPropSetter(const char* prop_name_string,
- const char* class_name_string,
- v8::Local<v8::String> property,
- v8::Local<v8::Value> value,
- const v8::PropertyCallbackInfo<void>& info) {
- v8::Isolate* isolate = info.GetIsolate();
- CJS_Runtime* pRuntime =
- static_cast<CJS_Runtime*>(FXJS_GetRuntimeFromIsolate(isolate));
- if (!pRuntime)
- return;
- IJS_Context* pContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
- C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
- CFX_WideString sError;
- CJS_PropValue propValue(CJS_Value(pRuntime, value, CJS_Value::VT_unknown));
- propValue.StartSetting();
- if (!(pObj->*M)(pContext, propValue, sError)) {
- FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string,
- sError));
- }
-}
-
-#define JS_STATIC_PROP(prop_name, class_name) \
- static void get_##prop_name##_static( \
- v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Value>& info) { \
- JSPropGetter<class_name, &class_name::prop_name>(#prop_name, #class_name, \
- property, info); \
- } \
- static void set_##prop_name##_static( \
- v8::Local<v8::String> property, v8::Local<v8::Value> value, \
- const v8::PropertyCallbackInfo<void>& info) { \
- JSPropSetter<class_name, &class_name::prop_name>(#prop_name, #class_name, \
- property, value, info); \
- }
-
-template <class C,
- FX_BOOL (C::*M)(IJS_Context*,
- const std::vector<CJS_Value>&,
- CJS_Value&,
- CFX_WideString&)>
-void JSMethod(const char* method_name_string,
- const char* class_name_string,
- const v8::FunctionCallbackInfo<v8::Value>& info) {
- v8::Isolate* isolate = info.GetIsolate();
- CJS_Runtime* pRuntime =
- static_cast<CJS_Runtime*>(FXJS_GetRuntimeFromIsolate(isolate));
- if (!pRuntime)
- return;
- IJS_Context* pContext = pRuntime->GetCurrentContext();
- std::vector<CJS_Value> parameters;
- for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
- parameters.push_back(CJS_Value(pRuntime, info[i], CJS_Value::VT_unknown));
- }
- CJS_Value valueRes(pRuntime);
- CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
- C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
- CFX_WideString sError;
- if (!(pObj->*M)(pContext, parameters, valueRes, sError)) {
- FXJS_Error(isolate, JSFormatErrorString(class_name_string,
- method_name_string, sError));
- return;
- }
- info.GetReturnValue().Set(valueRes.ToV8Value());
-}
-
-#define JS_STATIC_METHOD(method_name, class_name) \
- static void method_name##_static( \
- const v8::FunctionCallbackInfo<v8::Value>& info) { \
- JSMethod<class_name, &class_name::method_name>(#method_name, #class_name, \
- info); \
- }
-
-#define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \
- static void method_name##_static( \
- const v8::FunctionCallbackInfo<v8::Value>& info) { \
- JSMethod<class_alternate, &class_alternate::method_name>( \
- #method_name, #class_name, info); \
- }
-
-// All JS classes have a name, an object defintion ID, and the ability to
-// register themselves with FXJS_V8. We never make a BASE class on its own
-// because it can't really do anything.
-#define DECLARE_JS_CLASS_BASE_PART() \
- static const wchar_t* g_pClassName; \
- static int g_nObjDefnID; \
- static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType);
-
-#define IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name) \
- const wchar_t* js_class_name::g_pClassName = JS_WIDESTRING(class_name); \
- int js_class_name::g_nObjDefnID = -1;
-
-// CONST classes provide constants, but not constructors, methods, or props.
-#define DECLARE_JS_CLASS_CONST() \
- DECLARE_JS_CLASS_BASE_PART() \
- DECLARE_JS_CLASS_CONST_PART()
-
-#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \
- IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name) \
- IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name) \
- void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \
- FXJSOBJTYPE eObjType) { \
- g_nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::g_pClassName, \
- eObjType, nullptr, nullptr); \
- DefineConsts(pIsolate); \
- }
-
-#define DECLARE_JS_CLASS_CONST_PART() \
- static JSConstSpec JS_Class_Consts[]; \
- static void DefineConsts(v8::Isolate* pIsolate);
-
-#define IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name) \
- void js_class_name::DefineConsts(v8::Isolate* pIsolate) { \
- for (size_t i = 0; i < FX_ArraySize(JS_Class_Consts) - 1; ++i) { \
- FXJS_DefineObjConst( \
- pIsolate, g_nObjDefnID, JS_Class_Consts[i].pName, \
- JS_Class_Consts[i].t == 0 \
- ? FXJS_NewNumber(pIsolate, JS_Class_Consts[i].number) \
- : FXJS_NewString(pIsolate, JS_Class_Consts[i].string)); \
- } \
- }
-
-// Convenience macros for declaring classes without an alternate.
-#define DECLARE_JS_CLASS() DECLARE_JS_CLASS_RICH()
-#define IMPLEMENT_JS_CLASS(js_class_name, class_name) \
- IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name)
-
-// Rich JS classes provide constants, methods, properties, and the ability
-// to construct native object state.
-#define DECLARE_JS_CLASS_RICH() \
- DECLARE_JS_CLASS_BASE_PART() \
- DECLARE_JS_CLASS_CONST_PART() \
- DECLARE_JS_CLASS_RICH_PART()
-
-#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \
- IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name) \
- IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name) \
- IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate, class_name) \
- void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \
- FXJSOBJTYPE eObjType) { \
- g_nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::g_pClassName, \
- eObjType, JSConstructor, JSDestructor); \
- DefineConsts(pIsolate); \
- DefineProps(pIsolate); \
- DefineMethods(pIsolate); \
- }
-
-#define DECLARE_JS_CLASS_RICH_PART() \
- static void JSConstructor(IJS_Runtime* pRuntime, v8::Local<v8::Object> obj); \
- static void JSDestructor(v8::Local<v8::Object> obj); \
- static void DefineProps(v8::Isolate* pIsoalte); \
- static void DefineMethods(v8::Isolate* pIsoalte); \
- static JSPropertySpec JS_Class_Properties[]; \
- static JSMethodSpec JS_Class_Methods[];
-
-#define IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate, \
- class_name) \
- void js_class_name::JSConstructor(IJS_Runtime* pIRuntime, \
- v8::Local<v8::Object> obj) { \
- CJS_Object* pObj = new js_class_name(obj); \
- pObj->SetEmbedObject(new class_alternate(pObj)); \
- FXJS_SetPrivate(nullptr, obj, (void*)pObj); \
- pObj->InitInstance(pIRuntime); \
- } \
- void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \
- js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(nullptr, obj); \
- pObj->ExitInstance(); \
- delete pObj; \
- } \
- void js_class_name::DefineProps(v8::Isolate* pIsolate) { \
- for (size_t i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \
- FXJS_DefineObjProperty( \
- pIsolate, g_nObjDefnID, JS_Class_Properties[i].pName, \
- JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut); \
- } \
- } \
- void js_class_name::DefineMethods(v8::Isolate* pIsolate) { \
- for (size_t i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \
- FXJS_DefineObjMethod(pIsolate, g_nObjDefnID, JS_Class_Methods[i].pName, \
- JS_Class_Methods[i].pMethodCall); \
- } \
- }
-
-// Special JS classes implement methods, props, and queries, but not consts.
-#define DECLARE_SPECIAL_JS_CLASS() \
- DECLARE_JS_CLASS_BASE_PART() \
- DECLARE_JS_CLASS_CONST_PART() \
- DECLARE_JS_CLASS_RICH_PART() \
- DECLARE_SPECIAL_JS_CLASS_PART()
-
-#define IMPLEMENT_SPECIAL_JS_CLASS(js_class_name, class_alternate, class_name) \
- IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name) \
- IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name) \
- IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate, class_name) \
- IMPLEMENT_SPECIAL_JS_CLASS_PART(js_class_name, class_alternate, class_name) \
- void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \
- FXJSOBJTYPE eObjType) { \
- g_nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::g_pClassName, \
- eObjType, JSConstructor, JSDestructor); \
- DefineConsts(pIsolate); \
- DefineProps(pIsolate); \
- DefineMethods(pIsolate); \
- DefineAllProperties(pIsolate); \
- }
-
-#define DECLARE_SPECIAL_JS_CLASS_PART() \
- static void queryprop_static( \
- v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Integer>& info); \
- static void getprop_static(v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Value>& info); \
- static void putprop_static(v8::Local<v8::String> property, \
- v8::Local<v8::Value> value, \
- const v8::PropertyCallbackInfo<v8::Value>& info); \
- static void delprop_static( \
- v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Boolean>& info); \
- static void DefineAllProperties(v8::Isolate* pIsolate);
-
-#define IMPLEMENT_SPECIAL_JS_CLASS_PART(js_class_name, class_alternate, \
- class_name) \
- void js_class_name::queryprop_static( \
- v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Integer>& info) { \
- JSSpecialPropQuery<class_alternate>(#class_name, property, info); \
- } \
- void js_class_name::getprop_static( \
- v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Value>& info) { \
- JSSpecialPropGet<class_alternate>(#class_name, property, info); \
- } \
- void js_class_name::putprop_static( \
- v8::Local<v8::String> property, v8::Local<v8::Value> value, \
- const v8::PropertyCallbackInfo<v8::Value>& info) { \
- JSSpecialPropPut<class_alternate>(#class_name, property, value, info); \
- } \
- void js_class_name::delprop_static( \
- v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Boolean>& info) { \
- JSSpecialPropDel<class_alternate>(#class_name, property, info); \
- } \
- void js_class_name::DefineAllProperties(v8::Isolate* pIsolate) { \
- FXJS_DefineObjAllProperties( \
- pIsolate, g_nObjDefnID, js_class_name::queryprop_static, \
- js_class_name::getprop_static, js_class_name::putprop_static, \
- js_class_name::delprop_static); \
- }
-
-template <class Alt>
-void JSSpecialPropQuery(const char*,
- v8::Local<v8::String> property,
- const v8::PropertyCallbackInfo<v8::Integer>& info) {
- v8::Isolate* isolate = info.GetIsolate();
- v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname =
- CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
- CJS_Object* pJSObj =
- reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
- Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
- FX_BOOL bRet = pObj->QueryProperty(propname.c_str());
- info.GetReturnValue().Set(bRet ? 4 : 0);
-}
-
-template <class Alt>
-void JSSpecialPropGet(const char* class_name,
- v8::Local<v8::String> property,
- const v8::PropertyCallbackInfo<v8::Value>& info) {
- v8::Isolate* isolate = info.GetIsolate();
- CJS_Runtime* pRuntime =
- static_cast<CJS_Runtime*>(FXJS_GetRuntimeFromIsolate(isolate));
- if (!pRuntime)
- return;
- IJS_Context* pContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj =
- reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
- Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
- v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname =
- CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
- CFX_WideString sError;
- CJS_PropValue value(pRuntime);
- value.StartGetting();
- if (!pObj->DoProperty(pContext, propname.c_str(), value, sError)) {
- FXJS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError));
- return;
- }
- info.GetReturnValue().Set((v8::Local<v8::Value>)value);
-}
-
-template <class Alt>
-void JSSpecialPropPut(const char* class_name,
- v8::Local<v8::String> property,
- v8::Local<v8::Value> value,
- const v8::PropertyCallbackInfo<v8::Value>& info) {
- v8::Isolate* isolate = info.GetIsolate();
- CJS_Runtime* pRuntime =
- static_cast<CJS_Runtime*>(FXJS_GetRuntimeFromIsolate(isolate));
- if (!pRuntime)
- return;
- IJS_Context* pContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj =
- reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
- Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
- v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname =
- CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
- CFX_WideString sError;
- CJS_PropValue PropValue(CJS_Value(pRuntime, value, CJS_Value::VT_unknown));
- PropValue.StartSetting();
- if (!pObj->DoProperty(pContext, propname.c_str(), PropValue, sError)) {
- FXJS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError));
- }
-}
-
-template <class Alt>
-void JSSpecialPropDel(const char* class_name,
- v8::Local<v8::String> property,
- const v8::PropertyCallbackInfo<v8::Boolean>& info) {
- v8::Isolate* isolate = info.GetIsolate();
- IJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
- if (!pRuntime)
- return;
- IJS_Context* pContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj =
- reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
- Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
- v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname =
- CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
- CFX_WideString sError;
- if (!pObj->DelProperty(pContext, propname.c_str(), sError)) {
- CFX_ByteString cbName;
- cbName.Format("%s.%s", class_name, "DelProperty");
- // Probably a missing call to JSFX_Error().
- }
-}
-
-template <FX_BOOL (*F)(IJS_Context*,
- const std::vector<CJS_Value>&,
- CJS_Value&,
- CFX_WideString&)>
-void JSGlobalFunc(const char* func_name_string,
- const v8::FunctionCallbackInfo<v8::Value>& info) {
- CJS_Runtime* pRuntime =
- static_cast<CJS_Runtime*>(FXJS_GetRuntimeFromIsolate(info.GetIsolate()));
- if (!pRuntime)
- return;
- IJS_Context* pContext = pRuntime->GetCurrentContext();
- std::vector<CJS_Value> parameters;
- for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
- parameters.push_back(CJS_Value(pRuntime, info[i], CJS_Value::VT_unknown));
- }
- CJS_Value valueRes(pRuntime);
- CFX_WideString sError;
- if (!(*F)(pContext, parameters, valueRes, sError)) {
- FXJS_Error(pRuntime->GetIsolate(),
- JSFormatErrorString(func_name_string, nullptr, sError));
- return;
- }
- info.GetReturnValue().Set(valueRes.ToV8Value());
-}
-
-#define JS_STATIC_GLOBAL_FUN(fun_name) \
- static void fun_name##_static( \
- const v8::FunctionCallbackInfo<v8::Value>& info) { \
- JSGlobalFunc<fun_name>(#fun_name, info); \
- }
-
-#define JS_STATIC_DECLARE_GLOBAL_FUN() \
- static JSMethodSpec global_methods[]; \
- static void DefineJSObjects(v8::Isolate* pIsolate)
-
-#define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \
- JSMethodSpec js_class_name::global_methods[] = {
-#define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) \
- JS_STATIC_METHOD_ENTRY(method_name)
-
-#define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD()
-
-#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \
- void js_class_name::DefineJSObjects(v8::Isolate* pIsolate) { \
- for (size_t i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \
- FXJS_DefineGlobalMethod(pIsolate, \
- js_class_name::global_methods[i].pName, \
- js_class_name::global_methods[i].pMethodCall); \
- } \
- }
-
-CJS_Value::Type GET_VALUE_TYPE(v8::Local<v8::Value> p);
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_JS_DEFINE_H_
diff --git a/fpdfsdk/src/javascript/JS_EventHandler.cpp b/fpdfsdk/src/javascript/JS_EventHandler.cpp
deleted file mode 100644
index e11cfa39ae..0000000000
--- a/fpdfsdk/src/javascript/JS_EventHandler.cpp
+++ /dev/null
@@ -1,659 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/Document.h"
-#include "fpdfsdk/src/javascript/Field.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-/* ---------------------------- CJS_EventHandler ---------------------------- */
-
-CJS_EventHandler::CJS_EventHandler(CJS_Context* pContext)
- : m_pJSContext(pContext),
- m_eEventType(JET_UNKNOWN),
- m_bValid(FALSE),
- m_pWideStrChange(NULL),
- m_nCommitKey(-1),
- m_bKeyDown(FALSE),
- m_bModifier(FALSE),
- m_bShift(FALSE),
- m_pISelEnd(NULL),
- m_nSelEndDu(0),
- m_pISelStart(NULL),
- m_nSelStartDu(0),
- m_bWillCommit(FALSE),
- m_pValue(NULL),
- m_bFieldFull(FALSE),
- m_pbRc(NULL),
- m_bRcDu(FALSE),
- m_pSourceDoc(NULL),
- m_pTargetBookMark(NULL),
- m_pTargetDoc(NULL),
- m_pTargetAnnot(NULL) {}
-
-CJS_EventHandler::~CJS_EventHandler() {}
-
-void CJS_EventHandler::OnApp_Init() {
- Initial(JET_APP_INIT);
-}
-
-void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc,
- const CFX_WideString& strTargetName) {
- Initial(JET_DOC_OPEN);
-
- m_pTargetDoc = pDoc;
- m_strTargetName = strTargetName;
-}
-
-void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc) {
- Initial(JET_DOC_WILLPRINT);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc) {
- Initial(JET_DOC_DIDPRINT);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc) {
- Initial(JET_DOC_WILLSAVE);
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc) {
- Initial(JET_DOC_DIDSAVE);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc) {
- Initial(JET_DOC_WILLCLOSE);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc) {
- Initial(JET_PAGE_OPEN);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc) {
- Initial(JET_PAGE_CLOSE);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc) {
- Initial(JET_PAGE_INVIEW);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc) {
- Initial(JET_PAGE_OUTVIEW);
-
- m_pTargetDoc = pDoc;
-}
-
-void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- Initial(JET_FIELD_MOUSEENTER);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
-
- m_strTargetName = pTarget->GetFullName();
-}
-
-void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- Initial(JET_FIELD_MOUSEEXIT);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_strTargetName = pTarget->GetFullName();
-}
-
-void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- Initial(JET_FIELD_MOUSEDOWN);
- m_eEventType = JET_FIELD_MOUSEDOWN;
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_strTargetName = pTarget->GetFullName();
-}
-
-void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) {
- Initial(JET_FIELD_MOUSEUP);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_strTargetName = pTarget->GetFullName();
-}
-
-void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) {
- Initial(JET_FIELD_FOCUS);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_strTargetName = pTarget->GetFullName();
- m_pValue = (CFX_WideString*)&Value;
-}
-
-void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) {
- Initial(JET_FIELD_BLUR);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_strTargetName = pTarget->GetFullName();
- m_pValue = (CFX_WideString*)&Value;
-}
-
-void CJS_EventHandler::OnField_Keystroke(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL KeyDown,
- FX_BOOL bModifier,
- int& nSelEnd,
- int& nSelStart,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit,
- FX_BOOL bFieldFull,
- FX_BOOL& bRc) {
- Initial(JET_FIELD_KEYSTROKE);
-
- m_nCommitKey = 0;
- m_pWideStrChange = &strChange;
- m_WideStrChangeEx = strChangeEx;
- m_bKeyDown = KeyDown;
- m_bModifier = bModifier;
- m_pISelEnd = &nSelEnd;
- m_pISelStart = &nSelStart;
- m_bShift = bShift;
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_bWillCommit = bWillCommit;
- m_pbRc = &bRc;
- m_bFieldFull = bFieldFull;
-}
-
-void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown,
- FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) {
- Initial(JET_FIELD_VALIDATE);
-
- m_pWideStrChange = &strChange;
- m_WideStrChangeEx = strChangeEx;
- m_bKeyDown = bKeyDown;
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_pbRc = &bRc;
-}
-
-void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) {
- Initial(JET_FIELD_CALCULATE);
-
- if (pSource)
- m_strSourceName = pSource->GetFullName();
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_pbRc = &bRc;
-}
-
-void CJS_EventHandler::OnField_Format(CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit) {
- Initial(JET_FIELD_FORMAT);
-
- m_nCommitKey = 0;
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_bWillCommit = bWillCommit;
-}
-
-void CJS_EventHandler::OnScreen_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_FOCUS);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_BLUR);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_Open(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_OPEN);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_Close(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_CLOSE);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_MOUSEDOWN);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_MOUSEUP);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_MOUSEENTER);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_MOUSEEXIT);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_InView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_INVIEW);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnScreen_OutView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) {
- Initial(JET_SCREEN_OUTVIEW);
-
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
-}
-
-void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget) {
- Initial(JET_LINK_MOUSEUP);
-
- m_pTargetDoc = pTarget;
-}
-
-void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) {
- Initial(JET_BOOKMARK_MOUSEUP);
-
- m_pTargetBookMark = pBookMark;
-}
-
-void CJS_EventHandler::OnMenu_Exec(CPDFSDK_Document* pTarget,
- const CFX_WideString& strTargetName) {
- Initial(JET_MENU_EXEC);
-
- m_pTargetDoc = pTarget;
- m_strTargetName = strTargetName;
-}
-
-void CJS_EventHandler::OnExternal_Exec() {
- Initial(JET_EXTERNAL_EXEC);
-}
-
-void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget) {
- Initial(JET_BATCH_EXEC);
-
- m_pTargetDoc = pTarget;
-}
-
-void CJS_EventHandler::OnConsole_Exec() {
- Initial(JET_CONSOLE_EXEC);
-}
-
-void CJS_EventHandler::Initial(JS_EVENT_T type) {
- m_eEventType = type;
-
- m_strTargetName = L"";
- m_strSourceName = L"";
- m_pWideStrChange = NULL;
- m_WideStrChangeDu = L"";
- m_WideStrChangeEx = L"";
- m_nCommitKey = -1;
- m_bKeyDown = FALSE;
- m_bModifier = FALSE;
- m_bShift = FALSE;
- m_pISelEnd = NULL;
- m_nSelEndDu = 0;
- m_pISelStart = NULL;
- m_nSelStartDu = 0;
- m_bWillCommit = FALSE;
- m_pValue = NULL;
- m_bFieldFull = FALSE;
- m_pbRc = NULL;
- m_bRcDu = FALSE;
-
- m_pSourceDoc = NULL;
- m_pTargetBookMark = NULL;
- m_pTargetDoc = NULL;
- m_pTargetAnnot = NULL;
-
- m_bValid = TRUE;
-}
-
-void CJS_EventHandler::Destroy() {
- m_bValid = FALSE;
-}
-
-FX_BOOL CJS_EventHandler::IsValid() {
- return m_bValid;
-}
-
-CFX_WideString& CJS_EventHandler::Change() {
- if (m_pWideStrChange) {
- return *m_pWideStrChange;
- }
- return m_WideStrChangeDu;
-}
-
-CFX_WideString CJS_EventHandler::ChangeEx() {
- return m_WideStrChangeEx;
-}
-
-int CJS_EventHandler::CommitKey() {
- return m_nCommitKey;
-}
-
-FX_BOOL CJS_EventHandler::FieldFull() {
- return m_bFieldFull;
-}
-
-FX_BOOL CJS_EventHandler::KeyDown() {
- return m_bKeyDown;
-}
-
-FX_BOOL CJS_EventHandler::Modifier() {
- return m_bModifier;
-}
-
-const FX_WCHAR* CJS_EventHandler::Name() {
- switch (m_eEventType) {
- case JET_APP_INIT:
- return L"Init";
- case JET_BATCH_EXEC:
- return L"Exec";
- case JET_BOOKMARK_MOUSEUP:
- return L"Mouse Up";
- case JET_CONSOLE_EXEC:
- return L"Exec";
- case JET_DOC_DIDPRINT:
- return L"DidPrint";
- case JET_DOC_DIDSAVE:
- return L"DidSave";
- case JET_DOC_OPEN:
- return L"Open";
- case JET_DOC_WILLCLOSE:
- return L"WillClose";
- case JET_DOC_WILLPRINT:
- return L"WillPrint";
- case JET_DOC_WILLSAVE:
- return L"WillSave";
- case JET_EXTERNAL_EXEC:
- return L"Exec";
- case JET_FIELD_FOCUS:
- case JET_SCREEN_FOCUS:
- return L"Focus";
- case JET_FIELD_BLUR:
- case JET_SCREEN_BLUR:
- return L"Blur";
- case JET_FIELD_MOUSEDOWN:
- case JET_SCREEN_MOUSEDOWN:
- return L"Mouse Down";
- case JET_FIELD_MOUSEUP:
- case JET_SCREEN_MOUSEUP:
- return L"Mouse Up";
- case JET_FIELD_MOUSEENTER:
- case JET_SCREEN_MOUSEENTER:
- return L"Mouse Enter";
- case JET_FIELD_MOUSEEXIT:
- case JET_SCREEN_MOUSEEXIT:
- return L"Mouse Exit";
- case JET_FIELD_CALCULATE:
- return L"Calculate";
- case JET_FIELD_FORMAT:
- return L"Format";
- case JET_FIELD_KEYSTROKE:
- return L"Keystroke";
- case JET_FIELD_VALIDATE:
- return L"Validate";
- case JET_LINK_MOUSEUP:
- return L"Mouse Up";
- case JET_MENU_EXEC:
- return L"Exec";
- case JET_PAGE_OPEN:
- case JET_SCREEN_OPEN:
- return L"Open";
- case JET_PAGE_CLOSE:
- case JET_SCREEN_CLOSE:
- return L"Close";
- case JET_SCREEN_INVIEW:
- case JET_PAGE_INVIEW:
- return L"InView";
- case JET_PAGE_OUTVIEW:
- case JET_SCREEN_OUTVIEW:
- return L"OutView";
- default:
- return L"";
- }
-
- return L"";
-}
-
-const FX_WCHAR* CJS_EventHandler::Type() {
- switch (m_eEventType) {
- case JET_APP_INIT:
- return L"App";
- case JET_BATCH_EXEC:
- return L"Batch";
- case JET_BOOKMARK_MOUSEUP:
- return L"BookMark";
- case JET_CONSOLE_EXEC:
- return L"Console";
- case JET_DOC_DIDPRINT:
- case JET_DOC_DIDSAVE:
- case JET_DOC_OPEN:
- case JET_DOC_WILLCLOSE:
- case JET_DOC_WILLPRINT:
- case JET_DOC_WILLSAVE:
- return L"Doc";
- case JET_EXTERNAL_EXEC:
- return L"External";
- case JET_FIELD_BLUR:
- case JET_FIELD_FOCUS:
- case JET_FIELD_MOUSEDOWN:
- case JET_FIELD_MOUSEENTER:
- case JET_FIELD_MOUSEEXIT:
- case JET_FIELD_MOUSEUP:
- case JET_FIELD_CALCULATE:
- case JET_FIELD_FORMAT:
- case JET_FIELD_KEYSTROKE:
- case JET_FIELD_VALIDATE:
- return L"Field";
- case JET_SCREEN_FOCUS:
- case JET_SCREEN_BLUR:
- case JET_SCREEN_OPEN:
- case JET_SCREEN_CLOSE:
- case JET_SCREEN_MOUSEDOWN:
- case JET_SCREEN_MOUSEUP:
- case JET_SCREEN_MOUSEENTER:
- case JET_SCREEN_MOUSEEXIT:
- case JET_SCREEN_INVIEW:
- case JET_SCREEN_OUTVIEW:
- return L"Screen";
- case JET_LINK_MOUSEUP:
- return L"Link";
- case JET_MENU_EXEC:
- return L"Menu";
- case JET_PAGE_OPEN:
- case JET_PAGE_CLOSE:
- case JET_PAGE_INVIEW:
- case JET_PAGE_OUTVIEW:
- return L"Page";
- default:
- return L"";
- }
-
- return L"";
-}
-
-FX_BOOL& CJS_EventHandler::Rc() {
- if (m_pbRc) {
- return *m_pbRc;
- }
- return m_bRcDu;
-}
-
-int& CJS_EventHandler::SelEnd() {
- if (m_pISelEnd) {
- return *m_pISelEnd;
- }
- return m_nSelEndDu;
-}
-
-int& CJS_EventHandler::SelStart() {
- if (m_pISelStart) {
- return *m_pISelStart;
- }
- return m_nSelStartDu;
-}
-
-FX_BOOL CJS_EventHandler::Shift() {
- return m_bShift;
-}
-
-Field* CJS_EventHandler::Source() {
- CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
- v8::Local<v8::Object> pDocObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Document::g_nObjDefnID);
- ASSERT(!pDocObj.IsEmpty());
-
- v8::Local<v8::Object> pFieldObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Field::g_nObjDefnID);
- ASSERT(!pFieldObj.IsEmpty());
-
- CJS_Document* pJSDocument =
- (CJS_Document*)FXJS_GetPrivate(pRuntime->GetIsolate(), pDocObj);
- Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
- pDocument->AttachDoc(m_pTargetDoc ? m_pTargetDoc
- : m_pJSContext->GetReaderDocument());
-
- CJS_Field* pJSField =
- (CJS_Field*)FXJS_GetPrivate(pRuntime->GetIsolate(), pFieldObj);
- Field* pField = (Field*)pJSField->GetEmbedObject();
- pField->AttachField(pDocument, m_strSourceName);
- return pField;
-}
-
-Field* CJS_EventHandler::Target_Field() {
- CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
- v8::Local<v8::Object> pDocObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Document::g_nObjDefnID);
- ASSERT(!pDocObj.IsEmpty());
-
- v8::Local<v8::Object> pFieldObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Field::g_nObjDefnID);
- ASSERT(!pFieldObj.IsEmpty());
-
- CJS_Document* pJSDocument =
- (CJS_Document*)FXJS_GetPrivate(pRuntime->GetIsolate(), pDocObj);
- Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
- pDocument->AttachDoc(m_pTargetDoc ? m_pTargetDoc
- : m_pJSContext->GetReaderDocument());
-
- CJS_Field* pJSField =
- (CJS_Field*)FXJS_GetPrivate(pRuntime->GetIsolate(), pFieldObj);
- Field* pField = (Field*)pJSField->GetEmbedObject();
- pField->AttachField(pDocument, m_strTargetName);
- return pField;
-}
-
-CFX_WideString& CJS_EventHandler::Value() {
- return *m_pValue;
-}
-
-FX_BOOL CJS_EventHandler::WillCommit() {
- return m_bWillCommit;
-}
-
-CFX_WideString CJS_EventHandler::TargetName() {
- return m_strTargetName;
-}
diff --git a/fpdfsdk/src/javascript/JS_EventHandler.h b/fpdfsdk/src/javascript/JS_EventHandler.h
deleted file mode 100644
index 2af19d9ad5..0000000000
--- a/fpdfsdk/src/javascript/JS_EventHandler.h
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_
-#define FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_
-
-#include "core/include/fxcrt/fx_string.h"
-#include "core/include/fxcrt/fx_system.h"
-
-class CJS_Context;
-class CPDFSDK_Annot;
-class CPDFSDK_Document;
-class CPDF_Bookmark;
-class CPDF_FormField;
-class Field;
-
-enum JS_EVENT_T {
- JET_UNKNOWN,
- JET_APP_INIT,
- JET_DOC_OPEN,
- JET_DOC_WILLPRINT,
- JET_DOC_DIDPRINT,
- JET_DOC_WILLSAVE,
- JET_DOC_DIDSAVE,
- JET_DOC_WILLCLOSE,
- JET_PAGE_OPEN,
- JET_PAGE_CLOSE,
- JET_PAGE_INVIEW,
- JET_PAGE_OUTVIEW,
- JET_FIELD_MOUSEDOWN,
- JET_FIELD_MOUSEUP,
- JET_FIELD_MOUSEENTER,
- JET_FIELD_MOUSEEXIT,
- JET_FIELD_FOCUS,
- JET_FIELD_BLUR,
- JET_FIELD_KEYSTROKE,
- JET_FIELD_VALIDATE,
- JET_FIELD_CALCULATE,
- JET_FIELD_FORMAT,
- JET_SCREEN_FOCUS,
- JET_SCREEN_BLUR,
- JET_SCREEN_OPEN,
- JET_SCREEN_CLOSE,
- JET_SCREEN_MOUSEDOWN,
- JET_SCREEN_MOUSEUP,
- JET_SCREEN_MOUSEENTER,
- JET_SCREEN_MOUSEEXIT,
- JET_SCREEN_INVIEW,
- JET_SCREEN_OUTVIEW,
- JET_BATCH_EXEC,
- JET_MENU_EXEC,
- JET_CONSOLE_EXEC,
- JET_EXTERNAL_EXEC,
- JET_BOOKMARK_MOUSEUP,
- JET_LINK_MOUSEUP
-};
-
-class CJS_EventHandler {
- public:
- CJS_EventHandler(CJS_Context* pContext);
- virtual ~CJS_EventHandler();
-
- void OnApp_Init();
-
- void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName);
- void OnDoc_WillPrint(CPDFSDK_Document* pDoc);
- void OnDoc_DidPrint(CPDFSDK_Document* pDoc);
- void OnDoc_WillSave(CPDFSDK_Document* pDoc);
- void OnDoc_DidSave(CPDFSDK_Document* pDoc);
- void OnDoc_WillClose(CPDFSDK_Document* pDoc);
-
- void OnPage_Open(CPDFSDK_Document* pDoc);
- void OnPage_Close(CPDFSDK_Document* pDoc);
- void OnPage_InView(CPDFSDK_Document* pTarget);
- void OnPage_OutView(CPDFSDK_Document* pTarget);
-
- void OnField_Calculate(CPDF_FormField* pSource,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc);
- void OnField_Format(CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit);
- void OnField_Keystroke(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL KeyDown,
- FX_BOOL bModifier,
- int& nSelEnd,
- int& nSelStart,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit,
- FX_BOOL bFieldFull,
- FX_BOOL& bRc);
- void OnField_Validate(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown,
- FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc);
-
- void OnField_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget);
- void OnField_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget);
- void OnField_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget);
- void OnField_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget);
- void OnField_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value);
- void OnField_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value);
-
- void OnScreen_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
- void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_Close(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
- void OnScreen_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
- void OnScreen_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
- void OnScreen_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
- void OnScreen_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
- void OnScreen_InView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
- void OnScreen_OutView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen);
-
- void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
- void OnLink_MouseUp(CPDFSDK_Document* pTarget);
-
- void OnMenu_Exec(CPDFSDK_Document* pTarget,
- const CFX_WideString& strTargetName);
- void OnBatchExec(CPDFSDK_Document* pTarget);
- void OnConsole_Exec();
- void OnExternal_Exec();
-
- public:
- void Initial(JS_EVENT_T type);
- void Destroy();
- FX_BOOL IsValid();
-
- CFX_WideString& Change();
- CFX_WideString ChangeEx();
- int CommitKey();
- FX_BOOL FieldFull();
- FX_BOOL KeyDown();
- FX_BOOL Modifier();
- const FX_WCHAR* Name();
- const FX_WCHAR* Type();
- FX_BOOL& Rc();
- int& SelEnd();
- int& SelStart();
- FX_BOOL Shift();
- Field* Source();
- Field* Target_Field();
- CFX_WideString& Value();
- FX_BOOL WillCommit();
- CFX_WideString TargetName();
-
- JS_EVENT_T EventType() { return m_eEventType; }
-
- public:
- CJS_Context* m_pJSContext;
- JS_EVENT_T m_eEventType;
- FX_BOOL m_bValid;
-
- CFX_WideString m_strTargetName;
- CFX_WideString m_strSourceName;
- CFX_WideString* m_pWideStrChange;
- CFX_WideString m_WideStrChangeDu;
- CFX_WideString m_WideStrChangeEx;
- int m_nCommitKey;
- FX_BOOL m_bKeyDown;
- FX_BOOL m_bModifier;
- FX_BOOL m_bShift;
- int* m_pISelEnd;
- int m_nSelEndDu;
- int* m_pISelStart;
- int m_nSelStartDu;
- FX_BOOL m_bWillCommit;
- CFX_WideString* m_pValue;
- FX_BOOL m_bFieldFull;
- FX_BOOL* m_pbRc;
- FX_BOOL m_bRcDu;
-
- CPDFSDK_Document* m_pSourceDoc;
- CPDF_Bookmark* m_pTargetBookMark;
- CPDFSDK_Document* m_pTargetDoc;
- CPDFSDK_Annot* m_pTargetAnnot;
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_
diff --git a/fpdfsdk/src/javascript/JS_GlobalData.cpp b/fpdfsdk/src/javascript/JS_GlobalData.cpp
deleted file mode 100644
index 1491d018e7..0000000000
--- a/fpdfsdk/src/javascript/JS_GlobalData.cpp
+++ /dev/null
@@ -1,490 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/JS_GlobalData.h"
-
-#include "core/include/fdrm/fx_crypt.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-
-#define JS_MAXGLOBALDATA (1024 * 4 - 8)
-
-/* --------------------- CJS_GlobalVariableArray --------------------- */
-
-CJS_GlobalVariableArray::CJS_GlobalVariableArray() {}
-
-CJS_GlobalVariableArray::~CJS_GlobalVariableArray() {
- Empty();
-}
-
-void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) {
- Empty();
- for (int i = 0, sz = array.Count(); i < sz; i++) {
- CJS_KeyValue* pOldObjData = array.GetAt(i);
- switch (pOldObjData->nType) {
- case JS_GLOBALDATA_TYPE_NUMBER: {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->dData = pOldObjData->dData;
- Add(pNewObjData);
- } break;
- case JS_GLOBALDATA_TYPE_BOOLEAN: {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->bData = pOldObjData->bData;
- Add(pNewObjData);
- } break;
- case JS_GLOBALDATA_TYPE_STRING: {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->sData = pOldObjData->sData;
- Add(pNewObjData);
- } break;
- case JS_GLOBALDATA_TYPE_OBJECT: {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->objData.Copy(pOldObjData->objData);
- Add(pNewObjData);
- } break;
- case JS_GLOBALDATA_TYPE_NULL: {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- Add(pNewObjData);
- } break;
- }
- }
-}
-
-void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) {
- array.Add(p);
-}
-
-int CJS_GlobalVariableArray::Count() const {
- return array.GetSize();
-}
-
-CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const {
- return array.GetAt(index);
-}
-
-void CJS_GlobalVariableArray::Empty() {
- for (int i = 0, sz = array.GetSize(); i < sz; i++)
- delete array.GetAt(i);
- array.RemoveAll();
-}
-
-/* -------------------------- CJS_GlobalData -------------------------- */
-
-#define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data"
-#define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data"
-#define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data"
-
-static const uint8_t JS_RC4KEY[] = {
- 0x19, 0xa8, 0xe8, 0x01, 0xf6, 0xa8, 0xb6, 0x4d, 0x82, 0x04, 0x45, 0x6d,
- 0xb4, 0xcf, 0xd7, 0x77, 0x67, 0xf9, 0x75, 0x9f, 0xf0, 0xe0, 0x1e, 0x51,
- 0xee, 0x46, 0xfd, 0x0b, 0xc9, 0x93, 0x25, 0x55, 0x4a, 0xee, 0xe0, 0x16,
- 0xd0, 0xdf, 0x8c, 0xfa, 0x2a, 0xa9, 0x49, 0xfd, 0x97, 0x1c, 0x0e, 0x22,
- 0x13, 0x28, 0x7c, 0xaf, 0xc4, 0xfc, 0x9c, 0x12, 0x65, 0x8c, 0x4e, 0x5b,
- 0x04, 0x75, 0x89, 0xc9, 0xb1, 0xed, 0x50, 0xca, 0x96, 0x6f, 0x1a, 0x7a,
- 0xfe, 0x58, 0x5d, 0xec, 0x19, 0x4a, 0xf6, 0x35, 0x6a, 0x97, 0x14, 0x00,
- 0x0e, 0xd0, 0x6b, 0xbb, 0xd5, 0x75, 0x55, 0x8b, 0x6e, 0x6b, 0x19, 0xa0,
- 0xf8, 0x77, 0xd5, 0xa3};
-
-CJS_GlobalData* CJS_GlobalData::g_Instance = nullptr;
-
-// static
-CJS_GlobalData* CJS_GlobalData::GetRetainedInstance(CPDFDoc_Environment* pApp) {
- if (!g_Instance) {
- g_Instance = new CJS_GlobalData();
- }
- ++g_Instance->m_RefCount;
- return g_Instance;
-}
-
-void CJS_GlobalData::Release() {
- if (!--m_RefCount) {
- delete g_Instance;
- g_Instance = nullptr;
- }
-}
-
-CJS_GlobalData::CJS_GlobalData() : m_RefCount(0) {
- m_sFilePath += SDK_JS_GLOBALDATA_FILENAME;
- LoadGlobalPersistentVariables();
-}
-
-CJS_GlobalData::~CJS_GlobalData() {
- SaveGlobalPersisitentVariables();
- for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++)
- delete m_arrayGlobalData.GetAt(i);
-
- m_arrayGlobalData.RemoveAll();
-}
-
-int CJS_GlobalData::FindGlobalVariable(const FX_CHAR* propname) {
- for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) {
- CJS_GlobalData_Element* pTemp = m_arrayGlobalData.GetAt(i);
- if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname)
- return i;
- }
- return -1;
-}
-
-CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(
- const FX_CHAR* propname) {
- ASSERT(propname);
-
- int nFind = FindGlobalVariable(propname);
- return nFind >= 0 ? m_arrayGlobalData.GetAt(nFind) : nullptr;
-}
-
-void CJS_GlobalData::SetGlobalVariableNumber(const FX_CHAR* propname,
- double dData) {
- ASSERT(propname);
- CFX_ByteString sPropName = propname;
- sPropName.TrimLeft();
- sPropName.TrimRight();
- if (sPropName.GetLength() == 0)
- return;
-
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
- pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
- pData->data.dData = dData;
- } else {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
- pNewData->data.dData = dData;
- m_arrayGlobalData.Add(pNewData);
- }
-}
-
-void CJS_GlobalData::SetGlobalVariableBoolean(const FX_CHAR* propname,
- bool bData) {
- ASSERT(propname);
- CFX_ByteString sPropName = propname;
-
- sPropName.TrimLeft();
- sPropName.TrimRight();
-
- if (sPropName.GetLength() == 0)
- return;
-
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
- pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pData->data.bData = bData;
- } else {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pNewData->data.bData = bData;
-
- m_arrayGlobalData.Add(pNewData);
- }
-}
-
-void CJS_GlobalData::SetGlobalVariableString(const FX_CHAR* propname,
- const CFX_ByteString& sData) {
- ASSERT(propname);
- CFX_ByteString sPropName = propname;
-
- sPropName.TrimLeft();
- sPropName.TrimRight();
-
- if (sPropName.GetLength() == 0)
- return;
-
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
- pData->data.nType = JS_GLOBALDATA_TYPE_STRING;
- pData->data.sData = sData;
- } else {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING;
- pNewData->data.sData = sData;
-
- m_arrayGlobalData.Add(pNewData);
- }
-}
-
-void CJS_GlobalData::SetGlobalVariableObject(
- const FX_CHAR* propname,
- const CJS_GlobalVariableArray& array) {
- ASSERT(propname);
- CFX_ByteString sPropName = propname;
-
- sPropName.TrimLeft();
- sPropName.TrimRight();
-
- if (sPropName.GetLength() == 0)
- return;
-
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
- pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
- pData->data.objData.Copy(array);
- } else {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
- pNewData->data.objData.Copy(array);
-
- m_arrayGlobalData.Add(pNewData);
- }
-}
-
-void CJS_GlobalData::SetGlobalVariableNull(const FX_CHAR* propname) {
- ASSERT(propname);
- CFX_ByteString sPropName = propname;
-
- sPropName.TrimLeft();
- sPropName.TrimRight();
-
- if (sPropName.GetLength() == 0)
- return;
-
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
- pData->data.nType = JS_GLOBALDATA_TYPE_NULL;
- } else {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL;
-
- m_arrayGlobalData.Add(pNewData);
- }
-}
-
-FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent(const FX_CHAR* propname,
- FX_BOOL bPersistent) {
- ASSERT(propname);
- CFX_ByteString sPropName = propname;
-
- sPropName.TrimLeft();
- sPropName.TrimRight();
-
- if (sPropName.GetLength() == 0)
- return FALSE;
-
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
- pData->bPersistent = bPersistent;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CJS_GlobalData::DeleteGlobalVariable(const FX_CHAR* propname) {
- ASSERT(propname);
- CFX_ByteString sPropName = propname;
-
- sPropName.TrimLeft();
- sPropName.TrimRight();
-
- if (sPropName.GetLength() == 0)
- return FALSE;
-
- int nFind = FindGlobalVariable(sPropName);
-
- if (nFind >= 0) {
- delete m_arrayGlobalData.GetAt(nFind);
- m_arrayGlobalData.RemoveAt(nFind);
- return TRUE;
- }
-
- return FALSE;
-}
-
-int32_t CJS_GlobalData::GetSize() const {
- return m_arrayGlobalData.GetSize();
-}
-
-CJS_GlobalData_Element* CJS_GlobalData::GetAt(int index) const {
- return m_arrayGlobalData.GetAt(index);
-}
-
-void CJS_GlobalData::LoadGlobalPersistentVariables() {
- uint8_t* pBuffer = NULL;
- int32_t nLength = 0;
-
- LoadFileBuffer(m_sFilePath.c_str(), pBuffer, nLength);
- CRYPT_ArcFourCryptBlock(pBuffer, nLength, JS_RC4KEY, sizeof(JS_RC4KEY));
-
- if (pBuffer) {
- uint8_t* p = pBuffer;
- FX_WORD wType = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
-
- // FX_WORD wTemp = (FX_WORD)(('X' << 8) | 'F');
-
- if (wType == (FX_WORD)(('X' << 8) | 'F')) {
- FX_WORD wVersion = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
-
- ASSERT(wVersion <= 2);
-
- FX_DWORD dwCount = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- FX_DWORD dwSize = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- if (dwSize == nLength - sizeof(FX_WORD) * 2 - sizeof(FX_DWORD) * 2) {
- for (int32_t i = 0, sz = dwCount; i < sz; i++) {
- if (p > pBuffer + nLength)
- break;
-
- FX_DWORD dwNameLen = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- if (p + dwNameLen > pBuffer + nLength)
- break;
-
- CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen);
- p += sizeof(char) * dwNameLen;
-
- FX_WORD wDataType = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
-
- switch (wDataType) {
- case JS_GLOBALDATA_TYPE_NUMBER: {
- double dData = 0;
- switch (wVersion) {
- case 1: {
- FX_DWORD dwData = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
- dData = dwData;
- } break;
- case 2: {
- dData = *((double*)p);
- p += sizeof(double);
- } break;
- }
- SetGlobalVariableNumber(sEntry, dData);
- SetGlobalVariablePersistent(sEntry, TRUE);
- } break;
- case JS_GLOBALDATA_TYPE_BOOLEAN: {
- FX_WORD wData = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
- SetGlobalVariableBoolean(sEntry, (bool)(wData == 1));
- SetGlobalVariablePersistent(sEntry, TRUE);
- } break;
- case JS_GLOBALDATA_TYPE_STRING: {
- FX_DWORD dwLength = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- if (p + dwLength > pBuffer + nLength)
- break;
-
- SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength));
- SetGlobalVariablePersistent(sEntry, TRUE);
- p += sizeof(char) * dwLength;
- } break;
- case JS_GLOBALDATA_TYPE_NULL: {
- SetGlobalVariableNull(sEntry);
- SetGlobalVariablePersistent(sEntry, TRUE);
- }
- }
- }
- }
- }
- FX_Free(pBuffer);
- }
-}
-
-void CJS_GlobalData::SaveGlobalPersisitentVariables() {
- FX_DWORD nCount = 0;
- CFX_BinaryBuf sData;
-
- for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) {
- CJS_GlobalData_Element* pElement = m_arrayGlobalData.GetAt(i);
- if (pElement->bPersistent) {
- CFX_BinaryBuf sElement;
- MakeByteString(pElement->data.sKey, &pElement->data, sElement);
-
- if (sData.GetSize() + sElement.GetSize() > JS_MAXGLOBALDATA)
- break;
-
- sData.AppendBlock(sElement.GetBuffer(), sElement.GetSize());
- nCount++;
- }
- }
-
- CFX_BinaryBuf sFile;
-
- FX_WORD wType = (FX_WORD)(('X' << 8) | 'F');
- sFile.AppendBlock(&wType, sizeof(FX_WORD));
- FX_WORD wVersion = 2;
- sFile.AppendBlock(&wVersion, sizeof(FX_WORD));
- sFile.AppendBlock(&nCount, sizeof(FX_DWORD));
- FX_DWORD dwSize = sData.GetSize();
- sFile.AppendBlock(&dwSize, sizeof(FX_DWORD));
-
- sFile.AppendBlock(sData.GetBuffer(), sData.GetSize());
-
- CRYPT_ArcFourCryptBlock(sFile.GetBuffer(), sFile.GetSize(), JS_RC4KEY,
- sizeof(JS_RC4KEY));
- WriteFileBuffer(m_sFilePath.c_str(), (const FX_CHAR*)sFile.GetBuffer(),
- sFile.GetSize());
-}
-
-void CJS_GlobalData::LoadFileBuffer(const FX_WCHAR* sFilePath,
- uint8_t*& pBuffer,
- int32_t& nLength) {
- // UnSupport.
-}
-
-void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath,
- const FX_CHAR* pBuffer,
- int32_t nLength) {
- // UnSupport.
-}
-
-void CJS_GlobalData::MakeByteString(const CFX_ByteString& name,
- CJS_KeyValue* pData,
- CFX_BinaryBuf& sData) {
- FX_WORD wType = (FX_WORD)pData->nType;
- switch (wType) {
- case JS_GLOBALDATA_TYPE_NUMBER: {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_WORD));
-
- double dData = pData->dData;
- sData.AppendBlock(&dData, sizeof(double));
- } break;
- case JS_GLOBALDATA_TYPE_BOOLEAN: {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_WORD));
-
- FX_WORD wData = (FX_WORD)pData->bData;
- sData.AppendBlock(&wData, sizeof(FX_WORD));
- } break;
- case JS_GLOBALDATA_TYPE_STRING: {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_WORD));
-
- FX_DWORD dwDataLen = (FX_DWORD)pData->sData.GetLength();
- sData.AppendBlock(&dwDataLen, sizeof(FX_DWORD));
- sData.AppendString(pData->sData);
- } break;
- case JS_GLOBALDATA_TYPE_NULL: {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_DWORD));
- } break;
- default:
- break;
- }
-}
diff --git a/fpdfsdk/src/javascript/JS_GlobalData.h b/fpdfsdk/src/javascript/JS_GlobalData.h
deleted file mode 100644
index 6a07fa84e4..0000000000
--- a/fpdfsdk/src/javascript/JS_GlobalData.h
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_JS_GLOBALDATA_H_
-#define FPDFSDK_SRC_JAVASCRIPT_JS_GLOBALDATA_H_
-
-#include "core/include/fxcrt/fx_basic.h"
-
-#define JS_GLOBALDATA_TYPE_NUMBER 0
-#define JS_GLOBALDATA_TYPE_BOOLEAN 1
-#define JS_GLOBALDATA_TYPE_STRING 2
-#define JS_GLOBALDATA_TYPE_OBJECT 3
-#define JS_GLOBALDATA_TYPE_NULL 4
-
-class CJS_KeyValue;
-class CPDFDoc_Environment;
-
-class CJS_GlobalVariableArray {
- public:
- CJS_GlobalVariableArray();
- virtual ~CJS_GlobalVariableArray();
-
- void Add(CJS_KeyValue* p);
- int Count() const;
- CJS_KeyValue* GetAt(int index) const;
- void Copy(const CJS_GlobalVariableArray& array);
-
- void Empty();
-
- private:
- CFX_ArrayTemplate<CJS_KeyValue*> array;
-};
-
-class CJS_KeyValue {
- public:
- CJS_KeyValue() {}
- virtual ~CJS_KeyValue() {}
-
- CFX_ByteString sKey;
- int nType; // 0:int 1:bool 2:string 3:obj
- double dData;
- bool bData;
- CFX_ByteString sData;
- CJS_GlobalVariableArray objData;
-};
-
-class CJS_GlobalData_Element {
- public:
- CJS_GlobalData_Element() {}
- virtual ~CJS_GlobalData_Element() {}
-
- CJS_KeyValue data;
- FX_BOOL bPersistent;
-};
-
-class CJS_GlobalData {
- public:
- static CJS_GlobalData* GetRetainedInstance(CPDFDoc_Environment* pApp);
- void Release();
-
- void SetGlobalVariableNumber(const FX_CHAR* propname, double dData);
- void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData);
- void SetGlobalVariableString(const FX_CHAR* propname,
- const CFX_ByteString& sData);
- void SetGlobalVariableObject(const FX_CHAR* propname,
- const CJS_GlobalVariableArray& array);
- void SetGlobalVariableNull(const FX_CHAR* propname);
-
- FX_BOOL SetGlobalVariablePersistent(const FX_CHAR* propname,
- FX_BOOL bPersistent);
- FX_BOOL DeleteGlobalVariable(const FX_CHAR* propname);
-
- int32_t GetSize() const;
- CJS_GlobalData_Element* GetAt(int index) const;
-
- private:
- static CJS_GlobalData* g_Instance;
-
- CJS_GlobalData();
- ~CJS_GlobalData();
-
- void LoadGlobalPersistentVariables();
- void SaveGlobalPersisitentVariables();
-
- CJS_GlobalData_Element* GetGlobalVariable(const FX_CHAR* propname);
- int FindGlobalVariable(const FX_CHAR* propname);
-
- void LoadFileBuffer(const FX_WCHAR* sFilePath,
- uint8_t*& pBuffer,
- int32_t& nLength);
- void WriteFileBuffer(const FX_WCHAR* sFilePath,
- const FX_CHAR* pBuffer,
- int32_t nLength);
- void MakeByteString(const CFX_ByteString& name,
- CJS_KeyValue* pData,
- CFX_BinaryBuf& sData);
-
- size_t m_RefCount;
- CFX_ArrayTemplate<CJS_GlobalData_Element*> m_arrayGlobalData;
- CFX_WideString m_sFilePath;
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_JS_GLOBALDATA_H_
diff --git a/fpdfsdk/src/javascript/JS_Object.cpp b/fpdfsdk/src/javascript/JS_Object.cpp
deleted file mode 100644
index 3f0fe8cb48..0000000000
--- a/fpdfsdk/src/javascript/JS_Object.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/JS_Object.h"
-
-#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment.
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-namespace {
-
-int FXJS_MsgBox(CPDFDoc_Environment* pApp,
- const FX_WCHAR* swMsg,
- const FX_WCHAR* swTitle,
- FX_UINT nType,
- FX_UINT nIcon) {
- if (!pApp)
- return 0;
-
- if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument())
- pDoc->KillFocusAnnot();
-
- return pApp->JS_appAlert(swMsg, swTitle, nType, nIcon);
-}
-
-} // namespace
-
-CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) : m_pJSObject(pJSObject) {}
-
-CJS_EmbedObj::~CJS_EmbedObj() {
- m_pJSObject = NULL;
-}
-
-int CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp,
- const FX_WCHAR* swMsg,
- const FX_WCHAR* swTitle,
- FX_UINT nType,
- FX_UINT nIcon) {
- return FXJS_MsgBox(pApp, swMsg, swTitle, nType, nIcon);
-}
-
-void CJS_EmbedObj::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) {
- CJS_Object::Alert(pContext, swMsg);
-}
-
-void FreeObject(const v8::WeakCallbackInfo<CJS_Object>& data) {
- CJS_Object* pJSObj = data.GetParameter();
- pJSObj->ExitInstance();
- delete pJSObj;
- FXJS_FreePrivate(data.GetInternalField(0));
-}
-
-void DisposeObject(const v8::WeakCallbackInfo<CJS_Object>& data) {
- CJS_Object* pJSObj = data.GetParameter();
- pJSObj->Dispose();
- data.SetSecondPassCallback(FreeObject);
-}
-
-CJS_Object::CJS_Object(v8::Local<v8::Object> pObject) {
- m_pIsolate = pObject->GetIsolate();
- m_pV8Object.Reset(m_pIsolate, pObject);
-}
-
-CJS_Object::~CJS_Object() {
-}
-
-void CJS_Object::MakeWeak() {
- m_pV8Object.SetWeak(this, DisposeObject,
- v8::WeakCallbackType::kInternalFields);
-}
-
-void CJS_Object::Dispose() {
- m_pV8Object.Reset();
-}
-
-int CJS_Object::MsgBox(CPDFDoc_Environment* pApp,
- const FX_WCHAR* swMsg,
- const FX_WCHAR* swTitle,
- FX_UINT nType,
- FX_UINT nIcon) {
- return FXJS_MsgBox(pApp, swMsg, swTitle, nType, nIcon);
-}
-
-void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) {
- if (pContext->IsMsgBoxEnabled()) {
- CPDFDoc_Environment* pApp = pContext->GetReaderApp();
- if (pApp)
- pApp->JS_appAlert(swMsg, NULL, 0, 3);
- }
-}
-
-CJS_Timer::CJS_Timer(CJS_EmbedObj* pObj,
- CPDFDoc_Environment* pApp,
- CJS_Runtime* pRuntime,
- int nType,
- const CFX_WideString& script,
- FX_DWORD dwElapse,
- FX_DWORD dwTimeOut)
- : m_nTimerID(0),
- m_pEmbedObj(pObj),
- m_bProcessing(false),
- m_bValid(true),
- m_nType(nType),
- m_dwTimeOut(dwTimeOut),
- m_swJScript(script),
- m_pRuntime(pRuntime),
- m_pApp(pApp) {
- IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
- m_nTimerID = pHandler->SetTimer(dwElapse, TimerProc);
- (*GetGlobalTimerMap())[m_nTimerID] = this;
- m_pRuntime->AddObserver(this);
-}
-
-CJS_Timer::~CJS_Timer() {
- CJS_Runtime* pRuntime = GetRuntime();
- if (pRuntime)
- pRuntime->RemoveObserver(this);
- KillJSTimer();
-}
-
-void CJS_Timer::KillJSTimer() {
- if (m_nTimerID) {
- if (m_bValid) {
- IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
- pHandler->KillTimer(m_nTimerID);
- }
- GetGlobalTimerMap()->erase(m_nTimerID);
- m_nTimerID = 0;
- }
-}
-
-// static
-void CJS_Timer::TimerProc(int idEvent) {
- const auto it = GetGlobalTimerMap()->find(idEvent);
- if (it != GetGlobalTimerMap()->end()) {
- CJS_Timer* pTimer = it->second;
- if (!pTimer->m_bProcessing) {
- CFX_AutoRestorer<bool> scoped_processing(&pTimer->m_bProcessing);
- pTimer->m_bProcessing = true;
- if (pTimer->m_pEmbedObj)
- pTimer->m_pEmbedObj->TimerProc(pTimer);
- }
- }
-}
-
-// static
-CJS_Timer::TimerMap* CJS_Timer::GetGlobalTimerMap() {
- // Leak the timer array at shutdown.
- static auto* s_TimerMap = new TimerMap;
- return s_TimerMap;
-}
-
-void CJS_Timer::OnDestroyed() {
- m_bValid = false;
-}
diff --git a/fpdfsdk/src/javascript/JS_Object.h b/fpdfsdk/src/javascript/JS_Object.h
deleted file mode 100644
index deae2d2a8f..0000000000
--- a/fpdfsdk/src/javascript/JS_Object.h
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_JS_OBJECT_H_
-#define FPDFSDK_SRC_JAVASCRIPT_JS_OBJECT_H_
-
-#include <map>
-#include <memory>
-
-#include "fpdfsdk/include/fsdk_define.h" // For FX_UINT
-#include "fpdfsdk/include/jsapi/fxjs_v8.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-
-class CJS_Context;
-class CJS_Object;
-class CJS_Timer;
-class CPDFDoc_Environment;
-class CJS_EmbedObj {
- public:
- explicit CJS_EmbedObj(CJS_Object* pJSObject);
- virtual ~CJS_EmbedObj();
-
- virtual void TimerProc(CJS_Timer* pTimer) {}
-
- CJS_Object* GetJSObject() const { return m_pJSObject; }
-
- int MsgBox(CPDFDoc_Environment* pApp,
- const FX_WCHAR* swMsg,
- const FX_WCHAR* swTitle,
- FX_UINT nType,
- FX_UINT nIcon);
- void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
-
- protected:
- CJS_Object* m_pJSObject;
-};
-
-class CJS_Object {
- public:
- explicit CJS_Object(v8::Local<v8::Object> pObject);
- virtual ~CJS_Object();
-
- void MakeWeak();
- void Dispose();
-
- virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; }
- virtual CFX_ByteString GetClassName() { return ""; }
-
- virtual void InitInstance(IJS_Runtime* pIRuntime) {}
- virtual void ExitInstance() {}
-
- v8::Local<v8::Object> ToV8Object() { return m_pV8Object.Get(m_pIsolate); }
-
- // Takes ownership of |pObj|.
- void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj.reset(pObj); }
- CJS_EmbedObj* GetEmbedObject() const { return m_pEmbedObj.get(); }
-
- static int MsgBox(CPDFDoc_Environment* pApp,
- const FX_WCHAR* swMsg,
- const FX_WCHAR* swTitle,
- FX_UINT nType,
- FX_UINT nIcon);
- static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
-
- v8::Isolate* GetIsolate() { return m_pIsolate; }
-
- protected:
- std::unique_ptr<CJS_EmbedObj> m_pEmbedObj;
- v8::Global<v8::Object> m_pV8Object;
- v8::Isolate* m_pIsolate;
-};
-
-class CJS_Timer : public CJS_Runtime::Observer {
- public:
- CJS_Timer(CJS_EmbedObj* pObj,
- CPDFDoc_Environment* pApp,
- CJS_Runtime* pRuntime,
- int nType,
- const CFX_WideString& script,
- FX_DWORD dwElapse,
- FX_DWORD dwTimeOut);
- ~CJS_Timer() override;
-
- void KillJSTimer();
-
- int GetType() const { return m_nType; }
- FX_DWORD GetTimeOut() const { return m_dwTimeOut; }
- CJS_Runtime* GetRuntime() const { return m_bValid ? m_pRuntime : nullptr; }
- CFX_WideString GetJScript() const { return m_swJScript; }
-
- static void TimerProc(int idEvent);
-
- private:
- using TimerMap = std::map<FX_UINT, CJS_Timer*>;
- static TimerMap* GetGlobalTimerMap();
-
- // CJS_Runtime::Observer
- void OnDestroyed() override;
-
- FX_DWORD m_nTimerID;
- CJS_EmbedObj* const m_pEmbedObj;
- bool m_bProcessing;
- bool m_bValid;
-
- // data
- const int m_nType; // 0:Interval; 1:TimeOut
- const FX_DWORD m_dwTimeOut;
- const CFX_WideString m_swJScript;
- CJS_Runtime* const m_pRuntime;
- CPDFDoc_Environment* const m_pApp;
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_JS_OBJECT_H_
diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp
deleted file mode 100644
index dd7ef0f09d..0000000000
--- a/fpdfsdk/src/javascript/JS_Runtime.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-
-#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment.
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/Consts.h"
-#include "fpdfsdk/src/javascript/Document.h"
-#include "fpdfsdk/src/javascript/Field.h"
-#include "fpdfsdk/src/javascript/Icon.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_GlobalData.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/PublicMethods.h"
-#include "fpdfsdk/src/javascript/app.h"
-#include "fpdfsdk/src/javascript/color.h"
-#include "fpdfsdk/src/javascript/console.h"
-#include "fpdfsdk/src/javascript/event.h"
-#include "fpdfsdk/src/javascript/global.h"
-#include "fpdfsdk/src/javascript/report.h"
-#include "fpdfsdk/src/javascript/util.h"
-#include "third_party/base/stl_util.h"
-
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
-#include "xfa/src/fxjse/value.h"
-#endif // PDF_ENABLE_XFA
-
-// static
-void IJS_Runtime::Initialize(unsigned int slot, void* isolate) {
- FXJS_Initialize(slot, reinterpret_cast<v8::Isolate*>(isolate));
-}
-
-// static
-IJS_Runtime* IJS_Runtime::Create(CPDFDoc_Environment* pEnv) {
- return new CJS_Runtime(pEnv);
-}
-
-// static
-CJS_Runtime* CJS_Runtime::FromContext(const IJS_Context* cc) {
- const CJS_Context* pContext = static_cast<const CJS_Context*>(cc);
- return pContext->GetJSRuntime();
-}
-
-CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp)
- : m_pApp(pApp),
- m_pDocument(NULL),
- m_bBlocking(FALSE),
- m_isolate(NULL),
- m_isolateManaged(false) {
-#ifndef PDF_ENABLE_XFA
- IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform;
- if (pPlatform->version <= 2) {
- unsigned int embedderDataSlot = 0;
- v8::Isolate* pExternalIsolate = nullptr;
- if (pPlatform->version == 2) {
- pExternalIsolate = reinterpret_cast<v8::Isolate*>(pPlatform->m_isolate);
- embedderDataSlot = pPlatform->m_v8EmbedderSlot;
-#else
- if (CPDFXFA_App::GetInstance()->GetJSERuntime()) {
- // TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate.
- m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime();
- } else {
- IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform;
- if (pPlatform->version <= 2) {
- unsigned int embedderDataSlot = 0;
- v8::Isolate* pExternalIsolate = nullptr;
- if (pPlatform->version == 2) {
- pExternalIsolate = reinterpret_cast<v8::Isolate*>(pPlatform->m_isolate);
- embedderDataSlot = pPlatform->m_v8EmbedderSlot;
- }
- FXJS_Initialize(embedderDataSlot, pExternalIsolate);
-#endif
- }
-#ifndef PDF_ENABLE_XFA
- FXJS_Initialize(embedderDataSlot, pExternalIsolate);
-#else
- m_isolateManaged = FXJS_GetIsolate(&m_isolate);
- }
-
- v8::Isolate* isolate = m_isolate;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::Locker locker(isolate);
- v8::HandleScope handle_scope(isolate);
- if (CPDFXFA_App::GetInstance()->IsJavaScriptInitialized()) {
- CJS_Context* pContext = (CJS_Context*)NewContext();
- FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects);
- ReleaseContext(pContext);
- return;
-#endif
- }
-#ifndef PDF_ENABLE_XFA
- m_isolateManaged = FXJS_GetIsolate(&m_isolate);
-#else
-
-#endif
- if (m_isolateManaged || FXJS_GlobalIsolateRefCount() == 0)
- DefineJSObjects();
-
-#ifdef PDF_ENABLE_XFA
- CPDFXFA_App::GetInstance()->SetJavaScriptInitialized(TRUE);
-
-#endif
- CJS_Context* pContext = (CJS_Context*)NewContext();
- FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects);
- ReleaseContext(pContext);
-}
-
-CJS_Runtime::~CJS_Runtime() {
- for (auto* obs : m_observers)
- obs->OnDestroyed();
-
- for (int i = 0, sz = m_ContextArray.GetSize(); i < sz; i++)
- delete m_ContextArray.GetAt(i);
-
- m_ContextArray.RemoveAll();
- m_ConstArrays.clear();
- FXJS_ReleaseRuntime(GetIsolate(), &m_context, &m_StaticObjects);
-
- m_pApp = NULL;
- m_pDocument = NULL;
- m_context.Reset();
-
- if (m_isolateManaged)
- m_isolate->Dispose();
-}
-
-void CJS_Runtime::DefineJSObjects() {
- v8::Isolate::Scope isolate_scope(GetIsolate());
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(GetIsolate());
-#endif
- v8::HandleScope handle_scope(GetIsolate());
- v8::Local<v8::Context> context = v8::Context::New(GetIsolate());
- v8::Context::Scope context_scope(context);
-
- // The call order determines the "ObjDefID" assigned to each class.
- // ObjDefIDs 0 - 2
- CJS_Border::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Display::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Font::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
-
- // ObjDefIDs 3 - 5
- CJS_Highlight::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Position::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_ScaleHow::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
-
- // ObjDefIDs 6 - 8
- CJS_ScaleWhen::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Style::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Zoomtype::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
-
- // ObjDefIDs 9 - 11
- CJS_App::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Color::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Console::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
-
- // ObjDefIDs 12 - 14
- CJS_Document::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_GLOBAL);
- CJS_Event::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Field::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC);
-
- // ObjDefIDs 15 - 17
- CJS_Global::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
- CJS_Icon::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC);
- CJS_Util::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC);
-
- // ObjDefIDs 18 - 20 (these can't fail, return void).
- CJS_PublicMethods::DefineJSObjects(GetIsolate());
- CJS_GlobalConsts::DefineJSObjects(this);
- CJS_GlobalArrays::DefineJSObjects(this);
-
- // ObjDefIDs 21 - 22.
- CJS_TimerObj::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC);
- CJS_PrintParamsObj::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC);
-}
-
-IJS_Context* CJS_Runtime::NewContext() {
- CJS_Context* p = new CJS_Context(this);
- m_ContextArray.Add(p);
- return p;
-}
-
-void CJS_Runtime::ReleaseContext(IJS_Context* pContext) {
- CJS_Context* pJSContext = (CJS_Context*)pContext;
-
- for (int i = 0, sz = m_ContextArray.GetSize(); i < sz; i++) {
- if (pJSContext == m_ContextArray.GetAt(i)) {
- delete pJSContext;
- m_ContextArray.RemoveAt(i);
- break;
- }
- }
-}
-
-IJS_Context* CJS_Runtime::GetCurrentContext() {
- if (!m_ContextArray.GetSize())
- return NULL;
- return m_ContextArray.GetAt(m_ContextArray.GetSize() - 1);
-}
-
-void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) {
- if (m_pDocument != pReaderDoc) {
- v8::Isolate::Scope isolate_scope(m_isolate);
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(m_isolate);
-#endif
- v8::HandleScope handle_scope(m_isolate);
- v8::Local<v8::Context> context =
- v8::Local<v8::Context>::New(m_isolate, m_context);
- v8::Context::Scope context_scope(context);
-
- m_pDocument = pReaderDoc;
- if (pReaderDoc) {
- v8::Local<v8::Object> pThis = FXJS_GetThisObj(GetIsolate());
- if (!pThis.IsEmpty()) {
- if (FXJS_GetObjDefnID(pThis) == CJS_Document::g_nObjDefnID) {
- if (CJS_Document* pJSDocument =
- (CJS_Document*)FXJS_GetPrivate(GetIsolate(), pThis)) {
- if (Document* pDocument = (Document*)pJSDocument->GetEmbedObject())
- pDocument->AttachDoc(pReaderDoc);
- }
- }
- }
- }
- }
-}
-
-int CJS_Runtime::Execute(IJS_Context* cc,
- const wchar_t* script,
- CFX_WideString* info) {
- FXJSErr error = {};
- int nRet = FXJS_Execute(m_isolate, cc, script, &error);
- if (nRet < 0) {
- info->Format(L"[ Line: %05d { %s } ] : %s", error.linnum - 1, error.srcline,
- error.message);
- }
- return nRet;
-}
-
-bool CJS_Runtime::AddEventToSet(const FieldEvent& event) {
- return m_FieldEventSet.insert(event).second;
-}
-
-void CJS_Runtime::RemoveEventFromSet(const FieldEvent& event) {
- m_FieldEventSet.erase(event);
-}
-
-v8::Local<v8::Context> CJS_Runtime::NewJSContext() {
- return v8::Local<v8::Context>::New(m_isolate, m_context);
-}
-
-void CJS_Runtime::SetConstArray(const CFX_WideString& name,
- v8::Local<v8::Array> array) {
- m_ConstArrays[name] = v8::Global<v8::Array>(m_isolate, array);
-}
-
-v8::Local<v8::Array> CJS_Runtime::GetConstArray(const CFX_WideString& name) {
- return v8::Local<v8::Array>::New(m_isolate, m_ConstArrays[name]);
-}
-
-#ifdef PDF_ENABLE_XFA
-CFX_WideString ChangeObjName(const CFX_WideString& str) {
- CFX_WideString sRet = str;
- sRet.Replace(L"_", L".");
- return sRet;
-}
-FX_BOOL CJS_Runtime::GetHValueByName(const CFX_ByteStringC& utf8Name,
- FXJSE_HVALUE hValue) {
-#ifdef PDF_ENABLE_XFA
- const FX_CHAR* name = utf8Name.GetCStr();
-
- v8::Locker lock(GetIsolate());
- v8::Isolate::Scope isolate_scope(GetIsolate());
- v8::HandleScope handle_scope(GetIsolate());
- v8::Local<v8::Context> old_context = GetIsolate()->GetCurrentContext();
- v8::Local<v8::Context> context =
- v8::Local<v8::Context>::New(GetIsolate(), m_context);
- v8::Context::Scope context_scope(context);
-
- // Caution: We're about to hand to XFA an object that in order to invoke
- // methods will require that the current v8::Context always has a pointer
- // to a CJS_Runtime in its embedder data slot. Unfortunately, XFA creates
- // its own v8::Context which has not initialized the embedder data slot.
- // Do so now.
- // TODO(tsepez): redesign PDF-side objects to not rely on v8::Context's
- // embedder data slots, and/or to always use the right context.
- FXJS_SetRuntimeForV8Context(old_context, this);
-
- v8::Local<v8::Value> propvalue =
- context->Global()->Get(v8::String::NewFromUtf8(
- GetIsolate(), name, v8::String::kNormalString, utf8Name.GetLength()));
-
- if (propvalue.IsEmpty()) {
- FXJSE_Value_SetUndefined(hValue);
- return FALSE;
- }
- ((CFXJSE_Value*)hValue)->ForceSetValue(propvalue);
-#endif
-
- return TRUE;
-}
-FX_BOOL CJS_Runtime::SetHValueByName(const CFX_ByteStringC& utf8Name,
- FXJSE_HVALUE hValue) {
-#ifdef PDF_ENABLE_XFA
- if (utf8Name.IsEmpty() || hValue == NULL)
- return FALSE;
- const FX_CHAR* name = utf8Name.GetCStr();
- v8::Isolate* pIsolate = GetIsolate();
- v8::Locker lock(pIsolate);
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
- v8::Local<v8::Context> context =
- v8::Local<v8::Context>::New(pIsolate, m_context);
- v8::Context::Scope context_scope(context);
-
- // v8::Local<v8::Context> tmpCotext =
- // v8::Local<v8::Context>::New(GetIsolate(), m_context);
- v8::Local<v8::Value> propvalue = v8::Local<v8::Value>::New(
- GetIsolate(), ((CFXJSE_Value*)hValue)->DirectGetValue());
- context->Global()->Set(
- v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString,
- utf8Name.GetLength()),
- propvalue);
-#endif
- return TRUE;
-}
-
-#endif
-void CJS_Runtime::AddObserver(Observer* observer) {
- ASSERT(!pdfium::ContainsKey(m_observers, observer));
- m_observers.insert(observer);
-}
-
-void CJS_Runtime::RemoveObserver(Observer* observer) {
- ASSERT(pdfium::ContainsKey(m_observers, observer));
- m_observers.erase(observer);
-}
diff --git a/fpdfsdk/src/javascript/JS_Runtime.h b/fpdfsdk/src/javascript/JS_Runtime.h
deleted file mode 100644
index c7b0009ccb..0000000000
--- a/fpdfsdk/src/javascript/JS_Runtime.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_JS_RUNTIME_H_
-#define FPDFSDK_SRC_JAVASCRIPT_JS_RUNTIME_H_
-
-#include <set>
-#include <map>
-#include <utility>
-#include <vector>
-
-#include "core/include/fxcrt/fx_basic.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/include/jsapi/fxjs_v8.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-
-class CJS_Context;
-
-class CJS_Runtime : public IJS_Runtime {
- public:
- class Observer {
- public:
- virtual void OnDestroyed() = 0;
-
- protected:
- virtual ~Observer() {}
- };
-
- using FieldEvent = std::pair<CFX_WideString, JS_EVENT_T>;
-
- static CJS_Runtime* FromContext(const IJS_Context* cc);
-
- explicit CJS_Runtime(CPDFDoc_Environment* pApp);
- ~CJS_Runtime() override;
-
- // IJS_Runtime
- IJS_Context* NewContext() override;
- void ReleaseContext(IJS_Context* pContext) override;
- IJS_Context* GetCurrentContext() override;
- void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override;
- CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; }
- int Execute(IJS_Context* cc,
- const wchar_t* script,
- CFX_WideString* info) override;
-
- CPDFDoc_Environment* GetReaderApp() const { return m_pApp; }
-
- // Returns true if the event isn't already found in the set.
- bool AddEventToSet(const FieldEvent& event);
- void RemoveEventFromSet(const FieldEvent& event);
-
- void BeginBlock() { m_bBlocking = TRUE; }
- void EndBlock() { m_bBlocking = FALSE; }
- FX_BOOL IsBlocking() const { return m_bBlocking; }
-
- v8::Isolate* GetIsolate() const { return m_isolate; }
- v8::Local<v8::Context> NewJSContext();
-
- void SetConstArray(const CFX_WideString& name, v8::Local<v8::Array> array);
- v8::Local<v8::Array> GetConstArray(const CFX_WideString& name);
-
-#ifdef PDF_ENABLE_XFA
- FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name,
- FXJSE_HVALUE hValue) override;
- FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name,
- FXJSE_HVALUE hValue) override;
-#endif // PDF_ENABLE_XFA
-
- void AddObserver(Observer* observer);
- void RemoveObserver(Observer* observer);
-
- private:
- void DefineJSObjects();
-
- CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
- CPDFDoc_Environment* m_pApp;
- CPDFSDK_Document* m_pDocument;
- FX_BOOL m_bBlocking;
- std::set<FieldEvent> m_FieldEventSet;
- v8::Isolate* m_isolate;
- bool m_isolateManaged;
- v8::Global<v8::Context> m_context;
- std::vector<v8::Global<v8::Object>*> m_StaticObjects;
- std::map<CFX_WideString, v8::Global<v8::Array>> m_ConstArrays;
- std::set<Observer*> m_observers;
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_JS_RUNTIME_H_
diff --git a/fpdfsdk/src/javascript/JS_Runtime_Stub.cpp b/fpdfsdk/src/javascript/JS_Runtime_Stub.cpp
deleted file mode 100644
index ab20e0e365..0000000000
--- a/fpdfsdk/src/javascript/JS_Runtime_Stub.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include <memory>
-
-#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment.
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-
-class CJS_ContextStub final : public IJS_Context {
- public:
- CJS_ContextStub() {}
- ~CJS_ContextStub() override {}
-
- // IJS_Context:
- FX_BOOL RunScript(const CFX_WideString& script,
- CFX_WideString* info) override {
- return FALSE;
- }
-
- void OnApp_Init() override {}
- void OnDoc_Open(CPDFSDK_Document* pDoc,
- const CFX_WideString& strTargetName) override {}
- void OnDoc_WillPrint(CPDFSDK_Document* pDoc) override {}
- void OnDoc_DidPrint(CPDFSDK_Document* pDoc) override {}
- void OnDoc_WillSave(CPDFSDK_Document* pDoc) override {}
- void OnDoc_DidSave(CPDFSDK_Document* pDoc) override {}
- void OnDoc_WillClose(CPDFSDK_Document* pDoc) override {}
- void OnPage_Open(CPDFSDK_Document* pTarget) override {}
- void OnPage_Close(CPDFSDK_Document* pTarget) override {}
- void OnPage_InView(CPDFSDK_Document* pTarget) override {}
- void OnPage_OutView(CPDFSDK_Document* pTarget) override {}
- void OnField_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override {}
- void OnField_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override {}
- void OnField_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override {}
- void OnField_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget) override {}
- void OnField_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) override {}
- void OnField_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- const CFX_WideString& Value) override {}
- void OnField_Calculate(CPDF_FormField* pSource,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) override {}
- void OnField_Format(CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit) override {}
- void OnField_Keystroke(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL KeyDown,
- FX_BOOL bModifier,
- int& nSelEnd,
- int& nSelStart,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL bWillCommit,
- FX_BOOL bFieldFull,
- FX_BOOL& bRc) override {}
- void OnField_Validate(CFX_WideString& strChange,
- const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown,
- FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDF_FormField* pTarget,
- CFX_WideString& Value,
- FX_BOOL& bRc) override {}
- void OnScreen_Focus(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_Blur(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_Open(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_Close(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_MouseDown(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_MouseUp(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_MouseEnter(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_MouseExit(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_InView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnScreen_OutView(FX_BOOL bModifier,
- FX_BOOL bShift,
- CPDFSDK_Annot* pScreen) override {}
- void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override {}
- void OnLink_MouseUp(CPDFSDK_Document* pTarget) override {}
- void OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString&) override {}
- void OnBatchExec(CPDFSDK_Document* pTarget) override {}
- void OnConsole_Exec() override {}
- void OnExternal_Exec() override {}
- void EnableMessageBox(FX_BOOL bEnable) override {}
-};
-
-class CJS_RuntimeStub final : public IJS_Runtime {
- public:
- CJS_RuntimeStub() : m_pDoc(nullptr) {}
- ~CJS_RuntimeStub() override {}
-
- IJS_Context* NewContext() override {
- if (!m_pContext)
- m_pContext.reset(new CJS_ContextStub());
- return GetCurrentContext();
- }
-
- IJS_Context* GetCurrentContext() override { return m_pContext.get(); }
- void ReleaseContext(IJS_Context* pContext) override {}
-
- void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override {
- m_pDoc = pReaderDoc;
- }
- CPDFSDK_Document* GetReaderDocument() override { return m_pDoc; }
-
-#ifdef PDF_ENABLE_XFA
- FX_BOOL GetHValueByName(const CFX_ByteStringC&, FXJSE_HVALUE) override {
- return FALSE;
- }
-
- FX_BOOL SetHValueByName(const CFX_ByteStringC&, FXJSE_HVALUE) override {
- return FALSE;
- }
-#endif // PDF_ENABLE_XFA
-
- int Execute(IJS_Context* cc,
- const wchar_t* script,
- CFX_WideString* info) override {
- return 0;
- }
-
- protected:
- CPDFSDK_Document* m_pDoc;
- std::unique_ptr<CJS_ContextStub> m_pContext;
-};
-
-// static
-void IJS_Runtime::Initialize(unsigned int slot, void* isolate) {
-}
-
-// static
-IJS_Runtime* IJS_Runtime::Create(CPDFDoc_Environment* pEnv) {
- return new CJS_RuntimeStub;
-}
diff --git a/fpdfsdk/src/javascript/JS_Value.cpp b/fpdfsdk/src/javascript/JS_Value.cpp
deleted file mode 100644
index 70ccdb5e97..0000000000
--- a/fpdfsdk/src/javascript/JS_Value.cpp
+++ /dev/null
@@ -1,911 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-#include <time.h>
-
-#include <algorithm>
-#include <cmath>
-#include <limits>
-#include <vector>
-
-#include "fpdfsdk/src/javascript/Document.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-
-static const FX_DWORD g_nan[2] = {0, 0x7FF80000};
-static double GetNan() {
- return *(double*)g_nan;
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime)
- : m_eType(VT_unknown), m_pJSRuntime(pRuntime) {
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Value> pValue, Type t)
- : m_eType(t), m_pValue(pValue), m_pJSRuntime(pRuntime) {
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const int& iValue)
- : m_pJSRuntime(pRuntime) {
- operator=(iValue);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const bool& bValue)
- : m_pJSRuntime(pRuntime) {
- operator=(bValue);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const float& fValue)
- : m_pJSRuntime(pRuntime) {
- operator=(fValue);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const double& dValue)
- : m_pJSRuntime(pRuntime) {
- operator=(dValue);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Object> pJsObj)
- : m_pJSRuntime(pRuntime) {
- operator=(pJsObj);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Object* pJsObj)
- : m_pJSRuntime(pRuntime) {
- operator=(pJsObj);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Document* pJsDoc)
- : m_pJSRuntime(pRuntime) {
- m_eType = VT_object;
- if (pJsDoc)
- m_pValue = pJsDoc->ToV8Object();
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_WCHAR* pWstr)
- : m_pJSRuntime(pRuntime) {
- operator=(pWstr);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_CHAR* pStr)
- : m_pJSRuntime(pRuntime) {
- operator=(pStr);
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Array& array)
- : m_pJSRuntime(pRuntime) {
- operator=(array);
-}
-
-CJS_Value::~CJS_Value() {}
-
-void CJS_Value::Attach(v8::Local<v8::Value> pValue, Type t) {
- m_pValue = pValue;
- m_eType = t;
-}
-
-void CJS_Value::Attach(CJS_Value* pValue) {
- if (pValue)
- Attach(pValue->ToV8Value(), pValue->GetType());
-}
-
-void CJS_Value::Detach() {
- m_pValue = v8::Local<v8::Value>();
- m_eType = VT_unknown;
-}
-
-int CJS_Value::ToInt() const {
- return FXJS_ToInt32(m_pJSRuntime->GetIsolate(), m_pValue);
-}
-
-bool CJS_Value::ToBool() const {
- return FXJS_ToBoolean(m_pJSRuntime->GetIsolate(), m_pValue);
-}
-
-double CJS_Value::ToDouble() const {
- return FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pValue);
-}
-
-float CJS_Value::ToFloat() const {
- return (float)ToDouble();
-}
-
-CJS_Object* CJS_Value::ToCJSObject() const {
- v8::Local<v8::Object> pObj =
- FXJS_ToObject(m_pJSRuntime->GetIsolate(), m_pValue);
- return (CJS_Object*)FXJS_GetPrivate(m_pJSRuntime->GetIsolate(), pObj);
-}
-
-v8::Local<v8::Object> CJS_Value::ToV8Object() const {
- return FXJS_ToObject(m_pJSRuntime->GetIsolate(), m_pValue);
-}
-
-CFX_WideString CJS_Value::ToCFXWideString() const {
- return FXJS_ToString(m_pJSRuntime->GetIsolate(), m_pValue);
-}
-
-CFX_ByteString CJS_Value::ToCFXByteString() const {
- return CFX_ByteString::FromUnicode(ToCFXWideString());
-}
-
-v8::Local<v8::Value> CJS_Value::ToV8Value() const {
- return m_pValue;
-}
-
-v8::Local<v8::Array> CJS_Value::ToV8Array() const {
- if (IsArrayObject())
- return v8::Local<v8::Array>::Cast(
- FXJS_ToObject(m_pJSRuntime->GetIsolate(), m_pValue));
- return v8::Local<v8::Array>();
-}
-
-void CJS_Value::MaybeCoerceToNumber() {
- bool bAllowNaN = false;
- if (m_eType == VT_string) {
- CFX_ByteString bstr = ToCFXByteString();
- if (bstr.GetLength() == 0)
- return;
- if (bstr == "NaN")
- bAllowNaN = true;
- }
- v8::TryCatch(m_pJSRuntime->GetIsolate());
- v8::MaybeLocal<v8::Number> maybeNum =
- m_pValue->ToNumber(m_pJSRuntime->GetIsolate()->GetCurrentContext());
- if (maybeNum.IsEmpty())
- return;
- v8::Local<v8::Number> num = maybeNum.ToLocalChecked();
- if (std::isnan(num->Value()) && !bAllowNaN)
- return;
- m_pValue = num;
- m_eType = VT_number;
-}
-
-void CJS_Value::operator=(int iValue) {
- m_pValue = FXJS_NewNumber(m_pJSRuntime->GetIsolate(), iValue);
- m_eType = VT_number;
-}
-
-void CJS_Value::operator=(bool bValue) {
- m_pValue = FXJS_NewBoolean(m_pJSRuntime->GetIsolate(), bValue);
- m_eType = VT_boolean;
-}
-
-void CJS_Value::operator=(double dValue) {
- m_pValue = FXJS_NewNumber(m_pJSRuntime->GetIsolate(), dValue);
- m_eType = VT_number;
-}
-
-void CJS_Value::operator=(float fValue) {
- m_pValue = FXJS_NewNumber(m_pJSRuntime->GetIsolate(), fValue);
- m_eType = VT_number;
-}
-
-void CJS_Value::operator=(v8::Local<v8::Object> pObj) {
- m_pValue = FXJS_NewObject(m_pJSRuntime->GetIsolate(), pObj);
- m_eType = VT_fxobject;
-}
-
-void CJS_Value::operator=(CJS_Object* pObj) {
- if (pObj)
- operator=(pObj->ToV8Object());
-}
-
-void CJS_Value::operator=(CJS_Document* pJsDoc) {
- m_eType = VT_object;
- if (pJsDoc) {
- m_pValue = pJsDoc->ToV8Object();
- }
-}
-
-void CJS_Value::operator=(const FX_WCHAR* pWstr) {
- m_pValue = FXJS_NewString(m_pJSRuntime->GetIsolate(), (wchar_t*)pWstr);
- m_eType = VT_string;
-}
-
-void CJS_Value::SetNull() {
- m_pValue = FXJS_NewNull();
- m_eType = VT_null;
-}
-
-void CJS_Value::operator=(const FX_CHAR* pStr) {
- operator=(CFX_WideString::FromLocal(pStr).c_str());
-}
-
-void CJS_Value::operator=(CJS_Array& array) {
- m_pValue =
- FXJS_NewObject2(m_pJSRuntime->GetIsolate(), (v8::Local<v8::Array>)array);
- m_eType = VT_object;
-}
-
-void CJS_Value::operator=(CJS_Date& date) {
- m_pValue = FXJS_NewDate(m_pJSRuntime->GetIsolate(), (double)date);
- m_eType = VT_date;
-}
-
-void CJS_Value::operator=(CJS_Value value) {
- m_pValue = value.ToV8Value();
- m_eType = value.m_eType;
- m_pJSRuntime = value.m_pJSRuntime;
-}
-
-CJS_Value::Type CJS_Value::GetType() const {
- if (m_pValue.IsEmpty())
- return VT_unknown;
- if (m_pValue->IsString())
- return VT_string;
- if (m_pValue->IsNumber())
- return VT_number;
- if (m_pValue->IsBoolean())
- return VT_boolean;
- if (m_pValue->IsDate())
- return VT_date;
- if (m_pValue->IsObject())
- return VT_object;
- if (m_pValue->IsNull())
- return VT_null;
- if (m_pValue->IsUndefined())
- return VT_undefined;
- return VT_unknown;
-}
-
-FX_BOOL CJS_Value::IsArrayObject() const {
- if (m_pValue.IsEmpty())
- return FALSE;
- return m_pValue->IsArray();
-}
-
-FX_BOOL CJS_Value::IsDateObject() const {
- if (m_pValue.IsEmpty())
- return FALSE;
- return m_pValue->IsDate();
-}
-
-// CJS_Value::operator CJS_Array()
-FX_BOOL CJS_Value::ConvertToArray(CJS_Array& array) const {
- if (IsArrayObject()) {
- array.Attach(FXJS_ToArray(m_pJSRuntime->GetIsolate(), m_pValue));
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL CJS_Value::ConvertToDate(CJS_Date& date) const {
- if (IsDateObject()) {
- date.Attach(m_pValue);
- return TRUE;
- }
-
- return FALSE;
-}
-
-/* ---------------------------- CJS_PropValue ---------------------------- */
-
-CJS_PropValue::CJS_PropValue(const CJS_Value& value)
- : CJS_Value(value), m_bIsSetting(0) {}
-
-CJS_PropValue::CJS_PropValue(CJS_Runtime* pRuntime)
- : CJS_Value(pRuntime), m_bIsSetting(0) {
-}
-
-CJS_PropValue::~CJS_PropValue() {
-}
-
-void CJS_PropValue::operator<<(int iValue) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(iValue);
-}
-
-void CJS_PropValue::operator>>(int& iValue) const {
- ASSERT(m_bIsSetting);
- iValue = CJS_Value::ToInt();
-}
-
-void CJS_PropValue::operator<<(bool bValue) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(bValue);
-}
-
-void CJS_PropValue::operator>>(bool& bValue) const {
- ASSERT(m_bIsSetting);
- bValue = CJS_Value::ToBool();
-}
-
-void CJS_PropValue::operator<<(double dValue) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(dValue);
-}
-
-void CJS_PropValue::operator>>(double& dValue) const {
- ASSERT(m_bIsSetting);
- dValue = CJS_Value::ToDouble();
-}
-
-void CJS_PropValue::operator<<(CJS_Object* pObj) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(pObj);
-}
-
-void CJS_PropValue::operator>>(CJS_Object*& ppObj) const {
- ASSERT(m_bIsSetting);
- ppObj = CJS_Value::ToCJSObject();
-}
-
-void CJS_PropValue::operator<<(CJS_Document* pJsDoc) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(pJsDoc);
-}
-
-void CJS_PropValue::operator>>(CJS_Document*& ppJsDoc) const {
- ASSERT(m_bIsSetting);
- ppJsDoc = static_cast<CJS_Document*>(CJS_Value::ToCJSObject());
-}
-
-void CJS_PropValue::operator<<(v8::Local<v8::Object> pObj) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(pObj);
-}
-
-void CJS_PropValue::operator>>(v8::Local<v8::Object>& ppObj) const {
- ASSERT(m_bIsSetting);
- ppObj = CJS_Value::ToV8Object();
-}
-
-void CJS_PropValue::StartSetting() {
- m_bIsSetting = 1;
-}
-
-void CJS_PropValue::StartGetting() {
- m_bIsSetting = 0;
-}
-void CJS_PropValue::operator<<(CFX_ByteString str) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(str.c_str());
-}
-
-void CJS_PropValue::operator>>(CFX_ByteString& str) const {
- ASSERT(m_bIsSetting);
- str = CJS_Value::ToCFXByteString();
-}
-
-void CJS_PropValue::operator<<(const FX_WCHAR* c_string) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(c_string);
-}
-
-void CJS_PropValue::operator>>(CFX_WideString& wide_string) const {
- ASSERT(m_bIsSetting);
- wide_string = CJS_Value::ToCFXWideString();
-}
-
-void CJS_PropValue::operator<<(CFX_WideString wide_string) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(wide_string.c_str());
-}
-
-void CJS_PropValue::operator>>(CJS_Array& array) const {
- ASSERT(m_bIsSetting);
- ConvertToArray(array);
-}
-
-void CJS_PropValue::operator<<(CJS_Array& array) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(array);
-}
-
-void CJS_PropValue::operator>>(CJS_Date& date) const {
- ASSERT(m_bIsSetting);
- ConvertToDate(date);
-}
-
-void CJS_PropValue::operator<<(CJS_Date& date) {
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(date);
-}
-
-CJS_PropValue::operator v8::Local<v8::Value>() const {
- return m_pValue;
-}
-
-CJS_Array::CJS_Array(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {
-}
-
-CJS_Array::~CJS_Array() {}
-
-void CJS_Array::Attach(v8::Local<v8::Array> pArray) {
- m_pArray = pArray;
-}
-
-FX_BOOL CJS_Array::IsAttached() {
- return FALSE;
-}
-
-void CJS_Array::GetElement(unsigned index, CJS_Value& value) {
- if (m_pArray.IsEmpty())
- return;
- v8::Local<v8::Value> p =
- FXJS_GetArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index);
- value.Attach(p, CJS_Value::VT_object);
-}
-
-void CJS_Array::SetElement(unsigned index, CJS_Value value) {
- if (m_pArray.IsEmpty())
- m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate());
-
- FXJS_PutArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index,
- value.ToV8Value());
-}
-
-int CJS_Array::GetLength() {
- if (m_pArray.IsEmpty())
- return 0;
- return FXJS_GetArrayLength(m_pArray);
-}
-
-CJS_Array::operator v8::Local<v8::Array>() {
- if (m_pArray.IsEmpty())
- m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate());
-
- return m_pArray;
-}
-
-CJS_Date::CJS_Date(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {
-}
-
-CJS_Date::CJS_Date(CJS_Runtime* pRuntime, double dMsecTime)
- : m_pJSRuntime(pRuntime) {
- m_pDate = FXJS_NewDate(pRuntime->GetIsolate(), dMsecTime);
-}
-
-CJS_Date::CJS_Date(CJS_Runtime* pRuntime,
- int year,
- int mon,
- int day,
- int hour,
- int min,
- int sec)
- : m_pJSRuntime(pRuntime) {
- m_pDate = FXJS_NewDate(pRuntime->GetIsolate(),
- MakeDate(year, mon, day, hour, min, sec, 0));
-}
-
-double CJS_Date::MakeDate(int year,
- int mon,
- int day,
- int hour,
- int min,
- int sec,
- int ms) {
- return JS_MakeDate(JS_MakeDay(year, mon, day),
- JS_MakeTime(hour, min, sec, ms));
-}
-
-CJS_Date::~CJS_Date() {}
-
-FX_BOOL CJS_Date::IsValidDate() {
- if (m_pDate.IsEmpty())
- return FALSE;
- return !JS_PortIsNan(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate));
-}
-
-void CJS_Date::Attach(v8::Local<v8::Value> pDate) {
- m_pDate = pDate;
-}
-
-int CJS_Date::GetYear() {
- if (IsValidDate())
- return JS_GetYearFromTime(
- JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)));
-
- return 0;
-}
-
-void CJS_Date::SetYear(int iYear) {
- double date = MakeDate(iYear, GetMonth(), GetDay(), GetHours(), GetMinutes(),
- GetSeconds(), 0);
- FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date));
-}
-
-int CJS_Date::GetMonth() {
- if (IsValidDate())
- return JS_GetMonthFromTime(
- JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)));
-
- return 0;
-}
-
-void CJS_Date::SetMonth(int iMonth) {
- double date = MakeDate(GetYear(), iMonth, GetDay(), GetHours(), GetMinutes(),
- GetSeconds(), 0);
- FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date));
-}
-
-int CJS_Date::GetDay() {
- if (IsValidDate())
- return JS_GetDayFromTime(
- JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)));
-
- return 0;
-}
-
-void CJS_Date::SetDay(int iDay) {
- double date = MakeDate(GetYear(), GetMonth(), iDay, GetHours(), GetMinutes(),
- GetSeconds(), 0);
- FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date));
-}
-
-int CJS_Date::GetHours() {
- if (IsValidDate())
- return JS_GetHourFromTime(
- JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)));
-
- return 0;
-}
-
-void CJS_Date::SetHours(int iHours) {
- double date = MakeDate(GetYear(), GetMonth(), GetDay(), iHours, GetMinutes(),
- GetSeconds(), 0);
- FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date));
-}
-
-int CJS_Date::GetMinutes() {
- if (IsValidDate())
- return JS_GetMinFromTime(
- JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)));
-
- return 0;
-}
-
-void CJS_Date::SetMinutes(int minutes) {
- double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), minutes,
- GetSeconds(), 0);
- FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date));
-}
-
-int CJS_Date::GetSeconds() {
- if (IsValidDate())
- return JS_GetSecFromTime(
- JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)));
-
- return 0;
-}
-
-void CJS_Date::SetSeconds(int seconds) {
- double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(),
- GetMinutes(), seconds, 0);
- FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date));
-}
-
-CJS_Date::operator v8::Local<v8::Value>() {
- return m_pDate;
-}
-
-CJS_Date::operator double() const {
- if (m_pDate.IsEmpty())
- return 0.0;
- return FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate);
-}
-
-CFX_WideString CJS_Date::ToString() const {
- if (m_pDate.IsEmpty())
- return L"";
- return FXJS_ToString(m_pJSRuntime->GetIsolate(), m_pDate);
-}
-
-double _getLocalTZA() {
- if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- return 0;
- time_t t = 0;
- time(&t);
- localtime(&t);
-#if _MSC_VER >= 1900
- // In gcc and in Visual Studio prior to VS 2015 'timezone' is a global
- // variable declared in time.h. That variable was deprecated and in VS 2015
- // is removed, with _get_timezone replacing it.
- long timezone = 0;
- _get_timezone(&timezone);
-#endif
- return (double)(-(timezone * 1000));
-}
-
-int _getDaylightSavingTA(double d) {
- if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- return 0;
- time_t t = (time_t)(d / 1000);
- struct tm* tmp = localtime(&t);
- if (!tmp)
- return 0;
- if (tmp->tm_isdst > 0)
- // One hour.
- return (int)60 * 60 * 1000;
- return 0;
-}
-
-double _Mod(double x, double y) {
- double r = fmod(x, y);
- if (r < 0)
- r += y;
- return r;
-}
-
-int _isfinite(double v) {
-#if _MSC_VER
- return ::_finite(v);
-#else
- return std::fabs(v) < std::numeric_limits<double>::max();
-#endif
-}
-
-double _toInteger(double n) {
- return (n >= 0) ? FXSYS_floor(n) : -FXSYS_floor(-n);
-}
-
-bool _isLeapYear(int year) {
- return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 != 0));
-}
-
-int _DayFromYear(int y) {
- return (int)(365 * (y - 1970.0) + FXSYS_floor((y - 1969.0) / 4) -
- FXSYS_floor((y - 1901.0) / 100) +
- FXSYS_floor((y - 1601.0) / 400));
-}
-
-double _TimeFromYear(int y) {
- return 86400000.0 * _DayFromYear(y);
-}
-
-double _TimeFromYearMonth(int y, int m) {
- static int daysMonth[12] = {
- 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
- static int leapDaysMonth[12] = {
- 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
- int* pMonth = daysMonth;
- if (_isLeapYear(y))
- pMonth = leapDaysMonth;
- return _TimeFromYear(y) + ((double)pMonth[m]) * 86400000;
-}
-
-int _Day(double t) {
- return (int)FXSYS_floor(t / 86400000);
-}
-
-int _YearFromTime(double t) {
- // estimate the time.
- int y = 1970 + static_cast<int>(t / (365.2425 * 86400000));
- if (_TimeFromYear(y) <= t) {
- while (_TimeFromYear(y + 1) <= t)
- y++;
- } else {
- while (_TimeFromYear(y) > t)
- y--;
- }
- return y;
-}
-
-int _DayWithinYear(double t) {
- int year = _YearFromTime(t);
- int day = _Day(t);
- return day - _DayFromYear(year);
-}
-
-int _MonthFromTime(double t) {
- int day = _DayWithinYear(t);
- int year = _YearFromTime(t);
- if (0 <= day && day < 31)
- return 0;
- if (31 <= day && day < 59 + _isLeapYear(year))
- return 1;
- if ((59 + _isLeapYear(year)) <= day && day < (90 + _isLeapYear(year)))
- return 2;
- if ((90 + _isLeapYear(year)) <= day && day < (120 + _isLeapYear(year)))
- return 3;
- if ((120 + _isLeapYear(year)) <= day && day < (151 + _isLeapYear(year)))
- return 4;
- if ((151 + _isLeapYear(year)) <= day && day < (181 + _isLeapYear(year)))
- return 5;
- if ((181 + _isLeapYear(year)) <= day && day < (212 + _isLeapYear(year)))
- return 6;
- if ((212 + _isLeapYear(year)) <= day && day < (243 + _isLeapYear(year)))
- return 7;
- if ((243 + _isLeapYear(year)) <= day && day < (273 + _isLeapYear(year)))
- return 8;
- if ((273 + _isLeapYear(year)) <= day && day < (304 + _isLeapYear(year)))
- return 9;
- if ((304 + _isLeapYear(year)) <= day && day < (334 + _isLeapYear(year)))
- return 10;
- if ((334 + _isLeapYear(year)) <= day && day < (365 + _isLeapYear(year)))
- return 11;
-
- return -1;
-}
-
-int _DateFromTime(double t) {
- int day = _DayWithinYear(t);
- int year = _YearFromTime(t);
- bool leap = _isLeapYear(year);
- int month = _MonthFromTime(t);
- switch (month) {
- case 0:
- return day + 1;
- case 1:
- return day - 30;
- case 2:
- return day - 58 - leap;
- case 3:
- return day - 89 - leap;
- case 4:
- return day - 119 - leap;
- case 5:
- return day - 150 - leap;
- case 6:
- return day - 180 - leap;
- case 7:
- return day - 211 - leap;
- case 8:
- return day - 242 - leap;
- case 9:
- return day - 272 - leap;
- case 10:
- return day - 303 - leap;
- case 11:
- return day - 333 - leap;
- default:
- return 0;
- }
-}
-
-double JS_GetDateTime() {
- if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- return 0;
- time_t t = time(NULL);
- struct tm* pTm = localtime(&t);
-
- int year = pTm->tm_year + 1900;
- double t1 = _TimeFromYear(year);
-
- return t1 + pTm->tm_yday * 86400000.0 + pTm->tm_hour * 3600000.0 +
- pTm->tm_min * 60000.0 + pTm->tm_sec * 1000.0;
-}
-
-int JS_GetYearFromTime(double dt) {
- return _YearFromTime(dt);
-}
-
-int JS_GetMonthFromTime(double dt) {
- return _MonthFromTime(dt);
-}
-
-int JS_GetDayFromTime(double dt) {
- return _DateFromTime(dt);
-}
-
-int JS_GetHourFromTime(double dt) {
- return (int)_Mod(FXSYS_floor((double)(dt / (60 * 60 * 1000))), 24);
-}
-
-int JS_GetMinFromTime(double dt) {
- return (int)_Mod(FXSYS_floor((double)(dt / (60 * 1000))), 60);
-}
-
-int JS_GetSecFromTime(double dt) {
- return (int)_Mod(FXSYS_floor((double)(dt / 1000)), 60);
-}
-
-double JS_DateParse(const wchar_t* str) {
- v8::Isolate* pIsolate = v8::Isolate::GetCurrent();
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope scope(pIsolate);
-
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
-
- // Use the built-in object method.
- v8::Local<v8::Value> v =
- context->Global()
- ->Get(context, v8::String::NewFromUtf8(pIsolate, "Date",
- v8::NewStringType::kNormal)
- .ToLocalChecked())
- .ToLocalChecked();
- if (v->IsObject()) {
- v8::Local<v8::Object> o = v->ToObject(context).ToLocalChecked();
- v = o->Get(context, v8::String::NewFromUtf8(pIsolate, "parse",
- v8::NewStringType::kNormal)
- .ToLocalChecked()).ToLocalChecked();
- if (v->IsFunction()) {
- v8::Local<v8::Function> funC = v8::Local<v8::Function>::Cast(v);
-
- const int argc = 1;
- v8::Local<v8::String> timeStr = FXJS_WSToJSString(pIsolate, str);
- v8::Local<v8::Value> argv[argc] = {timeStr};
- v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked();
- if (v->IsNumber()) {
- double date = v->ToNumber(context).ToLocalChecked()->Value();
- if (!_isfinite(date))
- return date;
- return date + _getLocalTZA() + _getDaylightSavingTA(date);
- }
- }
- }
- return 0;
-}
-
-double JS_MakeDay(int nYear, int nMonth, int nDate) {
- if (!_isfinite(nYear) || !_isfinite(nMonth) || !_isfinite(nDate))
- return GetNan();
- double y = _toInteger(nYear);
- double m = _toInteger(nMonth);
- double dt = _toInteger(nDate);
- double ym = y + FXSYS_floor((double)m / 12);
- double mn = _Mod(m, 12);
-
- double t = _TimeFromYearMonth((int)ym, (int)mn);
-
- if (_YearFromTime(t) != ym || _MonthFromTime(t) != mn ||
- _DateFromTime(t) != 1)
- return GetNan();
- return _Day(t) + dt - 1;
-}
-
-double JS_MakeTime(int nHour, int nMin, int nSec, int nMs) {
- if (!_isfinite(nHour) || !_isfinite(nMin) || !_isfinite(nSec) ||
- !_isfinite(nMs))
- return GetNan();
-
- double h = _toInteger(nHour);
- double m = _toInteger(nMin);
- double s = _toInteger(nSec);
- double milli = _toInteger(nMs);
-
- return h * 3600000 + m * 60000 + s * 1000 + milli;
-}
-
-double JS_MakeDate(double day, double time) {
- if (!_isfinite(day) || !_isfinite(time))
- return GetNan();
-
- return day * 86400000 + time;
-}
-
-bool JS_PortIsNan(double d) {
- return d != d;
-}
-
-double JS_LocalTime(double d) {
- return JS_GetDateTime() + _getDaylightSavingTA(d);
-}
-
-std::vector<CJS_Value> JS_ExpandKeywordParams(
- CJS_Runtime* pRuntime,
- const std::vector<CJS_Value>& originals,
- size_t nKeywords,
- ...) {
- ASSERT(nKeywords);
-
- std::vector<CJS_Value> result(nKeywords, CJS_Value(pRuntime));
- size_t size = std::min(originals.size(), nKeywords);
- for (size_t i = 0; i < size; ++i)
- result[i] = originals[i];
-
- if (originals.size() != 1 || originals[0].GetType() != CJS_Value::VT_object ||
- originals[0].IsArrayObject()) {
- return result;
- }
- v8::Local<v8::Object> pObj = originals[0].ToV8Object();
- result[0] = CJS_Value(pRuntime); // Make unknown.
-
- va_list ap;
- va_start(ap, nKeywords);
- for (int i = 0; i < nKeywords; ++i) {
- const wchar_t* property = va_arg(ap, const wchar_t*);
- v8::Local<v8::Value> v8Value =
- FXJS_GetObjectElement(pRuntime->GetIsolate(), pObj, property);
- if (!v8Value->IsUndefined())
- result[i] = CJS_Value(pRuntime, v8Value, CJS_Value::VT_unknown);
- }
- va_end(ap);
- return result;
-}
diff --git a/fpdfsdk/src/javascript/JS_Value.h b/fpdfsdk/src/javascript/JS_Value.h
deleted file mode 100644
index f6c1c360ca..0000000000
--- a/fpdfsdk/src/javascript/JS_Value.h
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_JS_VALUE_H_
-#define FPDFSDK_SRC_JAVASCRIPT_JS_VALUE_H_
-
-#include <vector>
-
-#include "core/include/fxcrt/fx_basic.h"
-#include "fpdfsdk/include/jsapi/fxjs_v8.h"
-
-class CJS_Array;
-class CJS_Date;
-class CJS_Document;
-class CJS_Object;
-class CJS_Runtime;
-
-class CJS_Value {
- public:
- enum Type {
- VT_unknown,
- VT_string,
- VT_number,
- VT_boolean,
- VT_date,
- VT_object,
- VT_fxobject,
- VT_null,
- VT_undefined
- };
-
- CJS_Value(CJS_Runtime* pRuntime);
- CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Value> pValue, Type t);
- CJS_Value(CJS_Runtime* pRuntime, const int& iValue);
- CJS_Value(CJS_Runtime* pRuntime, const double& dValue);
- CJS_Value(CJS_Runtime* pRuntime, const float& fValue);
- CJS_Value(CJS_Runtime* pRuntime, const bool& bValue);
- CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Object>);
- CJS_Value(CJS_Runtime* pRuntime, CJS_Object*);
- CJS_Value(CJS_Runtime* pRuntime, CJS_Document*);
- CJS_Value(CJS_Runtime* pRuntime, const FX_CHAR* pStr);
- CJS_Value(CJS_Runtime* pRuntime, const FX_WCHAR* pWstr);
- CJS_Value(CJS_Runtime* pRuntime, CJS_Array& array);
-
- ~CJS_Value();
-
- void SetNull();
- void Attach(v8::Local<v8::Value> pValue, Type t);
- void Attach(CJS_Value* pValue);
- void Detach();
-
- Type GetType() const;
- int ToInt() const;
- bool ToBool() const;
- double ToDouble() const;
- float ToFloat() const;
- CJS_Object* ToCJSObject() const;
- CFX_WideString ToCFXWideString() const;
- CFX_ByteString ToCFXByteString() const;
- v8::Local<v8::Object> ToV8Object() const;
- v8::Local<v8::Array> ToV8Array() const;
- v8::Local<v8::Value> ToV8Value() const;
-
- // Replace the current |m_pValue| with a v8::Number if possible
- // to make one from the current |m_pValue|, updating |m_eType|
- // as appropriate to indicate the result.
- void MaybeCoerceToNumber();
-
- void operator=(int iValue);
- void operator=(bool bValue);
- void operator=(double val);
- void operator=(float val);
- void operator=(CJS_Object* val);
- void operator=(CJS_Document* val);
- void operator=(v8::Local<v8::Object> val);
- void operator=(CJS_Array& val);
- void operator=(CJS_Date& val);
- void operator=(const FX_WCHAR* pWstr);
- void operator=(const FX_CHAR* pStr);
- void operator=(CJS_Value value);
-
- FX_BOOL IsArrayObject() const;
- FX_BOOL IsDateObject() const;
- FX_BOOL ConvertToArray(CJS_Array&) const;
- FX_BOOL ConvertToDate(CJS_Date&) const;
-
- CJS_Runtime* GetJSRuntime() const { return m_pJSRuntime; }
-
- protected:
- Type m_eType;
- v8::Local<v8::Value> m_pValue;
- CJS_Runtime* m_pJSRuntime;
-};
-
-class CJS_PropValue : public CJS_Value {
- public:
- CJS_PropValue(const CJS_Value&);
- CJS_PropValue(CJS_Runtime* pRuntime);
- ~CJS_PropValue();
-
- FX_BOOL IsSetting() const { return m_bIsSetting; }
- FX_BOOL IsGetting() const { return !m_bIsSetting; }
-
- void operator<<(int val);
- void operator>>(int&) const;
- void operator<<(bool val);
- void operator>>(bool&) const;
- void operator<<(double val);
- void operator>>(double&) const;
- void operator<<(CJS_Object* pObj);
- void operator>>(CJS_Object*& ppObj) const;
- void operator<<(CJS_Document* pJsDoc);
- void operator>>(CJS_Document*& ppJsDoc) const;
- void operator<<(CFX_ByteString);
- void operator>>(CFX_ByteString&) const;
- void operator<<(CFX_WideString);
- void operator>>(CFX_WideString&) const;
- void operator<<(const FX_WCHAR* c_string);
- void operator<<(v8::Local<v8::Object>);
- void operator>>(v8::Local<v8::Object>&) const;
- void operator>>(CJS_Array& array) const;
- void operator<<(CJS_Array& array);
- void operator<<(CJS_Date& date);
- void operator>>(CJS_Date& date) const;
- operator v8::Local<v8::Value>() const;
- void StartSetting();
- void StartGetting();
-
- private:
- FX_BOOL m_bIsSetting;
-};
-
-class CJS_Array {
- public:
- CJS_Array(CJS_Runtime* pRuntime);
- virtual ~CJS_Array();
-
- void Attach(v8::Local<v8::Array> pArray);
- void GetElement(unsigned index, CJS_Value& value);
- void SetElement(unsigned index, CJS_Value value);
- int GetLength();
- FX_BOOL IsAttached();
- operator v8::Local<v8::Array>();
-
- CJS_Runtime* GetJSRuntime() const { return m_pJSRuntime; }
-
- private:
- v8::Local<v8::Array> m_pArray;
- CJS_Runtime* m_pJSRuntime;
-};
-
-class CJS_Date {
- friend class CJS_Value;
-
- public:
- CJS_Date(CJS_Runtime* pRuntime);
- CJS_Date(CJS_Runtime* pRuntime, double dMsec_time);
- CJS_Date(CJS_Runtime* pRuntime,
- int year,
- int mon,
- int day,
- int hour,
- int min,
- int sec);
- virtual ~CJS_Date();
- void Attach(v8::Local<v8::Value> pDate);
-
- int GetYear();
- void SetYear(int iYear);
-
- int GetMonth();
- void SetMonth(int iMonth);
-
- int GetDay();
- void SetDay(int iDay);
-
- int GetHours();
- void SetHours(int iHours);
-
- int GetMinutes();
- void SetMinutes(int minutes);
-
- int GetSeconds();
- void SetSeconds(int seconds);
-
- operator v8::Local<v8::Value>();
- operator double() const;
-
- CFX_WideString ToString() const;
-
- static double
- MakeDate(int year, int mon, int mday, int hour, int min, int sec, int ms);
-
- FX_BOOL IsValidDate();
-
- protected:
- v8::Local<v8::Value> m_pDate;
- CJS_Runtime* m_pJSRuntime;
-};
-
-double JS_GetDateTime();
-int JS_GetYearFromTime(double dt);
-int JS_GetMonthFromTime(double dt);
-int JS_GetDayFromTime(double dt);
-int JS_GetHourFromTime(double dt);
-int JS_GetMinFromTime(double dt);
-int JS_GetSecFromTime(double dt);
-double JS_DateParse(const wchar_t* str);
-double JS_MakeDay(int nYear, int nMonth, int nDay);
-double JS_MakeTime(int nHour, int nMin, int nSec, int nMs);
-double JS_MakeDate(double day, double time);
-bool JS_PortIsNan(double d);
-double JS_LocalTime(double d);
-
-// Some JS methods have the bizarre convention that they may also be called
-// with a single argument which is an object containing the actual arguments
-// as its properties. The varying arguments to this method are the property
-// names as wchar_t string literals corresponding to each positional argument.
-// The result will always contain |nKeywords| value, with unspecified ones
-// being set to type VT_unknown.
-std::vector<CJS_Value> JS_ExpandKeywordParams(
- CJS_Runtime* pRuntime,
- const std::vector<CJS_Value>& originals,
- size_t nKeywords,
- ...);
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_JS_VALUE_H_
diff --git a/fpdfsdk/src/javascript/PublicMethods.cpp b/fpdfsdk/src/javascript/PublicMethods.cpp
deleted file mode 100644
index 014dea2d6a..0000000000
--- a/fpdfsdk/src/javascript/PublicMethods.cpp
+++ /dev/null
@@ -1,1916 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/PublicMethods.h"
-
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include "core/include/fxcrt/fx_ext.h"
-#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment.
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/Field.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/color.h"
-#include "fpdfsdk/src/javascript/resource.h"
-#include "fpdfsdk/src/javascript/util.h"
-
-#define DOUBLE_CORRECT 0.000000000000001
-
-BEGIN_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Format)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Keystroke)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Format)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Keystroke)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_FormatEx)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_KeystrokeEx)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Format)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Keystroke)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_FormatEx)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_KeystrokeEx)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Format)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Keystroke)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Format)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Keystroke)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_KeystrokeEx)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFMakeNumber)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple_Calculate)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFRange_Validate)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFMergeChange)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFParseDateEx)
-JS_STATIC_GLOBAL_FUN_ENTRY(AFExtractNums)
-END_JS_STATIC_GLOBAL_FUN()
-
-IMPLEMENT_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods)
-
-static const FX_WCHAR* const months[] = {L"Jan",
- L"Feb",
- L"Mar",
- L"Apr",
- L"May",
- L"Jun",
- L"Jul",
- L"Aug",
- L"Sep",
- L"Oct",
- L"Nov",
- L"Dec"};
-
-static const FX_WCHAR* const fullmonths[] = {L"January",
- L"February",
- L"March",
- L"April",
- L"May",
- L"June",
- L"July",
- L"August",
- L"September",
- L"October",
- L"November",
- L"December"};
-
-FX_BOOL CJS_PublicMethods::IsNumber(const FX_WCHAR* str) {
- CFX_WideString sTrim = StrTrim(str);
- const FX_WCHAR* pTrim = sTrim.c_str();
- const FX_WCHAR* p = pTrim;
-
- FX_BOOL bDot = FALSE;
- FX_BOOL bKXJS = FALSE;
-
- wchar_t c;
- while ((c = *p)) {
- if (c == '.' || c == ',') {
- if (bDot)
- return FALSE;
- bDot = TRUE;
- } else if (c == '-' || c == '+') {
- if (p != pTrim)
- return FALSE;
- } else if (c == 'e' || c == 'E') {
- if (bKXJS)
- return FALSE;
-
- p++;
- c = *p;
- if (c == '+' || c == '-') {
- bKXJS = TRUE;
- } else {
- return FALSE;
- }
- } else if (!FXSYS_iswdigit(c)) {
- return FALSE;
- }
- p++;
- }
-
- return TRUE;
-}
-
-FX_BOOL CJS_PublicMethods::maskSatisfied(wchar_t c_Change, wchar_t c_Mask) {
- switch (c_Mask) {
- case L'9':
- return FXSYS_iswdigit(c_Change);
- case L'A':
- return FXSYS_iswalpha(c_Change);
- case L'O':
- return FXSYS_iswalnum(c_Change);
- case L'X':
- return TRUE;
- default:
- return (c_Change == c_Mask);
- }
-}
-
-FX_BOOL CJS_PublicMethods::isReservedMaskChar(wchar_t ch) {
- return ch == L'9' || ch == L'A' || ch == L'O' || ch == L'X';
-}
-
-double CJS_PublicMethods::AF_Simple(const FX_WCHAR* sFuction,
- double dValue1,
- double dValue2) {
- if (FXSYS_wcsicmp(sFuction, L"AVG") == 0 ||
- FXSYS_wcsicmp(sFuction, L"SUM") == 0) {
- return dValue1 + dValue2;
- }
- if (FXSYS_wcsicmp(sFuction, L"PRD") == 0) {
- return dValue1 * dValue2;
- }
- if (FXSYS_wcsicmp(sFuction, L"MIN") == 0) {
- return std::min(dValue1, dValue2);
- }
- if (FXSYS_wcsicmp(sFuction, L"MAX") == 0) {
- return std::max(dValue1, dValue2);
- }
- return dValue1;
-}
-
-CFX_WideString CJS_PublicMethods::StrLTrim(const FX_WCHAR* pStr) {
- while (*pStr && *pStr == L' ')
- pStr++;
-
- return pStr;
-}
-
-CFX_WideString CJS_PublicMethods::StrRTrim(const FX_WCHAR* pStr) {
- const FX_WCHAR* p = pStr;
- while (*p)
- p++;
- while (p > pStr && *(p - 1) == L' ')
- p--;
-
- return CFX_WideString(pStr, p - pStr);
-}
-
-CFX_WideString CJS_PublicMethods::StrTrim(const FX_WCHAR* pStr) {
- return StrRTrim(StrLTrim(pStr).c_str());
-}
-
-CFX_ByteString CJS_PublicMethods::StrLTrim(const FX_CHAR* pStr) {
- while (*pStr && *pStr == ' ')
- pStr++;
-
- return pStr;
-}
-
-CFX_ByteString CJS_PublicMethods::StrRTrim(const FX_CHAR* pStr) {
- const FX_CHAR* p = pStr;
- while (*p)
- p++;
- while (p > pStr && *(p - 1) == L' ')
- p--;
-
- return CFX_ByteString(pStr, p - pStr);
-}
-
-CFX_ByteString CJS_PublicMethods::StrTrim(const FX_CHAR* pStr) {
- return StrRTrim(StrLTrim(pStr));
-}
-
-CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(CJS_Runtime* pRuntime,
- CJS_Value val) {
- CJS_Array StrArray(pRuntime);
- if (val.IsArrayObject()) {
- val.ConvertToArray(StrArray);
- return StrArray;
- }
- CFX_WideString wsStr = val.ToCFXWideString();
- CFX_ByteString t = CFX_ByteString::FromUnicode(wsStr);
- const char* p = (const char*)t;
-
- int ch = ',';
- int nIndex = 0;
-
- while (*p) {
- const char* pTemp = strchr(p, ch);
- if (!pTemp) {
- StrArray.SetElement(nIndex, CJS_Value(pRuntime, StrTrim(p).c_str()));
- break;
- }
-
- char* pSub = new char[pTemp - p + 1];
- strncpy(pSub, p, pTemp - p);
- *(pSub + (pTemp - p)) = '\0';
-
- StrArray.SetElement(nIndex, CJS_Value(pRuntime, StrTrim(pSub).c_str()));
- delete[] pSub;
-
- nIndex++;
- p = ++pTemp;
- }
- return StrArray;
-}
-
-int CJS_PublicMethods::ParseStringInteger(const CFX_WideString& str,
- int nStart,
- int& nSkip,
- int nMaxStep) {
- int nRet = 0;
- nSkip = 0;
- for (int i = nStart, sz = str.GetLength(); i < sz; i++) {
- if (i - nStart > 10)
- break;
-
- FX_WCHAR c = str.GetAt(i);
- if (!FXSYS_iswdigit(c))
- break;
-
- nRet = nRet * 10 + FXSYS_toDecimalDigit(c);
- nSkip = i - nStart + 1;
- if (nSkip >= nMaxStep)
- break;
- }
-
- return nRet;
-}
-
-CFX_WideString CJS_PublicMethods::ParseStringString(const CFX_WideString& str,
- int nStart,
- int& nSkip) {
- CFX_WideString swRet;
- nSkip = 0;
- for (int i = nStart, sz = str.GetLength(); i < sz; i++) {
- FX_WCHAR c = str.GetAt(i);
- if (!FXSYS_iswdigit(c))
- break;
-
- swRet += c;
- nSkip = i - nStart + 1;
- }
-
- return swRet;
-}
-
-double CJS_PublicMethods::ParseNormalDate(const CFX_WideString& value,
- bool* bWrongFormat) {
- double dt = JS_GetDateTime();
-
- int nYear = JS_GetYearFromTime(dt);
- int nMonth = JS_GetMonthFromTime(dt) + 1;
- int nDay = JS_GetDayFromTime(dt);
- int nHour = JS_GetHourFromTime(dt);
- int nMin = JS_GetMinFromTime(dt);
- int nSec = JS_GetSecFromTime(dt);
-
- int number[3];
-
- int nSkip = 0;
- int nLen = value.GetLength();
- int nIndex = 0;
- int i = 0;
- while (i < nLen) {
- if (nIndex > 2)
- break;
-
- FX_WCHAR c = value.GetAt(i);
- if (FXSYS_iswdigit(c)) {
- number[nIndex++] = ParseStringInteger(value, i, nSkip, 4);
- i += nSkip;
- } else {
- i++;
- }
- }
-
- if (nIndex == 2) {
- // case2: month/day
- // case3: day/month
- if ((number[0] >= 1 && number[0] <= 12) &&
- (number[1] >= 1 && number[1] <= 31)) {
- nMonth = number[0];
- nDay = number[1];
- } else if ((number[0] >= 1 && number[0] <= 31) &&
- (number[1] >= 1 && number[1] <= 12)) {
- nDay = number[0];
- nMonth = number[1];
- }
-
- if (bWrongFormat)
- *bWrongFormat = false;
- } else if (nIndex == 3) {
- // case1: year/month/day
- // case2: month/day/year
- // case3: day/month/year
-
- if (number[0] > 12 && (number[1] >= 1 && number[1] <= 12) &&
- (number[2] >= 1 && number[2] <= 31)) {
- nYear = number[0];
- nMonth = number[1];
- nDay = number[2];
- } else if ((number[0] >= 1 && number[0] <= 12) &&
- (number[1] >= 1 && number[1] <= 31) && number[2] > 31) {
- nMonth = number[0];
- nDay = number[1];
- nYear = number[2];
- } else if ((number[0] >= 1 && number[0] <= 31) &&
- (number[1] >= 1 && number[1] <= 12) && number[2] > 31) {
- nDay = number[0];
- nMonth = number[1];
- nYear = number[2];
- }
-
- if (bWrongFormat)
- *bWrongFormat = false;
- } else {
- if (bWrongFormat)
- *bWrongFormat = true;
- return dt;
- }
-
- CFX_WideString swTemp;
- swTemp.Format(L"%d/%d/%d %d:%d:%d", nMonth, nDay, nYear, nHour, nMin, nSec);
- return JS_DateParse(swTemp.c_str());
-}
-
-double CJS_PublicMethods::MakeRegularDate(const CFX_WideString& value,
- const CFX_WideString& format,
- bool* bWrongFormat) {
- double dt = JS_GetDateTime();
-
- if (format.IsEmpty() || value.IsEmpty())
- return dt;
-
- int nYear = JS_GetYearFromTime(dt);
- int nMonth = JS_GetMonthFromTime(dt) + 1;
- int nDay = JS_GetDayFromTime(dt);
- int nHour = JS_GetHourFromTime(dt);
- int nMin = JS_GetMinFromTime(dt);
- int nSec = JS_GetSecFromTime(dt);
-
- int nYearSub = 99; // nYear - 2000;
-
- FX_BOOL bPm = FALSE;
- FX_BOOL bExit = FALSE;
- bool bBadFormat = false;
-
- int i = 0;
- int j = 0;
-
- while (i < format.GetLength()) {
- if (bExit)
- break;
-
- FX_WCHAR c = format.GetAt(i);
- switch (c) {
- case ':':
- case '.':
- case '-':
- case '\\':
- case '/':
- i++;
- j++;
- break;
-
- case 'y':
- case 'm':
- case 'd':
- case 'H':
- case 'h':
- case 'M':
- case 's':
- case 't': {
- int oldj = j;
- int nSkip = 0;
- int remaining = format.GetLength() - i - 1;
-
- if (remaining == 0 || format.GetAt(i + 1) != c) {
- switch (c) {
- case 'y':
- i++;
- j++;
- break;
- case 'm':
- nMonth = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'd':
- nDay = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'H':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'h':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'M':
- nMin = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 's':
- nSec = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 't':
- bPm = (j < value.GetLength() && value.GetAt(j) == 'p');
- i++;
- j++;
- break;
- }
- } else if (remaining == 1 || format.GetAt(i + 2) != c) {
- switch (c) {
- case 'y':
- nYear = ParseStringInteger(value, j, nSkip, 4);
- i += 2;
- j += nSkip;
- break;
- case 'm':
- nMonth = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'd':
- nDay = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'H':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'h':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'M':
- nMin = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 's':
- nSec = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 't':
- bPm = (j + 1 < value.GetLength() && value.GetAt(j) == 'p' &&
- value.GetAt(j + 1) == 'm');
- i += 2;
- j += 2;
- break;
- }
- } else if (remaining == 2 || format.GetAt(i + 3) != c) {
- switch (c) {
- case 'm': {
- CFX_WideString sMonth = ParseStringString(value, j, nSkip);
- FX_BOOL bFind = FALSE;
- for (int m = 0; m < 12; m++) {
- if (sMonth.CompareNoCase(months[m]) == 0) {
- nMonth = m + 1;
- i += 3;
- j += nSkip;
- bFind = TRUE;
- break;
- }
- }
-
- if (!bFind) {
- nMonth = ParseStringInteger(value, j, nSkip, 3);
- i += 3;
- j += nSkip;
- }
- } break;
- case 'y':
- break;
- default:
- i += 3;
- j += 3;
- break;
- }
- } else if (remaining == 3 || format.GetAt(i + 4) != c) {
- switch (c) {
- case 'y':
- nYear = ParseStringInteger(value, j, nSkip, 4);
- j += nSkip;
- i += 4;
- break;
- case 'm': {
- FX_BOOL bFind = FALSE;
-
- CFX_WideString sMonth = ParseStringString(value, j, nSkip);
- sMonth.MakeLower();
-
- for (int m = 0; m < 12; m++) {
- CFX_WideString sFullMonths = fullmonths[m];
- sFullMonths.MakeLower();
-
- if (sFullMonths.Find(sMonth.c_str(), 0) != -1) {
- nMonth = m + 1;
- i += 4;
- j += nSkip;
- bFind = TRUE;
- break;
- }
- }
-
- if (!bFind) {
- nMonth = ParseStringInteger(value, j, nSkip, 4);
- i += 4;
- j += nSkip;
- }
- } break;
- default:
- i += 4;
- j += 4;
- break;
- }
- } else {
- if (j >= value.GetLength() || format.GetAt(i) != value.GetAt(j)) {
- bBadFormat = true;
- bExit = TRUE;
- }
- i++;
- j++;
- }
-
- if (oldj == j) {
- bBadFormat = true;
- bExit = TRUE;
- }
- }
-
- break;
- default:
- if (value.GetLength() <= j) {
- bExit = TRUE;
- } else if (format.GetAt(i) != value.GetAt(j)) {
- bBadFormat = true;
- bExit = TRUE;
- }
-
- i++;
- j++;
- break;
- }
- }
-
- if (bPm)
- nHour += 12;
-
- if (nYear >= 0 && nYear <= nYearSub)
- nYear += 2000;
-
- if (nMonth < 1 || nMonth > 12)
- bBadFormat = true;
-
- if (nDay < 1 || nDay > 31)
- bBadFormat = true;
-
- if (nHour < 0 || nHour > 24)
- bBadFormat = true;
-
- if (nMin < 0 || nMin > 60)
- bBadFormat = true;
-
- if (nSec < 0 || nSec > 60)
- bBadFormat = true;
-
- double dRet = 0;
-
- if (bBadFormat) {
- dRet = ParseNormalDate(value, &bBadFormat);
- } else {
- dRet = JS_MakeDate(JS_MakeDay(nYear, nMonth - 1, nDay),
- JS_MakeTime(nHour, nMin, nSec, 0));
-
- if (JS_PortIsNan(dRet)) {
- dRet = JS_DateParse(value.c_str());
- }
- }
-
- if (JS_PortIsNan(dRet)) {
- dRet = ParseNormalDate(value, &bBadFormat);
- }
-
- if (bWrongFormat)
- *bWrongFormat = bBadFormat;
- return dRet;
-}
-
-CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate,
- const CFX_WideString& format) {
- CFX_WideString sRet = L"", sPart = L"";
-
- int nYear = JS_GetYearFromTime(dDate);
- int nMonth = JS_GetMonthFromTime(dDate) + 1;
- int nDay = JS_GetDayFromTime(dDate);
- int nHour = JS_GetHourFromTime(dDate);
- int nMin = JS_GetMinFromTime(dDate);
- int nSec = JS_GetSecFromTime(dDate);
-
- int i = 0;
- while (i < format.GetLength()) {
- FX_WCHAR c = format.GetAt(i);
- int remaining = format.GetLength() - i - 1;
- sPart = L"";
- switch (c) {
- case 'y':
- case 'm':
- case 'd':
- case 'H':
- case 'h':
- case 'M':
- case 's':
- case 't':
- if (remaining == 0 || format.GetAt(i + 1) != c) {
- switch (c) {
- case 'y':
- sPart += c;
- break;
- case 'm':
- sPart.Format(L"%d", nMonth);
- break;
- case 'd':
- sPart.Format(L"%d", nDay);
- break;
- case 'H':
- sPart.Format(L"%d", nHour);
- break;
- case 'h':
- sPart.Format(L"%d", nHour > 12 ? nHour - 12 : nHour);
- break;
- case 'M':
- sPart.Format(L"%d", nMin);
- break;
- case 's':
- sPart.Format(L"%d", nSec);
- break;
- case 't':
- sPart += nHour > 12 ? 'p' : 'a';
- break;
- }
- i++;
- } else if (remaining == 1 || format.GetAt(i + 2) != c) {
- switch (c) {
- case 'y':
- sPart.Format(L"%02d", nYear - (nYear / 100) * 100);
- break;
- case 'm':
- sPart.Format(L"%02d", nMonth);
- break;
- case 'd':
- sPart.Format(L"%02d", nDay);
- break;
- case 'H':
- sPart.Format(L"%02d", nHour);
- break;
- case 'h':
- sPart.Format(L"%02d", nHour > 12 ? nHour - 12 : nHour);
- break;
- case 'M':
- sPart.Format(L"%02d", nMin);
- break;
- case 's':
- sPart.Format(L"%02d", nSec);
- break;
- case 't':
- sPart = nHour > 12 ? L"pm" : L"am";
- break;
- }
- i += 2;
- } else if (remaining == 2 || format.GetAt(i + 3) != c) {
- switch (c) {
- case 'm':
- i += 3;
- if (nMonth > 0 && nMonth <= 12)
- sPart += months[nMonth - 1];
- break;
- default:
- i += 3;
- sPart += c;
- sPart += c;
- sPart += c;
- break;
- }
- } else if (remaining == 3 || format.GetAt(i + 4) != c) {
- switch (c) {
- case 'y':
- sPart.Format(L"%04d", nYear);
- i += 4;
- break;
- case 'm':
- i += 4;
- if (nMonth > 0 && nMonth <= 12)
- sPart += fullmonths[nMonth - 1];
- break;
- default:
- i += 4;
- sPart += c;
- sPart += c;
- sPart += c;
- sPart += c;
- break;
- }
- } else {
- i++;
- sPart += c;
- }
- break;
- default:
- i++;
- sPart += c;
- break;
- }
-
- sRet += sPart;
- }
-
- return sRet;
-}
-
-/* -------------------------------------------------------------------------- */
-
-// function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency,
-// bCurrencyPrepend)
-FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
-#if _FX_OS_ != _FX_ANDROID_
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 6) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- if (!pEvent->m_pValue)
- return FALSE;
-
- CFX_WideString& Value = pEvent->Value();
- CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
- if (strValue.IsEmpty())
- return TRUE;
-
- int iDec = params[0].ToInt();
- int iSepStyle = params[1].ToInt();
- int iNegStyle = params[2].ToInt();
- // params[3] is iCurrStyle, it's not used.
- std::wstring wstrCurrency(params[4].ToCFXWideString().c_str());
- FX_BOOL bCurrencyPrepend = params[5].ToBool();
-
- if (iDec < 0)
- iDec = -iDec;
-
- if (iSepStyle < 0 || iSepStyle > 3)
- iSepStyle = 0;
-
- if (iNegStyle < 0 || iNegStyle > 3)
- iNegStyle = 0;
-
- //////////////////////////////////////////////////////
- // for processing decimal places
- strValue.Replace(",", ".");
- double dValue = atof(strValue);
- if (iDec > 0)
- dValue += DOUBLE_CORRECT;
-
- int iDec2;
- int iNegative = 0;
-
- strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- if (strValue.IsEmpty()) {
- dValue = 0;
- strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- if (strValue.IsEmpty()) {
- strValue = "0";
- iDec2 = 1;
- }
- }
-
- if (iDec2 < 0) {
- for (int iNum = 0; iNum < abs(iDec2); iNum++) {
- strValue = "0" + strValue;
- }
- iDec2 = 0;
- }
- int iMax = strValue.GetLength();
- if (iDec2 > iMax) {
- for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) {
- strValue += "0";
- }
- iMax = iDec2 + 1;
- }
- ///////////////////////////////////////////////////////
- // for processing seperator style
- if (iDec2 < iMax) {
- if (iSepStyle == 0 || iSepStyle == 1) {
- strValue.Insert(iDec2, '.');
- iMax++;
- } else if (iSepStyle == 2 || iSepStyle == 3) {
- strValue.Insert(iDec2, ',');
- iMax++;
- }
-
- if (iDec2 == 0)
- strValue.Insert(iDec2, '0');
- }
- if (iSepStyle == 0 || iSepStyle == 2) {
- char cSeperator;
- if (iSepStyle == 0)
- cSeperator = ',';
- else
- cSeperator = '.';
-
- for (int iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) {
- strValue.Insert(iDecPositive, cSeperator);
- iMax++;
- }
- }
-
- //////////////////////////////////////////////////////////////////////
- // for processing currency string
-
- Value = CFX_WideString::FromLocal(strValue);
- std::wstring strValue2 = Value.c_str();
-
- if (bCurrencyPrepend)
- strValue2 = wstrCurrency + strValue2;
- else
- strValue2 = strValue2 + wstrCurrency;
-
- /////////////////////////////////////////////////////////////////////////
- // for processing negative style
- if (iNegative) {
- if (iNegStyle == 0) {
- strValue2.insert(0, L"-");
- }
- if (iNegStyle == 2 || iNegStyle == 3) {
- strValue2.insert(0, L"(");
- strValue2.insert(strValue2.length(), L")");
- }
- if (iNegStyle == 1 || iNegStyle == 3) {
- if (Field* fTarget = pEvent->Target_Field()) {
- CJS_Array arColor(pRuntime);
- CJS_Value vColElm(pRuntime);
- vColElm = L"RGB";
- arColor.SetElement(0, vColElm);
- vColElm = 1;
- arColor.SetElement(1, vColElm);
- vColElm = 0;
- arColor.SetElement(2, vColElm);
-
- arColor.SetElement(3, vColElm);
-
- CJS_PropValue vProp(pRuntime);
- vProp.StartGetting();
- vProp << arColor;
- vProp.StartSetting();
- fTarget->textColor(cc, vProp, sError); // red
- }
- }
- } else {
- if (iNegStyle == 1 || iNegStyle == 3) {
- if (Field* fTarget = pEvent->Target_Field()) {
- CJS_Array arColor(pRuntime);
- CJS_Value vColElm(pRuntime);
- vColElm = L"RGB";
- arColor.SetElement(0, vColElm);
- vColElm = 0;
- arColor.SetElement(1, vColElm);
- arColor.SetElement(2, vColElm);
- arColor.SetElement(3, vColElm);
-
- CJS_PropValue vProp(pRuntime);
- vProp.StartGetting();
- fTarget->textColor(cc, vProp, sError);
-
- CJS_Array aProp(pRuntime);
- vProp.ConvertToArray(aProp);
-
- CPWL_Color crProp;
- CPWL_Color crColor;
- color::ConvertArrayToPWLColor(aProp, crProp);
- color::ConvertArrayToPWLColor(arColor, crColor);
-
- if (crColor != crProp) {
- CJS_PropValue vProp2(pRuntime);
- vProp2.StartGetting();
- vProp2 << arColor;
- vProp2.StartSetting();
- fTarget->textColor(cc, vProp2, sError);
- }
- }
- }
- }
- Value = strValue2.c_str();
-#endif
- return TRUE;
-}
-
-// function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency,
-// bCurrencyPrepend)
-FX_BOOL CJS_PublicMethods::AFNumber_Keystroke(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (params.size() < 2)
- return FALSE;
- int iSepStyle = params[1].ToInt();
-
- if (iSepStyle < 0 || iSepStyle > 3)
- iSepStyle = 0;
- if (!pEvent->m_pValue)
- return FALSE;
- CFX_WideString& val = pEvent->Value();
- CFX_WideString& w_strChange = pEvent->Change();
- CFX_WideString w_strValue = val;
-
- if (pEvent->WillCommit()) {
- CFX_WideString wstrChange = w_strChange;
- CFX_WideString wstrValue = StrLTrim(w_strValue.c_str());
- if (wstrValue.IsEmpty())
- return TRUE;
-
- CFX_WideString swTemp = wstrValue;
- swTemp.Replace(L",", L".");
- if (!IsNumber(swTemp.c_str())) {
- pEvent->Rc() = FALSE;
- sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
- Alert(pContext, sError.c_str());
- return TRUE;
- }
- return TRUE; // it happens after the last keystroke and before validating,
- }
-
- std::wstring w_strValue2 = w_strValue.c_str();
- std::wstring w_strChange2 = w_strChange.c_str();
- std::wstring w_strSelected;
- if (-1 != pEvent->SelStart())
- w_strSelected = w_strValue2.substr(pEvent->SelStart(),
- (pEvent->SelEnd() - pEvent->SelStart()));
- bool bHasSign = (w_strValue2.find('-') != std::wstring::npos) &&
- (w_strSelected.find('-') == std::wstring::npos);
- if (bHasSign) {
- // can't insert "change" in front to sign postion.
- if (pEvent->SelStart() == 0) {
- FX_BOOL& bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- }
-
- char cSep = L'.';
-
- switch (iSepStyle) {
- case 0:
- case 1:
- cSep = L'.';
- break;
- case 2:
- case 3:
- cSep = L',';
- break;
- }
-
- bool bHasSep = (w_strValue2.find(cSep) != std::wstring::npos);
- for (std::wstring::iterator it = w_strChange2.begin();
- it != w_strChange2.end(); it++) {
- if (*it == cSep) {
- if (bHasSep) {
- FX_BOOL& bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- bHasSep = TRUE;
- continue;
- }
- if (*it == L'-') {
- if (bHasSign) {
- FX_BOOL& bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- // sign's position is not correct
- if (it != w_strChange2.begin()) {
- FX_BOOL& bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- if (pEvent->SelStart() != 0) {
- FX_BOOL& bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- bHasSign = TRUE;
- continue;
- }
-
- if (!FXSYS_iswdigit(*it)) {
- FX_BOOL& bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- }
-
- std::wstring w_prefix = w_strValue2.substr(0, pEvent->SelStart());
- std::wstring w_postfix;
- if (pEvent->SelEnd() < (int)w_strValue2.length())
- w_postfix = w_strValue2.substr(pEvent->SelEnd());
- w_strValue2 = w_prefix + w_strChange2 + w_postfix;
- w_strValue = w_strValue2.c_str();
- val = w_strValue;
- return TRUE;
-}
-
-// function AFPercent_Format(nDec, sepStyle)
-FX_BOOL CJS_PublicMethods::AFPercent_Format(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
-#if _FX_OS_ != _FX_ANDROID_
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (params.size() != 2) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- if (!pEvent->m_pValue)
- return FALSE;
-
- CFX_WideString& Value = pEvent->Value();
- CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
- if (strValue.IsEmpty())
- return TRUE;
-
- int iDec = params[0].ToInt();
- if (iDec < 0)
- iDec = -iDec;
-
- int iSepStyle = params[1].ToInt();
- if (iSepStyle < 0 || iSepStyle > 3)
- iSepStyle = 0;
-
- //////////////////////////////////////////////////////
- // for processing decimal places
- double dValue = atof(strValue);
- dValue *= 100;
- if (iDec > 0)
- dValue += DOUBLE_CORRECT;
-
- int iDec2;
- int iNegative = 0;
- strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- if (strValue.IsEmpty()) {
- dValue = 0;
- strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- }
-
- if (iDec2 < 0) {
- for (int iNum = 0; iNum < abs(iDec2); iNum++) {
- strValue = "0" + strValue;
- }
- iDec2 = 0;
- }
- int iMax = strValue.GetLength();
- if (iDec2 > iMax) {
- for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) {
- strValue += "0";
- }
- iMax = iDec2 + 1;
- }
- ///////////////////////////////////////////////////////
- // for processing seperator style
- if (iDec2 < iMax) {
- if (iSepStyle == 0 || iSepStyle == 1) {
- strValue.Insert(iDec2, '.');
- iMax++;
- } else if (iSepStyle == 2 || iSepStyle == 3) {
- strValue.Insert(iDec2, ',');
- iMax++;
- }
-
- if (iDec2 == 0)
- strValue.Insert(iDec2, '0');
- }
- if (iSepStyle == 0 || iSepStyle == 2) {
- char cSeperator;
- if (iSepStyle == 0)
- cSeperator = ',';
- else
- cSeperator = '.';
-
- for (int iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) {
- strValue.Insert(iDecPositive, cSeperator);
- iMax++;
- }
- }
- ////////////////////////////////////////////////////////////////////
- // negative mark
- if (iNegative)
- strValue = "-" + strValue;
- strValue += "%";
- Value = CFX_WideString::FromLocal(strValue);
-#endif
- return TRUE;
-}
-// AFPercent_Keystroke(nDec, sepStyle)
-FX_BOOL CJS_PublicMethods::AFPercent_Keystroke(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return AFNumber_Keystroke(cc, params, vRet, sError);
-}
-
-// function AFDate_FormatEx(cFormat)
-FX_BOOL CJS_PublicMethods::AFDate_FormatEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- if (!pEvent->m_pValue)
- return FALSE;
-
- CFX_WideString& val = pEvent->Value();
- CFX_WideString strValue = val;
- if (strValue.IsEmpty())
- return TRUE;
-
- CFX_WideString sFormat = params[0].ToCFXWideString();
- double dDate = 0.0f;
-
- if (strValue.Find(L"GMT") != -1) {
- // for GMT format time
- // such as "Tue Aug 11 14:24:16 GMT+08002009"
- dDate = MakeInterDate(strValue);
- } else {
- dDate = MakeRegularDate(strValue, sFormat, nullptr);
- }
-
- if (JS_PortIsNan(dDate)) {
- CFX_WideString swMsg;
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(),
- sFormat.c_str());
- Alert(pContext, swMsg.c_str());
- return FALSE;
- }
-
- val = MakeFormatDate(dDate, sFormat);
- return TRUE;
-}
-
-double CJS_PublicMethods::MakeInterDate(CFX_WideString strValue) {
- std::vector<CFX_WideString> wsArray;
- CFX_WideString sTemp = L"";
- for (int i = 0; i < strValue.GetLength(); ++i) {
- FX_WCHAR c = strValue.GetAt(i);
- if (c == L' ' || c == L':') {
- wsArray.push_back(sTemp);
- sTemp = L"";
- continue;
- }
- sTemp += c;
- }
- wsArray.push_back(sTemp);
- if (wsArray.size() != 8)
- return 0;
-
- int nMonth = 1;
- sTemp = wsArray[1];
- if (sTemp.Compare(L"Jan") == 0)
- nMonth = 1;
- else if (sTemp.Compare(L"Feb") == 0)
- nMonth = 2;
- else if (sTemp.Compare(L"Mar") == 0)
- nMonth = 3;
- else if (sTemp.Compare(L"Apr") == 0)
- nMonth = 4;
- else if (sTemp.Compare(L"May") == 0)
- nMonth = 5;
- else if (sTemp.Compare(L"Jun") == 0)
- nMonth = 6;
- else if (sTemp.Compare(L"Jul") == 0)
- nMonth = 7;
- else if (sTemp.Compare(L"Aug") == 0)
- nMonth = 8;
- else if (sTemp.Compare(L"Sep") == 0)
- nMonth = 9;
- else if (sTemp.Compare(L"Oct") == 0)
- nMonth = 10;
- else if (sTemp.Compare(L"Nov") == 0)
- nMonth = 11;
- else if (sTemp.Compare(L"Dec") == 0)
- nMonth = 12;
-
- int nDay = FX_atof(wsArray[2]);
- int nHour = FX_atof(wsArray[3]);
- int nMin = FX_atof(wsArray[4]);
- int nSec = FX_atof(wsArray[5]);
- int nYear = FX_atof(wsArray[7]);
- double dRet = JS_MakeDate(JS_MakeDay(nYear, nMonth - 1, nDay),
- JS_MakeTime(nHour, nMin, nSec, 0));
- if (JS_PortIsNan(dRet))
- dRet = JS_DateParse(strValue.c_str());
-
- return dRet;
-}
-
-// AFDate_KeystrokeEx(cFormat)
-FX_BOOL CJS_PublicMethods::AFDate_KeystrokeEx(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (params.size() != 1) {
- sError = L"AFDate_KeystrokeEx's parameters' size r not correct";
- return FALSE;
- }
-
- if (pEvent->WillCommit()) {
- if (!pEvent->m_pValue)
- return FALSE;
- CFX_WideString strValue = pEvent->Value();
- if (strValue.IsEmpty())
- return TRUE;
-
- CFX_WideString sFormat = params[0].ToCFXWideString();
- bool bWrongFormat = FALSE;
- double dRet = MakeRegularDate(strValue, sFormat, &bWrongFormat);
- if (bWrongFormat || JS_PortIsNan(dRet)) {
- CFX_WideString swMsg;
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(),
- sFormat.c_str());
- Alert(pContext, swMsg.c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
- }
- }
- return TRUE;
-}
-
-FX_BOOL CJS_PublicMethods::AFDate_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"m/d",
- L"m/d/yy",
- L"mm/dd/yy",
- L"mm/yy",
- L"d-mmm",
- L"d-mmm-yy",
- L"dd-mmm-yy",
- L"yy-mm-dd",
- L"mmm-yy",
- L"mmmm-yy",
- L"mmm d, yyyy",
- L"mmmm d, yyyy",
- L"m/d/yy h:MM tt",
- L"m/d/yy HH:MM"};
-
- if (iIndex < 0 || (static_cast<size_t>(iIndex) >= FX_ArraySize(cFormats)))
- iIndex = 0;
-
- std::vector<CJS_Value> newParams;
- newParams.push_back(
- CJS_Value(CJS_Runtime::FromContext(cc), cFormats[iIndex]));
- return AFDate_FormatEx(cc, newParams, vRet, sError);
-}
-
-// AFDate_KeystrokeEx(cFormat)
-FX_BOOL CJS_PublicMethods::AFDate_Keystroke(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"m/d",
- L"m/d/yy",
- L"mm/dd/yy",
- L"mm/yy",
- L"d-mmm",
- L"d-mmm-yy",
- L"dd-mmm-yy",
- L"yy-mm-dd",
- L"mmm-yy",
- L"mmmm-yy",
- L"mmm d, yyyy",
- L"mmmm d, yyyy",
- L"m/d/yy h:MM tt",
- L"m/d/yy HH:MM"};
-
- if (iIndex < 0 || (static_cast<size_t>(iIndex) >= FX_ArraySize(cFormats)))
- iIndex = 0;
-
- std::vector<CJS_Value> newParams;
- newParams.push_back(
- CJS_Value(CJS_Runtime::FromContext(cc), cFormats[iIndex]));
- return AFDate_KeystrokeEx(cc, newParams, vRet, sError);
-}
-
-// function AFTime_Format(ptf)
-FX_BOOL CJS_PublicMethods::AFTime_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
- L"h:MM:ss tt"};
-
- if (iIndex < 0 || (static_cast<size_t>(iIndex) >= FX_ArraySize(cFormats)))
- iIndex = 0;
-
- std::vector<CJS_Value> newParams;
- newParams.push_back(
- CJS_Value(CJS_Runtime::FromContext(cc), cFormats[iIndex]));
- return AFDate_FormatEx(cc, newParams, vRet, sError);
-}
-
-FX_BOOL CJS_PublicMethods::AFTime_Keystroke(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
- L"h:MM:ss tt"};
-
- if (iIndex < 0 || (static_cast<size_t>(iIndex) >= FX_ArraySize(cFormats)))
- iIndex = 0;
-
- std::vector<CJS_Value> newParams;
- newParams.push_back(
- CJS_Value(CJS_Runtime::FromContext(cc), cFormats[iIndex]));
- return AFDate_KeystrokeEx(cc, newParams, vRet, sError);
-}
-
-FX_BOOL CJS_PublicMethods::AFTime_FormatEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return AFDate_FormatEx(cc, params, vRet, sError);
-}
-
-FX_BOOL CJS_PublicMethods::AFTime_KeystrokeEx(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return AFDate_KeystrokeEx(cc, params, vRet, sError);
-}
-
-// function AFSpecial_Format(psf)
-FX_BOOL CJS_PublicMethods::AFSpecial_Format(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
-
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- std::string cFormat;
- int iIndex = params[0].ToInt();
-
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- if (!pEvent->m_pValue)
- return FALSE;
- CFX_WideString& Value = pEvent->Value();
- std::string strSrc = CFX_ByteString::FromUnicode(Value).c_str();
-
- switch (iIndex) {
- case 0:
- cFormat = "99999";
- break;
- case 1:
- cFormat = "99999-9999";
- break;
- case 2: {
- std::string NumberStr;
- util::printx("9999999999", strSrc, NumberStr);
- if (NumberStr.length() >= 10)
- cFormat = "(999) 999-9999";
- else
- cFormat = "999-9999";
- break;
- }
- case 3:
- cFormat = "999-99-9999";
- break;
- }
-
- std::string strDes;
- util::printx(cFormat, strSrc, strDes);
- Value = CFX_WideString::FromLocal(strDes.c_str());
- return TRUE;
-}
-
-// function AFSpecial_KeystrokeEx(mask)
-FX_BOOL CJS_PublicMethods::AFSpecial_KeystrokeEx(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (params.size() < 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if (!pEvent->m_pValue)
- return FALSE;
- CFX_WideString& valEvent = pEvent->Value();
-
- CFX_WideString wstrMask = params[0].ToCFXWideString();
- if (wstrMask.IsEmpty())
- return TRUE;
-
- const size_t wstrMaskLen = wstrMask.GetLength();
- const std::wstring wstrValue = valEvent.c_str();
-
- if (pEvent->WillCommit()) {
- if (wstrValue.empty())
- return TRUE;
- size_t iIndexMask = 0;
- for (const auto& w_Value : wstrValue) {
- if (!maskSatisfied(w_Value, wstrMask[iIndexMask]))
- break;
- iIndexMask++;
- }
-
- if (iIndexMask != wstrMaskLen ||
- (iIndexMask != wstrValue.size() && wstrMaskLen != 0)) {
- Alert(
- pContext,
- JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE).c_str());
- pEvent->Rc() = FALSE;
- }
- return TRUE;
- }
-
- CFX_WideString& wideChange = pEvent->Change();
- std::wstring wChange = wideChange.c_str();
- if (wChange.empty())
- return TRUE;
-
- int iIndexMask = pEvent->SelStart();
-
- size_t combined_len = wstrValue.length() + wChange.length() -
- (pEvent->SelEnd() - pEvent->SelStart());
- if (combined_len > wstrMaskLen) {
- Alert(pContext,
- JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
- }
-
- if (iIndexMask >= wstrMaskLen && (!wChange.empty())) {
- Alert(pContext,
- JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
- }
-
- for (std::wstring::iterator it = wChange.begin(); it != wChange.end(); it++) {
- if (iIndexMask >= wstrMaskLen) {
- Alert(pContext,
- JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
- }
- wchar_t w_Mask = wstrMask[iIndexMask];
- if (!isReservedMaskChar(w_Mask)) {
- *it = w_Mask;
- }
- wchar_t w_Change = *it;
- if (!maskSatisfied(w_Change, w_Mask)) {
- pEvent->Rc() = FALSE;
- return TRUE;
- }
- iIndexMask++;
- }
-
- wideChange = wChange.c_str();
- return TRUE;
-}
-
-// function AFSpecial_Keystroke(psf)
-FX_BOOL CJS_PublicMethods::AFSpecial_Keystroke(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- if (!pEvent->m_pValue)
- return FALSE;
-
- std::string cFormat;
- int iIndex = params[0].ToInt();
- CFX_WideString& val = pEvent->Value();
- std::string strSrc = CFX_ByteString::FromUnicode(val).c_str();
- std::wstring wstrChange = pEvent->Change().c_str();
-
- switch (iIndex) {
- case 0:
- cFormat = "99999";
- break;
- case 1:
- // cFormat = "99999-9999";
- cFormat = "999999999";
- break;
- case 2: {
- std::string NumberStr;
- util::printx("9999999999", strSrc, NumberStr);
- if (strSrc.length() + wstrChange.length() > 7)
- // cFormat = "(999) 999-9999";
- cFormat = "9999999999";
- else
- // cFormat = "999-9999";
- cFormat = "9999999";
- break;
- }
- case 3:
- // cFormat = "999-99-9999";
- cFormat = "999999999";
- break;
- }
-
- std::vector<CJS_Value> params2;
- params2.push_back(CJS_Value(CJS_Runtime::FromContext(cc), cFormat.c_str()));
- return AFSpecial_KeystrokeEx(cc, params2, vRet, sError);
-}
-
-FX_BOOL CJS_PublicMethods::AFMergeChange(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEventHandler = pContext->GetEventHandler();
-
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString swValue;
- if (pEventHandler->m_pValue)
- swValue = pEventHandler->Value();
-
- if (pEventHandler->WillCommit()) {
- vRet = swValue.c_str();
- return TRUE;
- }
-
- CFX_WideString prefix, postfix;
-
- if (pEventHandler->SelStart() >= 0)
- prefix = swValue.Mid(0, pEventHandler->SelStart());
- else
- prefix = L"";
-
- if (pEventHandler->SelEnd() >= 0 &&
- pEventHandler->SelEnd() <= swValue.GetLength())
- postfix = swValue.Mid(pEventHandler->SelEnd(),
- swValue.GetLength() - pEventHandler->SelEnd());
- else
- postfix = L"";
-
- vRet = (prefix + pEventHandler->Change() + postfix).c_str();
-
- return TRUE;
-}
-
-FX_BOOL CJS_PublicMethods::AFParseDateEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext);
-
- if (params.size() != 2) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString sValue = params[0].ToCFXWideString();
- CFX_WideString sFormat = params[1].ToCFXWideString();
-
- double dDate = MakeRegularDate(sValue, sFormat, nullptr);
-
- if (JS_PortIsNan(dDate)) {
- CFX_WideString swMsg;
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(),
- sFormat.c_str());
- Alert((CJS_Context*)cc, swMsg.c_str());
- return FALSE;
- }
-
- vRet = dDate;
- return TRUE;
-}
-
-FX_BOOL CJS_PublicMethods::AFSimple(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (params.size() != 3) {
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext);
-
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- vRet = (double)AF_Simple(params[0].ToCFXWideString().c_str(),
- params[1].ToDouble(), params[2].ToDouble());
- return TRUE;
-}
-
-FX_BOOL CJS_PublicMethods::AFMakeNumber(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- CFX_WideString ws = params[0].ToCFXWideString();
- ws.Replace(L",", L".");
- vRet = ws;
- vRet.MaybeCoerceToNumber();
- if (vRet.GetType() != CJS_Value::VT_number)
- vRet = 0;
- return TRUE;
-}
-
-FX_BOOL CJS_PublicMethods::AFSimple_Calculate(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 2) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_Value params1 = params[1];
- if (!params1.IsArrayObject() && params1.GetType() != CJS_Value::VT_string) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CPDFSDK_Document* pReaderDoc = pContext->GetReaderDocument();
- CPDFSDK_InterForm* pReaderInterForm = pReaderDoc->GetInterForm();
- CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
-
- CFX_WideString sFunction = params[0].ToCFXWideString();
- double dValue = wcscmp(sFunction.c_str(), L"PRD") == 0 ? 1.0 : 0.0;
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array FieldNameArray = AF_MakeArrayFromList(pRuntime, params1);
- int nFieldsCount = 0;
-
- for (int i = 0, isz = FieldNameArray.GetLength(); i < isz; i++) {
- CJS_Value jsValue(pRuntime);
- FieldNameArray.GetElement(i, jsValue);
- CFX_WideString wsFieldName = jsValue.ToCFXWideString();
-
- for (int j = 0, jsz = pInterForm->CountFields(wsFieldName); j < jsz; j++) {
- if (CPDF_FormField* pFormField = pInterForm->GetField(j, wsFieldName)) {
- double dTemp = 0.0;
- switch (pFormField->GetFieldType()) {
- case FIELDTYPE_TEXTFIELD:
- case FIELDTYPE_COMBOBOX: {
- CFX_WideString trimmed = pFormField->GetValue();
- trimmed.TrimRight();
- trimmed.TrimLeft();
- dTemp = FX_atof(trimmed);
- } break;
- case FIELDTYPE_PUSHBUTTON: {
- dTemp = 0.0;
- } break;
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON: {
- dTemp = 0.0;
- for (int c = 0, csz = pFormField->CountControls(); c < csz; c++) {
- if (CPDF_FormControl* pFormCtrl = pFormField->GetControl(c)) {
- if (pFormCtrl->IsChecked()) {
- CFX_WideString trimmed = pFormCtrl->GetExportValue();
- trimmed.TrimRight();
- trimmed.TrimLeft();
- dTemp = FX_atof(trimmed);
- break;
- }
- }
- }
- } break;
- case FIELDTYPE_LISTBOX: {
- if (pFormField->CountSelectedItems() <= 1) {
- CFX_WideString trimmed = pFormField->GetValue();
- trimmed.TrimRight();
- trimmed.TrimLeft();
- dTemp = FX_atof(trimmed);
- }
- } break;
- default:
- break;
- }
-
- if (i == 0 && j == 0 && (wcscmp(sFunction.c_str(), L"MIN") == 0 ||
- wcscmp(sFunction.c_str(), L"MAX") == 0))
- dValue = dTemp;
-
- dValue = AF_Simple(sFunction.c_str(), dValue, dTemp);
-
- nFieldsCount++;
- }
- }
- }
-
- if (wcscmp(sFunction.c_str(), L"AVG") == 0 && nFieldsCount > 0)
- dValue /= nFieldsCount;
-
- dValue = (double)floor(dValue * FXSYS_pow((double)10, (double)6) + 0.49) /
- FXSYS_pow((double)10, (double)6);
- CJS_Value jsValue(pRuntime, dValue);
- if (pContext->GetEventHandler()->m_pValue)
- pContext->GetEventHandler()->Value() = jsValue.ToCFXWideString();
-
- return TRUE;
-}
-
-/* This function validates the current event to ensure that its value is
-** within the specified range. */
-
-FX_BOOL CJS_PublicMethods::AFRange_Validate(
- IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (params.size() != 4) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if (!pEvent->m_pValue)
- return FALSE;
- if (pEvent->Value().IsEmpty())
- return TRUE;
- double dEentValue = atof(CFX_ByteString::FromUnicode(pEvent->Value()));
- FX_BOOL bGreaterThan = params[0].ToBool();
- double dGreaterThan = params[1].ToDouble();
- FX_BOOL bLessThan = params[2].ToBool();
- double dLessThan = params[3].ToDouble();
- CFX_WideString swMsg;
-
- if (bGreaterThan && bLessThan) {
- if (dEentValue < dGreaterThan || dEentValue > dLessThan)
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE1).c_str(),
- params[1].ToCFXWideString().c_str(),
- params[3].ToCFXWideString().c_str());
- } else if (bGreaterThan) {
- if (dEentValue < dGreaterThan)
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE2).c_str(),
- params[1].ToCFXWideString().c_str());
- } else if (bLessThan) {
- if (dEentValue > dLessThan)
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE3).c_str(),
- params[3].ToCFXWideString().c_str());
- }
-
- if (!swMsg.IsEmpty()) {
- Alert(pContext, swMsg.c_str());
- pEvent->Rc() = FALSE;
- }
- return TRUE;
-}
-
-FX_BOOL CJS_PublicMethods::AFExtractNums(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array nums(pRuntime);
-
- CFX_WideString str = params[0].ToCFXWideString();
- CFX_WideString sPart;
-
- if (str.GetAt(0) == L'.' || str.GetAt(0) == L',')
- str = L"0" + str;
-
- int nIndex = 0;
- for (int i = 0, sz = str.GetLength(); i < sz; i++) {
- FX_WCHAR wc = str.GetAt(i);
- if (FXSYS_iswdigit(wc)) {
- sPart += wc;
- } else {
- if (sPart.GetLength() > 0) {
- nums.SetElement(nIndex, CJS_Value(pRuntime, sPart.c_str()));
- sPart = L"";
- nIndex++;
- }
- }
- }
-
- if (sPart.GetLength() > 0) {
- nums.SetElement(nIndex, CJS_Value(pRuntime, sPart.c_str()));
- }
-
- if (nums.GetLength() > 0)
- vRet = nums;
- else
- vRet.SetNull();
-
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/PublicMethods.h b/fpdfsdk/src/javascript/PublicMethods.h
deleted file mode 100644
index d0c81e03e3..0000000000
--- a/fpdfsdk/src/javascript/PublicMethods.h
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_PUBLICMETHODS_H_
-#define FPDFSDK_SRC_JAVASCRIPT_PUBLICMETHODS_H_
-
-#include <string>
-#include <vector>
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class CJS_PublicMethods : public CJS_Object {
- public:
- explicit CJS_PublicMethods(v8::Local<v8::Object> pObject)
- : CJS_Object(pObject) {}
- ~CJS_PublicMethods() override {}
-
- public:
- static FX_BOOL AFNumber_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFNumber_Keystroke(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFPercent_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFPercent_Keystroke(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFDate_FormatEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFDate_KeystrokeEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFDate_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFDate_Keystroke(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFTime_FormatEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError); //
- static FX_BOOL AFTime_KeystrokeEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFTime_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFTime_Keystroke(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFSpecial_Format(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFSpecial_Keystroke(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFSpecial_KeystrokeEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError); //
- static FX_BOOL AFSimple(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFMakeNumber(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFSimple_Calculate(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFRange_Validate(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFMergeChange(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFParseDateEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- static FX_BOOL AFExtractNums(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-
- public:
- JS_STATIC_GLOBAL_FUN(AFNumber_Format);
- JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFPercent_Format);
- JS_STATIC_GLOBAL_FUN(AFPercent_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFDate_FormatEx);
- JS_STATIC_GLOBAL_FUN(AFDate_KeystrokeEx);
- JS_STATIC_GLOBAL_FUN(AFDate_Format);
- JS_STATIC_GLOBAL_FUN(AFDate_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFTime_FormatEx);
- JS_STATIC_GLOBAL_FUN(AFTime_KeystrokeEx);
- JS_STATIC_GLOBAL_FUN(AFTime_Format);
- JS_STATIC_GLOBAL_FUN(AFTime_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFSpecial_Format);
- JS_STATIC_GLOBAL_FUN(AFSpecial_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFSpecial_KeystrokeEx);
- JS_STATIC_GLOBAL_FUN(AFSimple);
- JS_STATIC_GLOBAL_FUN(AFMakeNumber);
- JS_STATIC_GLOBAL_FUN(AFSimple_Calculate);
- JS_STATIC_GLOBAL_FUN(AFRange_Validate);
- JS_STATIC_GLOBAL_FUN(AFMergeChange);
- JS_STATIC_GLOBAL_FUN(AFParseDateEx);
- JS_STATIC_GLOBAL_FUN(AFExtractNums);
-
- JS_STATIC_DECLARE_GLOBAL_FUN();
-
- public:
- static int ParseStringInteger(const CFX_WideString& string,
- int nStart,
- int& nSkip,
- int nMaxStep);
- static CFX_WideString ParseStringString(const CFX_WideString& string,
- int nStart,
- int& nSkip);
- static double MakeRegularDate(const CFX_WideString& value,
- const CFX_WideString& format,
- bool* bWrongFormat);
- static CFX_WideString MakeFormatDate(double dDate,
- const CFX_WideString& format);
- static double ParseNormalDate(const CFX_WideString& value,
- bool* bWrongFormat);
- static double MakeInterDate(CFX_WideString strValue);
-
- public:
- static CFX_WideString StrLTrim(const FX_WCHAR* pStr);
- static CFX_WideString StrRTrim(const FX_WCHAR* pStr);
- static CFX_WideString StrTrim(const FX_WCHAR* pStr);
-
- static CFX_ByteString StrLTrim(const FX_CHAR* pStr);
- static CFX_ByteString StrRTrim(const FX_CHAR* pStr);
- static CFX_ByteString StrTrim(const FX_CHAR* pStr);
-
- static FX_BOOL IsNumber(const FX_CHAR* string);
- static FX_BOOL IsNumber(const FX_WCHAR* string);
-
- static FX_BOOL maskSatisfied(wchar_t c_Change, wchar_t c_Mask);
- static FX_BOOL isReservedMaskChar(wchar_t ch);
-
- static double AF_Simple(const FX_WCHAR* sFuction,
- double dValue1,
- double dValue2);
- static CJS_Array AF_MakeArrayFromList(CJS_Runtime* pRuntime, CJS_Value val);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_PUBLICMETHODS_H_
diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp
deleted file mode 100644
index 767555ff3b..0000000000
--- a/fpdfsdk/src/javascript/app.cpp
+++ /dev/null
@@ -1,750 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/app.h"
-
-#include <memory>
-#include <vector>
-
-#include "fpdfsdk/include/fsdk_mgr.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/Document.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/resource.h"
-
-BEGIN_JS_STATIC_CONST(CJS_TimerObj)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_TimerObj)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_TimerObj)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_TimerObj, TimerObj)
-
-TimerObj::TimerObj(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject), m_pTimer(NULL) {}
-
-TimerObj::~TimerObj() {}
-
-void TimerObj::SetTimer(CJS_Timer* pTimer) {
- m_pTimer = pTimer;
-}
-
-CJS_Timer* TimerObj::GetTimer() const {
- return m_pTimer;
-}
-
-#define JS_STR_VIEWERTYPE L"pdfium"
-#define JS_STR_VIEWERVARIATION L"Full"
-#define JS_STR_PLATFORM L"WIN"
-#define JS_STR_LANGUANGE L"ENU"
-#define JS_NUM_VIEWERVERSION 8
-#ifdef PDF_ENABLE_XFA
-#define JS_NUM_VIEWERVERSION_XFA 11
-#endif // PDF_ENABLE_XFA
-#define JS_NUM_FORMSVERSION 7
-
-BEGIN_JS_STATIC_CONST(CJS_App)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_App)
-JS_STATIC_PROP_ENTRY(activeDocs)
-JS_STATIC_PROP_ENTRY(calculate)
-JS_STATIC_PROP_ENTRY(formsVersion)
-JS_STATIC_PROP_ENTRY(fs)
-JS_STATIC_PROP_ENTRY(fullscreen)
-JS_STATIC_PROP_ENTRY(language)
-JS_STATIC_PROP_ENTRY(media)
-JS_STATIC_PROP_ENTRY(platform)
-JS_STATIC_PROP_ENTRY(runtimeHighlight)
-JS_STATIC_PROP_ENTRY(viewerType)
-JS_STATIC_PROP_ENTRY(viewerVariation)
-JS_STATIC_PROP_ENTRY(viewerVersion)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_App)
-JS_STATIC_METHOD_ENTRY(alert)
-JS_STATIC_METHOD_ENTRY(beep)
-JS_STATIC_METHOD_ENTRY(browseForDoc)
-JS_STATIC_METHOD_ENTRY(clearInterval)
-JS_STATIC_METHOD_ENTRY(clearTimeOut)
-JS_STATIC_METHOD_ENTRY(execDialog)
-JS_STATIC_METHOD_ENTRY(execMenuItem)
-JS_STATIC_METHOD_ENTRY(findComponent)
-JS_STATIC_METHOD_ENTRY(goBack)
-JS_STATIC_METHOD_ENTRY(goForward)
-JS_STATIC_METHOD_ENTRY(launchURL)
-JS_STATIC_METHOD_ENTRY(mailMsg)
-JS_STATIC_METHOD_ENTRY(newFDF)
-JS_STATIC_METHOD_ENTRY(newDoc)
-JS_STATIC_METHOD_ENTRY(openDoc)
-JS_STATIC_METHOD_ENTRY(openFDF)
-JS_STATIC_METHOD_ENTRY(popUpMenuEx)
-JS_STATIC_METHOD_ENTRY(popUpMenu)
-JS_STATIC_METHOD_ENTRY(response)
-JS_STATIC_METHOD_ENTRY(setInterval)
-JS_STATIC_METHOD_ENTRY(setTimeOut)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_App, app)
-
-app::app(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject), m_bCalculate(true), m_bRuntimeHighLight(false) {}
-
-app::~app() {
- for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++)
- delete m_aTimer[i];
-
- m_aTimer.RemoveAll();
-}
-
-FX_BOOL app::activeDocs(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CPDFDoc_Environment* pApp = pContext->GetReaderApp();
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument();
- CJS_Array aDocs(pRuntime);
- if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) {
- CJS_Document* pJSDocument = NULL;
- if (pDoc == pCurDoc) {
- v8::Local<v8::Object> pObj = FXJS_GetThisObj(pRuntime->GetIsolate());
- if (FXJS_GetObjDefnID(pObj) == CJS_Document::g_nObjDefnID)
- pJSDocument =
- (CJS_Document*)FXJS_GetPrivate(pRuntime->GetIsolate(), pObj);
- } else {
- v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_Document::g_nObjDefnID);
- pJSDocument =
- (CJS_Document*)FXJS_GetPrivate(pRuntime->GetIsolate(), pObj);
- ASSERT(pJSDocument);
- }
- aDocs.SetElement(0, CJS_Value(pRuntime, pJSDocument));
- }
- if (aDocs.GetLength() > 0)
- vp << aDocs;
- else
- vp.SetNull();
-
- return TRUE;
-}
-
-FX_BOOL app::calculate(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- bool bVP;
- vp >> bVP;
- m_bCalculate = (FX_BOOL)bVP;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CPDFDoc_Environment* pApp = pContext->GetReaderApp();
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CJS_Array aDocs(pRuntime);
- if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument())
- pDoc->GetInterForm()->EnableCalculate((FX_BOOL)m_bCalculate);
- } else {
- vp << (bool)m_bCalculate;
- }
- return TRUE;
-}
-
-FX_BOOL app::formsVersion(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- vp << JS_NUM_FORMSVERSION;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::viewerType(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- vp << JS_STR_VIEWERTYPE;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::viewerVariation(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsGetting()) {
- vp << JS_STR_VIEWERVARIATION;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::viewerVersion(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-#ifdef PDF_ENABLE_XFA
- CJS_Context* pContext = (CJS_Context*)cc;
- CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument();
- CPDFXFA_Document* pDoc = pCurDoc->GetXFADocument();
- if (pDoc->GetDocType() == 1 || pDoc->GetDocType() == 2) {
- vp << JS_NUM_VIEWERVERSION_XFA;
- return TRUE;
- }
-#endif // PDF_ENABLE_XFA
- vp << JS_NUM_VIEWERVERSION;
- return TRUE;
-}
-
-FX_BOOL app::platform(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-#ifdef PDF_ENABLE_XFA
- CPDFDoc_Environment* pEnv =
- static_cast<CJS_Context*>(cc)->GetJSRuntime()->GetReaderApp();
- if (!pEnv)
- return FALSE;
- CFX_WideString platfrom = pEnv->FFI_GetPlatform();
- if (!platfrom.IsEmpty()) {
- vp << platfrom;
- return TRUE;
- }
-#endif
- vp << JS_STR_PLATFORM;
- return TRUE;
-}
-
-FX_BOOL app::language(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-#ifdef PDF_ENABLE_XFA
- CPDFDoc_Environment* pEnv =
- static_cast<CJS_Context*>(cc)->GetJSRuntime()->GetReaderApp();
- if (!pEnv)
- return FALSE;
- CFX_WideString language = pEnv->FFI_GetLanguage();
- if (!language.IsEmpty()) {
- vp << language;
- return TRUE;
- }
-#endif
- vp << JS_STR_LANGUANGE;
- return TRUE;
-}
-
-// creates a new fdf object that contains no data
-// comment: need reader support
-// note:
-// CFDF_Document * CPDFDoc_Environment::NewFDF();
-FX_BOOL app::newFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-// opens a specified pdf document and returns its document object
-// comment:need reader support
-// note: as defined in js reference, the proto of this function's fourth
-// parmeters, how old an fdf document while do not show it.
-// CFDF_Document * CPDFDoc_Environment::OpenFDF(string strPath,bool bUserConv);
-
-FX_BOOL app::openFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL app::alert(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- std::vector<CJS_Value> newParams = JS_ExpandKeywordParams(
- pRuntime, params, 4, L"cMsg", L"nIcon", L"nType", L"cTitle");
-
- if (newParams[0].GetType() == CJS_Value::VT_unknown) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString swMsg;
- if (newParams[0].GetType() == CJS_Value::VT_object) {
- CJS_Array carray(pRuntime);
- if (newParams[0].ConvertToArray(carray)) {
- swMsg = L"[";
- CJS_Value element(pRuntime);
- for (int i = 0; i < carray.GetLength(); ++i) {
- if (i)
- swMsg += L", ";
- carray.GetElement(i, element);
- swMsg += element.ToCFXWideString();
- }
- swMsg += L"]";
- } else {
- swMsg = newParams[0].ToCFXWideString();
- }
- } else {
- swMsg = newParams[0].ToCFXWideString();
- }
-
- int iIcon = 0;
- if (newParams[1].GetType() != CJS_Value::VT_unknown)
- iIcon = newParams[1].ToInt();
-
- int iType = 0;
- if (newParams[2].GetType() != CJS_Value::VT_unknown)
- iType = newParams[2].ToInt();
-
- CFX_WideString swTitle;
- if (newParams[3].GetType() != CJS_Value::VT_unknown)
- swTitle = newParams[3].ToCFXWideString();
- else
- swTitle = JSGetStringFromID(pContext, IDS_STRING_JSALERT);
-
- pRuntime->BeginBlock();
- vRet = MsgBox(pRuntime->GetReaderApp(), swMsg.c_str(), swTitle.c_str(), iType,
- iIcon);
- pRuntime->EndBlock();
- return TRUE;
-}
-
-FX_BOOL app::beep(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (params.size() == 1) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp();
- pEnv->JS_appBeep(params[0].ToInt());
- return TRUE;
- }
-
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
- return FALSE;
-}
-
-FX_BOOL app::findComponent(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL app::popUpMenuEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL app::fs(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL app::setInterval(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() > 2 || params.size() == 0) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L"";
- if (script.IsEmpty()) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
- return TRUE;
- }
-
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- FX_DWORD dwInterval = params.size() > 1 ? params[1].ToInt() : 1000;
-
- CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
- ASSERT(pApp);
- CJS_Timer* pTimer =
- new CJS_Timer(this, pApp, pRuntime, 0, script, dwInterval, 0);
- m_aTimer.Add(pTimer);
-
- v8::Local<v8::Object> pRetObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_TimerObj::g_nObjDefnID);
- CJS_TimerObj* pJS_TimerObj =
- (CJS_TimerObj*)FXJS_GetPrivate(pRuntime->GetIsolate(), pRetObj);
- TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
- pTimerObj->SetTimer(pTimer);
-
- vRet = pRetObj;
- return TRUE;
-}
-
-FX_BOOL app::setTimeOut(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (params.size() > 2 || params.size() == 0) {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
-
- CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L"";
- if (script.IsEmpty()) {
- sError =
- JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
- return TRUE;
- }
-
- FX_DWORD dwTimeOut = params.size() > 1 ? params[1].ToInt() : 1000;
-
- CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
- ASSERT(pApp);
-
- CJS_Timer* pTimer =
- new CJS_Timer(this, pApp, pRuntime, 1, script, dwTimeOut, dwTimeOut);
- m_aTimer.Add(pTimer);
-
- v8::Local<v8::Object> pRetObj = FXJS_NewFxDynamicObj(
- pRuntime->GetIsolate(), pRuntime, CJS_TimerObj::g_nObjDefnID);
- CJS_TimerObj* pJS_TimerObj =
- (CJS_TimerObj*)FXJS_GetPrivate(pRuntime->GetIsolate(), pRetObj);
- TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
- pTimerObj->SetTimer(pTimer);
-
- vRet = pRetObj;
- return TRUE;
-}
-
-FX_BOOL app::clearTimeOut(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if (params[0].GetType() == CJS_Value::VT_fxobject) {
- v8::Local<v8::Object> pObj = params[0].ToV8Object();
- if (FXJS_GetObjDefnID(pObj) == CJS_TimerObj::g_nObjDefnID) {
- if (CJS_Object* pJSObj = params[0].ToCJSObject()) {
- if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) {
- if (CJS_Timer* pTimer = pTimerObj->GetTimer()) {
- pTimer->KillJSTimer();
-
- for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) {
- if (m_aTimer[i] == pTimer) {
- m_aTimer.RemoveAt(i);
- break;
- }
- }
-
- delete pTimer;
- pTimerObj->SetTimer(NULL);
- }
- }
- }
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL app::clearInterval(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if (params[0].GetType() == CJS_Value::VT_fxobject) {
- v8::Local<v8::Object> pObj = params[0].ToV8Object();
- if (FXJS_GetObjDefnID(pObj) == CJS_TimerObj::g_nObjDefnID) {
- if (CJS_Object* pJSObj = params[0].ToCJSObject()) {
- if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) {
- if (CJS_Timer* pTimer = pTimerObj->GetTimer()) {
- pTimer->KillJSTimer();
-
- for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) {
- if (m_aTimer[i] == pTimer) {
- m_aTimer.RemoveAt(i);
- break;
- }
- }
-
- delete pTimer;
- pTimerObj->SetTimer(NULL);
- }
- }
- }
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL app::execMenuItem(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-void app::TimerProc(CJS_Timer* pTimer) {
- CJS_Runtime* pRuntime = pTimer->GetRuntime();
-
- switch (pTimer->GetType()) {
- case 0: // interval
- if (pRuntime)
- RunJsScript(pRuntime, pTimer->GetJScript());
- break;
- case 1:
- if (pTimer->GetTimeOut() > 0) {
- if (pRuntime)
- RunJsScript(pRuntime, pTimer->GetJScript());
- pTimer->KillJSTimer();
- }
- break;
- }
-}
-
-void app::RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript) {
- if (!pRuntime->IsBlocking()) {
- IJS_Context* pContext = pRuntime->NewContext();
- pContext->OnExternal_Exec();
- CFX_WideString wtInfo;
- pContext->RunScript(wsScript, &wtInfo);
- pRuntime->ReleaseContext(pContext);
- }
-}
-
-FX_BOOL app::goBack(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Not supported.
- return TRUE;
-}
-
-FX_BOOL app::goForward(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Not supported.
- return TRUE;
-}
-
-FX_BOOL app::mailMsg(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- std::vector<CJS_Value> newParams =
- JS_ExpandKeywordParams(pRuntime, params, 6, L"bUI", L"cTo", L"cCc",
- L"cBcc", L"cSubject", L"cMsg");
-
- if (newParams[0].GetType() == CJS_Value::VT_unknown) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- bool bUI = newParams[0].ToBool();
-
- CFX_WideString cTo;
- if (newParams[1].GetType() != CJS_Value::VT_unknown) {
- cTo = newParams[1].ToCFXWideString();
- } else {
- if (!bUI) {
- // cTo parameter required when UI not invoked.
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- }
-
- CFX_WideString cCc;
- if (newParams[2].GetType() != CJS_Value::VT_unknown)
- cCc = newParams[2].ToCFXWideString();
-
- CFX_WideString cBcc;
- if (newParams[3].GetType() != CJS_Value::VT_unknown)
- cBcc = newParams[3].ToCFXWideString();
-
- CFX_WideString cSubject;
- if (newParams[4].GetType() != CJS_Value::VT_unknown)
- cSubject = newParams[4].ToCFXWideString();
-
- CFX_WideString cMsg;
- if (newParams[5].GetType() != CJS_Value::VT_unknown)
- cMsg = newParams[5].ToCFXWideString();
-
- pRuntime->BeginBlock();
- pContext->GetReaderApp()->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(),
- cSubject.c_str(), cCc.c_str(),
- cBcc.c_str(), cMsg.c_str());
- pRuntime->EndBlock();
- return TRUE;
-}
-
-FX_BOOL app::launchURL(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL app::runtimeHighlight(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- vp >> m_bRuntimeHighLight;
- } else {
- vp << m_bRuntimeHighLight;
- }
- return TRUE;
-}
-
-FX_BOOL app::fullscreen(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL app::popUpMenu(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL app::browseForDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath) {
- CFX_WideString sRet = L"/";
-
- for (int i = 0, sz = sOldPath.GetLength(); i < sz; i++) {
- wchar_t c = sOldPath.GetAt(i);
- if (c == L':') {
- } else {
- if (c == L'\\') {
- sRet += L"/";
- } else {
- sRet += c;
- }
- }
- }
-
- return sRet;
-}
-
-FX_BOOL app::newDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL app::openDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL app::response(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- std::vector<CJS_Value> newParams =
- JS_ExpandKeywordParams(pRuntime, params, 5, L"cQuestion", L"cTitle",
- L"cDefault", L"bPassword", L"cLabel");
-
- if (newParams[0].GetType() == CJS_Value::VT_unknown) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- CFX_WideString swQuestion = newParams[0].ToCFXWideString();
-
- CFX_WideString swTitle = L"PDF";
- if (newParams[1].GetType() != CJS_Value::VT_unknown)
- swTitle = newParams[1].ToCFXWideString();
-
- CFX_WideString swDefault;
- if (newParams[2].GetType() != CJS_Value::VT_unknown)
- swDefault = newParams[2].ToCFXWideString();
-
- bool bPassword = false;
- if (newParams[3].GetType() != CJS_Value::VT_unknown)
- bPassword = newParams[3].ToBool();
-
- CFX_WideString swLabel;
- if (newParams[4].GetType() != CJS_Value::VT_unknown)
- swLabel = newParams[4].ToCFXWideString();
-
- const int MAX_INPUT_BYTES = 2048;
- std::unique_ptr<char[]> pBuff(new char[MAX_INPUT_BYTES + 2]);
- memset(pBuff.get(), 0, MAX_INPUT_BYTES + 2);
-
- int nLengthBytes = pContext->GetReaderApp()->JS_appResponse(
- swQuestion.c_str(), swTitle.c_str(), swDefault.c_str(), swLabel.c_str(),
- bPassword, pBuff.get(), MAX_INPUT_BYTES);
-
- if (nLengthBytes < 0 || nLengthBytes > MAX_INPUT_BYTES) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG);
- return FALSE;
- }
-
- vRet = CFX_WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.get()),
- nLengthBytes / sizeof(uint16_t))
- .c_str();
- return TRUE;
-}
-
-FX_BOOL app::media(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
- return FALSE;
-}
-
-FX_BOOL app::execDialog(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/app.h b/fpdfsdk/src/javascript/app.h
deleted file mode 100644
index faebcbd5ce..0000000000
--- a/fpdfsdk/src/javascript/app.h
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_APP_H_
-#define FPDFSDK_SRC_JAVASCRIPT_APP_H_
-
-#include <vector>
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class CJS_Runtime;
-class CJS_Timer;
-
-class TimerObj : public CJS_EmbedObj {
- public:
- TimerObj(CJS_Object* pJSObject);
- ~TimerObj() override;
-
- public:
- void SetTimer(CJS_Timer* pTimer);
- CJS_Timer* GetTimer() const;
-
- private:
- CJS_Timer* m_pTimer;
-};
-
-class CJS_TimerObj : public CJS_Object {
- public:
- CJS_TimerObj(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_TimerObj() override {}
-
- DECLARE_JS_CLASS();
-};
-
-class app : public CJS_EmbedObj {
- public:
- app(CJS_Object* pJSObject);
- ~app() override;
-
- public:
- FX_BOOL activeDocs(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL calculate(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL formsVersion(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL fs(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL fullscreen(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL language(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL media(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL platform(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL runtimeHighlight(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL viewerType(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL viewerVariation(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL viewerVersion(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
-
- FX_BOOL alert(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL beep(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL browseForDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL clearInterval(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL clearTimeOut(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL execDialog(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL execMenuItem(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL findComponent(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL goBack(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL goForward(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL launchURL(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL mailMsg(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL newFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL newDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL openDoc(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL openFDF(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL popUpMenuEx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL popUpMenu(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL response(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL setInterval(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL setTimeOut(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-
- static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath);
-
- private:
- // CJS_EmbedObj
- void TimerProc(CJS_Timer* pTimer) override;
- void RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript);
-
- bool m_bCalculate;
- bool m_bRuntimeHighLight;
- CFX_ArrayTemplate<CJS_Timer*> m_aTimer;
-};
-
-class CJS_App : public CJS_Object {
- public:
- explicit CJS_App(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_App() override {}
-
- DECLARE_JS_CLASS();
-
- JS_STATIC_PROP(activeDocs, app);
- JS_STATIC_PROP(calculate, app);
- JS_STATIC_PROP(formsVersion, app);
- JS_STATIC_PROP(fs, app);
- JS_STATIC_PROP(fullscreen, app);
- JS_STATIC_PROP(language, app);
- JS_STATIC_PROP(media, app);
- JS_STATIC_PROP(platform, app);
- JS_STATIC_PROP(runtimeHighlight, app);
- JS_STATIC_PROP(viewerType, app);
- JS_STATIC_PROP(viewerVariation, app);
- JS_STATIC_PROP(viewerVersion, app);
-
- JS_STATIC_METHOD(alert, app);
- JS_STATIC_METHOD(beep, app);
- JS_STATIC_METHOD(browseForDoc, app);
- JS_STATIC_METHOD(clearInterval, app);
- JS_STATIC_METHOD(clearTimeOut, app);
- JS_STATIC_METHOD(execDialog, app);
- JS_STATIC_METHOD(execMenuItem, app);
- JS_STATIC_METHOD(findComponent, app);
- JS_STATIC_METHOD(goBack, app);
- JS_STATIC_METHOD(goForward, app);
- JS_STATIC_METHOD(launchURL, app);
- JS_STATIC_METHOD(mailMsg, app);
- JS_STATIC_METHOD(newFDF, app);
- JS_STATIC_METHOD(newDoc, app);
- JS_STATIC_METHOD(openDoc, app);
- JS_STATIC_METHOD(openFDF, app);
- JS_STATIC_METHOD(popUpMenuEx, app);
- JS_STATIC_METHOD(popUpMenu, app);
- JS_STATIC_METHOD(response, app);
- JS_STATIC_METHOD(setInterval, app);
- JS_STATIC_METHOD(setTimeOut, app);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_APP_H_
diff --git a/fpdfsdk/src/javascript/color.cpp b/fpdfsdk/src/javascript/color.cpp
deleted file mode 100644
index 4339b4eccf..0000000000
--- a/fpdfsdk/src/javascript/color.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/color.h"
-
-#include <vector>
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-/* -------------------------- color -------------------------- */
-
-BEGIN_JS_STATIC_CONST(CJS_Color)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Color)
-JS_STATIC_PROP_ENTRY(black)
-JS_STATIC_PROP_ENTRY(blue)
-JS_STATIC_PROP_ENTRY(cyan)
-JS_STATIC_PROP_ENTRY(dkGray)
-JS_STATIC_PROP_ENTRY(gray)
-JS_STATIC_PROP_ENTRY(green)
-JS_STATIC_PROP_ENTRY(ltGray)
-JS_STATIC_PROP_ENTRY(magenta)
-JS_STATIC_PROP_ENTRY(red)
-JS_STATIC_PROP_ENTRY(transparent)
-JS_STATIC_PROP_ENTRY(white)
-JS_STATIC_PROP_ENTRY(yellow)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Color)
-JS_STATIC_METHOD_ENTRY(convert)
-JS_STATIC_METHOD_ENTRY(equal)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Color, color)
-
-color::color(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {
- m_crTransparent = CPWL_Color(COLORTYPE_TRANSPARENT);
- m_crBlack = CPWL_Color(COLORTYPE_GRAY, 0);
- m_crWhite = CPWL_Color(COLORTYPE_GRAY, 1);
- m_crRed = CPWL_Color(COLORTYPE_RGB, 1, 0, 0);
- m_crGreen = CPWL_Color(COLORTYPE_RGB, 0, 1, 0);
- m_crBlue = CPWL_Color(COLORTYPE_RGB, 0, 0, 1);
- m_crCyan = CPWL_Color(COLORTYPE_CMYK, 1, 0, 0, 0);
- m_crMagenta = CPWL_Color(COLORTYPE_CMYK, 0, 1, 0, 0);
- m_crYellow = CPWL_Color(COLORTYPE_CMYK, 0, 0, 1, 0);
- m_crDKGray = CPWL_Color(COLORTYPE_GRAY, 0.25);
- m_crGray = CPWL_Color(COLORTYPE_GRAY, 0.5);
- m_crLTGray = CPWL_Color(COLORTYPE_GRAY, 0.75);
-}
-
-color::~color() {
-}
-
-void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array) {
- switch (color.nColorType) {
- case COLORTYPE_TRANSPARENT:
- array.SetElement(0, CJS_Value(array.GetJSRuntime(), "T"));
- break;
- case COLORTYPE_GRAY:
- array.SetElement(0, CJS_Value(array.GetJSRuntime(), "G"));
- array.SetElement(1, CJS_Value(array.GetJSRuntime(), color.fColor1));
- break;
- case COLORTYPE_RGB:
- array.SetElement(0, CJS_Value(array.GetJSRuntime(), "RGB"));
- array.SetElement(1, CJS_Value(array.GetJSRuntime(), color.fColor1));
- array.SetElement(2, CJS_Value(array.GetJSRuntime(), color.fColor2));
- array.SetElement(3, CJS_Value(array.GetJSRuntime(), color.fColor3));
- break;
- case COLORTYPE_CMYK:
- array.SetElement(0, CJS_Value(array.GetJSRuntime(), "CMYK"));
- array.SetElement(1, CJS_Value(array.GetJSRuntime(), color.fColor1));
- array.SetElement(2, CJS_Value(array.GetJSRuntime(), color.fColor2));
- array.SetElement(3, CJS_Value(array.GetJSRuntime(), color.fColor3));
- array.SetElement(4, CJS_Value(array.GetJSRuntime(), color.fColor4));
- break;
- }
-}
-
-void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) {
- int nArrayLen = array.GetLength();
- if (nArrayLen < 1)
- return;
-
- CJS_Value value(array.GetJSRuntime());
- array.GetElement(0, value);
- CFX_ByteString sSpace = value.ToCFXByteString();
-
- double d1 = 0;
- double d2 = 0;
- double d3 = 0;
- double d4 = 0;
-
- if (nArrayLen > 1) {
- array.GetElement(1, value);
- d1 = value.ToDouble();
- }
-
- if (nArrayLen > 2) {
- array.GetElement(2, value);
- d2 = value.ToDouble();
- }
-
- if (nArrayLen > 3) {
- array.GetElement(3, value);
- d3 = value.ToDouble();
- }
-
- if (nArrayLen > 4) {
- array.GetElement(4, value);
- d4 = value.ToDouble();
- }
-
- if (sSpace == "T") {
- color = CPWL_Color(COLORTYPE_TRANSPARENT);
- } else if (sSpace == "G") {
- color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1);
- } else if (sSpace == "RGB") {
- color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3);
- } else if (sSpace == "CMYK") {
- color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3,
- (FX_FLOAT)d4);
- }
-}
-
-#define JS_IMPLEMENT_COLORPROP(prop, var) \
- FX_BOOL color::prop(IJS_Context* cc, CJS_PropValue& vp, \
- CFX_WideString& sError) { \
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); \
- CJS_Array array(pRuntime); \
- if (vp.IsGetting()) { \
- ConvertPWLColorToArray(var, array); \
- vp << array; \
- } else { \
- if (!vp.ConvertToArray(array)) \
- return FALSE; \
- ConvertArrayToPWLColor(array, var); \
- } \
- return TRUE; \
- }
-
-JS_IMPLEMENT_COLORPROP(transparent, m_crTransparent)
-JS_IMPLEMENT_COLORPROP(black, m_crBlack)
-JS_IMPLEMENT_COLORPROP(white, m_crWhite)
-JS_IMPLEMENT_COLORPROP(red, m_crRed)
-JS_IMPLEMENT_COLORPROP(green, m_crGreen)
-JS_IMPLEMENT_COLORPROP(blue, m_crBlue)
-JS_IMPLEMENT_COLORPROP(cyan, m_crCyan)
-JS_IMPLEMENT_COLORPROP(magenta, m_crMagenta)
-JS_IMPLEMENT_COLORPROP(yellow, m_crYellow)
-JS_IMPLEMENT_COLORPROP(dkGray, m_crDKGray)
-JS_IMPLEMENT_COLORPROP(gray, m_crGray)
-JS_IMPLEMENT_COLORPROP(ltGray, m_crLTGray)
-
-FX_BOOL color::convert(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int iSize = params.size();
- if (iSize < 2)
- return FALSE;
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array aSource(pRuntime);
- if (!params[0].ConvertToArray(aSource))
- return FALSE;
-
- CPWL_Color crSource;
- ConvertArrayToPWLColor(aSource, crSource);
-
- CFX_ByteString sDestSpace = params[1].ToCFXByteString();
- int nColorType = COLORTYPE_TRANSPARENT;
-
- if (sDestSpace == "T") {
- nColorType = COLORTYPE_TRANSPARENT;
- } else if (sDestSpace == "G") {
- nColorType = COLORTYPE_GRAY;
- } else if (sDestSpace == "RGB") {
- nColorType = COLORTYPE_RGB;
- } else if (sDestSpace == "CMYK") {
- nColorType = COLORTYPE_CMYK;
- }
-
- CJS_Array aDest(pRuntime);
- CPWL_Color crDest = crSource;
- crDest.ConvertColorType(nColorType);
- ConvertPWLColorToArray(crDest, aDest);
- vRet = aDest;
-
- return TRUE;
-}
-
-FX_BOOL color::equal(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (params.size() < 2)
- return FALSE;
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Array array1(pRuntime);
- CJS_Array array2(pRuntime);
- if (!params[0].ConvertToArray(array1))
- return FALSE;
- if (!params[1].ConvertToArray(array2))
- return FALSE;
-
- CPWL_Color color1;
- CPWL_Color color2;
- ConvertArrayToPWLColor(array1, color1);
- ConvertArrayToPWLColor(array2, color2);
- color1.ConvertColorType(color2.nColorType);
- vRet = color1 == color2;
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/color.h b/fpdfsdk/src/javascript/color.h
deleted file mode 100644
index 616337414d..0000000000
--- a/fpdfsdk/src/javascript/color.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_COLOR_H_
-#define FPDFSDK_SRC_JAVASCRIPT_COLOR_H_
-
-#include <vector>
-
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class color : public CJS_EmbedObj {
- public:
- color(CJS_Object* pJSObject);
- ~color() override;
-
- FX_BOOL black(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL blue(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL cyan(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL dkGray(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL gray(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL green(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL ltGray(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL magenta(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL red(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL transparent(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL white(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL yellow(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
-
- FX_BOOL convert(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL equal(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-
- public:
- static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array);
- static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color);
-
- private:
- CPWL_Color m_crTransparent;
- CPWL_Color m_crBlack;
- CPWL_Color m_crWhite;
- CPWL_Color m_crRed;
- CPWL_Color m_crGreen;
- CPWL_Color m_crBlue;
- CPWL_Color m_crCyan;
- CPWL_Color m_crMagenta;
- CPWL_Color m_crYellow;
- CPWL_Color m_crDKGray;
- CPWL_Color m_crGray;
- CPWL_Color m_crLTGray;
-};
-
-class CJS_Color : public CJS_Object {
- public:
- CJS_Color(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Color() override {}
-
- DECLARE_JS_CLASS();
-
- JS_STATIC_PROP(black, color);
- JS_STATIC_PROP(blue, color);
- JS_STATIC_PROP(cyan, color);
- JS_STATIC_PROP(dkGray, color);
- JS_STATIC_PROP(gray, color);
- JS_STATIC_PROP(green, color);
- JS_STATIC_PROP(ltGray, color);
- JS_STATIC_PROP(magenta, color);
- JS_STATIC_PROP(red, color);
- JS_STATIC_PROP(transparent, color);
- JS_STATIC_PROP(white, color);
- JS_STATIC_PROP(yellow, color);
-
- JS_STATIC_METHOD(convert, color);
- JS_STATIC_METHOD(equal, color);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_COLOR_H_
diff --git a/fpdfsdk/src/javascript/console.cpp b/fpdfsdk/src/javascript/console.cpp
deleted file mode 100644
index 8beb083f1e..0000000000
--- a/fpdfsdk/src/javascript/console.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/console.h"
-
-#include <vector>
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-/* ------------------------ console ------------------------ */
-
-BEGIN_JS_STATIC_CONST(CJS_Console)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Console)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Console)
-JS_STATIC_METHOD_ENTRY(clear)
-JS_STATIC_METHOD_ENTRY(hide)
-JS_STATIC_METHOD_ENTRY(println)
-JS_STATIC_METHOD_ENTRY(show)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Console, console)
-
-console::console(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
-
-console::~console() {}
-
-FX_BOOL console::clear(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL console::hide(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL console::println(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- if (params.size() < 1) {
- return FALSE;
- }
- return TRUE;
-}
-
-FX_BOOL console::show(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/console.h b/fpdfsdk/src/javascript/console.h
deleted file mode 100644
index 651899bf4c..0000000000
--- a/fpdfsdk/src/javascript/console.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_CONSOLE_H_
-#define FPDFSDK_SRC_JAVASCRIPT_CONSOLE_H_
-
-#include <vector>
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class console : public CJS_EmbedObj {
- public:
- console(CJS_Object* pJSObject);
- ~console() override;
-
- public:
- FX_BOOL clear(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL hide(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL println(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL show(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-};
-
-class CJS_Console : public CJS_Object {
- public:
- CJS_Console(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Console() override {}
-
- DECLARE_JS_CLASS();
-
- JS_STATIC_METHOD(clear, console);
- JS_STATIC_METHOD(hide, console);
- JS_STATIC_METHOD(println, console);
- JS_STATIC_METHOD(show, console);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_CONSOLE_H_
diff --git a/fpdfsdk/src/javascript/event.cpp b/fpdfsdk/src/javascript/event.cpp
deleted file mode 100644
index f964908b9b..0000000000
--- a/fpdfsdk/src/javascript/event.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/event.h"
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/Field.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-/* -------------------------- event -------------------------- */
-
-BEGIN_JS_STATIC_CONST(CJS_Event)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Event)
-JS_STATIC_PROP_ENTRY(change)
-JS_STATIC_PROP_ENTRY(changeEx)
-JS_STATIC_PROP_ENTRY(commitKey)
-JS_STATIC_PROP_ENTRY(fieldFull)
-JS_STATIC_PROP_ENTRY(keyDown)
-JS_STATIC_PROP_ENTRY(modifier)
-JS_STATIC_PROP_ENTRY(name)
-JS_STATIC_PROP_ENTRY(rc)
-JS_STATIC_PROP_ENTRY(richChange)
-JS_STATIC_PROP_ENTRY(richChangeEx)
-JS_STATIC_PROP_ENTRY(richValue)
-JS_STATIC_PROP_ENTRY(selEnd)
-JS_STATIC_PROP_ENTRY(selStart)
-JS_STATIC_PROP_ENTRY(shift)
-JS_STATIC_PROP_ENTRY(source)
-JS_STATIC_PROP_ENTRY(target)
-JS_STATIC_PROP_ENTRY(targetName)
-JS_STATIC_PROP_ENTRY(type)
-JS_STATIC_PROP_ENTRY(value)
-JS_STATIC_PROP_ENTRY(willCommit)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Event)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Event, event)
-
-event::event(CJS_Object* pJsObject) : CJS_EmbedObj(pJsObject) {}
-
-event::~event() {
-}
-
-FX_BOOL event::change(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- CFX_WideString& wChange = pEvent->Change();
- if (vp.IsSetting()) {
- if (vp.GetType() == CJS_Value::VT_string)
- vp >> wChange;
- } else {
- vp << wChange;
- }
- return TRUE;
-}
-
-FX_BOOL event::changeEx(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- vp << pEvent->ChangeEx();
- return TRUE;
-}
-
-FX_BOOL event::commitKey(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- vp << pEvent->CommitKey();
- return TRUE;
-}
-
-FX_BOOL event::fieldFull(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (!vp.IsGetting() &&
- wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0)
- return FALSE;
-
- if (pEvent->FieldFull())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
-}
-
-FX_BOOL event::keyDown(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (pEvent->KeyDown())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
-}
-
-FX_BOOL event::modifier(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (pEvent->Modifier())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
-}
-
-FX_BOOL event::name(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- vp << pEvent->Name();
- return TRUE;
-}
-
-FX_BOOL event::rc(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- FX_BOOL& bRc = pEvent->Rc();
- if (vp.IsSetting()) {
- vp >> bRc;
- } else {
- vp << bRc;
- }
- return TRUE;
-}
-
-FX_BOOL event::richChange(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL event::richChangeEx(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL event::richValue(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- return TRUE;
-}
-
-FX_BOOL event::selEnd(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) {
- return TRUE;
- }
-
- int& iSelEnd = pEvent->SelEnd();
- if (vp.IsSetting()) {
- vp >> iSelEnd;
- } else {
- vp << iSelEnd;
- }
- return TRUE;
-}
-
-FX_BOOL event::selStart(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) {
- return TRUE;
- }
- int& iSelStart = pEvent->SelStart();
- if (vp.IsSetting()) {
- vp >> iSelStart;
- } else {
- vp << iSelStart;
- }
- return TRUE;
-}
-
-FX_BOOL event::shift(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (pEvent->Shift())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
-}
-
-FX_BOOL event::source(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- vp << pEvent->Source()->GetJSObject();
- return TRUE;
-}
-
-FX_BOOL event::target(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- vp << pEvent->Target_Field()->GetJSObject();
- return TRUE;
-}
-
-FX_BOOL event::targetName(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- vp << pEvent->TargetName();
- return TRUE;
-}
-
-FX_BOOL event::type(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- vp << pEvent->Type();
- return TRUE;
-}
-
-FX_BOOL event::value(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0)
- return FALSE;
- if (!pEvent->m_pValue)
- return FALSE;
- CFX_WideString& val = pEvent->Value();
- if (vp.IsSetting()) {
- vp >> val;
- } else {
- vp << val;
- }
- return TRUE;
-}
-
-FX_BOOL event::willCommit(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (!vp.IsGetting())
- return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
- if (pEvent->WillCommit())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/event.h b/fpdfsdk/src/javascript/event.h
deleted file mode 100644
index cf37bf6b08..0000000000
--- a/fpdfsdk/src/javascript/event.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_EVENT_H_
-#define FPDFSDK_SRC_JAVASCRIPT_EVENT_H_
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class event : public CJS_EmbedObj {
- public:
- event(CJS_Object* pJSObject);
- ~event() override;
-
- public:
- FX_BOOL change(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL changeEx(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL commitKey(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL fieldFull(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL keyDown(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL modifier(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL name(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL rc(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richChange(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL richChangeEx(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL richValue(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL selEnd(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL selStart(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL shift(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL source(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL target(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL targetName(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL type(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL value(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL willCommit(IJS_Context* cc,
- CJS_PropValue& vp,
- CFX_WideString& sError);
-};
-
-class CJS_Event : public CJS_Object {
- public:
- CJS_Event(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Event() override {}
-
- DECLARE_JS_CLASS();
- JS_STATIC_PROP(change, event);
- JS_STATIC_PROP(changeEx, event);
- JS_STATIC_PROP(commitKey, event);
- JS_STATIC_PROP(fieldFull, event);
- JS_STATIC_PROP(keyDown, event);
- JS_STATIC_PROP(modifier, event);
- JS_STATIC_PROP(name, event);
- JS_STATIC_PROP(rc, event);
- JS_STATIC_PROP(richChange, event);
- JS_STATIC_PROP(richChangeEx, event);
- JS_STATIC_PROP(richValue, event);
- JS_STATIC_PROP(selEnd, event);
- JS_STATIC_PROP(selStart, event);
- JS_STATIC_PROP(shift, event);
- JS_STATIC_PROP(source, event);
- JS_STATIC_PROP(target, event);
- JS_STATIC_PROP(targetName, event);
- JS_STATIC_PROP(type, event);
- JS_STATIC_PROP(value, event);
- JS_STATIC_PROP(willCommit, event);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_EVENT_H_
diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp
deleted file mode 100644
index 234e132d46..0000000000
--- a/fpdfsdk/src/javascript/global.cpp
+++ /dev/null
@@ -1,520 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/global.h"
-
-#include <vector>
-
-#include "core/include/fxcrt/fx_ext.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_GlobalData.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/resource.h"
-
-/* ---------------------------- global ---------------------------- */
-
-// Helper class for compile-time calculation of hash values in order to
-// avoid having global object initializers.
-template <unsigned ACC, wchar_t... Ns>
-struct CHash;
-
-// Only needed to hash single-character strings.
-template <wchar_t N>
-struct CHash<N> {
- static const unsigned value = N;
-};
-
-template <unsigned ACC, wchar_t N>
-struct CHash<ACC, N> {
- static const unsigned value = (ACC * 1313LLU + N) & 0xFFFFFFFF;
-};
-
-template <unsigned ACC, wchar_t N, wchar_t... Ns>
-struct CHash<ACC, N, Ns...> {
- static const unsigned value = CHash<CHash<ACC, N>::value, Ns...>::value;
-};
-
-const unsigned int JSCONST_nStringHash =
- CHash<'s', 't', 'r', 'i', 'n', 'g'>::value;
-const unsigned int JSCONST_nNumberHash =
- CHash<'n', 'u', 'm', 'b', 'e', 'r'>::value;
-const unsigned int JSCONST_nBoolHash =
- CHash<'b', 'o', 'o', 'l', 'e', 'a', 'n'>::value;
-const unsigned int JSCONST_nDateHash = CHash<'d', 'a', 't', 'e'>::value;
-const unsigned int JSCONST_nObjectHash =
- CHash<'o', 'b', 'j', 'e', 'c', 't'>::value;
-const unsigned int JSCONST_nFXobjHash = CHash<'f', 'x', 'o', 'b', 'j'>::value;
-const unsigned int JSCONST_nNullHash = CHash<'n', 'u', 'l', 'l'>::value;
-const unsigned int JSCONST_nUndefHash =
- CHash<'u', 'n', 'd', 'e', 'f', 'i', 'n', 'e', 'd'>::value;
-
-static unsigned JS_CalcHash(const wchar_t* main) {
- return (unsigned)FX_HashCode_String_GetW(main, FXSYS_wcslen(main));
-}
-
-#ifndef NDEBUG
-class HashVerify {
- public:
- HashVerify();
-} g_hashVerify;
-
-HashVerify::HashVerify() {
- ASSERT(JSCONST_nStringHash == JS_CalcHash(kFXJSValueNameString));
- ASSERT(JSCONST_nNumberHash == JS_CalcHash(kFXJSValueNameNumber));
- ASSERT(JSCONST_nBoolHash == JS_CalcHash(kFXJSValueNameBoolean));
- ASSERT(JSCONST_nDateHash == JS_CalcHash(kFXJSValueNameDate));
- ASSERT(JSCONST_nObjectHash == JS_CalcHash(kFXJSValueNameObject));
- ASSERT(JSCONST_nFXobjHash == JS_CalcHash(kFXJSValueNameFxobj));
- ASSERT(JSCONST_nNullHash == JS_CalcHash(kFXJSValueNameNull));
- ASSERT(JSCONST_nUndefHash == JS_CalcHash(kFXJSValueNameUndefined));
-}
-#endif
-
-BEGIN_JS_STATIC_CONST(CJS_Global)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Global)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Global)
-JS_STATIC_METHOD_ENTRY(setPersistent)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, JSGlobalAlternate, global);
-
-void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) {
- CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime);
- JSGlobalAlternate* pGlobal =
- static_cast<JSGlobalAlternate*>(GetEmbedObject());
- pGlobal->Initial(pRuntime->GetReaderApp());
-}
-
-JSGlobalAlternate::JSGlobalAlternate(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject), m_pApp(NULL) {
-}
-
-JSGlobalAlternate::~JSGlobalAlternate() {
- DestroyGlobalPersisitentVariables();
- m_pGlobalData->Release();
-}
-
-void JSGlobalAlternate::Initial(CPDFDoc_Environment* pApp) {
- m_pApp = pApp;
- m_pGlobalData = CJS_GlobalData::GetRetainedInstance(pApp);
- UpdateGlobalPersistentVariables();
-}
-
-FX_BOOL JSGlobalAlternate::QueryProperty(const FX_WCHAR* propname) {
- return CFX_WideString(propname) != L"setPersistent";
-}
-
-FX_BOOL JSGlobalAlternate::DelProperty(IJS_Context* cc,
- const FX_WCHAR* propname,
- CFX_WideString& sError) {
- auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname));
- if (it == m_mapGlobal.end())
- return FALSE;
-
- it->second->bDeleted = TRUE;
- return TRUE;
-}
-
-FX_BOOL JSGlobalAlternate::DoProperty(IJS_Context* cc,
- const FX_WCHAR* propname,
- CJS_PropValue& vp,
- CFX_WideString& sError) {
- if (vp.IsSetting()) {
- CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
- switch (vp.GetType()) {
- case CJS_Value::VT_number: {
- double dData;
- vp >> dData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData,
- false, "", v8::Local<v8::Object>(), FALSE);
- }
- case CJS_Value::VT_boolean: {
- bool bData;
- vp >> bData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0,
- bData, "", v8::Local<v8::Object>(), FALSE);
- }
- case CJS_Value::VT_string: {
- CFX_ByteString sData;
- vp >> sData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0,
- false, sData, v8::Local<v8::Object>(), FALSE);
- }
- case CJS_Value::VT_object: {
- v8::Local<v8::Object> pData;
- vp >> pData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0,
- false, "", pData, FALSE);
- }
- case CJS_Value::VT_null: {
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false,
- "", v8::Local<v8::Object>(), FALSE);
- }
- case CJS_Value::VT_undefined: {
- DelProperty(cc, propname, sError);
- return TRUE;
- }
- default:
- break;
- }
- } else {
- auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname));
- if (it == m_mapGlobal.end()) {
- vp.SetNull();
- return TRUE;
- }
- JSGlobalData* pData = it->second;
- if (pData->bDeleted) {
- vp.SetNull();
- return TRUE;
- }
- switch (pData->nType) {
- case JS_GLOBALDATA_TYPE_NUMBER:
- vp << pData->dData;
- return TRUE;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- vp << pData->bData;
- return TRUE;
- case JS_GLOBALDATA_TYPE_STRING:
- vp << pData->sData;
- return TRUE;
- case JS_GLOBALDATA_TYPE_OBJECT: {
- v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(
- vp.GetJSRuntime()->GetIsolate(), pData->pData);
- vp << obj;
- return TRUE;
- }
- case JS_GLOBALDATA_TYPE_NULL:
- vp.SetNull();
- return TRUE;
- default:
- break;
- }
- }
- return FALSE;
-}
-
-FX_BOOL JSGlobalAlternate::setPersistent(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- if (params.size() != 2) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- auto it = m_mapGlobal.find(params[0].ToCFXByteString());
- if (it != m_mapGlobal.end()) {
- JSGlobalData* pData = it->second;
- if (!pData->bDeleted) {
- pData->bPersistent = params[1].ToBool();
- return TRUE;
- }
- }
-
- sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL);
- return FALSE;
-}
-
-void JSGlobalAlternate::UpdateGlobalPersistentVariables() {
- for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) {
- CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i);
- switch (pData->data.nType) {
- case JS_GLOBALDATA_TYPE_NUMBER:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER,
- pData->data.dData, false, "",
- v8::Local<v8::Object>(), pData->bPersistent == 1);
- FXJS_PutObjectNumber(NULL, m_pJSObject->ToV8Object(),
- pData->data.sKey.UTF8Decode().c_str(),
- pData->data.dData);
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0,
- (bool)(pData->data.bData == 1), "",
- v8::Local<v8::Object>(), pData->bPersistent == 1);
- FXJS_PutObjectBoolean(NULL, m_pJSObject->ToV8Object(),
- pData->data.sKey.UTF8Decode().c_str(),
- (bool)(pData->data.bData == 1));
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0,
- false, pData->data.sData, v8::Local<v8::Object>(),
- pData->bPersistent == 1);
- FXJS_PutObjectString(NULL, m_pJSObject->ToV8Object(),
- pData->data.sKey.UTF8Decode().c_str(),
- pData->data.sData.UTF8Decode().c_str());
- break;
- case JS_GLOBALDATA_TYPE_OBJECT: {
- v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate();
- v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(pRuntime, NULL, -1);
-
- PutObjectProperty(pObj, &pData->data);
-
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0,
- false, "", pObj, pData->bPersistent == 1);
- FXJS_PutObjectObject(NULL, m_pJSObject->ToV8Object(),
- pData->data.sKey.UTF8Decode().c_str(), pObj);
- } break;
- case JS_GLOBALDATA_TYPE_NULL:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false,
- "", v8::Local<v8::Object>(),
- pData->bPersistent == 1);
- FXJS_PutObjectNull(NULL, m_pJSObject->ToV8Object(),
- pData->data.sKey.UTF8Decode().c_str());
- break;
- }
- }
-}
-
-void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) {
- for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) {
- CFX_ByteString name = it->first;
- JSGlobalData* pData = it->second;
- if (pData->bDeleted) {
- m_pGlobalData->DeleteGlobalVariable(name);
- } else {
- switch (pData->nType) {
- case JS_GLOBALDATA_TYPE_NUMBER:
- m_pGlobalData->SetGlobalVariableNumber(name, pData->dData);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- m_pGlobalData->SetGlobalVariableString(name, pData->sData);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- case JS_GLOBALDATA_TYPE_OBJECT:
- {
- CJS_GlobalVariableArray array;
- v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(
- GetJSObject()->GetIsolate(), pData->pData);
- ObjectToArray(cc, obj, array);
- m_pGlobalData->SetGlobalVariableObject(name, array);
- m_pGlobalData->SetGlobalVariablePersistent(name,
- pData->bPersistent);
- }
- break;
- case JS_GLOBALDATA_TYPE_NULL:
- m_pGlobalData->SetGlobalVariableNull(name);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- }
- }
- }
-}
-
-void JSGlobalAlternate::ObjectToArray(IJS_Context* cc,
- v8::Local<v8::Object> pObj,
- CJS_GlobalVariableArray& array) {
- v8::Isolate* isolate = pObj->GetIsolate();
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
-
- v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj);
- int nObjElements = pKeyList->Length();
- for (int i = 0; i < nObjElements; i++) {
- CFX_WideString ws =
- FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i));
- CFX_ByteString sKey = ws.UTF8Encode();
-
- v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws.c_str());
- switch (GET_VALUE_TYPE(v)) {
- case CJS_Value::VT_number: {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER;
- pObjElement->sKey = sKey;
- pObjElement->dData = FXJS_ToNumber(isolate, v);
- array.Add(pObjElement);
- } break;
- case CJS_Value::VT_boolean: {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pObjElement->sKey = sKey;
- pObjElement->dData = FXJS_ToBoolean(isolate, v);
- array.Add(pObjElement);
- } break;
- case CJS_Value::VT_string: {
- CFX_ByteString sValue =
- CJS_Value(pRuntime, v, CJS_Value::VT_string).ToCFXByteString();
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_STRING;
- pObjElement->sKey = sKey;
- pObjElement->sData = sValue;
- array.Add(pObjElement);
- } break;
- case CJS_Value::VT_object: {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT;
- pObjElement->sKey = sKey;
- ObjectToArray(cc, FXJS_ToObject(isolate, v), pObjElement->objData);
- array.Add(pObjElement);
- } break;
- case CJS_Value::VT_null: {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_NULL;
- pObjElement->sKey = sKey;
- array.Add(pObjElement);
- } break;
- default:
- break;
- }
- }
-}
-
-void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj,
- CJS_KeyValue* pData) {
- for (int i = 0, sz = pData->objData.Count(); i < sz; i++) {
- CJS_KeyValue* pObjData = pData->objData.GetAt(i);
- switch (pObjData->nType) {
- case JS_GLOBALDATA_TYPE_NUMBER:
- FXJS_PutObjectNumber(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(),
- pObjData->dData);
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- FXJS_PutObjectBoolean(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(),
- pObjData->bData == 1);
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- FXJS_PutObjectString(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(),
- pObjData->sData.UTF8Decode().c_str());
- break;
- case JS_GLOBALDATA_TYPE_OBJECT: {
- v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate();
- v8::Local<v8::Object> pNewObj =
- FXJS_NewFxDynamicObj(pRuntime, NULL, -1);
- PutObjectProperty(pNewObj, pObjData);
- FXJS_PutObjectObject(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(),
- pNewObj);
- } break;
- case JS_GLOBALDATA_TYPE_NULL:
- FXJS_PutObjectNull(NULL, pObj, pObjData->sKey.UTF8Decode().c_str());
- break;
- }
- }
-}
-
-void JSGlobalAlternate::DestroyGlobalPersisitentVariables() {
- for (const auto& pair : m_mapGlobal) {
- delete pair.second;
- }
- m_mapGlobal.clear();
-}
-
-FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname,
- int nType,
- double dData,
- bool bData,
- const CFX_ByteString& sData,
- v8::Local<v8::Object> pData,
- bool bDefaultPersistent) {
- if (!propname)
- return FALSE;
-
- auto it = m_mapGlobal.find(propname);
- if (it != m_mapGlobal.end()) {
- JSGlobalData* pTemp = it->second;
- if (pTemp->bDeleted || pTemp->nType != nType) {
- pTemp->dData = 0;
- pTemp->bData = 0;
- pTemp->sData = "";
- pTemp->nType = nType;
- }
-
- pTemp->bDeleted = FALSE;
- switch (nType) {
- case JS_GLOBALDATA_TYPE_NUMBER: {
- pTemp->dData = dData;
- } break;
- case JS_GLOBALDATA_TYPE_BOOLEAN: {
- pTemp->bData = bData;
- } break;
- case JS_GLOBALDATA_TYPE_STRING: {
- pTemp->sData = sData;
- } break;
- case JS_GLOBALDATA_TYPE_OBJECT: {
- pTemp->pData.Reset(pData->GetIsolate(), pData);
- } break;
- case JS_GLOBALDATA_TYPE_NULL:
- break;
- default:
- return FALSE;
- }
- return TRUE;
- }
-
- JSGlobalData* pNewData = NULL;
-
- switch (nType) {
- case JS_GLOBALDATA_TYPE_NUMBER: {
- pNewData = new JSGlobalData;
- pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER;
- pNewData->dData = dData;
- pNewData->bPersistent = bDefaultPersistent;
- } break;
- case JS_GLOBALDATA_TYPE_BOOLEAN: {
- pNewData = new JSGlobalData;
- pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pNewData->bData = bData;
- pNewData->bPersistent = bDefaultPersistent;
- } break;
- case JS_GLOBALDATA_TYPE_STRING: {
- pNewData = new JSGlobalData;
- pNewData->nType = JS_GLOBALDATA_TYPE_STRING;
- pNewData->sData = sData;
- pNewData->bPersistent = bDefaultPersistent;
- } break;
- case JS_GLOBALDATA_TYPE_OBJECT: {
- pNewData = new JSGlobalData;
- pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT;
- pNewData->pData.Reset(pData->GetIsolate(), pData);
- pNewData->bPersistent = bDefaultPersistent;
- } break;
- case JS_GLOBALDATA_TYPE_NULL: {
- pNewData = new JSGlobalData;
- pNewData->nType = JS_GLOBALDATA_TYPE_NULL;
- pNewData->bPersistent = bDefaultPersistent;
- } break;
- default:
- return FALSE;
- }
-
- m_mapGlobal[propname] = pNewData;
- return TRUE;
-}
-
-CJS_Value::Type GET_VALUE_TYPE(v8::Local<v8::Value> p) {
- const unsigned int nHash = JS_CalcHash(FXJS_GetTypeof(p));
-
- if (nHash == JSCONST_nUndefHash)
- return CJS_Value::VT_undefined;
- if (nHash == JSCONST_nNullHash)
- return CJS_Value::VT_null;
- if (nHash == JSCONST_nStringHash)
- return CJS_Value::VT_string;
- if (nHash == JSCONST_nNumberHash)
- return CJS_Value::VT_number;
- if (nHash == JSCONST_nBoolHash)
- return CJS_Value::VT_boolean;
- if (nHash == JSCONST_nDateHash)
- return CJS_Value::VT_date;
- if (nHash == JSCONST_nObjectHash)
- return CJS_Value::VT_object;
- if (nHash == JSCONST_nFXobjHash)
- return CJS_Value::VT_fxobject;
-
- return CJS_Value::VT_unknown;
-}
diff --git a/fpdfsdk/src/javascript/global.h b/fpdfsdk/src/javascript/global.h
deleted file mode 100644
index e8172e691e..0000000000
--- a/fpdfsdk/src/javascript/global.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_
-#define FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_
-
-#include <map>
-#include <vector>
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class CJS_GlobalData;
-class CJS_GlobalVariableArray;
-class CJS_KeyValue;
-
-struct JSGlobalData {
- JSGlobalData() {
- nType = 0;
- dData = 0;
- bData = FALSE;
- sData = "";
- bPersistent = FALSE;
- bDeleted = FALSE;
- }
-
- ~JSGlobalData() { pData.Reset(); }
- int nType; // 0:int 1:bool 2:string 3:obj
- double dData;
- bool bData;
- CFX_ByteString sData;
- v8::Global<v8::Object> pData;
- bool bPersistent;
- bool bDeleted;
-};
-
-class JSGlobalAlternate : public CJS_EmbedObj {
- public:
- JSGlobalAlternate(CJS_Object* pJSObject);
- ~JSGlobalAlternate() override;
-
- FX_BOOL setPersistent(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL QueryProperty(const FX_WCHAR* propname);
- FX_BOOL DoProperty(IJS_Context* cc,
- const FX_WCHAR* propname,
- CJS_PropValue& vp,
- CFX_WideString& sError);
- FX_BOOL DelProperty(IJS_Context* cc,
- const FX_WCHAR* propname,
- CFX_WideString& sError);
- void Initial(CPDFDoc_Environment* pApp);
-
- private:
- void UpdateGlobalPersistentVariables();
- void CommitGlobalPersisitentVariables(IJS_Context* cc);
- void DestroyGlobalPersisitentVariables();
- FX_BOOL SetGlobalVariables(const FX_CHAR* propname,
- int nType,
- double dData,
- bool bData,
- const CFX_ByteString& sData,
- v8::Local<v8::Object> pData,
- bool bDefaultPersistent);
- void ObjectToArray(IJS_Context* cc,
- v8::Local<v8::Object> pObj,
- CJS_GlobalVariableArray& array);
- void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData);
-
- std::map<CFX_ByteString, JSGlobalData*> m_mapGlobal;
- CFX_WideString m_sFilePath;
- CJS_GlobalData* m_pGlobalData;
- CPDFDoc_Environment* m_pApp;
-};
-
-class CJS_Global : public CJS_Object {
- public:
- explicit CJS_Global(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Global() override {}
-
- // CJS_Object
- void InitInstance(IJS_Runtime* pIRuntime) override;
-
- DECLARE_SPECIAL_JS_CLASS();
- JS_SPECIAL_STATIC_METHOD(setPersistent, JSGlobalAlternate, global);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_
diff --git a/fpdfsdk/src/javascript/public_methods_embeddertest.cpp b/fpdfsdk/src/javascript/public_methods_embeddertest.cpp
deleted file mode 100644
index cf6f96802b..0000000000
--- a/fpdfsdk/src/javascript/public_methods_embeddertest.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <cmath>
-
-#include "core/include/fxcrt/fx_string.h"
-#include "fpdfsdk/src/javascript/PublicMethods.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/js_embedder_test.h"
-
-namespace {
-
-double RoundDownDate(double date) {
- return date - fmod(date, 86400000);
-}
-
-} // namespace
-
-class PublicMethodsEmbedderTest : public JSEmbedderTest {};
-
-TEST_F(PublicMethodsEmbedderTest, MakeRegularDate) {
- v8::Isolate::Scope isolate_scope(isolate());
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(isolate());
-#endif // PDF_ENABLE_XFA
- v8::HandleScope handle_scope(isolate());
- v8::Context::Scope context_scope(GetV8Context());
- bool bWrongFormat;
- double date;
-
- // 1968
- bWrongFormat = false;
- date = CJS_PublicMethods::MakeRegularDate(L"06/25/1968", L"mm/dd/yyyy",
- &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(-47865600000, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 1968
- bWrongFormat = false;
- date = CJS_PublicMethods::MakeRegularDate(L"25061968", L"ddmmyyyy",
- &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(-47865600000, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 1968
- bWrongFormat = false;
- date = CJS_PublicMethods::MakeRegularDate(L"19680625", L"yyyymmdd",
- &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(-47865600000, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 1985
- bWrongFormat = false;
- date = CJS_PublicMethods::MakeRegularDate(L"31121985", L"ddmmyyyy",
- &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(504835200000.0, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 2085, the other '85.
- bWrongFormat = false;
- date =
- CJS_PublicMethods::MakeRegularDate(L"311285", L"ddmmyy", &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(3660595200000.0, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 1995
- bWrongFormat = false;
- date = CJS_PublicMethods::MakeRegularDate(L"01021995", L"ddmmyyyy",
- &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(791596800000.0, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 2095, the other '95.
- bWrongFormat = false;
- date =
- CJS_PublicMethods::MakeRegularDate(L"010295", L"ddmmyy", &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(3947356800000.0, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 2005
- bWrongFormat = false;
- date = CJS_PublicMethods::MakeRegularDate(L"01022005", L"ddmmyyyy",
- &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(1107216000000.0, date);
- EXPECT_FALSE(bWrongFormat);
-
- // 2005
- bWrongFormat = false;
- date =
- CJS_PublicMethods::MakeRegularDate(L"010205", L"ddmmyy", &bWrongFormat);
- date = RoundDownDate(date);
- EXPECT_DOUBLE_EQ(1107216000000.0, date);
- EXPECT_FALSE(bWrongFormat);
-}
-
-TEST_F(PublicMethodsEmbedderTest, MakeFormatDate) {
- v8::Isolate::Scope isolate_scope(isolate());
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(isolate());
-#endif // PDF_ENABLE_XFA
- v8::HandleScope handle_scope(isolate());
- v8::Context::Scope context_scope(GetV8Context());
- CFX_WideString formatted_date;
-
- // 1968-06-25
- formatted_date = CJS_PublicMethods::MakeFormatDate(-47952000000, L"ddmmyy");
- EXPECT_STREQ(L"250668", formatted_date);
- formatted_date = CJS_PublicMethods::MakeFormatDate(-47952000000, L"yy/mm/dd");
- EXPECT_STREQ(L"68/06/25", formatted_date);
-
- // 1969-12-31
- formatted_date = CJS_PublicMethods::MakeFormatDate(-0.0001, L"ddmmyy");
- EXPECT_STREQ(L"311269", formatted_date);
- formatted_date = CJS_PublicMethods::MakeFormatDate(-0.0001, L"yy!mmdd");
- EXPECT_STREQ(L"69!1231", formatted_date);
-
- // 1970-01-01
- formatted_date = CJS_PublicMethods::MakeFormatDate(0, L"ddmmyy");
- EXPECT_STREQ(L"010170", formatted_date);
- formatted_date = CJS_PublicMethods::MakeFormatDate(0, L"mm-yyyy-dd");
- EXPECT_STREQ(L"01-1970-01", formatted_date);
-
- // 1985-12-31
- formatted_date = CJS_PublicMethods::MakeFormatDate(504835200000.0, L"ddmmyy");
- EXPECT_STREQ(L"311285", formatted_date);
- formatted_date = CJS_PublicMethods::MakeFormatDate(504835200000.0, L"yymmdd");
- EXPECT_STREQ(L"851231", formatted_date);
-
- // 1995-02-01
- formatted_date = CJS_PublicMethods::MakeFormatDate(791596800000.0, L"ddmmyy");
- EXPECT_STREQ(L"010295", formatted_date);
- formatted_date =
- CJS_PublicMethods::MakeFormatDate(791596800000.0, L"yyyymmdd");
- EXPECT_STREQ(L"19950201", formatted_date);
-
- // 2005-02-01
- formatted_date =
- CJS_PublicMethods::MakeFormatDate(1107216000000.0, L"ddmmyy");
- EXPECT_STREQ(L"010205", formatted_date);
- formatted_date =
- CJS_PublicMethods::MakeFormatDate(1107216000000.0, L"yyyyddmm");
- EXPECT_STREQ(L"20050102", formatted_date);
-
- // 2085-12-31
- formatted_date =
- CJS_PublicMethods::MakeFormatDate(3660595200000.0, L"ddmmyy");
- EXPECT_STREQ(L"311285", formatted_date);
- formatted_date =
- CJS_PublicMethods::MakeFormatDate(3660595200000.0, L"yyyydd");
- EXPECT_STREQ(L"208531", formatted_date);
-
- // 2095-02-01
- formatted_date =
- CJS_PublicMethods::MakeFormatDate(3947356800000.0, L"ddmmyy");
- EXPECT_STREQ(L"010295", formatted_date);
- formatted_date =
- CJS_PublicMethods::MakeFormatDate(3947356800000.0, L"mmddyyyy");
- EXPECT_STREQ(L"02012095", formatted_date);
-}
diff --git a/fpdfsdk/src/javascript/report.cpp b/fpdfsdk/src/javascript/report.cpp
deleted file mode 100644
index 8374f3c2c8..0000000000
--- a/fpdfsdk/src/javascript/report.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/report.h"
-
-#include <vector>
-
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-
-/* ---------------------- report ---------------------- */
-
-BEGIN_JS_STATIC_CONST(CJS_Report)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Report)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Report)
-JS_STATIC_METHOD_ENTRY(save)
-JS_STATIC_METHOD_ENTRY(writeText)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Report, Report)
-
-Report::Report(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
-
-Report::~Report() {}
-
-FX_BOOL Report::writeText(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
-
-FX_BOOL Report::save(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- // Unsafe, not supported.
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/report.h b/fpdfsdk/src/javascript/report.h
deleted file mode 100644
index 55d74648fc..0000000000
--- a/fpdfsdk/src/javascript/report.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_REPORT_H_
-#define FPDFSDK_SRC_JAVASCRIPT_REPORT_H_
-
-#include <vector>
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class Report : public CJS_EmbedObj {
- public:
- Report(CJS_Object* pJSObject);
- ~Report() override;
-
- public:
- FX_BOOL save(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL writeText(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-};
-
-class CJS_Report : public CJS_Object {
- public:
- CJS_Report(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Report() override {}
-
- DECLARE_JS_CLASS();
-
- JS_STATIC_METHOD(save, Report)
- JS_STATIC_METHOD(writeText, Report);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_REPORT_H_
diff --git a/fpdfsdk/src/javascript/resource.cpp b/fpdfsdk/src/javascript/resource.cpp
deleted file mode 100644
index 7031da34d1..0000000000
--- a/fpdfsdk/src/javascript/resource.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/resource.h"
-
-CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id) {
- switch (id) {
- case IDS_STRING_JSALERT:
- return L"Alert";
- case IDS_STRING_JSPARAMERROR:
- return L"Incorrect number of parameters passed to function.";
- case IDS_STRING_JSAFNUMBER_KEYSTROKE:
- return L"The input value is invalid.";
- case IDS_STRING_JSPARAM_TOOLONG:
- return L"The input value is too long.";
- case IDS_STRING_JSPARSEDATE:
- return L"The input value can't be parsed as a valid date/time (%s).";
- case IDS_STRING_JSRANGE1:
- return L"The input value must be greater than or equal to %s"
- L" and less than or equal to %s.";
- case IDS_STRING_JSRANGE2:
- return L"The input value must be greater than or equal to %s.";
- case IDS_STRING_JSRANGE3:
- return L"The input value must be less than or equal to %s.";
- case IDS_STRING_NOTSUPPORT:
- return L"Operation not supported.";
- case IDS_STRING_JSBUSY:
- return L"System is busy.";
- case IDS_STRING_JSEVENT:
- return L"Duplicate formfield event found.";
- case IDS_STRING_RUN:
- return L"Script ran successfully.";
- case IDS_STRING_JSPRINT1:
- return L"The second parameter can't be converted to a Date.";
- case IDS_STRING_JSPRINT2:
- return L"The second parameter is an invalid Date!";
- case IDS_STRING_JSNOGLOBAL:
- return L"Global value not found.";
- case IDS_STRING_JSREADONLY:
- return L"Cannot assign to readonly property.";
- case IDS_STRING_JSTYPEERROR:
- return L"Incorrect parameter type.";
- case IDS_STRING_JSVALUEERROR:
- return L"Incorrect parameter value.";
- default:
- return L"";
- }
-}
-
-CFX_WideString JSFormatErrorString(const char* class_name,
- const char* property_name,
- const CFX_WideString& details) {
- CFX_WideString result = CFX_WideString::FromLocal(class_name);
- if (property_name) {
- result += L".";
- result += CFX_WideString::FromLocal(property_name);
- }
- result += L": ";
- result += details;
- return result;
-}
diff --git a/fpdfsdk/src/javascript/resource.h b/fpdfsdk/src/javascript/resource.h
deleted file mode 100644
index be3ae13d90..0000000000
--- a/fpdfsdk/src/javascript/resource.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_RESOURCE_H_
-#define FPDFSDK_SRC_JAVASCRIPT_RESOURCE_H_
-
-#include "core/include/fxcrt/fx_string.h" // For CFX_WideString.
-#include "fpdfsdk/include/fsdk_define.h" // For FX_UINT.
-
-class CJS_Context;
-
-#define IDS_STRING_JSALERT 25613
-#define IDS_STRING_JSPARAMERROR 25614
-#define IDS_STRING_JSAFNUMBER_KEYSTROKE 25615
-#define IDS_STRING_JSPARAM_TOOLONG 25617
-#define IDS_STRING_JSPARSEDATE 25618
-#define IDS_STRING_JSRANGE1 25619
-#define IDS_STRING_JSRANGE2 25620
-#define IDS_STRING_JSRANGE3 25621
-#define IDS_STRING_NOTSUPPORT 25627
-#define IDS_STRING_JSBUSY 25628
-#define IDS_STRING_JSEVENT 25629
-#define IDS_STRING_RUN 25630
-#define IDS_STRING_JSPRINT1 25632
-#define IDS_STRING_JSPRINT2 25633
-#define IDS_STRING_JSNOGLOBAL 25635
-#define IDS_STRING_JSREADONLY 25636
-#define IDS_STRING_JSTYPEERROR 25637
-#define IDS_STRING_JSVALUEERROR 25638
-
-CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id);
-CFX_WideString JSFormatErrorString(const char* class_name,
- const char* property_name,
- const CFX_WideString& details);
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_RESOURCE_H_
diff --git a/fpdfsdk/src/javascript/util.cpp b/fpdfsdk/src/javascript/util.cpp
deleted file mode 100644
index 52a93625b9..0000000000
--- a/fpdfsdk/src/javascript/util.cpp
+++ /dev/null
@@ -1,531 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/src/javascript/util.h"
-
-#include <time.h>
-
-#include <string>
-#include <vector>
-
-#include "core/include/fxcrt/fx_ext.h"
-#include "fpdfsdk/include/javascript/IJavaScript.h"
-#include "fpdfsdk/src/javascript/JS_Context.h"
-#include "fpdfsdk/src/javascript/JS_Define.h"
-#include "fpdfsdk/src/javascript/JS_EventHandler.h"
-#include "fpdfsdk/src/javascript/JS_Object.h"
-#include "fpdfsdk/src/javascript/JS_Runtime.h"
-#include "fpdfsdk/src/javascript/JS_Value.h"
-#include "fpdfsdk/src/javascript/PublicMethods.h"
-#include "fpdfsdk/src/javascript/resource.h"
-
-#if _FX_OS_ == _FX_ANDROID_
-#include <ctype.h>
-#endif
-
-BEGIN_JS_STATIC_CONST(CJS_Util)
-END_JS_STATIC_CONST()
-
-BEGIN_JS_STATIC_PROP(CJS_Util)
-END_JS_STATIC_PROP()
-
-BEGIN_JS_STATIC_METHOD(CJS_Util)
-JS_STATIC_METHOD_ENTRY(printd)
-JS_STATIC_METHOD_ENTRY(printf)
-JS_STATIC_METHOD_ENTRY(printx)
-JS_STATIC_METHOD_ENTRY(scand)
-JS_STATIC_METHOD_ENTRY(byteToChar)
-END_JS_STATIC_METHOD()
-
-IMPLEMENT_JS_CLASS(CJS_Util, util)
-
-util::util(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
-
-util::~util() {
-}
-
-struct stru_TbConvert {
- const FX_WCHAR* lpszJSMark;
- const FX_WCHAR* lpszCppMark;
-};
-
-const stru_TbConvert fcTable[] = {
- {L"mmmm", L"%B"},
- {L"mmm", L"%b"},
- {L"mm", L"%m"},
- // "m"
- {L"dddd", L"%A"},
- {L"ddd", L"%a"},
- {L"dd", L"%d"},
- // "d", "%w",
- {L"yyyy", L"%Y"},
- {L"yy", L"%y"},
- {L"HH", L"%H"},
- // "H"
- {L"hh", L"%I"},
- // "h"
- {L"MM", L"%M"},
- // "M"
- {L"ss", L"%S"},
- // "s
- {L"TT", L"%p"},
-// "t"
-#if defined(_WIN32)
- {L"tt", L"%p"},
- {L"h", L"%#I"},
-#else
- {L"tt", L"%P"},
- {L"h", L"%l"},
-#endif
-};
-
-#define UTIL_INT 0
-#define UTIL_DOUBLE 1
-#define UTIL_STRING 2
-
-int util::ParstDataType(std::wstring* sFormat) {
- bool bPercent = FALSE;
- for (size_t i = 0; i < sFormat->length(); ++i) {
- wchar_t c = (*sFormat)[i];
- if (c == L'%') {
- bPercent = true;
- continue;
- }
-
- if (bPercent) {
- if (c == L'c' || c == L'C' || c == L'd' || c == L'i' || c == L'o' ||
- c == L'u' || c == L'x' || c == L'X') {
- return UTIL_INT;
- }
- if (c == L'e' || c == L'E' || c == L'f' || c == L'g' || c == L'G') {
- return UTIL_DOUBLE;
- }
- if (c == L's' || c == L'S') {
- // Map s to S since we always deal internally
- // with wchar_t strings.
- (*sFormat)[i] = L'S';
- return UTIL_STRING;
- }
- if (c == L'.' || c == L'+' || c == L'-' || c == L'#' || c == L' ' ||
- FXSYS_iswdigit(c)) {
- continue;
- }
- break;
- }
- }
-
- return -1;
-}
-
-FX_BOOL util::printf(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int iSize = params.size();
- if (iSize < 1)
- return FALSE;
- std::wstring c_ConvChar(params[0].ToCFXWideString().c_str());
- std::vector<std::wstring> c_strConvers;
- int iOffset = 0;
- int iOffend = 0;
- c_ConvChar.insert(c_ConvChar.begin(), L'S');
- while (iOffset != -1) {
- iOffend = c_ConvChar.find(L"%", iOffset + 1);
- std::wstring strSub;
- if (iOffend == -1)
- strSub = c_ConvChar.substr(iOffset);
- else
- strSub = c_ConvChar.substr(iOffset, iOffend - iOffset);
- c_strConvers.push_back(strSub);
- iOffset = iOffend;
- }
-
- std::wstring c_strResult;
-
- // for(int iIndex = 1;iIndex < params.size();iIndex++)
- std::wstring c_strFormat;
- for (int iIndex = 0; iIndex < (int)c_strConvers.size(); iIndex++) {
- c_strFormat = c_strConvers[iIndex];
- if (iIndex == 0) {
- c_strResult = c_strFormat;
- continue;
- }
-
- CFX_WideString strSegment;
- if (iIndex >= iSize) {
- c_strResult += c_strFormat;
- continue;
- }
-
- switch (ParstDataType(&c_strFormat)) {
- case UTIL_INT:
- strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt());
- break;
- case UTIL_DOUBLE:
- strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble());
- break;
- case UTIL_STRING:
- strSegment.Format(c_strFormat.c_str(),
- params[iIndex].ToCFXWideString().c_str());
- break;
- default:
- strSegment.Format(L"%S", c_strFormat.c_str());
- break;
- }
- c_strResult += strSegment.GetBuffer(strSegment.GetLength() + 1);
- }
-
- c_strResult.erase(c_strResult.begin());
- vRet = c_strResult.c_str();
- return TRUE;
-}
-
-FX_BOOL util::printd(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int iSize = params.size();
- if (iSize < 2)
- return FALSE;
-
- CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
- CJS_Value p1(pRuntime);
- p1 = params[0];
-
- CJS_Value p2 = params[1];
- CJS_Date jsDate(pRuntime);
- if (!p2.ConvertToDate(jsDate)) {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT1);
- return FALSE;
- }
-
- if (!jsDate.IsValidDate()) {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT2);
- return FALSE;
- }
-
- if (p1.GetType() == CJS_Value::VT_number) {
- int nFormat = p1.ToInt();
- CFX_WideString swResult;
-
- switch (nFormat) {
- case 0:
- swResult.Format(L"D:%04d%02d%02d%02d%02d%02d", jsDate.GetYear(),
- jsDate.GetMonth() + 1, jsDate.GetDay(),
- jsDate.GetHours(), jsDate.GetMinutes(),
- jsDate.GetSeconds());
- break;
- case 1:
- swResult.Format(L"%04d.%02d.%02d %02d:%02d:%02d", jsDate.GetYear(),
- jsDate.GetMonth() + 1, jsDate.GetDay(),
- jsDate.GetHours(), jsDate.GetMinutes(),
- jsDate.GetSeconds());
- break;
- case 2:
- swResult.Format(L"%04d/%02d/%02d %02d:%02d:%02d", jsDate.GetYear(),
- jsDate.GetMonth() + 1, jsDate.GetDay(),
- jsDate.GetHours(), jsDate.GetMinutes(),
- jsDate.GetSeconds());
- break;
- default:
- return FALSE;
- }
-
- vRet = swResult.c_str();
- return TRUE;
- }
- if (p1.GetType() == CJS_Value::VT_string) {
- std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str();
-
- bool bXFAPicture = false;
- if (iSize > 2) {
- bXFAPicture = params[2].ToBool();
- }
-
- if (bXFAPicture) {
- return FALSE; // currently, it doesn't support XFAPicture.
- }
-
- for (size_t i = 0; i < sizeof(fcTable) / sizeof(stru_TbConvert); ++i) {
- int iStart = 0;
- int iEnd;
- while ((iEnd = cFormat.find(fcTable[i].lpszJSMark, iStart)) != -1) {
- cFormat.replace(iEnd, FXSYS_wcslen(fcTable[i].lpszJSMark),
- fcTable[i].lpszCppMark);
- iStart = iEnd;
- }
- }
-
- int iYear, iMonth, iDay, iHour, iMin, iSec;
- iYear = jsDate.GetYear();
- iMonth = jsDate.GetMonth();
- iDay = jsDate.GetDay();
- iHour = jsDate.GetHours();
- iMin = jsDate.GetMinutes();
- iSec = jsDate.GetSeconds();
-
- struct tm time = {};
- time.tm_year = iYear - 1900;
- time.tm_mon = iMonth;
- time.tm_mday = iDay;
- time.tm_hour = iHour;
- time.tm_min = iMin;
- time.tm_sec = iSec;
-
- struct stru_TbConvertAd {
- const FX_WCHAR* lpszJSMark;
- int iValue;
- };
-
- stru_TbConvertAd cTableAd[] = {
- {L"m", iMonth + 1}, {L"d", iDay},
- {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour},
- {L"M", iMin}, {L"s", iSec},
- };
-
- for (size_t i = 0; i < sizeof(cTableAd) / sizeof(stru_TbConvertAd); ++i) {
- wchar_t tszValue[10];
- CFX_WideString sValue;
- sValue.Format(L"%d", cTableAd[i].iValue);
- memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1),
- (sValue.GetLength() + 1) * sizeof(wchar_t));
-
- int iStart = 0;
- int iEnd;
- while ((iEnd = cFormat.find(cTableAd[i].lpszJSMark, iStart)) != -1) {
- if (iEnd > 0) {
- if (cFormat[iEnd - 1] == L'%') {
- iStart = iEnd + 1;
- continue;
- }
- }
- cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[i].lpszJSMark), tszValue);
- iStart = iEnd;
- }
- }
-
- CFX_WideString strFormat;
- wchar_t buf[64] = {};
- strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
- cFormat = buf;
- vRet = cFormat.c_str();
- return TRUE;
- }
- return FALSE;
-}
-
-void util::printd(const std::wstring& cFormat2,
- CJS_Date jsDate,
- bool bXFAPicture,
- std::wstring& cPurpose) {
- std::wstring cFormat = cFormat2;
-
- if (bXFAPicture) {
- return; // currently, it doesn't support XFAPicture.
- }
-
- for (size_t i = 0; i < sizeof(fcTable) / sizeof(stru_TbConvert); ++i) {
- int iStart = 0;
- int iEnd;
- while ((iEnd = cFormat.find(fcTable[i].lpszJSMark, iStart)) != -1) {
- cFormat.replace(iEnd, FXSYS_wcslen(fcTable[i].lpszJSMark),
- fcTable[i].lpszCppMark);
- iStart = iEnd;
- }
- }
-
- int iYear, iMonth, iDay, iHour, iMin, iSec;
- iYear = jsDate.GetYear();
- iMonth = jsDate.GetMonth();
- iDay = jsDate.GetDay();
- iHour = jsDate.GetHours();
- iMin = jsDate.GetMinutes();
- iSec = jsDate.GetSeconds();
-
- struct tm time = {};
- time.tm_year = iYear - 1900;
- time.tm_mon = iMonth;
- time.tm_mday = iDay;
- time.tm_hour = iHour;
- time.tm_min = iMin;
- time.tm_sec = iSec;
- // COleDateTime cppTm(iYear,iMonth+1,iDay,iHour,iMin,iSec);
- // CString strFormat = cppTm.Format(cFormat.c_str());
-
- struct stru_TbConvertAd {
- const FX_WCHAR* lpszJSMark;
- int iValue;
- };
-
- stru_TbConvertAd cTableAd[] = {
- {L"m", iMonth + 1}, {L"d", iDay},
- {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour},
- {L"M", iMin}, {L"s", iSec},
- };
-
- // cFormat = strFormat.GetBuffer(strFormat.GetLength()+1);
- for (size_t i = 0; i < sizeof(cTableAd) / sizeof(stru_TbConvertAd); ++i) {
- wchar_t tszValue[10];
- CFX_WideString sValue;
- sValue.Format(L"%d", cTableAd[i].iValue);
- memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1),
- sValue.GetLength() * sizeof(wchar_t));
-
- int iStart = 0;
- int iEnd;
- while ((iEnd = cFormat.find(cTableAd[i].lpszJSMark, iStart)) != -1) {
- if (iEnd > 0) {
- if (cFormat[iEnd - 1] == L'%') {
- iStart = iEnd + 1;
- continue;
- }
- }
- cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[i].lpszJSMark), tszValue);
- iStart = iEnd;
- }
- }
-
- CFX_WideString strFormat;
- wchar_t buf[64] = {};
- strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
- cFormat = buf;
- cPurpose = cFormat;
-}
-
-FX_BOOL util::printx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int iSize = params.size();
- if (iSize < 2)
- return FALSE;
- CFX_WideString sFormat = params[0].ToCFXWideString();
- CFX_WideString sSource = params[1].ToCFXWideString();
- std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str();
- std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str();
- std::string cDest;
- printx(cFormat, cSource, cDest);
- vRet = cDest.c_str();
- return TRUE;
-}
-
-void util::printx(const std::string& cFormat,
- const std::string& cSource2,
- std::string& cPurpose) {
- std::string cSource(cSource2);
- if (!cPurpose.empty())
- // cPurpose.clear();
- cPurpose.erase();
- int itSource = 0;
- int iSize = cSource.size();
- for (int iIndex = 0; iIndex < (int)cFormat.size() && itSource < iSize;
- iIndex++) {
- char letter = cFormat[iIndex];
- switch (letter) {
- case '?':
- cPurpose += cSource[itSource];
- itSource++;
- break;
- case 'X': {
- while (itSource < iSize) {
- if (std::isdigit(cSource[itSource]) ||
- (cSource[itSource] >= 'a' && cSource[itSource] <= 'z') ||
- (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) {
- cPurpose += cSource[itSource];
- itSource++;
- break;
- }
- itSource++;
- }
- break;
- } break;
- case 'A': {
- while (itSource < iSize) {
- if ((cSource[itSource] >= 'a' && cSource[itSource] <= 'z') ||
- (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) {
- cPurpose += cSource[itSource];
- itSource++;
- break;
- }
- itSource++;
- }
- break;
- } break;
- case '9': {
- while (itSource < iSize) {
- if (std::isdigit(cSource[itSource])) {
- cPurpose += cSource[itSource];
- itSource++;
- break;
- }
- itSource++;
- }
- break;
- }
- case '*': {
- cPurpose.append(cSource, itSource, iSize - itSource);
- itSource = iSize - 1;
- break;
- }
- case '\\':
- break;
- case '>': {
- for (char& c : cSource)
- c = toupper(c);
- break;
- }
- case '<': {
- for (char& c : cSource)
- c = tolower(c);
- break;
- }
- case '=':
- break;
- default:
- cPurpose += letter;
- break;
- }
- }
-}
-
-FX_BOOL util::scand(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int iSize = params.size();
- if (iSize < 2)
- return FALSE;
-
- CFX_WideString sFormat = params[0].ToCFXWideString();
- CFX_WideString sDate = params[1].ToCFXWideString();
- double dDate = JS_GetDateTime();
- if (sDate.GetLength() > 0) {
- dDate = CJS_PublicMethods::MakeRegularDate(sDate, sFormat, nullptr);
- }
-
- if (!JS_PortIsNan(dDate)) {
- vRet = CJS_Date(CJS_Runtime::FromContext(cc), dDate);
- } else {
- vRet.SetNull();
- }
-
- return TRUE;
-}
-
-FX_BOOL util::byteToChar(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError) {
- int iSize = params.size();
- if (iSize == 0)
- return FALSE;
- int nByte = params[0].ToInt();
- unsigned char cByte = (unsigned char)nByte;
- CFX_WideString csValue;
- csValue.Format(L"%c", cByte);
- vRet = csValue.c_str();
- return TRUE;
-}
diff --git a/fpdfsdk/src/javascript/util.h b/fpdfsdk/src/javascript/util.h
deleted file mode 100644
index 6e3a5d2901..0000000000
--- a/fpdfsdk/src/javascript/util.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_SRC_JAVASCRIPT_UTIL_H_
-#define FPDFSDK_SRC_JAVASCRIPT_UTIL_H_
-
-#include <string>
-#include <vector>
-
-#include "fpdfsdk/src/javascript/JS_Define.h"
-
-class util : public CJS_EmbedObj {
- public:
- util(CJS_Object* pJSObject);
- ~util() override;
-
- public:
- FX_BOOL printd(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL printf(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL printx(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL scand(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
- FX_BOOL byteToChar(IJS_Context* cc,
- const std::vector<CJS_Value>& params,
- CJS_Value& vRet,
- CFX_WideString& sError);
-
- public:
- static void printd(const std::wstring& cFormat,
- CJS_Date Date,
- bool bXFAPicture,
- std::wstring& cPurpose);
- static void printx(const std::string& cFormat,
- const std::string& cSource,
- std::string& cPurpose);
- static int ParstDataType(std::wstring* sFormat);
-};
-
-class CJS_Util : public CJS_Object {
- public:
- CJS_Util(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
- ~CJS_Util() override {}
-
- DECLARE_JS_CLASS();
-
- JS_STATIC_METHOD(printd, util);
- JS_STATIC_METHOD(printf, util);
- JS_STATIC_METHOD(printx, util);
- JS_STATIC_METHOD(scand, util);
- JS_STATIC_METHOD(byteToChar, util);
-};
-
-#endif // FPDFSDK_SRC_JAVASCRIPT_UTIL_H_
diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp
deleted file mode 100644
index 86f6ced198..0000000000
--- a/fpdfsdk/src/jsapi/fxjs_v8.cpp
+++ /dev/null
@@ -1,812 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/jsapi/fxjs_v8.h"
-
-#include <vector>
-
-#include "core/include/fxcrt/fx_basic.h"
-
-const wchar_t kFXJSValueNameString[] = L"string";
-const wchar_t kFXJSValueNameNumber[] = L"number";
-const wchar_t kFXJSValueNameBoolean[] = L"boolean";
-const wchar_t kFXJSValueNameDate[] = L"date";
-const wchar_t kFXJSValueNameObject[] = L"object";
-const wchar_t kFXJSValueNameFxobj[] = L"fxobj";
-const wchar_t kFXJSValueNameNull[] = L"null";
-const wchar_t kFXJSValueNameUndefined[] = L"undefined";
-
-// Keep this consistent with the values defined in gin/public/context_holder.h
-// (without actually requiring a dependency on gin itself for the standalone
-// embedders of PDFIum). The value we want to use is:
-// kPerContextDataStartIndex + kEmbedderPDFium, which is 3.
-static const unsigned int kPerContextDataIndex = 3u;
-static unsigned int g_embedderDataSlot = 1u;
-static v8::Isolate* g_isolate = nullptr;
-static size_t g_isolate_ref_count = 0;
-static FXJS_ArrayBufferAllocator* g_arrayBufferAllocator = nullptr;
-static v8::Global<v8::ObjectTemplate>* g_DefaultGlobalObjectTemplate = nullptr;
-
-class CFXJS_PerObjectData {
- public:
- explicit CFXJS_PerObjectData(int nObjDefID)
- : m_ObjDefID(nObjDefID), m_pPrivate(nullptr) {}
-
- const int m_ObjDefID;
- void* m_pPrivate;
-};
-
-class CFXJS_ObjDefinition {
- public:
- static int MaxID(v8::Isolate* pIsolate) {
- return FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray.size();
- }
-
- static CFXJS_ObjDefinition* ForID(v8::Isolate* pIsolate, int id) {
- // Note: GetAt() halts if out-of-range even in release builds.
- return FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray[id];
- }
-
- CFXJS_ObjDefinition(v8::Isolate* isolate,
- const wchar_t* sObjName,
- FXJSOBJTYPE eObjType,
- FXJS_CONSTRUCTOR pConstructor,
- FXJS_DESTRUCTOR pDestructor)
- : m_ObjName(sObjName),
- m_ObjType(eObjType),
- m_pConstructor(pConstructor),
- m_pDestructor(pDestructor),
- m_pIsolate(isolate) {
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- v8::Local<v8::FunctionTemplate> fun = v8::FunctionTemplate::New(isolate);
- fun->InstanceTemplate()->SetInternalFieldCount(2);
- m_FunctionTemplate.Reset(isolate, fun);
-
- v8::Local<v8::Signature> sig = v8::Signature::New(isolate, fun);
- m_Signature.Reset(isolate, sig);
- }
-
- int AssignID() {
- FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(m_pIsolate);
- pData->m_ObjectDefnArray.push_back(this);
- return pData->m_ObjectDefnArray.size() - 1;
- }
-
- v8::Local<v8::ObjectTemplate> GetInstanceTemplate() {
- v8::EscapableHandleScope scope(m_pIsolate);
- v8::Local<v8::FunctionTemplate> function =
- m_FunctionTemplate.Get(m_pIsolate);
- return scope.Escape(function->InstanceTemplate());
- }
-
- v8::Local<v8::Signature> GetSignature() {
- v8::EscapableHandleScope scope(m_pIsolate);
- return scope.Escape(m_Signature.Get(m_pIsolate));
- }
-
- const wchar_t* const m_ObjName;
- const FXJSOBJTYPE m_ObjType;
- const FXJS_CONSTRUCTOR m_pConstructor;
- const FXJS_DESTRUCTOR m_pDestructor;
-
- v8::Isolate* m_pIsolate;
- v8::Global<v8::FunctionTemplate> m_FunctionTemplate;
- v8::Global<v8::Signature> m_Signature;
-};
-
-static v8::Local<v8::ObjectTemplate> GetGlobalObjectTemplate(
- v8::Isolate* pIsolate) {
- int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
- for (int i = 0; i < maxID; ++i) {
- CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
- if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL)
- return pObjDef->GetInstanceTemplate();
- }
- if (!g_DefaultGlobalObjectTemplate) {
- g_DefaultGlobalObjectTemplate = new v8::Global<v8::ObjectTemplate>;
- g_DefaultGlobalObjectTemplate->Reset(pIsolate,
- v8::ObjectTemplate::New(pIsolate));
- }
- return g_DefaultGlobalObjectTemplate->Get(pIsolate);
-}
-
-void* FXJS_ArrayBufferAllocator::Allocate(size_t length) {
- return calloc(1, length);
-}
-
-void* FXJS_ArrayBufferAllocator::AllocateUninitialized(size_t length) {
- return malloc(length);
-}
-
-void FXJS_ArrayBufferAllocator::Free(void* data, size_t length) {
- free(data);
-}
-
-void V8TemplateMapTraits::Dispose(v8::Isolate* isolate,
- v8::Global<v8::Object> value,
- void* key) {
- v8::Local<v8::Object> obj = value.Get(isolate);
- if (obj.IsEmpty())
- return;
- int id = FXJS_GetObjDefnID(obj);
- if (id == -1)
- return;
-
- CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(isolate, id);
- if (!pObjDef)
- return;
- if (pObjDef->m_pDestructor)
- pObjDef->m_pDestructor(obj);
- FXJS_FreePrivate(obj);
-}
-
-V8TemplateMapTraits::MapType* V8TemplateMapTraits::MapFromWeakCallbackInfo(
- const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {
- V8TemplateMap* pMap =
- (FXJS_PerIsolateData::Get(data.GetIsolate()))->m_pDynamicObjsMap;
- return pMap ? &pMap->m_map : nullptr;
-}
-
-void FXJS_Initialize(unsigned int embedderDataSlot, v8::Isolate* pIsolate) {
- if (g_isolate) {
- ASSERT(g_embedderDataSlot == embedderDataSlot);
- ASSERT(g_isolate == pIsolate);
- return;
- }
- g_embedderDataSlot = embedderDataSlot;
- g_isolate = pIsolate;
-}
-
-void FXJS_Release() {
- ASSERT(!g_isolate || g_isolate_ref_count == 0);
- delete g_DefaultGlobalObjectTemplate;
- g_DefaultGlobalObjectTemplate = nullptr;
- g_isolate = nullptr;
-
- delete g_arrayBufferAllocator;
- g_arrayBufferAllocator = nullptr;
-}
-
-bool FXJS_GetIsolate(v8::Isolate** pResultIsolate) {
- if (g_isolate) {
- *pResultIsolate = g_isolate;
- return false;
- }
- // Provide backwards compatibility when no external isolate.
- if (!g_arrayBufferAllocator)
- g_arrayBufferAllocator = new FXJS_ArrayBufferAllocator();
- v8::Isolate::CreateParams params;
- params.array_buffer_allocator = g_arrayBufferAllocator;
- *pResultIsolate = v8::Isolate::New(params);
- return true;
-}
-
-size_t FXJS_GlobalIsolateRefCount() {
- return g_isolate_ref_count;
-}
-
-// static
-void FXJS_PerIsolateData::SetUp(v8::Isolate* pIsolate) {
- if (!pIsolate->GetData(g_embedderDataSlot))
- pIsolate->SetData(g_embedderDataSlot, new FXJS_PerIsolateData());
-}
-
-// static
-FXJS_PerIsolateData* FXJS_PerIsolateData::Get(v8::Isolate* pIsolate) {
- return static_cast<FXJS_PerIsolateData*>(
- pIsolate->GetData(g_embedderDataSlot));
-}
-
-int FXJS_DefineObj(v8::Isolate* pIsolate,
- const wchar_t* sObjName,
- FXJSOBJTYPE eObjType,
- FXJS_CONSTRUCTOR pConstructor,
- FXJS_DESTRUCTOR pDestructor) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
-
- FXJS_PerIsolateData::SetUp(pIsolate);
- CFXJS_ObjDefinition* pObjDef = new CFXJS_ObjDefinition(
- pIsolate, sObjName, eObjType, pConstructor, pDestructor);
- return pObjDef->AssignID();
-}
-
-void FXJS_DefineObjMethod(v8::Isolate* pIsolate,
- int nObjDefnID,
- const wchar_t* sMethodName,
- v8::FunctionCallback pMethodCall) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
- CFX_ByteString bsMethodName = CFX_WideString(sMethodName).UTF8Encode();
- CFXJS_ObjDefinition* pObjDef =
- CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID);
- pObjDef->GetInstanceTemplate()->Set(
- v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(),
- v8::NewStringType::kNormal).ToLocalChecked(),
- v8::FunctionTemplate::New(pIsolate, pMethodCall, v8::Local<v8::Value>(),
- pObjDef->GetSignature()),
- v8::ReadOnly);
-}
-
-void FXJS_DefineObjProperty(v8::Isolate* pIsolate,
- int nObjDefnID,
- const wchar_t* sPropName,
- v8::AccessorGetterCallback pPropGet,
- v8::AccessorSetterCallback pPropPut) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
- CFX_ByteString bsPropertyName = CFX_WideString(sPropName).UTF8Encode();
- CFXJS_ObjDefinition* pObjDef =
- CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID);
- pObjDef->GetInstanceTemplate()->SetAccessor(
- v8::String::NewFromUtf8(pIsolate, bsPropertyName.c_str(),
- v8::NewStringType::kNormal).ToLocalChecked(),
- pPropGet, pPropPut);
-}
-
-void FXJS_DefineObjAllProperties(v8::Isolate* pIsolate,
- int nObjDefnID,
- v8::NamedPropertyQueryCallback pPropQurey,
- v8::NamedPropertyGetterCallback pPropGet,
- v8::NamedPropertySetterCallback pPropPut,
- v8::NamedPropertyDeleterCallback pPropDel) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
- CFXJS_ObjDefinition* pObjDef =
- CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID);
- pObjDef->GetInstanceTemplate()->SetNamedPropertyHandler(pPropGet, pPropPut,
- pPropQurey, pPropDel);
-}
-
-void FXJS_DefineObjConst(v8::Isolate* pIsolate,
- int nObjDefnID,
- const wchar_t* sConstName,
- v8::Local<v8::Value> pDefault) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
- CFX_ByteString bsConstName = CFX_WideString(sConstName).UTF8Encode();
- CFXJS_ObjDefinition* pObjDef =
- CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID);
- pObjDef->GetInstanceTemplate()->Set(pIsolate, bsConstName.c_str(), pDefault);
-}
-
-void FXJS_DefineGlobalMethod(v8::Isolate* pIsolate,
- const wchar_t* sMethodName,
- v8::FunctionCallback pMethodCall) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
- CFX_ByteString bsMethodName = CFX_WideString(sMethodName).UTF8Encode();
- GetGlobalObjectTemplate(pIsolate)->Set(
- v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(),
- v8::NewStringType::kNormal).ToLocalChecked(),
- v8::FunctionTemplate::New(pIsolate, pMethodCall), v8::ReadOnly);
-}
-
-void FXJS_DefineGlobalConst(v8::Isolate* pIsolate,
- const wchar_t* sConstName,
- v8::FunctionCallback pConstGetter) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope handle_scope(pIsolate);
- CFX_ByteString bsConst = CFX_WideString(sConstName).UTF8Encode();
- GetGlobalObjectTemplate(pIsolate)
- ->SetAccessorProperty(v8::String::NewFromUtf8(pIsolate, bsConst.c_str(),
- v8::NewStringType::kNormal)
- .ToLocalChecked(),
- v8::FunctionTemplate::New(pIsolate, pConstGetter));
-}
-
-void FXJS_InitializeRuntime(
- v8::Isolate* pIsolate,
- IJS_Runtime* pIRuntime,
- v8::Global<v8::Context>* pV8PersistentContext,
- std::vector<v8::Global<v8::Object>*>* pStaticObjects) {
- if (pIsolate == g_isolate)
- ++g_isolate_ref_count;
-
- v8::Isolate::Scope isolate_scope(pIsolate);
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(pIsolate);
-#endif // PDF_ENABLE_XFA
- v8::HandleScope handle_scope(pIsolate);
- v8::Local<v8::Context> v8Context =
- v8::Context::New(pIsolate, NULL, GetGlobalObjectTemplate(pIsolate));
- v8::Context::Scope context_scope(v8Context);
-
- FXJS_PerIsolateData::SetUp(pIsolate);
- FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate);
- if (!pData)
- return;
- pData->CreateDynamicObjsMap(pIsolate);
- v8Context->SetAlignedPointerInEmbedderData(kPerContextDataIndex, pIRuntime);
-
- int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
- pStaticObjects->resize(maxID + 1);
- for (int i = 0; i < maxID; ++i) {
- CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
- if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
- v8Context->Global()
- ->GetPrototype()
- ->ToObject(v8Context)
- .ToLocalChecked()
- ->SetAlignedPointerInInternalField(0, new CFXJS_PerObjectData(i));
-
- if (pObjDef->m_pConstructor)
- pObjDef->m_pConstructor(pIRuntime, v8Context->Global()
- ->GetPrototype()
- ->ToObject(v8Context)
- .ToLocalChecked());
- } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) {
- CFX_ByteString bs = CFX_WideString(pObjDef->m_ObjName).UTF8Encode();
- v8::Local<v8::String> m_ObjName =
- v8::String::NewFromUtf8(pIsolate, bs.c_str(),
- v8::NewStringType::kNormal,
- bs.GetLength()).ToLocalChecked();
-
- v8::Local<v8::Object> obj =
- FXJS_NewFxDynamicObj(pIsolate, pIRuntime, i, true);
- v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust();
- pStaticObjects->at(i) = new v8::Global<v8::Object>(pIsolate, obj);
- }
- }
- pV8PersistentContext->Reset(pIsolate, v8Context);
-}
-
-void FXJS_ReleaseRuntime(v8::Isolate* pIsolate,
- v8::Global<v8::Context>* pV8PersistentContext,
- std::vector<v8::Global<v8::Object>*>* pStaticObjects) {
- v8::Isolate::Scope isolate_scope(pIsolate);
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(pIsolate);
-#endif // PDF_ENABLE_XFA
- v8::HandleScope handle_scope(pIsolate);
- v8::Local<v8::Context> context =
- v8::Local<v8::Context>::New(pIsolate, *pV8PersistentContext);
- v8::Context::Scope context_scope(context);
-
- FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate);
- if (!pData)
- return;
- pData->ReleaseDynamicObjsMap();
-
- int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
- for (int i = 0; i < maxID; ++i) {
- CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
- v8::Local<v8::Object> pObj;
- if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
- pObj =
- context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
- } else if (pStaticObjects->at(i) && !pStaticObjects->at(i)->IsEmpty()) {
- pObj = v8::Local<v8::Object>::New(pIsolate, *pStaticObjects->at(i));
- delete pStaticObjects->at(i);
- pStaticObjects->at(i) = nullptr;
- }
-
- if (!pObj.IsEmpty()) {
- if (pObjDef->m_pDestructor)
- pObjDef->m_pDestructor(pObj);
- FXJS_FreePrivate(pObj);
- }
- }
-
- if (pIsolate == g_isolate && --g_isolate_ref_count > 0)
- return;
-
- for (int i = 0; i < maxID; ++i)
- delete CFXJS_ObjDefinition::ForID(pIsolate, i);
-
- pIsolate->SetData(g_embedderDataSlot, nullptr);
- delete pData;
-}
-
-IJS_Runtime* FXJS_GetRuntimeFromIsolate(v8::Isolate* pIsolate) {
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- return static_cast<IJS_Runtime*>(
- context->GetAlignedPointerFromEmbedderData(kPerContextDataIndex));
-}
-
-#ifdef PDF_ENABLE_XFA
-void FXJS_SetRuntimeForV8Context(v8::Local<v8::Context> v8Context,
- IJS_Runtime* pIRuntime) {
- v8Context->SetAlignedPointerInEmbedderData(kPerContextDataIndex, pIRuntime);
-}
-#endif // PDF_ENABLE_XFA
-
-int FXJS_Execute(v8::Isolate* pIsolate,
- IJS_Context* pJSContext,
- const wchar_t* script,
- FXJSErr* pError) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::TryCatch try_catch(pIsolate);
- CFX_ByteString bsScript = CFX_WideString(script).UTF8Encode();
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- v8::Local<v8::Script> compiled_script;
- if (!v8::Script::Compile(
- context, v8::String::NewFromUtf8(
- pIsolate, bsScript.c_str(), v8::NewStringType::kNormal,
- bsScript.GetLength()).ToLocalChecked())
- .ToLocal(&compiled_script)) {
- v8::String::Utf8Value error(try_catch.Exception());
- // TODO(tsepez): return error via pError->message.
- return -1;
- }
-
- v8::Local<v8::Value> result;
- if (!compiled_script->Run(context).ToLocal(&result)) {
- v8::String::Utf8Value error(try_catch.Exception());
- // TODO(tsepez): return error via pError->message.
- return -1;
- }
- return 0;
-}
-
-v8::Local<v8::Object> FXJS_NewFxDynamicObj(v8::Isolate* pIsolate,
- IJS_Runtime* pIRuntime,
- int nObjDefnID,
- bool bStatic) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- if (nObjDefnID == -1) {
- v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(pIsolate);
- v8::Local<v8::Object> obj;
- if (!objTempl->NewInstance(context).ToLocal(&obj))
- return v8::Local<v8::Object>();
- return obj;
- }
-
- FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate);
- if (!pData)
- return v8::Local<v8::Object>();
-
- if (nObjDefnID < 0 || nObjDefnID >= CFXJS_ObjDefinition::MaxID(pIsolate))
- return v8::Local<v8::Object>();
-
- CFXJS_ObjDefinition* pObjDef =
- CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID);
- v8::Local<v8::Object> obj;
- if (!pObjDef->GetInstanceTemplate()->NewInstance(context).ToLocal(&obj))
- return v8::Local<v8::Object>();
-
- CFXJS_PerObjectData* pPerObjData = new CFXJS_PerObjectData(nObjDefnID);
- obj->SetAlignedPointerInInternalField(0, pPerObjData);
- if (pObjDef->m_pConstructor)
- pObjDef->m_pConstructor(pIRuntime, obj);
-
- if (!bStatic && FXJS_PerIsolateData::Get(pIsolate)->m_pDynamicObjsMap) {
- FXJS_PerIsolateData::Get(pIsolate)
- ->m_pDynamicObjsMap->set(pPerObjData, obj);
- }
- return obj;
-}
-
-v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate) {
- v8::Isolate::Scope isolate_scope(pIsolate);
- if (!FXJS_PerIsolateData::Get(pIsolate))
- return v8::Local<v8::Object>();
-
- // Return the global object.
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
-}
-
-int FXJS_GetObjDefnID(v8::Local<v8::Object> pObj) {
- if (pObj.IsEmpty() || !pObj->InternalFieldCount())
- return -1;
- CFXJS_PerObjectData* pPerObjectData = static_cast<CFXJS_PerObjectData*>(
- pObj->GetAlignedPointerFromInternalField(0));
- if (pPerObjectData)
- return pPerObjectData->m_ObjDefID;
- return -1;
-}
-
-void FXJS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) {
- // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t
- // wide-strings isn't handled by v8, so use UTF8 as a common
- // intermediate format.
- CFX_ByteString utf8_message = message.UTF8Encode();
- pIsolate->ThrowException(
- v8::String::NewFromUtf8(pIsolate, utf8_message.c_str(),
- v8::NewStringType::kNormal).ToLocalChecked());
-}
-
-const wchar_t* FXJS_GetTypeof(v8::Local<v8::Value> pObj) {
- if (pObj.IsEmpty())
- return NULL;
- if (pObj->IsString())
- return kFXJSValueNameString;
- if (pObj->IsNumber())
- return kFXJSValueNameNumber;
- if (pObj->IsBoolean())
- return kFXJSValueNameBoolean;
- if (pObj->IsDate())
- return kFXJSValueNameDate;
- if (pObj->IsObject())
- return kFXJSValueNameObject;
- if (pObj->IsNull())
- return kFXJSValueNameNull;
- if (pObj->IsUndefined())
- return kFXJSValueNameUndefined;
- return NULL;
-}
-
-void FXJS_SetPrivate(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- void* p) {
- if (pObj.IsEmpty() || !pObj->InternalFieldCount())
- return;
- CFXJS_PerObjectData* pPerObjectData = static_cast<CFXJS_PerObjectData*>(
- pObj->GetAlignedPointerFromInternalField(0));
- if (!pPerObjectData)
- return;
- pPerObjectData->m_pPrivate = p;
-}
-
-void* FXJS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj) {
- if (pObj.IsEmpty())
- return nullptr;
- CFXJS_PerObjectData* pPerObjectData = nullptr;
- if (pObj->InternalFieldCount()) {
- pPerObjectData = static_cast<CFXJS_PerObjectData*>(
- pObj->GetAlignedPointerFromInternalField(0));
- } else {
- // It could be a global proxy object.
- v8::Local<v8::Value> v = pObj->GetPrototype();
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- if (v->IsObject()) {
- pPerObjectData = static_cast<CFXJS_PerObjectData*>(
- v->ToObject(context)
- .ToLocalChecked()
- ->GetAlignedPointerFromInternalField(0));
- }
- }
- return pPerObjectData ? pPerObjectData->m_pPrivate : nullptr;
-}
-
-void FXJS_FreePrivate(void* pPerObjectData) {
- delete static_cast<CFXJS_PerObjectData*>(pPerObjectData);
-}
-
-void FXJS_FreePrivate(v8::Local<v8::Object> pObj) {
- if (pObj.IsEmpty() || !pObj->InternalFieldCount())
- return;
- FXJS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0));
- pObj->SetAlignedPointerInInternalField(0, NULL);
-}
-
-v8::Local<v8::String> FXJS_WSToJSString(v8::Isolate* pIsolate,
- const wchar_t* PropertyName,
- int Len) {
- CFX_WideString ws = CFX_WideString(PropertyName, Len);
- CFX_ByteString bs = ws.UTF8Encode();
- if (!pIsolate)
- pIsolate = v8::Isolate::GetCurrent();
- return v8::String::NewFromUtf8(pIsolate, bs.c_str(),
- v8::NewStringType::kNormal).ToLocalChecked();
-}
-
-v8::Local<v8::Value> FXJS_GetObjectElement(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName) {
- if (pObj.IsEmpty())
- return v8::Local<v8::Value>();
- v8::Local<v8::Value> val;
- if (!pObj->Get(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName)).ToLocal(&val))
- return v8::Local<v8::Value>();
- return val;
-}
-
-v8::Local<v8::Array> FXJS_GetObjectElementNames(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj) {
- if (pObj.IsEmpty())
- return v8::Local<v8::Array>();
- v8::Local<v8::Array> val;
- if (!pObj->GetPropertyNames(pIsolate->GetCurrentContext()).ToLocal(&val))
- return v8::Local<v8::Array>();
- return val;
-}
-
-void FXJS_PutObjectString(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName,
- const wchar_t* sValue) {
- if (pObj.IsEmpty())
- return;
- pObj->Set(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName),
- FXJS_WSToJSString(pIsolate, sValue)).FromJust();
-}
-
-void FXJS_PutObjectNumber(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName,
- int nValue) {
- if (pObj.IsEmpty())
- return;
- pObj->Set(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName),
- v8::Int32::New(pIsolate, nValue)).FromJust();
-}
-
-void FXJS_PutObjectNumber(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName,
- float fValue) {
- if (pObj.IsEmpty())
- return;
- pObj->Set(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName),
- v8::Number::New(pIsolate, (double)fValue)).FromJust();
-}
-
-void FXJS_PutObjectNumber(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName,
- double dValue) {
- if (pObj.IsEmpty())
- return;
- pObj->Set(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName),
- v8::Number::New(pIsolate, (double)dValue)).FromJust();
-}
-
-void FXJS_PutObjectBoolean(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName,
- bool bValue) {
- if (pObj.IsEmpty())
- return;
- pObj->Set(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName),
- v8::Boolean::New(pIsolate, bValue)).FromJust();
-}
-
-void FXJS_PutObjectObject(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName,
- v8::Local<v8::Object> pPut) {
- if (pObj.IsEmpty())
- return;
- pObj->Set(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName), pPut).FromJust();
-}
-
-void FXJS_PutObjectNull(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const wchar_t* PropertyName) {
- if (pObj.IsEmpty())
- return;
- pObj->Set(pIsolate->GetCurrentContext(),
- FXJS_WSToJSString(pIsolate, PropertyName),
- v8::Local<v8::Object>()).FromJust();
-}
-
-v8::Local<v8::Array> FXJS_NewArray(v8::Isolate* pIsolate) {
- return v8::Array::New(pIsolate);
-}
-
-unsigned FXJS_PutArrayElement(v8::Isolate* pIsolate,
- v8::Local<v8::Array> pArray,
- unsigned index,
- v8::Local<v8::Value> pValue) {
- if (pArray.IsEmpty())
- return 0;
- if (pArray->Set(pIsolate->GetCurrentContext(), index, pValue).IsNothing())
- return 0;
- return 1;
-}
-
-v8::Local<v8::Value> FXJS_GetArrayElement(v8::Isolate* pIsolate,
- v8::Local<v8::Array> pArray,
- unsigned index) {
- if (pArray.IsEmpty())
- return v8::Local<v8::Value>();
- v8::Local<v8::Value> val;
- if (!pArray->Get(pIsolate->GetCurrentContext(), index).ToLocal(&val))
- return v8::Local<v8::Value>();
- return val;
-}
-
-unsigned FXJS_GetArrayLength(v8::Local<v8::Array> pArray) {
- if (pArray.IsEmpty())
- return 0;
- return pArray->Length();
-}
-
-v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, int number) {
- return v8::Int32::New(pIsolate, number);
-}
-
-v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, double number) {
- return v8::Number::New(pIsolate, number);
-}
-
-v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, float number) {
- return v8::Number::New(pIsolate, (float)number);
-}
-
-v8::Local<v8::Value> FXJS_NewBoolean(v8::Isolate* pIsolate, bool b) {
- return v8::Boolean::New(pIsolate, b);
-}
-
-v8::Local<v8::Value> FXJS_NewObject(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj) {
- if (pObj.IsEmpty())
- return v8::Local<v8::Value>();
- return pObj->Clone();
-}
-
-v8::Local<v8::Value> FXJS_NewObject2(v8::Isolate* pIsolate,
- v8::Local<v8::Array> pObj) {
- if (pObj.IsEmpty())
- return v8::Local<v8::Value>();
- return pObj->Clone();
-}
-
-v8::Local<v8::Value> FXJS_NewString(v8::Isolate* pIsolate, const wchar_t* str) {
- return FXJS_WSToJSString(pIsolate, str);
-}
-
-v8::Local<v8::Value> FXJS_NewNull() {
- return v8::Local<v8::Value>();
-}
-
-v8::Local<v8::Value> FXJS_NewDate(v8::Isolate* pIsolate, double d) {
- return v8::Date::New(pIsolate->GetCurrentContext(), d).ToLocalChecked();
-}
-
-int FXJS_ToInt32(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) {
- if (pValue.IsEmpty())
- return 0;
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- return pValue->ToInt32(context).ToLocalChecked()->Value();
-}
-
-bool FXJS_ToBoolean(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) {
- if (pValue.IsEmpty())
- return false;
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- return pValue->ToBoolean(context).ToLocalChecked()->Value();
-}
-
-double FXJS_ToNumber(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) {
- if (pValue.IsEmpty())
- return 0.0;
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- return pValue->ToNumber(context).ToLocalChecked()->Value();
-}
-
-v8::Local<v8::Object> FXJS_ToObject(v8::Isolate* pIsolate,
- v8::Local<v8::Value> pValue) {
- if (pValue.IsEmpty())
- return v8::Local<v8::Object>();
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- return pValue->ToObject(context).ToLocalChecked();
-}
-
-CFX_WideString FXJS_ToString(v8::Isolate* pIsolate,
- v8::Local<v8::Value> pValue) {
- if (pValue.IsEmpty())
- return L"";
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked());
- return CFX_WideString::FromUTF8(*s, s.length());
-}
-
-v8::Local<v8::Array> FXJS_ToArray(v8::Isolate* pIsolate,
- v8::Local<v8::Value> pValue) {
- if (pValue.IsEmpty())
- return v8::Local<v8::Array>();
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
- return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
-}
-
-void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) {
- pTo = pFrom;
-}
-
-
diff --git a/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp b/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp
deleted file mode 100644
index b7700c8b60..0000000000
--- a/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2015 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/js_embedder_test.h"
-
-namespace {
-
-const wchar_t kScript[] = L"fred = 7";
-
-} // namespace
-
-class FXJSV8EmbedderTest : public JSEmbedderTest {};
-
-TEST_F(FXJSV8EmbedderTest, Getters) {
- v8::Isolate::Scope isolate_scope(isolate());
-#ifdef PDF_ENABLE_XFA
- v8::Locker locker(isolate());
-#endif // PDF_ENABLE_XFA
- v8::HandleScope handle_scope(isolate());
- v8::Context::Scope context_scope(GetV8Context());
-
- FXJSErr error;
- int sts = FXJS_Execute(isolate(), nullptr, kScript, &error);
- EXPECT_EQ(0, sts);
-
- v8::Local<v8::Object> This = FXJS_GetThisObj(isolate());
- v8::Local<v8::Value> fred = FXJS_GetObjectElement(isolate(), This, L"fred");
- EXPECT_TRUE(fred->IsNumber());
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Button.cpp b/fpdfsdk/src/pdfwindow/PWL_Button.cpp
deleted file mode 100644
index 2c6c36c047..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Button.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Button.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-CPWL_Button::CPWL_Button() : m_bMouseDown(FALSE) {}
-
-CPWL_Button::~CPWL_Button() {
-}
-
-CFX_ByteString CPWL_Button::GetClassName() const {
- return "CPWL_Button";
-}
-
-void CPWL_Button::OnCreate(PWL_CREATEPARAM& cp) {
- cp.eCursorType = FXCT_HAND;
-}
-
-FX_BOOL CPWL_Button::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- m_bMouseDown = TRUE;
- SetCapture();
-
- return TRUE;
-}
-
-FX_BOOL CPWL_Button::OnLButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonUp(point, nFlag);
-
- ReleaseCapture();
- m_bMouseDown = FALSE;
-
- return TRUE;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Caret.cpp b/fpdfsdk/src/pdfwindow/PWL_Caret.cpp
deleted file mode 100644
index 320b2bf62f..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Caret.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Caret.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-#define PWL_CARET_FLASHINTERVAL 500
-
-CPWL_Caret::CPWL_Caret()
- : m_bFlash(FALSE),
- m_ptHead(0, 0),
- m_ptFoot(0, 0),
- m_fWidth(0.4f),
- m_nDelay(0) {}
-
-CPWL_Caret::~CPWL_Caret() {}
-
-CFX_ByteString CPWL_Caret::GetClassName() const {
- return "CPWL_Caret";
-}
-
-void CPWL_Caret::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- GetCaretApp(sAppStream, CFX_FloatPoint(0.0f, 0.0f));
-}
-
-void CPWL_Caret::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- if (IsVisible() && m_bFlash) {
- CFX_FloatRect rcRect = GetCaretRect();
- CFX_FloatRect rcClip = GetClipRect();
-
- CFX_PathData path;
-
- path.SetPointCount(2);
-
- FX_FLOAT fCaretX = rcRect.left + m_fWidth * 0.5f;
- FX_FLOAT fCaretTop = rcRect.top;
- FX_FLOAT fCaretBottom = rcRect.bottom;
-
- if (!rcClip.IsEmpty()) {
- rcRect.Intersect(rcClip);
- if (!rcRect.IsEmpty()) {
- fCaretTop = rcRect.top;
- fCaretBottom = rcRect.bottom;
- path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO);
- path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO);
- } else {
- return;
- }
- } else {
- path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO);
- path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO);
- }
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = m_fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255, 0, 0, 0),
- FXFILL_ALTERNATE);
- }
-}
-
-void CPWL_Caret::GetCaretApp(CFX_ByteTextBuf& sAppStream,
- const CFX_FloatPoint& ptOffset) {
- if (IsVisible() && m_bFlash) {
- CFX_ByteTextBuf sCaret;
-
- CFX_FloatRect rcRect = GetCaretRect();
- CFX_FloatRect rcClip = GetClipRect();
-
- rcRect = CPWL_Utils::OffsetRect(rcRect, ptOffset.x, ptOffset.y);
- rcClip = CPWL_Utils::OffsetRect(rcClip, ptOffset.x, ptOffset.y);
-
- sCaret << "q\n";
- if (!rcClip.IsEmpty()) {
- sCaret << rcClip.left << " " << rcClip.bottom + 2.5f << " "
- << rcClip.right - rcClip.left << " "
- << rcClip.top - rcClip.bottom - 4.5f << " re W n\n";
- }
- sCaret << m_fWidth << " w\n0 G\n";
- sCaret << rcRect.left + m_fWidth / 2 << " " << rcRect.bottom << " m\n";
- sCaret << rcRect.left + m_fWidth / 2 << " " << rcRect.top << " l S\nQ\n";
-
- sAppStream << sCaret;
- }
-}
-
-CFX_ByteString CPWL_Caret::GetCaretAppearanceStream(
- const CFX_FloatPoint& ptOffset) {
- CFX_ByteTextBuf sCaret;
- GetCaretApp(sCaret, ptOffset);
- return sCaret.GetByteString();
-}
-
-void CPWL_Caret::TimerProc() {
- if (m_nDelay > 0) {
- m_nDelay--;
- } else {
- m_bFlash = !m_bFlash;
- InvalidateRect();
- }
-}
-
-CFX_FloatRect CPWL_Caret::GetCaretRect() const {
- return CFX_FloatRect(m_ptFoot.x, m_ptFoot.y, m_ptHead.x + m_fWidth,
- m_ptHead.y);
-}
-
-void CPWL_Caret::SetCaret(FX_BOOL bVisible,
- const CFX_FloatPoint& ptHead,
- const CFX_FloatPoint& ptFoot) {
- if (bVisible) {
- if (IsVisible()) {
- if (m_ptHead.x != ptHead.x || m_ptHead.y != ptHead.y ||
- m_ptFoot.x != ptFoot.x || m_ptFoot.y != ptFoot.y) {
- m_ptHead = ptHead;
- m_ptFoot = ptFoot;
-
- m_bFlash = TRUE;
- Move(m_rcInvalid, FALSE, TRUE);
- }
- } else {
- m_ptHead = ptHead;
- m_ptFoot = ptFoot;
-
- EndTimer();
- BeginTimer(PWL_CARET_FLASHINTERVAL);
-
- CPWL_Wnd::SetVisible(TRUE);
- m_bFlash = TRUE;
-
- Move(m_rcInvalid, FALSE, TRUE);
- }
- } else {
- m_ptHead = CFX_FloatPoint(0, 0);
- m_ptFoot = CFX_FloatPoint(0, 0);
-
- m_bFlash = FALSE;
- if (IsVisible()) {
- EndTimer();
- CPWL_Wnd::SetVisible(FALSE);
- }
- }
-}
-
-void CPWL_Caret::InvalidateRect(CFX_FloatRect* pRect) {
- if (pRect) {
- CFX_FloatRect rcRefresh = CPWL_Utils::InflateRect(*pRect, 0.5f);
- rcRefresh.top += 1;
- rcRefresh.bottom -= 1;
-
- CPWL_Wnd::InvalidateRect(&rcRefresh);
- } else {
- CPWL_Wnd::InvalidateRect(pRect);
- }
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp b/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp
deleted file mode 100644
index 6edd6bdd85..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp
+++ /dev/null
@@ -1,651 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_ComboBox.h"
-
-#include "fpdfsdk/include/pdfwindow/PWL_Edit.h"
-#include "fpdfsdk/include/pdfwindow/PWL_EditCtrl.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ListBox.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-#include "public/fpdf_fwlevent.h"
-
-#define PWLCB_DEFAULTFONTSIZE 12.0f
-
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
-
-FX_BOOL CPWL_CBListBox::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonUp(point, nFlag);
-
- if (m_bMouseDown) {
- ReleaseCapture();
- m_bMouseDown = FALSE;
-
- if (ClientHitTest(point)) {
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_LBUTTONUP, 0,
- PWL_MAKEDWORD(point.x, point.y));
- }
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(FALSE, bExit, nFlag);
- if (bExit)
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_CBListBox::OnKeyDownWithExit(FX_WORD nChar,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- if (!m_pList)
- return FALSE;
-
- switch (nChar) {
- default:
- return FALSE;
- case FWL_VKEY_Up:
- case FWL_VKEY_Down:
- case FWL_VKEY_Home:
- case FWL_VKEY_Left:
- case FWL_VKEY_End:
- case FWL_VKEY_Right:
- break;
- }
-
- switch (nChar) {
- case FWL_VKEY_Up:
- m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Down:
- m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Home:
- m_pList->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Left:
- m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_End:
- m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Right:
- m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Delete:
- break;
- }
-
- OnNotifySelChanged(TRUE, bExit, nFlag);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_CBListBox::OnCharWithExit(FX_WORD nChar,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- if (!m_pList)
- return FALSE;
-
- if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)))
- return FALSE;
-
- if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetParentWindow()) {
- pComboBox->SetSelectText();
- }
-
- OnNotifySelChanged(TRUE, bExit, nFlag);
-
- return TRUE;
-}
-
-void CPWL_CBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- CFX_FloatRect rectWnd = CPWL_Wnd::GetWindowRect();
-
- if (IsVisible() && !rectWnd.IsEmpty()) {
- CFX_ByteTextBuf sButton;
-
- CFX_FloatPoint ptCenter = GetCenterPoint();
-
- CFX_FloatPoint pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,
- ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,
- ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt3(ptCenter.x,
- ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
-
- if (IsFloatBigger(rectWnd.right - rectWnd.left,
- PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) &&
- IsFloatBigger(rectWnd.top - rectWnd.bottom,
- PWL_CBBUTTON_TRIANGLE_HALFLEN)) {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << "q\n" << sButton << "Q\n";
- }
- }
-}
-
-void CPWL_CBButton::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
-
- CFX_FloatRect rectWnd = CPWL_Wnd::GetWindowRect();
-
- if (IsVisible() && !rectWnd.IsEmpty()) {
- CFX_FloatPoint ptCenter = GetCenterPoint();
-
- CFX_FloatPoint pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,
- ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,
- ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt3(ptCenter.x,
- ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
-
- if (IsFloatBigger(rectWnd.right - rectWnd.left,
- PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) &&
- IsFloatBigger(rectWnd.top - rectWnd.bottom,
- PWL_CBBUTTON_TRIANGLE_HALFLEN)) {
- CFX_PathData path;
-
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
-
- pDevice->DrawPath(&path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,
- GetTransparency()),
- 0, FXFILL_ALTERNATE);
- }
- }
-}
-
-FX_BOOL CPWL_CBButton::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- SetCapture();
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_LBUTTONDOWN, 0,
- PWL_MAKEDWORD(point.x, point.y));
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_CBButton::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonUp(point, nFlag);
-
- ReleaseCapture();
-
- return TRUE;
-}
-
-CPWL_ComboBox::CPWL_ComboBox()
- : m_pEdit(NULL),
- m_pButton(NULL),
- m_pList(NULL),
- m_bPopup(FALSE),
- m_nPopupWhere(0),
- m_nSelectItem(-1),
- m_pFillerNotify(NULL) {}
-
-CFX_ByteString CPWL_ComboBox::GetClassName() const {
- return "CPWL_ComboBox";
-}
-
-void CPWL_ComboBox::OnCreate(PWL_CREATEPARAM& cp) {
- cp.dwFlags &= ~PWS_HSCROLL;
- cp.dwFlags &= ~PWS_VSCROLL;
-}
-
-void CPWL_ComboBox::SetFocus() {
- if (m_pEdit)
- m_pEdit->SetFocus();
-}
-
-void CPWL_ComboBox::KillFocus() {
- SetPopup(FALSE);
- CPWL_Wnd::KillFocus();
-}
-
-CFX_WideString CPWL_ComboBox::GetText() const {
- if (m_pEdit) {
- return m_pEdit->GetText();
- }
- return CFX_WideString();
-}
-
-void CPWL_ComboBox::SetText(const FX_WCHAR* text) {
- if (m_pEdit)
- m_pEdit->SetText(text);
-}
-
-void CPWL_ComboBox::AddString(const FX_WCHAR* str) {
- if (m_pList)
- m_pList->AddString(str);
-}
-
-int32_t CPWL_ComboBox::GetSelect() const {
- return m_nSelectItem;
-}
-
-void CPWL_ComboBox::SetSelect(int32_t nItemIndex) {
- if (m_pList)
- m_pList->Select(nItemIndex);
-
- m_pEdit->SetText(m_pList->GetText().c_str());
-
- m_nSelectItem = nItemIndex;
-}
-
-void CPWL_ComboBox::SetEditSel(int32_t nStartChar, int32_t nEndChar) {
- if (m_pEdit) {
- m_pEdit->SetSel(nStartChar, nEndChar);
- }
-}
-
-void CPWL_ComboBox::GetEditSel(int32_t& nStartChar, int32_t& nEndChar) const {
- nStartChar = -1;
- nEndChar = -1;
-
- if (m_pEdit) {
- m_pEdit->GetSel(nStartChar, nEndChar);
- }
-}
-
-void CPWL_ComboBox::Clear() {
- if (m_pEdit) {
- m_pEdit->Clear();
- }
-}
-
-void CPWL_ComboBox::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- CreateEdit(cp);
- CreateButton(cp);
- CreateListBox(cp);
-}
-
-void CPWL_ComboBox::CreateEdit(const PWL_CREATEPARAM& cp) {
- if (!m_pEdit) {
- m_pEdit = new CPWL_CBEdit;
- m_pEdit->AttachFFLData(m_pFormFiller);
-
- PWL_CREATEPARAM ecp = cp;
- ecp.pParentWnd = this;
- ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PES_CENTER |
- PES_AUTOSCROLL | PES_UNDO;
-
- if (HasFlag(PWS_AUTOFONTSIZE))
- ecp.dwFlags |= PWS_AUTOFONTSIZE;
-
- if (!HasFlag(PCBS_ALLOWCUSTOMTEXT))
- ecp.dwFlags |= PWS_READONLY;
-
- ecp.rcRectWnd = CFX_FloatRect(0, 0, 0, 0);
- ecp.dwBorderWidth = 0;
- ecp.nBorderStyle = PBS_SOLID;
-
- m_pEdit->Create(ecp);
- }
-}
-
-void CPWL_ComboBox::CreateButton(const PWL_CREATEPARAM& cp) {
- if (!m_pButton) {
- m_pButton = new CPWL_CBButton;
-
- PWL_CREATEPARAM bcp = cp;
- bcp.pParentWnd = this;
- bcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND;
- bcp.sBackgroundColor = PWL_SCROLLBAR_BKCOLOR;
- bcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR;
- bcp.dwBorderWidth = 2;
- bcp.nBorderStyle = PBS_BEVELED;
- bcp.eCursorType = FXCT_ARROW;
-
- m_pButton->Create(bcp);
- }
-}
-
-void CPWL_ComboBox::CreateListBox(const PWL_CREATEPARAM& cp) {
- if (!m_pList) {
- m_pList = new CPWL_CBListBox;
- m_pList->AttachFFLData(m_pFormFiller);
- PWL_CREATEPARAM lcp = cp;
- lcp.pParentWnd = this;
- lcp.dwFlags =
- PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PLBS_HOVERSEL | PWS_VSCROLL;
- lcp.nBorderStyle = PBS_SOLID;
- lcp.dwBorderWidth = 1;
- lcp.eCursorType = FXCT_ARROW;
- lcp.rcRectWnd = CFX_FloatRect(0, 0, 0, 0);
-
- if (cp.dwFlags & PWS_AUTOFONTSIZE)
- lcp.fFontSize = PWLCB_DEFAULTFONTSIZE;
- else
- lcp.fFontSize = cp.fFontSize;
-
- if (cp.sBorderColor.nColorType == COLORTYPE_TRANSPARENT)
- lcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR;
-
- if (cp.sBackgroundColor.nColorType == COLORTYPE_TRANSPARENT)
- lcp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
-
- m_pList->Create(lcp);
- }
-}
-
-void CPWL_ComboBox::RePosChildWnd() {
- CFX_FloatRect rcClient = GetClientRect();
-
- if (m_bPopup) {
- CFX_FloatRect rclient = GetClientRect();
- CFX_FloatRect rcButton = rclient;
- CFX_FloatRect rcEdit = rcClient;
- CFX_FloatRect rcList = CPWL_Wnd::GetWindowRect();
-
- FX_FLOAT fOldWindowHeight = m_rcOldWindow.Height();
- FX_FLOAT fOldClientHeight = fOldWindowHeight - GetBorderWidth() * 2;
-
- switch (m_nPopupWhere) {
- case 0:
- rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
-
- if (rcButton.left < rclient.left)
- rcButton.left = rclient.left;
-
- rcButton.bottom = rcButton.top - fOldClientHeight;
-
- rcEdit.right = rcButton.left - 1.0f;
-
- if (rcEdit.left < rclient.left)
- rcEdit.left = rclient.left;
-
- if (rcEdit.right < rcEdit.left)
- rcEdit.right = rcEdit.left;
-
- rcEdit.bottom = rcEdit.top - fOldClientHeight;
-
- rcList.top -= fOldWindowHeight;
-
- break;
- case 1:
- rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
-
- if (rcButton.left < rclient.left)
- rcButton.left = rclient.left;
-
- rcButton.top = rcButton.bottom + fOldClientHeight;
-
- rcEdit.right = rcButton.left - 1.0f;
-
- if (rcEdit.left < rclient.left)
- rcEdit.left = rclient.left;
-
- if (rcEdit.right < rcEdit.left)
- rcEdit.right = rcEdit.left;
-
- rcEdit.top = rcEdit.bottom + fOldClientHeight;
-
- rcList.bottom += fOldWindowHeight;
-
- break;
- }
-
- if (m_pButton)
- m_pButton->Move(rcButton, TRUE, FALSE);
-
- if (m_pEdit)
- m_pEdit->Move(rcEdit, TRUE, FALSE);
-
- if (m_pList) {
- m_pList->SetVisible(TRUE);
- m_pList->Move(rcList, TRUE, FALSE);
- m_pList->ScrollToListItem(m_nSelectItem);
- }
- } else {
- CFX_FloatRect rcButton = rcClient;
-
- rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
-
- if (rcButton.left < rcClient.left)
- rcButton.left = rcClient.left;
-
- if (m_pButton)
- m_pButton->Move(rcButton, TRUE, FALSE);
-
- CFX_FloatRect rcEdit = rcClient;
- rcEdit.right = rcButton.left - 1.0f;
-
- if (rcEdit.left < rcClient.left)
- rcEdit.left = rcClient.left;
-
- if (rcEdit.right < rcEdit.left)
- rcEdit.right = rcEdit.left;
-
- if (m_pEdit)
- m_pEdit->Move(rcEdit, TRUE, FALSE);
-
- if (m_pList)
- m_pList->SetVisible(FALSE);
- }
-}
-
-void CPWL_ComboBox::SelectAll() {
- if (m_pEdit && HasFlag(PCBS_ALLOWCUSTOMTEXT))
- m_pEdit->SelectAll();
-}
-
-CFX_FloatRect CPWL_ComboBox::GetFocusRect() const {
- return CFX_FloatRect();
-}
-
-void CPWL_ComboBox::SetPopup(FX_BOOL bPopup) {
- if (!m_pList)
- return;
- if (bPopup == m_bPopup)
- return;
- FX_FLOAT fListHeight = m_pList->GetContentRect().Height();
- if (!IsFloatBigger(fListHeight, 0.0f))
- return;
-
- if (bPopup) {
- if (m_pFillerNotify) {
-#ifdef PDF_ENABLE_XFA
- FX_BOOL bExit = FALSE;
- m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, 0);
- if (bExit)
- return;
-#endif // PDF_ENABLE_XFA
- int32_t nWhere = 0;
- FX_FLOAT fPopupRet = 0.0f;
- FX_FLOAT fPopupMin = 0.0f;
- if (m_pList->GetCount() > 3)
- fPopupMin =
- m_pList->GetFirstHeight() * 3 + m_pList->GetBorderWidth() * 2;
- FX_FLOAT fPopupMax = fListHeight + m_pList->GetBorderWidth() * 2;
- m_pFillerNotify->QueryWherePopup(GetAttachedData(), fPopupMin, fPopupMax,
- nWhere, fPopupRet);
-
- if (IsFloatBigger(fPopupRet, 0.0f)) {
- m_bPopup = bPopup;
-
- CFX_FloatRect rcWindow = CPWL_Wnd::GetWindowRect();
- m_rcOldWindow = rcWindow;
- switch (nWhere) {
- default:
- case 0:
- rcWindow.bottom -= fPopupRet;
- break;
- case 1:
- rcWindow.top += fPopupRet;
- break;
- }
-
- m_nPopupWhere = nWhere;
- Move(rcWindow, TRUE, TRUE);
-#ifdef PDF_ENABLE_XFA
- bExit = FALSE;
- m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, 0);
- if (bExit)
- return;
-#endif // PDF_ENABLE_XFA
- }
- }
- } else {
- m_bPopup = bPopup;
- Move(m_rcOldWindow, TRUE, TRUE);
- }
-}
-
-FX_BOOL CPWL_ComboBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
- if (!m_pList)
- return FALSE;
- if (!m_pEdit)
- return FALSE;
-
- m_nSelectItem = -1;
-
- switch (nChar) {
- case FWL_VKEY_Up:
- if (m_pList->GetCurSel() > 0) {
- FX_BOOL bExit = FALSE;
-#ifdef PDF_ENABLE_XFA
- if (m_pFillerNotify) {
- m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag);
- if (bExit)
- return FALSE;
- bExit = FALSE;
- m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag);
- if (bExit)
- return FALSE;
- }
-#endif // PDF_ENABLE_XFA
- if (m_pList->OnKeyDownWithExit(nChar, bExit, nFlag)) {
- if (bExit)
- return FALSE;
- SetSelectText();
- }
- }
- return TRUE;
- case FWL_VKEY_Down:
- if (m_pList->GetCurSel() < m_pList->GetCount() - 1) {
- FX_BOOL bExit = FALSE;
-#ifdef PDF_ENABLE_XFA
- if (m_pFillerNotify) {
- m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag);
- if (bExit)
- return FALSE;
- bExit = FALSE;
- m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag);
- if (bExit)
- return FALSE;
- }
-#endif // PDF_ENABLE_XFA
- if (m_pList->OnKeyDownWithExit(nChar, bExit, nFlag)) {
- if (bExit)
- return FALSE;
- SetSelectText();
- }
- }
- return TRUE;
- }
-
- if (HasFlag(PCBS_ALLOWCUSTOMTEXT))
- return m_pEdit->OnKeyDown(nChar, nFlag);
-
- return FALSE;
-}
-
-FX_BOOL CPWL_ComboBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
- if (!m_pList)
- return FALSE;
-
- if (!m_pEdit)
- return FALSE;
-
- m_nSelectItem = -1;
- if (HasFlag(PCBS_ALLOWCUSTOMTEXT))
- return m_pEdit->OnChar(nChar, nFlag);
-
- FX_BOOL bExit = FALSE;
-#ifdef PDF_ENABLE_XFA
- if (m_pFillerNotify) {
- m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag);
- if (bExit)
- return FALSE;
-
- m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag);
- if (bExit)
- return FALSE;
- }
-#endif // PDF_ENABLE_XFA
- return m_pList->OnCharWithExit(nChar, bExit, nFlag) ? bExit : FALSE;
-}
-
-void CPWL_ComboBox::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- switch (msg) {
- case PNM_LBUTTONDOWN:
- if (pWnd == m_pButton) {
- SetPopup(!m_bPopup);
- return;
- }
- break;
- case PNM_LBUTTONUP:
- if (m_pEdit && m_pList) {
- if (pWnd == m_pList) {
- SetSelectText();
- SelectAll();
- m_pEdit->SetFocus();
- SetPopup(FALSE);
- return;
- }
- }
- }
-
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-}
-
-FX_BOOL CPWL_ComboBox::IsPopup() const {
- return m_bPopup;
-}
-
-void CPWL_ComboBox::SetSelectText() {
- CFX_WideString swText = m_pList->GetText();
- m_pEdit->SelectAll();
- m_pEdit->ReplaceSel(m_pList->GetText().c_str());
- m_pEdit->SelectAll();
-
- m_nSelectItem = m_pList->GetCurSel();
-}
-
-void CPWL_ComboBox::SetFillerNotify(IPWL_Filler_Notify* pNotify) {
- m_pFillerNotify = pNotify;
-
- if (m_pEdit)
- m_pEdit->SetFillerNotify(pNotify);
-
- if (m_pList)
- m_pList->SetFillerNotify(pNotify);
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp b/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
deleted file mode 100644
index c4a5bf03fd..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
+++ /dev/null
@@ -1,1190 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Edit.h"
-
-#include <vector>
-
-#include "core/include/fxcrt/fx_safe_types.h"
-#include "core/include/fxcrt/fx_xml.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Caret.h"
-#include "fpdfsdk/include/pdfwindow/PWL_EditCtrl.h"
-#include "fpdfsdk/include/pdfwindow/PWL_FontMap.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ScrollBar.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-#include "public/fpdf_fwlevent.h"
-#include "third_party/base/stl_util.h"
-
-CPWL_Edit::CPWL_Edit()
- : m_pFillerNotify(NULL), m_pSpellCheck(NULL), m_bFocus(FALSE) {
- m_pFormFiller = NULL;
-}
-
-CPWL_Edit::~CPWL_Edit() {
- ASSERT(m_bFocus == FALSE);
-}
-
-CFX_ByteString CPWL_Edit::GetClassName() const {
- return PWL_CLASSNAME_EDIT;
-}
-
-void CPWL_Edit::OnDestroy() {}
-
-void CPWL_Edit::SetText(const FX_WCHAR* csText) {
- CFX_WideString swText = csText;
-
- if (HasFlag(PES_RICH)) {
- CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText);
-
- if (CXML_Element* pXML =
- CXML_Element::Parse(sValue.c_str(), sValue.GetLength())) {
- int32_t nCount = pXML->CountChildren();
- FX_BOOL bFirst = TRUE;
-
- swText.Empty();
-
- for (int32_t i = 0; i < nCount; i++) {
- if (CXML_Element* pSubElement = pXML->GetElement(i)) {
- CFX_ByteString tag = pSubElement->GetTagName();
- if (tag.EqualNoCase("p")) {
- int nChild = pSubElement->CountChildren();
- CFX_WideString swSection;
- for (int32_t j = 0; j < nChild; j++) {
- swSection += pSubElement->GetContent(j);
- }
-
- if (bFirst)
- bFirst = FALSE;
- else
- swText += FWL_VKEY_Return;
- swText += swSection;
- }
- }
- }
-
- delete pXML;
- }
- }
-
- m_pEdit->SetText(swText.c_str());
-}
-
-void CPWL_Edit::RePosChildWnd() {
- if (CPWL_ScrollBar* pVSB = GetVScrollBar()) {
- CFX_FloatRect rcWindow = m_rcOldWindow;
- CFX_FloatRect rcVScroll =
- CFX_FloatRect(rcWindow.right, rcWindow.bottom,
- rcWindow.right + PWL_SCROLLBAR_WIDTH, rcWindow.top);
- pVSB->Move(rcVScroll, TRUE, FALSE);
- }
-
- if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW))
- m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(
- GetClientRect(), 1.0f)); // +1 for caret beside border
-
- CPWL_EditCtrl::RePosChildWnd();
-}
-
-CFX_FloatRect CPWL_Edit::GetClientRect() const {
- CFX_FloatRect rcClient = CPWL_Utils::DeflateRect(
- GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
-
- if (CPWL_ScrollBar* pVSB = GetVScrollBar()) {
- if (pVSB->IsVisible()) {
- rcClient.right -= PWL_SCROLLBAR_WIDTH;
- }
- }
-
- return rcClient;
-}
-
-void CPWL_Edit::SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat,
- FX_BOOL bPaint) {
- m_pEdit->SetAlignmentH((int32_t)nFormat, bPaint);
-}
-
-void CPWL_Edit::SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat,
- FX_BOOL bPaint) {
- m_pEdit->SetAlignmentV((int32_t)nFormat, bPaint);
-}
-
-FX_BOOL CPWL_Edit::CanSelectAll() const {
- return GetSelectWordRange() != m_pEdit->GetWholeWordRange();
-}
-
-FX_BOOL CPWL_Edit::CanClear() const {
- return !IsReadOnly() && m_pEdit->IsSelected();
-}
-
-FX_BOOL CPWL_Edit::CanCopy() const {
- return !HasFlag(PES_PASSWORD) && !HasFlag(PES_NOREAD) &&
- m_pEdit->IsSelected();
-}
-
-FX_BOOL CPWL_Edit::CanCut() const {
- return CanCopy() && !IsReadOnly();
-}
-
-FX_BOOL CPWL_Edit::CanPaste() const {
- if (IsReadOnly())
- return FALSE;
-
- CFX_WideString swClipboard;
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
-
- return !swClipboard.IsEmpty();
-}
-
-void CPWL_Edit::CopyText() {
- if (!CanCopy())
- return;
-
- CFX_WideString str = m_pEdit->GetSelText();
-
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->SetClipboardText(GetAttachedHWnd(), str);
-}
-
-void CPWL_Edit::PasteText() {
- if (!CanPaste())
- return;
-
- CFX_WideString swClipboard;
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
-
- if (m_pFillerNotify) {
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
- CFX_WideString strChangeEx;
- int nSelStart = 0;
- int nSelEnd = 0;
- GetSel(nSelStart, nSelEnd);
- m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), swClipboard,
- strChangeEx, nSelStart, nSelEnd, TRUE,
- bRC, bExit, 0);
- if (!bRC)
- return;
- if (bExit)
- return;
- }
-
- if (swClipboard.GetLength() > 0) {
- Clear();
- InsertText(swClipboard.c_str());
- }
-}
-
-void CPWL_Edit::CutText() {
- if (!CanCut())
- return;
-
- CFX_WideString str = m_pEdit->GetSelText();
-
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->SetClipboardText(GetAttachedHWnd(), str);
-
- m_pEdit->Clear();
-}
-
-void CPWL_Edit::OnCreated() {
- CPWL_EditCtrl::OnCreated();
-
- if (CPWL_ScrollBar* pScroll = GetVScrollBar()) {
- pScroll->RemoveFlag(PWS_AUTOTRANSPARENT);
- pScroll->SetTransparency(255);
- }
-
- SetParamByFlag();
-
- m_rcOldWindow = GetWindowRect();
-
- m_pEdit->SetOprNotify(this);
- m_pEdit->EnableOprNotify(TRUE);
-}
-
-void CPWL_Edit::SetParamByFlag() {
- if (HasFlag(PES_RIGHT)) {
- m_pEdit->SetAlignmentH(2, FALSE);
- } else if (HasFlag(PES_MIDDLE)) {
- m_pEdit->SetAlignmentH(1, FALSE);
- } else {
- m_pEdit->SetAlignmentH(0, FALSE);
- }
-
- if (HasFlag(PES_BOTTOM)) {
- m_pEdit->SetAlignmentV(2, FALSE);
- } else if (HasFlag(PES_CENTER)) {
- m_pEdit->SetAlignmentV(1, FALSE);
- } else {
- m_pEdit->SetAlignmentV(0, FALSE);
- }
-
- if (HasFlag(PES_PASSWORD)) {
- m_pEdit->SetPasswordChar('*', FALSE);
- }
-
- m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE);
- m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE);
- m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE);
- m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE);
- m_pEdit->EnableUndo(HasFlag(PES_UNDO));
-
- if (HasFlag(PES_TEXTOVERFLOW)) {
- SetClipRect(CFX_FloatRect(0.0f, 0.0f, 0.0f, 0.0f));
- m_pEdit->SetTextOverflow(TRUE, FALSE);
- } else {
- if (m_pEditCaret) {
- m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(
- GetClientRect(), 1.0f)); // +1 for caret beside border
- }
- }
-
- if (HasFlag(PES_SPELLCHECK)) {
- m_pSpellCheck = GetCreationParam().pSpellCheck;
- }
-}
-
-void CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- CFX_FloatRect rcClient = GetClientRect();
- CFX_ByteTextBuf sLine;
-
- int32_t nCharArray = m_pEdit->GetCharArray();
-
- if (nCharArray > 0) {
- switch (GetBorderStyle()) {
- case PBS_SOLID: {
- sLine << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE)
- << " 2 J 0 j\n";
-
- for (int32_t i = 1; i < nCharArray; i++) {
- sLine << rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * i
- << " " << rcClient.bottom << " m\n"
- << rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * i
- << " " << rcClient.top << " l S\n";
- }
-
- sLine << "Q\n";
- } break;
- case PBS_DASH: {
- sLine << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE)
- << " 2 J 0 j\n"
- << "[" << GetBorderDash().nDash << " " << GetBorderDash().nGap
- << "] " << GetBorderDash().nPhase << " d\n";
-
- for (int32_t i = 1; i < nCharArray; i++) {
- sLine << rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * i
- << " " << rcClient.bottom << " m\n"
- << rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * i
- << " " << rcClient.top << " l S\n";
- }
-
- sLine << "Q\n";
- } break;
- }
- }
-
- sAppStream << sLine;
-
- CFX_ByteTextBuf sText;
-
- CFX_FloatPoint ptOffset = CFX_FloatPoint(0.0f, 0.0f);
-
- CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange();
- CPVT_WordRange wrSelect = GetSelectWordRange();
- CPVT_WordRange wrVisible =
- (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange());
- CPVT_WordRange wrSelBefore(wrWhole.BeginPos, wrSelect.BeginPos);
- CPVT_WordRange wrSelAfter(wrSelect.EndPos, wrWhole.EndPos);
-
- CPVT_WordRange wrTemp =
- CPWL_Utils::OverlapWordRange(GetSelectWordRange(), wrVisible);
- CFX_ByteString sEditSel =
- CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wrTemp);
-
- if (sEditSel.GetLength() > 0)
- sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR)
- << sEditSel;
-
- wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelBefore);
- CFX_ByteString sEditBefore = CPWL_Utils::GetEditAppStream(
- m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY),
- m_pEdit->GetPasswordChar());
-
- if (sEditBefore.GetLength() > 0)
- sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor())
- << sEditBefore << "ET\n";
-
- wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelect);
- CFX_ByteString sEditMid = CPWL_Utils::GetEditAppStream(
- m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY),
- m_pEdit->GetPasswordChar());
-
- if (sEditMid.GetLength() > 0)
- sText << "BT\n"
- << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY, 1))
- << sEditMid << "ET\n";
-
- wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelAfter);
- CFX_ByteString sEditAfter = CPWL_Utils::GetEditAppStream(
- m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY),
- m_pEdit->GetPasswordChar());
-
- if (sEditAfter.GetLength() > 0)
- sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor())
- << sEditAfter << "ET\n";
-
- if (HasFlag(PES_SPELLCHECK)) {
- CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream(
- m_pEdit, m_pSpellCheck, ptOffset, &wrVisible);
- if (sSpellCheck.GetLength() > 0)
- sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB, 1, 0, 0),
- FALSE)
- << sSpellCheck;
- }
-
- if (sText.GetLength() > 0) {
- CFX_FloatRect rcClient = GetClientRect();
- sAppStream << "q\n/Tx BMC\n";
-
- if (!HasFlag(PES_TEXTOVERFLOW))
- sAppStream << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.right - rcClient.left << " "
- << rcClient.top - rcClient.bottom << " re W n\n";
-
- sAppStream << sText;
-
- sAppStream << "EMC\nQ\n";
- }
-}
-
-void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
-
- CFX_FloatRect rcClient = GetClientRect();
- CFX_ByteTextBuf sLine;
-
- int32_t nCharArray = m_pEdit->GetCharArray();
- FX_SAFE_INT32 nCharArraySafe = nCharArray;
- nCharArraySafe -= 1;
- nCharArraySafe *= 2;
-
- if (nCharArray > 0 && nCharArraySafe.IsValid()) {
- switch (GetBorderStyle()) {
- case PBS_SOLID: {
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
-
- CFX_PathData path;
- path.SetPointCount(nCharArraySafe.ValueOrDie());
-
- for (int32_t i = 0; i < nCharArray - 1; i++) {
- path.SetPoint(
- i * 2,
- rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
- rcClient.bottom, FXPT_MOVETO);
- path.SetPoint(
- i * 2 + 1,
- rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
- rcClient.top, FXPT_LINETO);
- }
- if (path.GetPointCount() > 0)
- pDevice->DrawPath(
- &path, pUser2Device, &gsd, 0,
- CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255),
- FXFILL_ALTERNATE);
- } break;
- case PBS_DASH: {
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
-
- gsd.SetDashCount(2);
- gsd.m_DashArray[0] = (FX_FLOAT)GetBorderDash().nDash;
- gsd.m_DashArray[1] = (FX_FLOAT)GetBorderDash().nGap;
- gsd.m_DashPhase = (FX_FLOAT)GetBorderDash().nPhase;
-
- CFX_PathData path;
- path.SetPointCount(nCharArraySafe.ValueOrDie());
-
- for (int32_t i = 0; i < nCharArray - 1; i++) {
- path.SetPoint(
- i * 2,
- rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
- rcClient.bottom, FXPT_MOVETO);
- path.SetPoint(
- i * 2 + 1,
- rcClient.left +
- ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
- rcClient.top, FXPT_LINETO);
- }
- if (path.GetPointCount() > 0)
- pDevice->DrawPath(
- &path, pUser2Device, &gsd, 0,
- CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255),
- FXFILL_ALTERNATE);
- } break;
- }
- }
-
- CFX_FloatRect rcClip;
- CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
- CPVT_WordRange* pRange = NULL;
-
- if (!HasFlag(PES_TEXTOVERFLOW)) {
- rcClip = GetClientRect();
- pRange = &wrRange;
- }
- IFX_SystemHandler* pSysHandler = GetSystemHandler();
- IFX_Edit::DrawEdit(
- pDevice, pUser2Device, m_pEdit,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()),
- rcClip, CFX_FloatPoint(0.0f, 0.0f), pRange, pSysHandler, m_pFormFiller);
-
- if (HasFlag(PES_SPELLCHECK)) {
- CPWL_Utils::DrawEditSpellCheck(pDevice, pUser2Device, m_pEdit, rcClip,
- CFX_FloatPoint(0.0f, 0.0f), pRange,
- GetCreationParam().pSpellCheck);
- }
-}
-
-FX_BOOL CPWL_Edit::OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) {
- if (m_bMouseDown)
- InvalidateRect();
-
- m_bMouseDown = TRUE;
- SetCapture();
-
- m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_Edit::OnLButtonDblClk(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDblClk(point, nFlag);
-
- if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) {
- m_pEdit->SelectAll();
- }
-
- return TRUE;
-}
-
-#define WM_PWLEDIT_UNDO 0x01
-#define WM_PWLEDIT_REDO 0x02
-#define WM_PWLEDIT_CUT 0x03
-#define WM_PWLEDIT_COPY 0x04
-#define WM_PWLEDIT_PASTE 0x05
-#define WM_PWLEDIT_DELETE 0x06
-#define WM_PWLEDIT_SELECTALL 0x07
-#define WM_PWLEDIT_SUGGEST 0x08
-
-FX_BOOL CPWL_Edit::OnRButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) {
- if (m_bMouseDown)
- return FALSE;
-
- CPWL_Wnd::OnRButtonUp(point, nFlag);
-
- if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point))
- return TRUE;
-
- IFX_SystemHandler* pSH = GetSystemHandler();
- if (!pSH)
- return FALSE;
-
- SetFocus();
-
- CPVT_WordRange wrLatin = GetLatinWordsRange(point);
- CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin);
-
- FX_HMENU hPopup = pSH->CreatePopupMenu();
- if (!hPopup)
- return FALSE;
-
- std::vector<CFX_ByteString> sSuggestWords;
- CFX_FloatPoint ptPopup = point;
-
- if (!IsReadOnly()) {
- if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty()) {
- if (m_pSpellCheck) {
- CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin);
- if (!m_pSpellCheck->CheckWord(sLatin)) {
- m_pSpellCheck->SuggestWords(sLatin, sSuggestWords);
-
- int32_t nSuggest = pdfium::CollectionSize<int32_t>(sSuggestWords);
- for (int32_t nWord = 0; nWord < nSuggest; nWord++) {
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SUGGEST + nWord,
- sSuggestWords[nWord].UTF8Decode());
- }
- if (nSuggest > 0)
- pSH->AppendMenuItem(hPopup, 0, L"");
-
- ptPopup = GetWordRightBottomPoint(wrLatin.EndPos);
- }
- }
- }
- }
-
- IPWL_Provider* pProvider = GetProvider();
-
- if (HasFlag(PES_UNDO)) {
- pSH->AppendMenuItem(
- hPopup, WM_PWLEDIT_UNDO,
- pProvider ? pProvider->LoadPopupMenuString(0) : L"&Undo");
- pSH->AppendMenuItem(
- hPopup, WM_PWLEDIT_REDO,
- pProvider ? pProvider->LoadPopupMenuString(1) : L"&Redo");
- pSH->AppendMenuItem(hPopup, 0, L"");
-
- if (!m_pEdit->CanUndo())
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_UNDO, FALSE);
- if (!m_pEdit->CanRedo())
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_REDO, FALSE);
- }
-
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_CUT,
- pProvider ? pProvider->LoadPopupMenuString(2) : L"Cu&t");
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_COPY,
- pProvider ? pProvider->LoadPopupMenuString(3) : L"&Copy");
- pSH->AppendMenuItem(
- hPopup, WM_PWLEDIT_PASTE,
- pProvider ? pProvider->LoadPopupMenuString(4) : L"&Paste");
- pSH->AppendMenuItem(
- hPopup, WM_PWLEDIT_DELETE,
- pProvider ? pProvider->LoadPopupMenuString(5) : L"&Delete");
-
- CFX_WideString swText = pSH->GetClipboardText(GetAttachedHWnd());
- if (swText.IsEmpty())
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
-
- if (!m_pEdit->IsSelected()) {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
- }
-
- if (IsReadOnly()) {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
- }
-
- if (HasFlag(PES_PASSWORD)) {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
- }
-
- if (HasFlag(PES_NOREAD)) {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
- }
-
- pSH->AppendMenuItem(hPopup, 0, L"");
- pSH->AppendMenuItem(
- hPopup, WM_PWLEDIT_SELECTALL,
- pProvider ? pProvider->LoadPopupMenuString(6) : L"&Select All");
-
- if (m_pEdit->GetTotalWords() == 0) {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_SELECTALL, FALSE);
- }
-
- int32_t x, y;
- PWLtoWnd(ptPopup, x, y);
- pSH->ClientToScreen(GetAttachedHWnd(), x, y);
- pSH->SetCursor(FXCT_ARROW);
- int32_t nCmd = pSH->TrackPopupMenu(hPopup, x, y, GetAttachedHWnd());
-
- switch (nCmd) {
- case WM_PWLEDIT_UNDO:
- Undo();
- break;
- case WM_PWLEDIT_REDO:
- Redo();
- break;
- case WM_PWLEDIT_CUT:
- CutText();
- break;
- case WM_PWLEDIT_COPY:
- CopyText();
- break;
- case WM_PWLEDIT_PASTE:
- PasteText();
- break;
- case WM_PWLEDIT_DELETE:
- Clear();
- break;
- case WM_PWLEDIT_SELECTALL:
- SelectAll();
- break;
- case WM_PWLEDIT_SUGGEST + 0:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
- m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[0].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 1:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
- m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[1].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 2:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
- m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[2].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 3:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
- m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[3].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 4:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
- m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[4].UTF8Decode().c_str());
- break;
- default:
- break;
- }
-
- pSH->DestroyMenu(hPopup);
-
- return TRUE;
-}
-
-void CPWL_Edit::OnSetFocus() {
- SetEditCaret(TRUE);
-
- if (!IsReadOnly()) {
- if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
- pFocusHandler->OnSetFocus(this);
- }
-
- m_bFocus = TRUE;
-}
-
-void CPWL_Edit::OnKillFocus() {
- ShowVScrollBar(FALSE);
-
- m_pEdit->SelectNone();
- SetCaret(FALSE, CFX_FloatPoint(0.0f, 0.0f), CFX_FloatPoint(0.0f, 0.0f));
-
- SetCharSet(0);
-
- if (!IsReadOnly()) {
- if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
- pFocusHandler->OnKillFocus(this);
- }
-
- m_bFocus = FALSE;
-}
-
-void CPWL_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint /* = TRUE*/) {
- m_pEdit->SetHorzScale(nHorzScale, bPaint);
-}
-
-void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint /* = TRUE*/) {
- m_pEdit->SetCharSpace(fCharSpace, bPaint);
-}
-
-void CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading,
- FX_BOOL bPaint /* = TRUE*/) {
- m_pEdit->SetLineLeading(fLineLeading, bPaint);
-}
-
-CFX_ByteString CPWL_Edit::GetSelectAppearanceStream(
- const CFX_FloatPoint& ptOffset) const {
- CPVT_WordRange wr = GetSelectWordRange();
- return CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wr);
-}
-
-CPVT_WordRange CPWL_Edit::GetSelectWordRange() const {
- if (m_pEdit->IsSelected()) {
- int32_t nStart = -1;
- int32_t nEnd = -1;
-
- m_pEdit->GetSel(nStart, nEnd);
-
- CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart);
- CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd);
-
- return CPVT_WordRange(wpStart, wpEnd);
- }
-
- return CPVT_WordRange();
-}
-
-CFX_ByteString CPWL_Edit::GetTextAppearanceStream(
- const CFX_FloatPoint& ptOffset) const {
- CFX_ByteTextBuf sRet;
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset);
-
- if (sEdit.GetLength() > 0) {
- sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit
- << "ET\n";
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString CPWL_Edit::GetCaretAppearanceStream(
- const CFX_FloatPoint& ptOffset) const {
- if (m_pEditCaret)
- return m_pEditCaret->GetCaretAppearanceStream(ptOffset);
-
- return CFX_ByteString();
-}
-
-CFX_FloatPoint CPWL_Edit::GetWordRightBottomPoint(
- const CPVT_WordPlace& wpWord) {
- CFX_FloatPoint pt(0.0f, 0.0f);
-
- if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
- CPVT_WordPlace wpOld = pIterator->GetAt();
- pIterator->SetAt(wpWord);
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- pt = CFX_FloatPoint(word.ptWord.x + word.fWidth,
- word.ptWord.y + word.fDescent);
- }
-
- pIterator->SetAt(wpOld);
- }
-
- return pt;
-}
-
-FX_BOOL CPWL_Edit::IsTextFull() const {
- return m_pEdit->IsTextFull();
-}
-
-FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont,
- const CFX_FloatRect& rcPlate,
- int32_t nCharArray) {
- if (pFont && !pFont->IsStandardFont()) {
- FX_RECT rcBBox;
- pFont->GetFontBBox(rcBBox);
-
- CFX_FloatRect rcCell = rcPlate;
- FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width();
- FX_FLOAT ydiv = -rcCell.Height() * 1000.0f / rcBBox.Height();
-
- return xdiv < ydiv ? xdiv : ydiv;
- }
-
- return 0.0f;
-}
-
-void CPWL_Edit::SetCharArray(int32_t nCharArray) {
- if (HasFlag(PES_CHARARRAY) && nCharArray > 0) {
- m_pEdit->SetCharArray(nCharArray);
- m_pEdit->SetTextOverflow(TRUE);
-
- if (HasFlag(PWS_AUTOFONTSIZE)) {
- if (IFX_Edit_FontMap* pFontMap = GetFontMap()) {
- FX_FLOAT fFontSize = GetCharArrayAutoFontSize(
- pFontMap->GetPDFFont(0), GetClientRect(), nCharArray);
- if (fFontSize > 0.0f) {
- m_pEdit->SetAutoFontSize(FALSE);
- m_pEdit->SetFontSize(fFontSize);
- }
- }
- }
- }
-}
-
-void CPWL_Edit::SetLimitChar(int32_t nLimitChar) {
- m_pEdit->SetLimitChar(nLimitChar);
-}
-
-void CPWL_Edit::ReplaceSel(const FX_WCHAR* csText) {
- m_pEdit->Clear();
- m_pEdit->InsertText(csText);
-}
-
-CFX_FloatRect CPWL_Edit::GetFocusRect() const {
- return CFX_FloatRect();
-}
-
-void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow) {
- if (CPWL_ScrollBar* pScroll = GetVScrollBar()) {
- if (bShow) {
- if (!pScroll->IsVisible()) {
- pScroll->SetVisible(TRUE);
- CFX_FloatRect rcWindow = GetWindowRect();
- m_rcOldWindow = rcWindow;
- rcWindow.right += PWL_SCROLLBAR_WIDTH;
- Move(rcWindow, TRUE, TRUE);
- }
- } else {
- if (pScroll->IsVisible()) {
- pScroll->SetVisible(FALSE);
- Move(m_rcOldWindow, TRUE, TRUE);
- }
- }
- }
-}
-
-FX_BOOL CPWL_Edit::IsVScrollBarVisible() const {
- if (CPWL_ScrollBar* pScroll = GetVScrollBar()) {
- return pScroll->IsVisible();
- }
-
- return FALSE;
-}
-
-void CPWL_Edit::EnableSpellCheck(FX_BOOL bEnabled) {
- if (bEnabled)
- AddFlag(PES_SPELLCHECK);
- else
- RemoveFlag(PES_SPELLCHECK);
-}
-
-FX_BOOL CPWL_Edit::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
- if (m_bMouseDown)
- return TRUE;
-
- if (nChar == FWL_VKEY_Delete) {
- if (m_pFillerNotify) {
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
- CFX_WideString strChange;
- CFX_WideString strChangeEx;
-
- int nSelStart = 0;
- int nSelEnd = 0;
- GetSel(nSelStart, nSelEnd);
-
- if (nSelStart == nSelEnd)
- nSelEnd = nSelStart + 1;
- m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), strChange,
- strChangeEx, nSelStart, nSelEnd, TRUE,
- bRC, bExit, nFlag);
- if (!bRC)
- return FALSE;
- if (bExit)
- return FALSE;
- }
- }
-
- FX_BOOL bRet = CPWL_EditCtrl::OnKeyDown(nChar, nFlag);
-
- // In case of implementation swallow the OnKeyDown event.
- if (IsProceedtoOnChar(nChar, nFlag))
- return TRUE;
-
- return bRet;
-}
-
-/**
-*In case of implementation swallow the OnKeyDown event.
-*If the event is swallowed, implementation may do other unexpected things, which
-*is not the control means to do.
-*/
-FX_BOOL CPWL_Edit::IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag) {
- FX_BOOL bCtrl = IsCTRLpressed(nFlag);
- FX_BOOL bAlt = IsALTpressed(nFlag);
- if (bCtrl && !bAlt) {
- // hot keys for edit control.
- switch (nKeyCode) {
- case 'C':
- case 'V':
- case 'X':
- case 'A':
- case 'Z':
- return TRUE;
- default:
- break;
- }
- }
- // control characters.
- switch (nKeyCode) {
- case FWL_VKEY_Escape:
- case FWL_VKEY_Back:
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-FX_BOOL CPWL_Edit::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
- if (m_bMouseDown)
- return TRUE;
-
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
-
- if (!IsCTRLpressed(nFlag)) {
- if (m_pFillerNotify) {
- CFX_WideString swChange;
-
- int nSelStart = 0;
- int nSelEnd = 0;
- GetSel(nSelStart, nSelEnd);
-
- switch (nChar) {
- case FWL_VKEY_Back:
- if (nSelStart == nSelEnd)
- nSelStart = nSelEnd - 1;
- break;
- case FWL_VKEY_Return:
- break;
- default:
- swChange += nChar;
- break;
- }
-
- CFX_WideString strChangeEx;
- m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), swChange,
- strChangeEx, nSelStart, nSelEnd, TRUE,
- bRC, bExit, nFlag);
- }
- }
-
- if (!bRC)
- return TRUE;
- if (bExit)
- return FALSE;
-
- if (IFX_Edit_FontMap* pFontMap = GetFontMap()) {
- int32_t nOldCharSet = GetCharSet();
- int32_t nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET);
- if (nOldCharSet != nNewCharSet) {
- SetCharSet(nNewCharSet);
- }
- }
-
- return CPWL_EditCtrl::OnChar(nChar, nFlag);
-}
-
-FX_BOOL CPWL_Edit::OnMouseWheel(short zDelta,
- const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (HasFlag(PES_MULTILINE)) {
- CFX_FloatPoint ptScroll = GetScrollPos();
-
- if (zDelta > 0) {
- ptScroll.y += GetFontSize();
- } else {
- ptScroll.y -= GetFontSize();
- }
- SetScrollPos(ptScroll);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-void CPWL_Edit::OnInsertReturn(const CPVT_WordPlace& place,
- const CPVT_WordPlace& oldplace) {
- if (HasFlag(PES_SPELLCHECK)) {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
- GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify) {
- m_pEditNotify->OnInsertReturn(place, oldplace);
- }
-}
-
-void CPWL_Edit::OnBackSpace(const CPVT_WordPlace& place,
- const CPVT_WordPlace& oldplace) {
- if (HasFlag(PES_SPELLCHECK)) {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
- GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify) {
- m_pEditNotify->OnBackSpace(place, oldplace);
- }
-}
-
-void CPWL_Edit::OnDelete(const CPVT_WordPlace& place,
- const CPVT_WordPlace& oldplace) {
- if (HasFlag(PES_SPELLCHECK)) {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
- GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify) {
- m_pEditNotify->OnDelete(place, oldplace);
- }
-}
-
-void CPWL_Edit::OnClear(const CPVT_WordPlace& place,
- const CPVT_WordPlace& oldplace) {
- if (HasFlag(PES_SPELLCHECK)) {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
- GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify) {
- m_pEditNotify->OnClear(place, oldplace);
- }
-}
-
-void CPWL_Edit::OnInsertWord(const CPVT_WordPlace& place,
- const CPVT_WordPlace& oldplace) {
- if (HasFlag(PES_SPELLCHECK)) {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
- GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify) {
- m_pEditNotify->OnInsertWord(place, oldplace);
- }
-}
-
-void CPWL_Edit::OnSetText(const CPVT_WordPlace& place,
- const CPVT_WordPlace& oldplace) {}
-
-void CPWL_Edit::OnInsertText(const CPVT_WordPlace& place,
- const CPVT_WordPlace& oldplace) {
- if (HasFlag(PES_SPELLCHECK)) {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
- GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify) {
- m_pEditNotify->OnInsertText(place, oldplace);
- }
-}
-
-void CPWL_Edit::OnAddUndo(IFX_Edit_UndoItem* pUndoItem) {
- if (m_pEditNotify) {
- m_pEditNotify->OnAddUndo(this);
- }
-}
-
-CPVT_WordRange CPWL_Edit::CombineWordRange(const CPVT_WordRange& wr1,
- const CPVT_WordRange& wr2) {
- CPVT_WordRange wrRet;
-
- if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) {
- wrRet.BeginPos = wr1.BeginPos;
- } else {
- wrRet.BeginPos = wr2.BeginPos;
- }
-
- if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) {
- wrRet.EndPos = wr2.EndPos;
- } else {
- wrRet.EndPos = wr1.EndPos;
- }
-
- return wrRet;
-}
-
-CPVT_WordRange CPWL_Edit::GetLatinWordsRange(
- const CFX_FloatPoint& point) const {
- return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE);
-}
-
-CPVT_WordRange CPWL_Edit::GetLatinWordsRange(
- const CPVT_WordPlace& place) const {
- return GetSameWordsRange(place, TRUE, FALSE);
-}
-
-CPVT_WordRange CPWL_Edit::GetArabicWordsRange(
- const CPVT_WordPlace& place) const {
- return GetSameWordsRange(place, FALSE, TRUE);
-}
-
-#define PWL_ISARABICWORD(word) \
- ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC))
-
-CPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace& place,
- FX_BOOL bLatin,
- FX_BOOL bArabic) const {
- CPVT_WordRange range;
-
- if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
- CPVT_Word wordinfo;
- CPVT_WordPlace wpStart(place), wpEnd(place);
- pIterator->SetAt(place);
-
- if (bLatin) {
- while (pIterator->NextWord()) {
- if (!pIterator->GetWord(wordinfo) ||
- !FX_EDIT_ISLATINWORD(wordinfo.Word)) {
- break;
- }
-
- wpEnd = pIterator->GetAt();
- }
- } else if (bArabic) {
- while (pIterator->NextWord()) {
- if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word))
- break;
-
- wpEnd = pIterator->GetAt();
- }
- }
-
- pIterator->SetAt(place);
-
- if (bLatin) {
- do {
- if (!pIterator->GetWord(wordinfo) ||
- !FX_EDIT_ISLATINWORD(wordinfo.Word)) {
- break;
- }
-
- wpStart = pIterator->GetAt();
- } while (pIterator->PrevWord());
- } else if (bArabic) {
- do {
- if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word))
- break;
-
- wpStart = pIterator->GetAt();
- } while (pIterator->PrevWord());
- }
-
- range.Set(wpStart, wpEnd);
- }
-
- return range;
-}
-
-void CPWL_Edit::GeneratePageObjects(
- CPDF_PageObjectHolder* pObjectHolder,
- const CFX_FloatPoint& ptOffset,
- CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) {
- IFX_Edit::GeneratePageObjects(
- pObjectHolder, m_pEdit, ptOffset, NULL,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- ObjArray);
-}
-
-void CPWL_Edit::GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder,
- const CFX_FloatPoint& ptOffset) {
- CFX_ArrayTemplate<CPDF_TextObject*> ObjArray;
- IFX_Edit::GeneratePageObjects(
- pObjectHolder, m_pEdit, ptOffset, NULL,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- ObjArray);
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp b/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp
deleted file mode 100644
index 10b5d6c04f..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp
+++ /dev/null
@@ -1,629 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_EditCtrl.h"
-
-#include "fpdfsdk/include/pdfwindow/PWL_Caret.h"
-#include "fpdfsdk/include/pdfwindow/PWL_FontMap.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ScrollBar.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-#include "public/fpdf_fwlevent.h"
-
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
-
-CPWL_EditCtrl::CPWL_EditCtrl()
- : m_pEdit(NULL),
- m_pEditCaret(NULL),
- m_bMouseDown(FALSE),
- m_pEditNotify(NULL),
- m_nCharSet(DEFAULT_CHARSET),
- m_nCodePage(0) {
- m_pEdit = IFX_Edit::NewEdit();
- ASSERT(m_pEdit);
-}
-
-CPWL_EditCtrl::~CPWL_EditCtrl() {
- IFX_Edit::DelEdit(m_pEdit);
-}
-
-void CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM& cp) {
- cp.eCursorType = FXCT_VBEAM;
-}
-
-void CPWL_EditCtrl::OnCreated() {
- SetFontSize(GetCreationParam().fFontSize);
-
- m_pEdit->SetFontMap(GetFontMap());
- m_pEdit->SetNotify(this);
- m_pEdit->Initialize();
-}
-
-FX_BOOL CPWL_EditCtrl::IsWndHorV() {
- CFX_Matrix mt = GetWindowMatrix();
- CFX_FloatPoint point1(0, 1);
- CFX_FloatPoint point2(1, 1);
-
- mt.Transform(point1.x, point1.y);
- mt.Transform(point2.x, point2.y);
-
- return point2.y == point1.y;
-}
-
-void CPWL_EditCtrl::SetCursor() {
- if (IsValid()) {
- if (IFX_SystemHandler* pSH = GetSystemHandler()) {
- if (IsWndHorV())
- pSH->SetCursor(FXCT_VBEAM);
- else
- pSH->SetCursor(FXCT_HBEAM);
- }
- }
-}
-
-void CPWL_EditCtrl::RePosChildWnd() {
- m_pEdit->SetPlateRect(GetClientRect());
-}
-
-void CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-
- switch (msg) {
- case PNM_SETSCROLLINFO:
- switch (wParam) {
- case SBT_VSCROLL:
- if (CPWL_Wnd* pChild = GetVScrollBar()) {
- pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam);
- }
- break;
- }
- break;
- case PNM_SETSCROLLPOS:
- switch (wParam) {
- case SBT_VSCROLL:
- if (CPWL_Wnd* pChild = GetVScrollBar()) {
- pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
- }
- break;
- }
- break;
- case PNM_SCROLLWINDOW: {
- FX_FLOAT fPos = *(FX_FLOAT*)lParam;
- switch (wParam) {
- case SBT_VSCROLL:
- m_pEdit->SetScrollPos(
- CFX_FloatPoint(m_pEdit->GetScrollPos().x, fPos));
- break;
- }
- } break;
- case PNM_SETCARETINFO: {
- if (PWL_CARET_INFO* pCaretInfo = (PWL_CARET_INFO*)wParam) {
- SetCaret(pCaretInfo->bVisible, pCaretInfo->ptHead, pCaretInfo->ptFoot);
- }
- } break;
- }
-}
-
-void CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- if (!IsReadOnly())
- CreateEditCaret(cp);
-}
-
-void CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM& cp) {
- if (!m_pEditCaret) {
- m_pEditCaret = new CPWL_Caret;
- m_pEditCaret->SetInvalidRect(GetClientRect());
-
- PWL_CREATEPARAM ecp = cp;
- ecp.pParentWnd = this;
- ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP;
- ecp.dwBorderWidth = 0;
- ecp.nBorderStyle = PBS_SOLID;
- ecp.rcRectWnd = CFX_FloatRect(0, 0, 0, 0);
-
- m_pEditCaret->Create(ecp);
- }
-}
-
-void CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize) {
- m_pEdit->SetFontSize(fFontSize);
-}
-
-FX_FLOAT CPWL_EditCtrl::GetFontSize() const {
- return m_pEdit->GetFontSize();
-}
-
-FX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
- if (m_bMouseDown)
- return TRUE;
-
- FX_BOOL bRet = CPWL_Wnd::OnKeyDown(nChar, nFlag);
-
- // FILTER
- switch (nChar) {
- default:
- return FALSE;
- case FWL_VKEY_Delete:
- case FWL_VKEY_Up:
- case FWL_VKEY_Down:
- case FWL_VKEY_Left:
- case FWL_VKEY_Right:
- case FWL_VKEY_Home:
- case FWL_VKEY_End:
- case FWL_VKEY_Insert:
- case 'C':
- case 'V':
- case 'X':
- case 'A':
- case 'Z':
- case 'c':
- case 'v':
- case 'x':
- case 'a':
- case 'z':
- break;
- }
-
- if (nChar == FWL_VKEY_Delete) {
- if (m_pEdit->IsSelected())
- nChar = FWL_VKEY_Unknown;
- }
-
- switch (nChar) {
- case FWL_VKEY_Delete:
- Delete();
- return TRUE;
- case FWL_VKEY_Insert:
- if (IsSHIFTpressed(nFlag))
- PasteText();
- return TRUE;
- case FWL_VKEY_Up:
- m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag), FALSE);
- return TRUE;
- case FWL_VKEY_Down:
- m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag), FALSE);
- return TRUE;
- case FWL_VKEY_Left:
- m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag), FALSE);
- return TRUE;
- case FWL_VKEY_Right:
- m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag), FALSE);
- return TRUE;
- case FWL_VKEY_Home:
- m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- return TRUE;
- case FWL_VKEY_End:
- m_pEdit->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- return TRUE;
- case FWL_VKEY_Unknown:
- if (!IsSHIFTpressed(nFlag))
- Clear();
- else
- CutText();
- return TRUE;
- default:
- break;
- }
-
- return bRet;
-}
-
-FX_BOOL CPWL_EditCtrl::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
- if (m_bMouseDown)
- return TRUE;
-
- CPWL_Wnd::OnChar(nChar, nFlag);
-
- // FILTER
- switch (nChar) {
- case 0x0A:
- case 0x1B:
- return FALSE;
- default:
- break;
- }
-
- FX_BOOL bCtrl = IsCTRLpressed(nFlag);
- FX_BOOL bAlt = IsALTpressed(nFlag);
- FX_BOOL bShift = IsSHIFTpressed(nFlag);
-
- FX_WORD word = nChar;
-
- if (bCtrl && !bAlt) {
- switch (nChar) {
- case 'C' - 'A' + 1:
- CopyText();
- return TRUE;
- case 'V' - 'A' + 1:
- PasteText();
- return TRUE;
- case 'X' - 'A' + 1:
- CutText();
- return TRUE;
- case 'A' - 'A' + 1:
- SelectAll();
- return TRUE;
- case 'Z' - 'A' + 1:
- if (bShift)
- Redo();
- else
- Undo();
- return TRUE;
- default:
- if (nChar < 32)
- return FALSE;
- }
- }
-
- if (IsReadOnly())
- return TRUE;
-
- if (m_pEdit->IsSelected() && word == FWL_VKEY_Back)
- word = FWL_VKEY_Unknown;
-
- Clear();
-
- switch (word) {
- case FWL_VKEY_Back:
- Backspace();
- break;
- case FWL_VKEY_Return:
- InsertReturn();
- break;
- case FWL_VKEY_Unknown:
- break;
- default:
- if (IsINSERTpressed(nFlag))
- Delete();
- InsertWord(word, GetCharSet());
- break;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_EditCtrl::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- if (ClientHitTest(point)) {
- if (m_bMouseDown)
- InvalidateRect();
-
- m_bMouseDown = TRUE;
- SetCapture();
-
- m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_EditCtrl::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonUp(point, nFlag);
-
- if (m_bMouseDown) {
- // can receive keybord message
- if (ClientHitTest(point) && !IsFocused())
- SetFocus();
-
- ReleaseCapture();
- m_bMouseDown = FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_EditCtrl::OnMouseMove(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnMouseMove(point, nFlag);
-
- if (m_bMouseDown)
- m_pEdit->OnMouseMove(point, FALSE, FALSE);
-
- return TRUE;
-}
-
-CFX_FloatRect CPWL_EditCtrl::GetContentRect() const {
- return m_pEdit->GetContentRect();
-}
-
-void CPWL_EditCtrl::SetEditCaret(FX_BOOL bVisible) {
- CFX_FloatPoint ptHead(0, 0), ptFoot(0, 0);
-
- if (bVisible) {
- GetCaretInfo(ptHead, ptFoot);
- }
-
- CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace();
- IOnSetCaret(bVisible, ptHead, ptFoot, wpTemp);
-}
-
-void CPWL_EditCtrl::GetCaretInfo(CFX_FloatPoint& ptHead,
- CFX_FloatPoint& ptFoot) const {
- if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
- pIterator->SetAt(m_pEdit->GetCaret());
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word)) {
- ptHead.x = word.ptWord.x + word.fWidth;
- ptHead.y = word.ptWord.y + word.fAscent;
- ptFoot.x = word.ptWord.x + word.fWidth;
- ptFoot.y = word.ptWord.y + word.fDescent;
- } else if (pIterator->GetLine(line)) {
- ptHead.x = line.ptLine.x;
- ptHead.y = line.ptLine.y + line.fLineAscent;
- ptFoot.x = line.ptLine.x;
- ptFoot.y = line.ptLine.y + line.fLineDescent;
- }
- }
-}
-
-void CPWL_EditCtrl::GetCaretPos(int32_t& x, int32_t& y) const {
- CFX_FloatPoint ptHead(0, 0), ptFoot(0, 0);
-
- GetCaretInfo(ptHead, ptFoot);
-
- PWLtoWnd(ptHead, x, y);
-}
-
-void CPWL_EditCtrl::SetCaret(FX_BOOL bVisible,
- const CFX_FloatPoint& ptHead,
- const CFX_FloatPoint& ptFoot) {
- if (m_pEditCaret) {
- if (!IsFocused() || m_pEdit->IsSelected())
- bVisible = FALSE;
-
- m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot);
- }
-}
-
-CFX_WideString CPWL_EditCtrl::GetText() const {
- return m_pEdit->GetText();
-}
-
-void CPWL_EditCtrl::SetSel(int32_t nStartChar, int32_t nEndChar) {
- m_pEdit->SetSel(nStartChar, nEndChar);
-}
-
-void CPWL_EditCtrl::GetSel(int32_t& nStartChar, int32_t& nEndChar) const {
- m_pEdit->GetSel(nStartChar, nEndChar);
-}
-
-void CPWL_EditCtrl::Clear() {
- if (!IsReadOnly())
- m_pEdit->Clear();
-}
-
-void CPWL_EditCtrl::SelectAll() {
- m_pEdit->SelectAll();
-}
-
-void CPWL_EditCtrl::Paint() {
- if (m_pEdit)
- m_pEdit->Paint();
-}
-
-void CPWL_EditCtrl::EnableRefresh(FX_BOOL bRefresh) {
- if (m_pEdit)
- m_pEdit->EnableRefresh(bRefresh);
-}
-
-int32_t CPWL_EditCtrl::GetCaret() const {
- if (m_pEdit)
- return m_pEdit->GetCaret();
-
- return -1;
-}
-
-void CPWL_EditCtrl::SetCaret(int32_t nPos) {
- if (m_pEdit)
- m_pEdit->SetCaret(nPos);
-}
-
-int32_t CPWL_EditCtrl::GetTotalWords() const {
- if (m_pEdit)
- return m_pEdit->GetTotalWords();
-
- return 0;
-}
-
-void CPWL_EditCtrl::SetScrollPos(const CFX_FloatPoint& point) {
- if (m_pEdit)
- m_pEdit->SetScrollPos(point);
-}
-
-CFX_FloatPoint CPWL_EditCtrl::GetScrollPos() const {
- if (m_pEdit)
- return m_pEdit->GetScrollPos();
-
- return CFX_FloatPoint(0.0f, 0.0f);
-}
-
-CPDF_Font* CPWL_EditCtrl::GetCaretFont() const {
- int32_t nFontIndex = 0;
-
- if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
- pIterator->SetAt(m_pEdit->GetCaret());
- CPVT_Word word;
- CPVT_Section section;
- if (pIterator->GetWord(word)) {
- nFontIndex = word.nFontIndex;
- } else if (HasFlag(PES_RICH)) {
- if (pIterator->GetSection(section)) {
- nFontIndex = section.WordProps.nFontIndex;
- }
- }
- }
-
- if (IFX_Edit_FontMap* pFontMap = GetFontMap())
- return pFontMap->GetPDFFont(nFontIndex);
-
- return NULL;
-}
-
-FX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const {
- FX_FLOAT fFontSize = GetFontSize();
-
- if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
- pIterator->SetAt(m_pEdit->GetCaret());
- CPVT_Word word;
- CPVT_Section section;
- if (pIterator->GetWord(word)) {
- fFontSize = word.fFontSize;
- } else if (HasFlag(PES_RICH)) {
- if (pIterator->GetSection(section)) {
- fFontSize = section.WordProps.fFontSize;
- }
- }
- }
-
- return fFontSize;
-}
-
-void CPWL_EditCtrl::SetText(const FX_WCHAR* csText) {
- m_pEdit->SetText(csText);
-}
-
-void CPWL_EditCtrl::CopyText() {}
-
-void CPWL_EditCtrl::PasteText() {}
-
-void CPWL_EditCtrl::CutText() {}
-
-void CPWL_EditCtrl::ShowVScrollBar(FX_BOOL bShow) {}
-
-void CPWL_EditCtrl::InsertText(const FX_WCHAR* csText) {
- if (!IsReadOnly())
- m_pEdit->InsertText(csText);
-}
-
-void CPWL_EditCtrl::InsertWord(FX_WORD word, int32_t nCharset) {
- if (!IsReadOnly())
- m_pEdit->InsertWord(word, nCharset);
-}
-
-void CPWL_EditCtrl::InsertReturn() {
- if (!IsReadOnly())
- m_pEdit->InsertReturn();
-}
-
-void CPWL_EditCtrl::Delete() {
- if (!IsReadOnly())
- m_pEdit->Delete();
-}
-
-void CPWL_EditCtrl::Backspace() {
- if (!IsReadOnly())
- m_pEdit->Backspace();
-}
-
-FX_BOOL CPWL_EditCtrl::CanUndo() const {
- return !IsReadOnly() && m_pEdit->CanUndo();
-}
-
-FX_BOOL CPWL_EditCtrl::CanRedo() const {
- return !IsReadOnly() && m_pEdit->CanRedo();
-}
-
-void CPWL_EditCtrl::Redo() {
- if (CanRedo())
- m_pEdit->Redo();
-}
-
-void CPWL_EditCtrl::Undo() {
- if (CanUndo())
- m_pEdit->Undo();
-}
-
-void CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin,
- FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin,
- FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep,
- FX_FLOAT fBigStep) {
- PWL_SCROLL_INFO Info;
-
- Info.fPlateWidth = fPlateMax - fPlateMin;
- Info.fContentMin = fContentMin;
- Info.fContentMax = fContentMax;
- Info.fSmallStep = fSmallStep;
- Info.fBigStep = fBigStep;
-
- OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info);
-
- if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) ||
- IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) {
- ShowVScrollBar(FALSE);
- } else {
- ShowVScrollBar(TRUE);
- }
-}
-
-void CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy) {
- OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy);
-}
-
-void CPWL_EditCtrl::IOnSetCaret(FX_BOOL bVisible,
- const CFX_FloatPoint& ptHead,
- const CFX_FloatPoint& ptFoot,
- const CPVT_WordPlace& place) {
- PWL_CARET_INFO cInfo;
- cInfo.bVisible = bVisible;
- cInfo.ptHead = ptHead;
- cInfo.ptFoot = ptFoot;
-
- OnNotify(this, PNM_SETCARETINFO, (intptr_t)&cInfo, (intptr_t)NULL);
-}
-
-void CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps& secProps,
- const CPVT_WordProps& wordProps) {}
-
-void CPWL_EditCtrl::IOnContentChange(const CFX_FloatRect& rcContent) {
- if (IsValid()) {
- if (m_pEditNotify) {
- m_pEditNotify->OnContentChange(rcContent);
- }
- }
-}
-
-void CPWL_EditCtrl::IOnInvalidateRect(CFX_FloatRect* pRect) {
- InvalidateRect(pRect);
-}
-
-int32_t CPWL_EditCtrl::GetCharSet() const {
- return m_nCharSet < 0 ? DEFAULT_CHARSET : m_nCharSet;
-}
-
-void CPWL_EditCtrl::GetTextRange(const CFX_FloatRect& rect,
- int32_t& nStartChar,
- int32_t& nEndChar) const {
- nStartChar = m_pEdit->WordPlaceToWordIndex(
- m_pEdit->SearchWordPlace(CFX_FloatPoint(rect.left, rect.top)));
- nEndChar = m_pEdit->WordPlaceToWordIndex(
- m_pEdit->SearchWordPlace(CFX_FloatPoint(rect.right, rect.bottom)));
-}
-
-CFX_WideString CPWL_EditCtrl::GetText(int32_t& nStartChar,
- int32_t& nEndChar) const {
- CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar);
- CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar);
- return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd));
-}
-
-void CPWL_EditCtrl::SetReadyToInput() {
- if (m_bMouseDown) {
- ReleaseCapture();
- m_bMouseDown = FALSE;
- }
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp b/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp
deleted file mode 100644
index 0a70357efd..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp
+++ /dev/null
@@ -1,499 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_FontMap.h"
-
-#include "core/include/fpdfapi/cpdf_document.h"
-#include "core/include/fpdfapi/fpdf_module.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-namespace {
-
-const char kDefaultFontName[] = "Helvetica";
-
-const char* const g_sDEStandardFontName[] = {"Courier",
- "Courier-Bold",
- "Courier-BoldOblique",
- "Courier-Oblique",
- "Helvetica",
- "Helvetica-Bold",
- "Helvetica-BoldOblique",
- "Helvetica-Oblique",
- "Times-Roman",
- "Times-Bold",
- "Times-Italic",
- "Times-BoldItalic",
- "Symbol",
- "ZapfDingbats"};
-
-} // namespace
-
-CPWL_FontMap::CPWL_FontMap(IFX_SystemHandler* pSystemHandler)
- : m_pPDFDoc(NULL), m_pSystemHandler(pSystemHandler) {
- ASSERT(m_pSystemHandler);
-}
-
-CPWL_FontMap::~CPWL_FontMap() {
- delete m_pPDFDoc;
- m_pPDFDoc = NULL;
-
- Empty();
-}
-
-void CPWL_FontMap::SetSystemHandler(IFX_SystemHandler* pSystemHandler) {
- m_pSystemHandler = pSystemHandler;
-}
-
-CPDF_Document* CPWL_FontMap::GetDocument() {
- if (!m_pPDFDoc) {
- if (CPDF_ModuleMgr::Get()) {
- m_pPDFDoc = new CPDF_Document;
- m_pPDFDoc->CreateNewDoc();
- }
- }
-
- return m_pPDFDoc;
-}
-
-CPDF_Font* CPWL_FontMap::GetPDFFont(int32_t nFontIndex) {
- if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
- return pData->pFont;
- }
- }
-
- return NULL;
-}
-
-CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
- if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
- return pData->sFontName;
- }
- }
-
- return "";
-}
-
-FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, FX_WORD word) {
- if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
- if (m_aData.GetAt(nFontIndex)) {
- return CharCodeFromUnicode(nFontIndex, word) >= 0;
- }
- }
-
- return FALSE;
-}
-
-int32_t CPWL_FontMap::GetWordFontIndex(FX_WORD word,
- int32_t nCharset,
- int32_t nFontIndex) {
- if (nFontIndex > 0) {
- if (KnowWord(nFontIndex, word))
- return nFontIndex;
- } else {
- if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) {
- if (nCharset == DEFAULT_CHARSET || pData->nCharset == SYMBOL_CHARSET ||
- nCharset == pData->nCharset) {
- if (KnowWord(0, word))
- return 0;
- }
- }
- }
-
- int32_t nNewFontIndex =
- GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE);
- if (nNewFontIndex >= 0) {
- if (KnowWord(nNewFontIndex, word))
- return nNewFontIndex;
- }
- nNewFontIndex = GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE);
- if (nNewFontIndex >= 0) {
- if (KnowWord(nNewFontIndex, word))
- return nNewFontIndex;
- }
- return -1;
-}
-
-int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
- if (pData->pFont) {
- if (pData->pFont->IsUnicodeCompatible()) {
- int nCharCode = pData->pFont->CharCodeFromUnicode(word);
- pData->pFont->GlyphFromCharCode(nCharCode);
- return nCharCode;
- }
- if (word < 0xFF)
- return word;
- }
- }
- return -1;
-}
-
-CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) {
- // searching native font is slow, so we must save time
- for (int32_t i = 0, sz = m_aNativeFont.GetSize(); i < sz; i++) {
- if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i)) {
- if (pData->nCharset == nCharset)
- return pData->sFontName;
- }
- }
-
- CFX_ByteString sNew = GetNativeFont(nCharset);
-
- if (!sNew.IsEmpty()) {
- CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native;
- pNewData->nCharset = nCharset;
- pNewData->sFontName = sNew;
-
- m_aNativeFont.Add(pNewData);
- }
-
- return sNew;
-}
-
-void CPWL_FontMap::Empty() {
- {
- for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++)
- delete m_aData.GetAt(i);
-
- m_aData.RemoveAll();
- }
- {
- for (int32_t i = 0, sz = m_aNativeFont.GetSize(); i < sz; i++)
- delete m_aNativeFont.GetAt(i);
-
- m_aNativeFont.RemoveAll();
- }
-}
-
-void CPWL_FontMap::Initialize() {
- GetFontIndex(kDefaultFontName, ANSI_CHARSET, FALSE);
-}
-
-FX_BOOL CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName) {
- for (int32_t i = 0; i < FX_ArraySize(g_sDEStandardFontName); ++i) {
- if (sFontName == g_sDEStandardFontName[i])
- return TRUE;
- }
-
- return FALSE;
-}
-
-int32_t CPWL_FontMap::FindFont(const CFX_ByteString& sFontName,
- int32_t nCharset) {
- for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) {
- if (nCharset == DEFAULT_CHARSET || nCharset == pData->nCharset) {
- if (sFontName.IsEmpty() || pData->sFontName == sFontName)
- return i;
- }
- }
- }
-
- return -1;
-}
-
-int32_t CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName,
- int32_t nCharset,
- FX_BOOL bFind) {
- int32_t nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCharset);
- if (nFontIndex >= 0)
- return nFontIndex;
-
- CFX_ByteString sAlias;
- CPDF_Font* pFont = NULL;
- if (bFind)
- pFont = FindFontSameCharset(sAlias, nCharset);
-
- if (!pFont) {
- CFX_ByteString sTemp = sFontName;
- pFont = AddFontToDocument(GetDocument(), sTemp, nCharset);
- sAlias = EncodeFontAlias(sTemp, nCharset);
- }
- AddedFont(pFont, sAlias);
- return AddFontData(pFont, sAlias, nCharset);
-}
-
-int32_t CPWL_FontMap::GetPWLFontIndex(FX_WORD word, int32_t nCharset) {
- int32_t nFind = -1;
-
- for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) {
- if (pData->nCharset == nCharset) {
- nFind = i;
- break;
- }
- }
- }
-
- CPDF_Font* pNewFont = GetPDFFont(nFind);
-
- if (!pNewFont)
- return -1;
-
- CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset);
- AddedFont(pNewFont, sAlias);
-
- return AddFontData(pNewFont, sAlias, nCharset);
-}
-
-CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias,
- int32_t nCharset) {
- return NULL;
-}
-
-int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont,
- const CFX_ByteString& sFontAlias,
- int32_t nCharset) {
- CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data;
- pNewData->pFont = pFont;
- pNewData->sFontName = sFontAlias;
- pNewData->nCharset = nCharset;
-
- m_aData.Add(pNewData);
-
- return m_aData.GetSize() - 1;
-}
-
-void CPWL_FontMap::AddedFont(CPDF_Font* pFont,
- const CFX_ByteString& sFontAlias) {}
-
-CFX_ByteString CPWL_FontMap::GetFontName(int32_t nFontIndex) {
- if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
- return pData->sFontName;
- }
- }
-
- return "";
-}
-
-CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) {
- if (nCharset == DEFAULT_CHARSET)
- nCharset = GetNativeCharset();
-
- CFX_ByteString sFontName = GetDefaultFontByCharset(nCharset);
- if (m_pSystemHandler) {
- if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName))
- return sFontName;
-
- sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset);
- }
- return sFontName;
-}
-
-CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc,
- CFX_ByteString& sFontName,
- uint8_t nCharset) {
- if (IsStandardFont(sFontName))
- return AddStandardFont(pDoc, sFontName);
-
- return AddSystemFont(pDoc, sFontName, nCharset);
-}
-
-CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc,
- CFX_ByteString& sFontName) {
- if (!pDoc)
- return NULL;
-
- CPDF_Font* pFont = NULL;
-
- if (sFontName == "ZapfDingbats") {
- pFont = pDoc->AddStandardFont(sFontName, NULL);
- } else {
- CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI);
- pFont = pDoc->AddStandardFont(sFontName, &fe);
- }
-
- return pFont;
-}
-
-CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc,
- CFX_ByteString& sFontName,
- uint8_t nCharset) {
- if (!pDoc)
- return NULL;
-
- if (sFontName.IsEmpty())
- sFontName = GetNativeFont(nCharset);
- if (nCharset == DEFAULT_CHARSET)
- nCharset = GetNativeCharset();
-
- if (m_pSystemHandler)
- return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName,
- nCharset);
-
- return NULL;
-}
-
-CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName,
- int32_t nCharset) {
- CFX_ByteString sPostfix;
- sPostfix.Format("_%02X", nCharset);
- return EncodeFontAlias(sFontName) + sPostfix;
-}
-
-CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) {
- CFX_ByteString sRet = sFontName;
- sRet.Remove(' ');
- return sRet;
-}
-
-int32_t CPWL_FontMap::GetFontMapCount() const {
- return m_aData.GetSize();
-}
-
-const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(int32_t nIndex) const {
- if (nIndex >= 0 && nIndex < m_aData.GetSize()) {
- return m_aData.GetAt(nIndex);
- }
-
- return NULL;
-}
-
-int32_t CPWL_FontMap::GetNativeCharset() {
- uint8_t nCharset = ANSI_CHARSET;
- int32_t iCodePage = FXSYS_GetACP();
- switch (iCodePage) {
- case 932: // Japan
- nCharset = SHIFTJIS_CHARSET;
- break;
- case 936: // Chinese (PRC, Singapore)
- nCharset = GB2312_CHARSET;
- break;
- case 950: // Chinese (Taiwan; Hong Kong SAR, PRC)
- nCharset = GB2312_CHARSET;
- break;
- case 1252: // Windows 3.1 Latin 1 (US, Western Europe)
- nCharset = ANSI_CHARSET;
- break;
- case 874: // Thai
- nCharset = THAI_CHARSET;
- break;
- case 949: // Korean
- nCharset = HANGUL_CHARSET;
- break;
- case 1200: // Unicode (BMP of ISO 10646)
- nCharset = ANSI_CHARSET;
- break;
- case 1250: // Windows 3.1 Eastern European
- nCharset = EASTEUROPE_CHARSET;
- break;
- case 1251: // Windows 3.1 Cyrillic
- nCharset = RUSSIAN_CHARSET;
- break;
- case 1253: // Windows 3.1 Greek
- nCharset = GREEK_CHARSET;
- break;
- case 1254: // Windows 3.1 Turkish
- nCharset = TURKISH_CHARSET;
- break;
- case 1255: // Hebrew
- nCharset = HEBREW_CHARSET;
- break;
- case 1256: // Arabic
- nCharset = ARABIC_CHARSET;
- break;
- case 1257: // Baltic
- nCharset = BALTIC_CHARSET;
- break;
- case 1258: // Vietnamese
- nCharset = VIETNAMESE_CHARSET;
- break;
- case 1361: // Korean(Johab)
- nCharset = JOHAB_CHARSET;
- break;
- }
- return nCharset;
-}
-
-const CPWL_FontMap::CharsetFontMap CPWL_FontMap::defaultTTFMap[] = {
- {ANSI_CHARSET, "Helvetica"}, {GB2312_CHARSET, "SimSun"},
- {CHINESEBIG5_CHARSET, "MingLiU"}, {SHIFTJIS_CHARSET, "MS Gothic"},
- {HANGUL_CHARSET, "Batang"}, {RUSSIAN_CHARSET, "Arial"},
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
- _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- {EASTEUROPE_CHARSET, "Arial"},
-#else
- {EASTEUROPE_CHARSET, "Tahoma"},
-#endif
- {ARABIC_CHARSET, "Arial"}, {-1, NULL}};
-
-CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) {
- int i = 0;
- while (defaultTTFMap[i].charset != -1) {
- if (nCharset == defaultTTFMap[i].charset)
- return defaultTTFMap[i].fontname;
- ++i;
- }
- return "";
-}
-
-int32_t CPWL_FontMap::CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) {
- if (m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet()))
- return m_pSystemHandler->GetCharSet();
- // to avoid CJK Font to show ASCII
- if (word < 0x7F)
- return ANSI_CHARSET;
- // follow the old charset
- if (nOldCharset != DEFAULT_CHARSET)
- return nOldCharset;
-
- // find new charset
- if ((word >= 0x4E00 && word <= 0x9FA5) ||
- (word >= 0xE7C7 && word <= 0xE7F3) ||
- (word >= 0x3000 && word <= 0x303F) ||
- (word >= 0x2000 && word <= 0x206F)) {
- return GB2312_CHARSET;
- }
-
- if (((word >= 0x3040) && (word <= 0x309F)) ||
- ((word >= 0x30A0) && (word <= 0x30FF)) ||
- ((word >= 0x31F0) && (word <= 0x31FF)) ||
- ((word >= 0xFF00) && (word <= 0xFFEF))) {
- return SHIFTJIS_CHARSET;
- }
-
- if (((word >= 0xAC00) && (word <= 0xD7AF)) ||
- ((word >= 0x1100) && (word <= 0x11FF)) ||
- ((word >= 0x3130) && (word <= 0x318F))) {
- return HANGUL_CHARSET;
- }
-
- if (word >= 0x0E00 && word <= 0x0E7F)
- return THAI_CHARSET;
-
- if ((word >= 0x0370 && word <= 0x03FF) || (word >= 0x1F00 && word <= 0x1FFF))
- return GREEK_CHARSET;
-
- if ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC))
- return ARABIC_CHARSET;
-
- if (word >= 0x0590 && word <= 0x05FF)
- return HEBREW_CHARSET;
-
- if (word >= 0x0400 && word <= 0x04FF)
- return RUSSIAN_CHARSET;
-
- if (word >= 0x0100 && word <= 0x024F)
- return EASTEUROPE_CHARSET;
-
- if (word >= 0x1E00 && word <= 0x1EFF)
- return VIETNAMESE_CHARSET;
-
- return ANSI_CHARSET;
-}
-
-CPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler,
- CPDF_Document* pAttachedDoc)
- : CPWL_FontMap(pSystemHandler), m_pAttachedDoc(pAttachedDoc) {}
-
-CPWL_DocFontMap::~CPWL_DocFontMap() {}
-
-CPDF_Document* CPWL_DocFontMap::GetDocument() {
- return m_pAttachedDoc;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp b/fpdfsdk/src/pdfwindow/PWL_Icon.cpp
deleted file mode 100644
index 2a33b96cf9..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/include/fpdfapi/cpdf_array.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Icon.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-CPWL_Image::CPWL_Image() : m_pPDFStream(NULL) {}
-
-CPWL_Image::~CPWL_Image() {}
-
-CFX_ByteString CPWL_Image::GetImageAppStream() {
- CFX_ByteTextBuf sAppStream;
-
- CFX_ByteString sAlias = GetImageAlias();
- CFX_FloatRect rcPlate = GetClientRect();
- CFX_Matrix mt;
- mt.SetReverse(GetImageMatrix());
-
- FX_FLOAT fHScale = 1.0f;
- FX_FLOAT fVScale = 1.0f;
- GetScale(fHScale, fVScale);
-
- FX_FLOAT fx = 0.0f;
- FX_FLOAT fy = 0.0f;
- GetImageOffset(fx, fy);
-
- if (m_pPDFStream && sAlias.GetLength() > 0) {
- sAppStream << "q\n";
- sAppStream << rcPlate.left << " " << rcPlate.bottom << " "
- << rcPlate.right - rcPlate.left << " "
- << rcPlate.top - rcPlate.bottom << " re W n\n";
-
- sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx
- << " " << rcPlate.bottom + fy << " cm\n";
- sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " "
- << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n";
-
- sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n"
- << "Q\n";
- }
-
- return sAppStream.GetByteString();
-}
-
-void CPWL_Image::SetPDFStream(CPDF_Stream* pStream) {
- m_pPDFStream = pStream;
-}
-
-CPDF_Stream* CPWL_Image::GetPDFStream() {
- return m_pPDFStream;
-}
-
-void CPWL_Image::GetImageSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) {
- fWidth = 0.0f;
- fHeight = 0.0f;
-
- if (m_pPDFStream) {
- if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) {
- CFX_FloatRect rect = pDict->GetRectBy("BBox");
-
- fWidth = rect.right - rect.left;
- fHeight = rect.top - rect.bottom;
- }
- }
-}
-
-CFX_Matrix CPWL_Image::GetImageMatrix() {
- if (m_pPDFStream) {
- if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) {
- return pDict->GetMatrixBy("Matrix");
- }
- }
-
- return CFX_Matrix();
-}
-
-CFX_ByteString CPWL_Image::GetImageAlias() {
- if (!m_sImageAlias.IsEmpty())
- return m_sImageAlias;
-
- if (m_pPDFStream) {
- if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) {
- return pDict->GetStringBy("Name");
- }
- }
-
- return CFX_ByteString();
-}
-
-void CPWL_Image::SetImageAlias(const FX_CHAR* sImageAlias) {
- m_sImageAlias = sImageAlias;
-}
-
-void CPWL_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) {
- fHScale = 1.0f;
- fVScale = 1.0f;
-}
-
-void CPWL_Image::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) {
- x = 0.0f;
- y = 0.0f;
-}
-
-CPWL_Icon::CPWL_Icon() : m_pIconFit(NULL) {}
-
-CPWL_Icon::~CPWL_Icon() {}
-
-int32_t CPWL_Icon::GetScaleMethod() {
- if (m_pIconFit)
- return m_pIconFit->GetScaleMethod();
-
- return 0;
-}
-
-FX_BOOL CPWL_Icon::IsProportionalScale() {
- if (m_pIconFit)
- return m_pIconFit->IsProportionalScale();
-
- return FALSE;
-}
-
-void CPWL_Icon::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) {
- if (m_pIconFit) {
- fLeft = 0.0f;
- fBottom = 0.0f;
- CPDF_Array* pA =
- m_pIconFit->GetDict() ? m_pIconFit->GetDict()->GetArrayBy("A") : NULL;
- if (pA) {
- FX_DWORD dwCount = pA->GetCount();
- if (dwCount > 0)
- fLeft = pA->GetNumberAt(0);
- if (dwCount > 1)
- fBottom = pA->GetNumberAt(1);
- }
- } else {
- fLeft = 0.0f;
- fBottom = 0.0f;
- }
-}
-
-FX_BOOL CPWL_Icon::GetFittingBounds() {
- if (m_pIconFit)
- return m_pIconFit->GetFittingBounds();
-
- return FALSE;
-}
-
-void CPWL_Icon::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) {
- fHScale = 1.0f;
- fVScale = 1.0f;
-
- if (m_pPDFStream) {
- FX_FLOAT fImageWidth, fImageHeight;
- FX_FLOAT fPlateWidth, fPlateHeight;
-
- CFX_FloatRect rcPlate = GetClientRect();
- fPlateWidth = rcPlate.right - rcPlate.left;
- fPlateHeight = rcPlate.top - rcPlate.bottom;
-
- GetImageSize(fImageWidth, fImageHeight);
-
- int32_t nScaleMethod = GetScaleMethod();
-
- switch (nScaleMethod) {
- default:
- case 0:
- fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
- fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
- break;
- case 1:
- if (fPlateWidth < fImageWidth)
- fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
- if (fPlateHeight < fImageHeight)
- fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
- break;
- case 2:
- if (fPlateWidth > fImageWidth)
- fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
- if (fPlateHeight > fImageHeight)
- fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
- break;
- case 3:
- break;
- }
-
- FX_FLOAT fMinScale;
- if (IsProportionalScale()) {
- fMinScale = PWL_MIN(fHScale, fVScale);
- fHScale = fMinScale;
- fVScale = fMinScale;
- }
- }
-}
-
-void CPWL_Icon::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) {
- FX_FLOAT fLeft, fBottom;
-
- GetIconPosition(fLeft, fBottom);
- x = 0.0f;
- y = 0.0f;
-
- FX_FLOAT fImageWidth, fImageHeight;
- GetImageSize(fImageWidth, fImageHeight);
-
- FX_FLOAT fHScale, fVScale;
- GetScale(fHScale, fVScale);
-
- FX_FLOAT fImageFactWidth = fImageWidth * fHScale;
- FX_FLOAT fImageFactHeight = fImageHeight * fVScale;
-
- FX_FLOAT fPlateWidth, fPlateHeight;
- CFX_FloatRect rcPlate = GetClientRect();
- fPlateWidth = rcPlate.right - rcPlate.left;
- fPlateHeight = rcPlate.top - rcPlate.bottom;
-
- x = (fPlateWidth - fImageFactWidth) * fLeft;
- y = (fPlateHeight - fImageFactHeight) * fBottom;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp b/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
deleted file mode 100644
index 7dc8ba9f44..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
+++ /dev/null
@@ -1,501 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_IconList.h"
-
-#include "fpdfsdk/include/pdfwindow/PWL_Label.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ListCtrl.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ScrollBar.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-#include "public/fpdf_fwlevent.h"
-
-#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f
-#define PWL_IconList_ITEM_WIDTH 20.0f
-#define PWL_IconList_ITEM_HEIGHT 20.0f
-#define PWL_IconList_ITEM_SPACE 4.0f
-
-CPWL_IconList_Item::CPWL_IconList_Item()
- : m_nIconIndex(-1), m_pData(NULL), m_bSelected(FALSE), m_pText(NULL) {}
-
-CPWL_IconList_Item::~CPWL_IconList_Item() {}
-
-CFX_ByteString CPWL_IconList_Item::GetClassName() const {
- return "CPWL_IconList_Item";
-}
-
-FX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth) {
- return PWL_IconList_ITEM_HEIGHT;
-}
-
-void CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CFX_FloatRect rcClient = GetClientRect();
-
- if (m_bSelected) {
- if (IsEnabled()) {
- CPWL_Utils::DrawFillRect(
- pDevice, pUser2Device, rcClient,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR,
- GetTransparency()));
- } else {
- CPWL_Utils::DrawFillRect(
- pDevice, pUser2Device, rcClient,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR,
- GetTransparency()));
- }
- }
-
- CFX_FloatRect rcIcon = rcClient;
- rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN;
- rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH;
-
- CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon,
- m_crIcon, m_pText->GetTextColor(),
- GetTransparency());
-}
-
-void CPWL_IconList_Item::SetSelect(FX_BOOL bSelected) {
- m_bSelected = bSelected;
-
- if (bSelected)
- m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
- else
- m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
-}
-
-FX_BOOL CPWL_IconList_Item::IsSelected() const {
- return m_bSelected;
-}
-
-void CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- m_pText = new CPWL_Label;
-
- PWL_CREATEPARAM lcp = cp;
- lcp.pParentWnd = this;
- lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER;
- lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR;
- lcp.fFontSize = 12;
- m_pText->Create(lcp);
-}
-
-void CPWL_IconList_Item::SetData(void* pData) {
- m_pData = pData;
-}
-
-void CPWL_IconList_Item::SetIcon(int32_t nIconIndex) {
- m_nIconIndex = nIconIndex;
-}
-
-void CPWL_IconList_Item::SetText(const CFX_WideString& str) {
- m_pText->SetText(str.c_str());
-}
-
-CFX_WideString CPWL_IconList_Item::GetText() const {
- return m_pText->GetText();
-}
-
-void CPWL_IconList_Item::RePosChildWnd() {
- CFX_FloatRect rcClient = GetClientRect();
-
- rcClient.left +=
- (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH +
- PWL_IconList_ITEM_ICON_LEFTMARGIN);
-
- m_pText->Move(rcClient, TRUE, FALSE);
-}
-
-void CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color) {
- m_crIcon = color;
-}
-
-void CPWL_IconList_Item::OnEnabled() {
- if (m_bSelected)
- m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
- else
- m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
-
- InvalidateRect();
-}
-
-void CPWL_IconList_Item::OnDisabled() {
- m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR);
-
- InvalidateRect();
-}
-
-CPWL_IconList_Content::CPWL_IconList_Content(int32_t nListCount)
- : m_nSelectIndex(-1),
- m_pNotify(NULL),
- m_bEnableNotify(TRUE),
- m_bMouseDown(FALSE),
- m_nListCount(nListCount) {}
-
-CPWL_IconList_Content::~CPWL_IconList_Content() {}
-
-void CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- for (int32_t i = 0; i < m_nListCount; i++) {
- CPWL_IconList_Item* pNewItem = new CPWL_IconList_Item();
-
- PWL_CREATEPARAM icp = cp;
- icp.pParentWnd = this;
- icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_NOREFRESHCLIP;
- pNewItem->Create(icp);
- }
-
- SetItemSpace(PWL_IconList_ITEM_SPACE);
- ResetContent(0);
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- CFX_FloatRect rcScroll = GetScrollArea();
- GetScrollPos();
-
- PWL_SCROLL_INFO sInfo;
- sInfo.fContentMin = rcScroll.bottom;
- sInfo.fContentMax = rcScroll.top;
- sInfo.fPlateWidth = GetClientRect().Height();
- sInfo.fSmallStep = 13.0f;
- sInfo.fBigStep = sInfo.fPlateWidth;
-
- pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo);
- }
-}
-
-FX_BOOL CPWL_IconList_Content::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- SetFocus();
-
- SetCapture();
- m_bMouseDown = TRUE;
-
- int32_t nItemIndex = FindItemIndex(point);
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_IconList_Content::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- m_bMouseDown = FALSE;
- ReleaseCapture();
-
- return TRUE;
-}
-
-FX_BOOL CPWL_IconList_Content::OnMouseMove(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (m_bMouseDown) {
- int32_t nItemIndex = FindItemIndex(point);
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
- switch (nChar) {
- case FWL_VKEY_Up:
- if (m_nSelectIndex > 0) {
- int32_t nItemIndex = m_nSelectIndex - 1;
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
- }
- return TRUE;
- case FWL_VKEY_Down:
- if (m_nSelectIndex < m_nListCount - 1) {
- int32_t nItemIndex = m_nSelectIndex + 1;
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
- }
- return TRUE;
- }
-
- return FALSE;
-}
-
-int32_t CPWL_IconList_Content::FindItemIndex(const CFX_FloatPoint& point) {
- int32_t nIndex = 0;
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- CFX_FloatRect rcWnd = pChild->ChildToParent(pChild->GetWindowRect());
-
- if (point.y < rcWnd.top) {
- nIndex = i;
- }
- }
- }
-
- return nIndex;
-}
-
-void CPWL_IconList_Content::ScrollToItem(int32_t nItemIndex) {
- CFX_FloatRect rcClient = GetClientRect();
-
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) {
- CFX_FloatRect rcOrigin = pItem->GetWindowRect();
- CFX_FloatRect rcWnd = pItem->ChildToParent(rcOrigin);
-
- if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top)) {
- CFX_FloatPoint ptScroll = GetScrollPos();
-
- if (rcWnd.top > rcClient.top) {
- ptScroll.y = rcOrigin.top;
- } else if (rcWnd.bottom < rcClient.bottom) {
- ptScroll.y = rcOrigin.bottom + rcClient.Height();
- }
-
- SetScrollPos(ptScroll);
- ResetFace();
- InvalidateRect();
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
- (intptr_t)&ptScroll.y);
- }
- }
- }
-}
-
-void CPWL_IconList_Content::SetSelect(int32_t nIndex) {
- if (m_nSelectIndex != nIndex) {
- SelectItem(m_nSelectIndex, FALSE);
- SelectItem(nIndex, TRUE);
- m_nSelectIndex = nIndex;
-
- if (IPWL_IconList_Notify* pNotify = GetNotify())
- pNotify->OnNoteListSelChanged(nIndex);
- }
-}
-
-int32_t CPWL_IconList_Content::GetSelect() const {
- return m_nSelectIndex;
-}
-
-IPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const {
- if (m_bEnableNotify)
- return m_pNotify;
- return NULL;
-}
-
-void CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify) {
- m_pNotify = pNotify;
-}
-
-void CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify) {
- m_bEnableNotify = bNotify;
-}
-
-void CPWL_IconList_Content::SelectItem(int32_t nItemIndex, FX_BOOL bSelect) {
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) {
- pItem->SetSelect(bSelect);
- pItem->InvalidateRect();
- }
-}
-
-CPWL_IconList_Item* CPWL_IconList_Content::GetListItem(
- int32_t nItemIndex) const {
- if (nItemIndex >= 0 && nItemIndex < m_aChildren.GetSize()) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(nItemIndex)) {
- if (pChild->GetClassName() == "CPWL_IconList_Item") {
- return (CPWL_IconList_Item*)pChild;
- }
- }
- }
-
- return NULL;
-}
-
-void CPWL_IconList_Content::SetListData(int32_t nItemIndex, void* pData) {
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- pItem->SetData(pData);
-}
-
-void CPWL_IconList_Content::SetListIcon(int32_t nItemIndex,
- int32_t nIconIndex) {
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- pItem->SetIcon(nIconIndex);
-}
-
-void CPWL_IconList_Content::SetListString(int32_t nItemIndex,
- const CFX_WideString& str) {
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- pItem->SetText(str);
-}
-
-CFX_WideString CPWL_IconList_Content::GetListString(int32_t nItemIndex) const {
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- return pItem->GetText();
-
- return L"";
-}
-
-void CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- if (pChild->GetClassName() == "CPWL_IconList_Item") {
- CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild;
- pItem->SetIconFillColor(color);
- pItem->InvalidateRect();
- }
- }
- }
-}
-
-CPWL_IconList::CPWL_IconList(int32_t nListCount)
- : m_pListContent(NULL), m_nListCount(nListCount) {}
-
-CPWL_IconList::~CPWL_IconList() {}
-
-void CPWL_IconList::RePosChildWnd() {
- CPWL_Wnd::RePosChildWnd();
-
- if (m_pListContent)
- m_pListContent->Move(GetClientRect(), TRUE, FALSE);
-}
-
-void CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- m_pListContent = new CPWL_IconList_Content(m_nListCount);
-
- PWL_CREATEPARAM ccp = cp;
- ccp.pParentWnd = this;
- ccp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- m_pListContent->Create(ccp);
-}
-
-void CPWL_IconList::OnCreated() {
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) {
- pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT);
- pScrollBar->SetTransparency(255);
- pScrollBar->SetNotifyForever(TRUE);
- }
-}
-
-void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-
- if (wParam == SBT_VSCROLL) {
- switch (msg) {
- case PNM_SETSCROLLINFO:
- if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) {
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) {
- if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth) {
- if (!pScrollBar->IsVisible()) {
- pScrollBar->SetVisible(TRUE);
- RePosChildWnd();
- } else {
- }
- } else {
- if (pScrollBar->IsVisible()) {
- pScrollBar->SetVisible(FALSE);
- RePosChildWnd();
- }
-
- if (m_pListContent)
- m_pListContent->SetScrollPos(CFX_FloatPoint(0.0f, 0.0f));
- }
-
- pScrollBar->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam);
- }
- }
- return;
- case PNM_SCROLLWINDOW:
- if (m_pListContent) {
- m_pListContent->SetScrollPos(
- CFX_FloatPoint(0.0f, *(FX_FLOAT*)lParam));
- m_pListContent->ResetFace();
- m_pListContent->InvalidateRect(NULL);
- }
- return;
- case PNM_SETSCROLLPOS:
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
- pScrollBar->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
- return;
- }
- }
-}
-
-void CPWL_IconList::SetSelect(int32_t nIndex) {
- m_pListContent->SetSelect(nIndex);
-}
-
-void CPWL_IconList::SetTopItem(int32_t nIndex) {
- m_pListContent->ScrollToItem(nIndex);
-}
-
-int32_t CPWL_IconList::GetSelect() const {
- return m_pListContent->GetSelect();
-}
-
-void CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify) {
- m_pListContent->SetNotify(pNotify);
-}
-
-void CPWL_IconList::EnableNotify(FX_BOOL bNotify) {
- m_pListContent->EnableNotify(bNotify);
-}
-
-void CPWL_IconList::SetListData(int32_t nItemIndex, void* pData) {
- m_pListContent->SetListData(nItemIndex, pData);
-}
-
-void CPWL_IconList::SetListIcon(int32_t nItemIndex, int32_t nIconIndex) {
- m_pListContent->SetListIcon(nItemIndex, nIconIndex);
-}
-
-void CPWL_IconList::SetListString(int32_t nItemIndex,
- const CFX_WideString& str) {
- m_pListContent->SetListString(nItemIndex, str);
-}
-
-CFX_WideString CPWL_IconList::GetListString(int32_t nItemIndex) const {
- return m_pListContent->GetListString(nItemIndex);
-}
-
-void CPWL_IconList::SetIconFillColor(const CPWL_Color& color) {
- m_pListContent->SetIconFillColor(color);
-}
-
-FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta,
- const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CFX_FloatPoint ptScroll = m_pListContent->GetScrollPos();
- CFX_FloatRect rcScroll = m_pListContent->GetScrollArea();
- CFX_FloatRect rcContents = m_pListContent->GetClientRect();
-
- if (rcScroll.top - rcScroll.bottom > rcContents.Height()) {
- CFX_FloatPoint ptNew = ptScroll;
-
- if (zDelta > 0)
- ptNew.y += 30;
- else
- ptNew.y -= 30;
-
- if (ptNew.y > rcScroll.top)
- ptNew.y = rcScroll.top;
- if (ptNew.y < rcScroll.bottom + rcContents.Height())
- ptNew.y = rcScroll.bottom + rcContents.Height();
- if (ptNew.y < rcScroll.bottom)
- ptNew.y = rcScroll.bottom;
-
- if (ptNew.y != ptScroll.y) {
- m_pListContent->SetScrollPos(ptNew);
- m_pListContent->ResetFace();
- m_pListContent->InvalidateRect(NULL);
-
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
- pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
- (intptr_t)&ptNew.y);
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Label.cpp b/fpdfsdk/src/pdfwindow/PWL_Label.cpp
deleted file mode 100644
index 5f8d2d8685..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Label.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Label.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-CPWL_Label::CPWL_Label() : m_pEdit(NULL) {
- m_pEdit = IFX_Edit::NewEdit();
- ASSERT(m_pEdit);
-}
-
-CPWL_Label::~CPWL_Label() {
- IFX_Edit::DelEdit(m_pEdit);
-}
-
-CFX_ByteString CPWL_Label::GetClassName() const {
- return "CPWL_Label";
-}
-
-void CPWL_Label::OnCreated() {
- SetParamByFlag();
- SetFontSize(GetCreationParam().fFontSize);
-
- m_pEdit->SetFontMap(GetFontMap());
- m_pEdit->Initialize();
-
- if (HasFlag(PES_TEXTOVERFLOW)) {
- SetClipRect(CFX_FloatRect(0.0f, 0.0f, 0.0f, 0.0f));
- m_pEdit->SetTextOverflow(TRUE);
- }
-}
-
-void CPWL_Label::SetText(const FX_WCHAR* csText) {
- m_pEdit->SetText(csText);
-}
-
-void CPWL_Label::RePosChildWnd() {
- m_pEdit->SetPlateRect(GetClientRect());
-}
-
-void CPWL_Label::SetFontSize(FX_FLOAT fFontSize) {
- m_pEdit->SetFontSize(fFontSize);
-}
-
-FX_FLOAT CPWL_Label::GetFontSize() const {
- return m_pEdit->GetFontSize();
-}
-
-void CPWL_Label::SetParamByFlag() {
- if (HasFlag(PES_LEFT)) {
- m_pEdit->SetAlignmentH(0);
- } else if (HasFlag(PES_MIDDLE)) {
- m_pEdit->SetAlignmentH(1);
- } else if (HasFlag(PES_RIGHT)) {
- m_pEdit->SetAlignmentH(2);
- } else {
- m_pEdit->SetAlignmentH(0);
- }
-
- if (HasFlag(PES_TOP)) {
- m_pEdit->SetAlignmentV(0);
- } else if (HasFlag(PES_CENTER)) {
- m_pEdit->SetAlignmentV(1);
- } else if (HasFlag(PES_BOTTOM)) {
- m_pEdit->SetAlignmentV(2);
- } else {
- m_pEdit->SetAlignmentV(0);
- }
-
- if (HasFlag(PES_PASSWORD)) {
- m_pEdit->SetPasswordChar('*');
- }
-
- m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE));
- m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN));
- m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE));
- m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL));
-}
-
-void CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
-
- GetClientRect();
-
- CFX_FloatRect rcClip;
- CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
- CPVT_WordRange* pRange = NULL;
-
- if (!HasFlag(PES_TEXTOVERFLOW)) {
- rcClip = GetClientRect();
- pRange = &wrRange;
- }
- IFX_SystemHandler* pSysHandler = GetSystemHandler();
- IFX_Edit::DrawEdit(
- pDevice, pUser2Device, m_pEdit,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()),
- rcClip, CFX_FloatPoint(0.0f, 0.0f), pRange, pSysHandler, NULL);
-}
-
-void CPWL_Label::SetHorzScale(int32_t nHorzScale) {
- m_pEdit->SetHorzScale(nHorzScale);
-}
-
-void CPWL_Label::SetCharSpace(FX_FLOAT fCharSpace) {
- m_pEdit->SetCharSpace(fCharSpace);
-}
-
-CFX_FloatRect CPWL_Label::GetContentRect() const {
- return m_pEdit->GetContentRect();
-}
-
-void CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- sAppStream << GetTextAppearanceStream(CFX_FloatPoint(0.0f, 0.0f));
-}
-
-CFX_ByteString CPWL_Label::GetTextAppearanceStream(
- const CFX_FloatPoint& ptOffset) const {
- CFX_ByteTextBuf sRet;
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset);
-
- if (sEdit.GetLength() > 0) {
- sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit
- << "ET\n";
- }
-
- return sRet.GetByteString();
-}
-
-CFX_WideString CPWL_Label::GetText() const {
- return m_pEdit->GetText();
-}
-
-void CPWL_Label::SetLimitChar(int32_t nLimitChar) {
- m_pEdit->SetLimitChar(nLimitChar);
-}
-
-int32_t CPWL_Label::GetTotalWords() {
- if (m_pEdit)
- return m_pEdit->GetTotalWords();
-
- return 0;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp b/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
deleted file mode 100644
index 2c0b79d2f1..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
+++ /dev/null
@@ -1,533 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_ListBox.h"
-
-#include "fpdfsdk/include/pdfwindow/PWL_Edit.h"
-#include "fpdfsdk/include/pdfwindow/PWL_EditCtrl.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ScrollBar.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-#include "public/fpdf_fwlevent.h"
-
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
-
-CPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList) {
- ASSERT(m_pList);
-}
-
-CPWL_List_Notify::~CPWL_List_Notify() {}
-
-void CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin,
- FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin,
- FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep,
- FX_FLOAT fBigStep) {
- PWL_SCROLL_INFO Info;
-
- Info.fPlateWidth = fPlateMax - fPlateMin;
- Info.fContentMin = fContentMin;
- Info.fContentMax = fContentMax;
- Info.fSmallStep = fSmallStep;
- Info.fBigStep = fBigStep;
-
- m_pList->OnNotify(m_pList, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info);
-
- if (CPWL_ScrollBar* pScroll = m_pList->GetVScrollBar()) {
- if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) ||
- IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) {
- if (pScroll->IsVisible()) {
- pScroll->SetVisible(FALSE);
- m_pList->RePosChildWnd();
- }
- } else {
- if (!pScroll->IsVisible()) {
- pScroll->SetVisible(TRUE);
- m_pList->RePosChildWnd();
- }
- }
- }
-}
-
-void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) {
- m_pList->OnNotify(m_pList, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy);
-}
-
-void CPWL_List_Notify::IOnInvalidateRect(CFX_FloatRect* pRect) {
- m_pList->InvalidateRect(pRect);
-}
-
-CPWL_ListBox::CPWL_ListBox()
- : m_pList(NULL),
- m_pListNotify(NULL),
- m_bMouseDown(FALSE),
- m_bHoverSel(FALSE),
- m_pFillerNotify(NULL) {
- m_pList = IFX_List::NewList();
-}
-
-CPWL_ListBox::~CPWL_ListBox() {
- IFX_List::DelList(m_pList);
- delete m_pListNotify;
- m_pListNotify = NULL;
-}
-
-CFX_ByteString CPWL_ListBox::GetClassName() const {
- return "CPWL_ListBox";
-}
-
-void CPWL_ListBox::OnCreated() {
- if (m_pList) {
- delete m_pListNotify;
-
- m_pList->SetFontMap(GetFontMap());
- m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this));
-
- SetHoverSel(HasFlag(PLBS_HOVERSEL));
- m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL));
- m_pList->SetFontSize(GetCreationParam().fFontSize);
-
- m_bHoverSel = HasFlag(PLBS_HOVERSEL);
- }
-}
-
-void CPWL_ListBox::OnDestroy() {
- delete m_pListNotify;
- m_pListNotify = NULL;
-}
-
-void CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- CFX_ByteTextBuf sListItems;
-
- if (m_pList) {
- CFX_FloatRect rcPlate = m_pList->GetPlateRect();
- for (int32_t i = 0, sz = m_pList->GetCount(); i < sz; i++) {
- CFX_FloatRect rcItem = m_pList->GetItemRect(i);
-
- if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom)
- continue;
-
- CFX_FloatPoint ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f);
- if (m_pList->IsItemSelected(i)) {
- sListItems << CPWL_Utils::GetRectFillAppStream(
- rcItem, PWL_DEFAULT_SELBACKCOLOR);
- CFX_ByteString sItem =
- CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset);
- if (sItem.GetLength() > 0) {
- sListItems << "BT\n"
- << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELTEXTCOLOR)
- << sItem << "ET\n";
- }
- } else {
- CFX_ByteString sItem =
- CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset);
- if (sItem.GetLength() > 0) {
- sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor())
- << sItem << "ET\n";
- }
- }
- }
- }
-
- if (sListItems.GetLength() > 0) {
- CFX_ByteTextBuf sClip;
- CFX_FloatRect rcClient = GetClientRect();
-
- sClip << "q\n";
- sClip << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.right - rcClient.left << " "
- << rcClient.top - rcClient.bottom << " re W n\n";
-
- sClip << sListItems << "Q\n";
-
- sAppStream << "/Tx BMC\n" << sClip << "EMC\n";
- }
-}
-
-void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
-
- if (m_pList) {
- CFX_FloatRect rcPlate = m_pList->GetPlateRect();
- CFX_FloatRect rcList = GetListRect();
- CFX_FloatRect rcClient = GetClientRect();
-
- for (int32_t i = 0, sz = m_pList->GetCount(); i < sz; i++) {
- CFX_FloatRect rcItem = m_pList->GetItemRect(i);
- if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom)
- continue;
-
- CFX_FloatPoint ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f);
- if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) {
- CFX_FloatRect rcContent = pEdit->GetContentRect();
- if (rcContent.Width() > rcClient.Width())
- rcItem.Intersect(rcList);
- else
- rcItem.Intersect(rcClient);
- }
-
- if (m_pList->IsItemSelected(i)) {
- IFX_SystemHandler* pSysHandler = GetSystemHandler();
- if (pSysHandler && pSysHandler->IsSelectionImplemented()) {
- IFX_Edit::DrawEdit(
- pDevice, pUser2Device, m_pList->GetItemEdit(i),
- CPWL_Utils::PWLColorToFXColor(GetTextColor()),
- CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), rcList,
- ptOffset, NULL, pSysHandler, m_pFormFiller);
- pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem);
- } else {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem,
- ArgbEncode(255, 0, 51, 113));
- IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i),
- ArgbEncode(255, 255, 255, 255), 0, rcList,
- ptOffset, NULL, pSysHandler, m_pFormFiller);
- }
- } else {
- IFX_SystemHandler* pSysHandler = GetSystemHandler();
- IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i),
- CPWL_Utils::PWLColorToFXColor(GetTextColor()),
- CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()),
- rcList, ptOffset, NULL, pSysHandler, NULL);
- }
- }
- }
-}
-
-FX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
- CPWL_Wnd::OnKeyDown(nChar, nFlag);
-
- if (!m_pList)
- return FALSE;
-
- switch (nChar) {
- default:
- return FALSE;
- case FWL_VKEY_Up:
- case FWL_VKEY_Down:
- case FWL_VKEY_Home:
- case FWL_VKEY_Left:
- case FWL_VKEY_End:
- case FWL_VKEY_Right:
- break;
- }
-
- switch (nChar) {
- case FWL_VKEY_Up:
- m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Down:
- m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Home:
- m_pList->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Left:
- m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_End:
- m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Right:
- m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Delete:
- break;
- }
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(TRUE, bExit, nFlag);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
- CPWL_Wnd::OnChar(nChar, nFlag);
-
- if (!m_pList)
- return FALSE;
-
- if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)))
- return FALSE;
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(TRUE, bExit, nFlag);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_ListBox::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- if (ClientHitTest(point)) {
- m_bMouseDown = TRUE;
- SetFocus();
- SetCapture();
-
- if (m_pList)
- m_pList->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_ListBox::OnLButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonUp(point, nFlag);
-
- if (m_bMouseDown) {
- ReleaseCapture();
- m_bMouseDown = FALSE;
- }
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(FALSE, bExit, nFlag);
-
- return TRUE;
-}
-
-void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) {
- m_bHoverSel = bHoverSel;
-}
-
-FX_BOOL CPWL_ListBox::OnMouseMove(const CFX_FloatPoint& point, FX_DWORD nFlag) {
- CPWL_Wnd::OnMouseMove(point, nFlag);
-
- if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) {
- if (m_pList)
- m_pList->Select(m_pList->GetItemIndex(point));
- }
-
- if (m_bMouseDown) {
- if (m_pList)
- m_pList->OnMouseMove(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- }
-
- return TRUE;
-}
-
-void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-
- FX_FLOAT fPos;
-
- switch (msg) {
- case PNM_SETSCROLLINFO:
- switch (wParam) {
- case SBT_VSCROLL:
- if (CPWL_Wnd* pChild = GetVScrollBar()) {
- pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam);
- }
- break;
- }
- break;
- case PNM_SETSCROLLPOS:
- switch (wParam) {
- case SBT_VSCROLL:
- if (CPWL_Wnd* pChild = GetVScrollBar()) {
- pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
- }
- break;
- }
- break;
- case PNM_SCROLLWINDOW:
- fPos = *(FX_FLOAT*)lParam;
- switch (wParam) {
- case SBT_VSCROLL:
- if (m_pList)
- m_pList->SetScrollPos(CFX_FloatPoint(0, fPos));
- break;
- }
- break;
- }
-}
-
-void CPWL_ListBox::KillFocus() {
- CPWL_Wnd::KillFocus();
-}
-
-void CPWL_ListBox::RePosChildWnd() {
- CPWL_Wnd::RePosChildWnd();
-
- if (m_pList)
- m_pList->SetPlateRect(GetListRect());
-}
-
-void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown,
- FX_BOOL& bExit,
- FX_DWORD nFlag) {
- if (!m_pFillerNotify)
- return;
-
- FX_BOOL bRC = TRUE;
- CFX_WideString swChange = GetText();
- CFX_WideString strChangeEx;
- int nSelStart = 0;
- int nSelEnd = swChange.GetLength();
- m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), swChange, strChangeEx,
- nSelStart, nSelEnd, bKeyDown, bRC, bExit,
- nFlag);
-}
-
-CFX_FloatRect CPWL_ListBox::GetFocusRect() const {
- if (m_pList && m_pList->IsMultipleSel()) {
- CFX_FloatRect rcCaret = m_pList->GetItemRect(m_pList->GetCaret());
- rcCaret.Intersect(GetClientRect());
- return rcCaret;
- }
-
- return CPWL_Wnd::GetFocusRect();
-}
-
-void CPWL_ListBox::AddString(const FX_WCHAR* str) {
- if (m_pList) {
- m_pList->AddString(str);
- }
-}
-
-CFX_WideString CPWL_ListBox::GetText() const {
- if (m_pList)
- return m_pList->GetText();
-
- return L"";
-}
-
-void CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize) {
- if (m_pList)
- m_pList->SetFontSize(fFontSize);
-}
-
-FX_FLOAT CPWL_ListBox::GetFontSize() const {
- if (m_pList)
- return m_pList->GetFontSize();
- return 0.0f;
-}
-
-void CPWL_ListBox::Select(int32_t nItemIndex) {
- if (m_pList)
- m_pList->Select(nItemIndex);
-}
-
-void CPWL_ListBox::SetCaret(int32_t nItemIndex) {
- if (m_pList)
- m_pList->SetCaret(nItemIndex);
-}
-
-void CPWL_ListBox::SetTopVisibleIndex(int32_t nItemIndex) {
- if (m_pList)
- m_pList->SetTopItem(nItemIndex);
-}
-
-void CPWL_ListBox::ScrollToListItem(int32_t nItemIndex) {
- if (m_pList)
- m_pList->ScrollToListItem(nItemIndex);
-}
-
-void CPWL_ListBox::ResetContent() {
- if (m_pList)
- m_pList->Empty();
-}
-
-void CPWL_ListBox::Reset() {
- if (m_pList)
- m_pList->Cancel();
-}
-
-FX_BOOL CPWL_ListBox::IsMultipleSel() const {
- if (m_pList)
- return m_pList->IsMultipleSel();
-
- return FALSE;
-}
-
-int32_t CPWL_ListBox::GetCaretIndex() const {
- if (m_pList)
- return m_pList->GetCaret();
-
- return -1;
-}
-
-int32_t CPWL_ListBox::GetCurSel() const {
- if (m_pList)
- return m_pList->GetSelect();
-
- return -1;
-}
-
-FX_BOOL CPWL_ListBox::IsItemSelected(int32_t nItemIndex) const {
- if (m_pList)
- return m_pList->IsItemSelected(nItemIndex);
-
- return FALSE;
-}
-
-int32_t CPWL_ListBox::GetTopVisibleIndex() const {
- if (m_pList) {
- m_pList->ScrollToListItem(m_pList->GetFirstSelected());
- return m_pList->GetTopItem();
- }
-
- return -1;
-}
-
-int32_t CPWL_ListBox::GetCount() const {
- if (m_pList)
- return m_pList->GetCount();
-
- return 0;
-}
-
-int32_t CPWL_ListBox::FindNext(int32_t nIndex, FX_WCHAR nChar) const {
- if (m_pList)
- return m_pList->FindNext(nIndex, nChar);
-
- return nIndex;
-}
-
-CFX_FloatRect CPWL_ListBox::GetContentRect() const {
- if (m_pList)
- return m_pList->GetContentRect();
-
- return CFX_FloatRect();
-}
-
-FX_FLOAT CPWL_ListBox::GetFirstHeight() const {
- if (m_pList)
- return m_pList->GetFirstHeight();
-
- return 0.0f;
-}
-
-CFX_FloatRect CPWL_ListBox::GetListRect() const {
- return CPWL_Utils::DeflateRect(
- GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
-}
-
-FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta,
- const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (!m_pList)
- return FALSE;
-
- if (zDelta < 0) {
- m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- } else {
- m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
- }
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(FALSE, bExit, nFlag);
- return TRUE;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp b/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp
deleted file mode 100644
index 7c2c1f4d17..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_ListCtrl.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-CPWL_ListCtrl::CPWL_ListCtrl()
- : m_rcContent(0, 0, 0, 0),
- m_ptScroll(0, 0),
- m_fItemSpace(0.0f),
- m_fTopSpace(0.0f),
- m_fBottomSpace(0.0f) {}
-
-CPWL_ListCtrl::~CPWL_ListCtrl() {}
-
-void CPWL_ListCtrl::SetScrollPos(const CFX_FloatPoint& point) {
- m_ptScroll = point;
-
- if (m_ptScroll.x < m_rcContent.left)
- m_ptScroll.x = m_rcContent.left;
-
- if (m_ptScroll.x > m_rcContent.right)
- m_ptScroll.x = m_rcContent.right;
-
- if (m_ptScroll.y > m_rcContent.top)
- m_ptScroll.y = m_rcContent.top;
-
- if (m_ptScroll.y < m_rcContent.bottom)
- m_ptScroll.y = m_rcContent.bottom;
-}
-
-CFX_FloatPoint CPWL_ListCtrl::GetScrollPos() const {
- return m_ptScroll;
-}
-
-CFX_FloatRect CPWL_ListCtrl::GetScrollArea() const {
- return m_rcContent;
-}
-
-void CPWL_ListCtrl::ResetFace() {
- ResetAll(FALSE, 0);
-}
-
-void CPWL_ListCtrl::ResetContent(int32_t nStart) {
- if (nStart < 0)
- nStart = 0;
- if (nStart >= 0 && nStart < m_aChildren.GetSize())
- ResetAll(TRUE, nStart);
-}
-
-FX_FLOAT CPWL_ListCtrl::GetContentsHeight(FX_FLOAT fLimitWidth) {
- FX_FLOAT fRet = m_fTopSpace;
-
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
-
- if (fLimitWidth > fBorderWidth * 2) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- FX_FLOAT fLeft = pChild->GetItemLeftMargin();
- FX_FLOAT fRight = pChild->GetItemRightMargin();
-
- fRet += pChild->GetItemHeight(fLimitWidth - fBorderWidth * 2 - fLeft -
- fRight);
- fRet += m_fItemSpace;
- }
- }
-
- fRet -= m_fItemSpace;
- }
-
- fRet += m_fBottomSpace;
-
- return fRet;
-}
-
-void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) {
- CFX_FloatRect rcClient = GetClientRect();
-
- FX_FLOAT fWidth = rcClient.Width();
-
- FX_FLOAT fy = 0.0f - m_fTopSpace;
-
- if (nStart - 1 >= 0 && nStart - 1 < m_aChildren.GetSize())
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart - 1))
- fy = pChild->GetWindowRect().bottom - m_fItemSpace;
-
- for (int32_t i = nStart, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- FX_FLOAT fLeft = pChild->GetItemLeftMargin();
- FX_FLOAT fRight = pChild->GetItemRightMargin();
-
- pChild->SetChildMatrix(CFX_Matrix(1, 0, 0, 1,
- rcClient.left - m_ptScroll.x,
- rcClient.top - m_ptScroll.y));
-
- if (bMove) {
- FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight);
- pChild->Move(
- CFX_FloatRect(fLeft, fy - fItemHeight, fWidth - fRight, fy), TRUE,
- FALSE);
- fy -= fItemHeight;
- fy -= m_fItemSpace;
- }
- }
- }
-
- fy += m_fItemSpace;
-
- fy -= m_fBottomSpace;
-
- if (bMove) {
- m_rcContent.left = 0;
- m_rcContent.top = 0;
- m_rcContent.right = fWidth;
- m_rcContent.bottom = fy;
- }
-}
-
-void CPWL_ListCtrl::SetItemSpace(FX_FLOAT fSpace) {
- m_fItemSpace = fSpace;
-}
-
-void CPWL_ListCtrl::SetTopSpace(FX_FLOAT fSpace) {
- m_fTopSpace = fSpace;
-}
-
-void CPWL_ListCtrl::SetBottomSpace(FX_FLOAT fSpace) {
- m_fBottomSpace = fSpace;
-}
-
-void CPWL_ListCtrl::RePosChildWnd() {
- ResetFace();
-}
-
-void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- pDevice->SaveState();
- CFX_FloatRect rcClient = GetClientRect();
- CFX_FloatRect rcTemp = rcClient;
- pUser2Device->TransformRect(rcTemp);
- pDevice->SetClip_Rect(FX_RECT((int32_t)rcTemp.left, (int32_t)rcTemp.bottom,
- (int32_t)rcTemp.right, (int32_t)rcTemp.top));
-
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- CFX_FloatRect rcChild = pChild->ChildToParent(pChild->GetWindowRect());
- if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) {
- CFX_Matrix mt = pChild->GetChildMatrix();
- if (mt.IsIdentity()) {
- pChild->DrawAppearance(pDevice, pUser2Device);
- } else {
- mt.Concat(*pUser2Device);
- pChild->DrawAppearance(pDevice, &mt);
- }
- }
- }
- }
-
- pDevice->RestoreState();
-}
-
-int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (pItem == m_aChildren.GetAt(i))
- return i;
- }
-
- return -1;
-}
-
-CFX_FloatPoint CPWL_ListCtrl::InToOut(const CFX_FloatPoint& point) const {
- CFX_FloatRect rcClient = GetClientRect();
-
- return CFX_FloatPoint(point.x + rcClient.left - m_ptScroll.x,
- point.y + rcClient.top - m_ptScroll.y);
-}
-
-CFX_FloatPoint CPWL_ListCtrl::OutToIn(const CFX_FloatPoint& point) const {
- CFX_FloatRect rcClient = GetClientRect();
-
- return CFX_FloatPoint(point.x - rcClient.left + m_ptScroll.x,
- point.y - rcClient.top + m_ptScroll.y);
-}
-
-CFX_FloatRect CPWL_ListCtrl::InToOut(const CFX_FloatRect& rect) const {
- CFX_FloatRect rcClient = GetClientRect();
-
- return CFX_FloatRect(rect.left + rcClient.left - m_ptScroll.x,
- rect.bottom + rcClient.top - m_ptScroll.y,
- rect.right + rcClient.left - m_ptScroll.x,
- rect.top + rcClient.top - m_ptScroll.y);
-}
-
-CFX_FloatRect CPWL_ListCtrl::OutToIn(const CFX_FloatRect& rect) const {
- CFX_FloatRect rcClient = GetClientRect();
-
- return CFX_FloatRect(rect.left - rcClient.left + m_ptScroll.x,
- rect.bottom - rcClient.top + m_ptScroll.y,
- rect.right - rcClient.left + m_ptScroll.x,
- rect.top - rcClient.top + m_ptScroll.y);
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Note.cpp b/fpdfsdk/src/pdfwindow/PWL_Note.cpp
deleted file mode 100644
index 7ba6f6ad66..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Note.cpp
+++ /dev/null
@@ -1,1512 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Note.h"
-
-#include "fpdfsdk/include/pdfwindow/PWL_Button.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Caret.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Edit.h"
-#include "fpdfsdk/include/pdfwindow/PWL_EditCtrl.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Label.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ListCtrl.h"
-#include "fpdfsdk/include/pdfwindow/PWL_ScrollBar.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-#define POPUP_ITEM_HEAD_BOTTOM 3.0f
-#define POPUP_ITEM_BOTTOMWIDTH 1.0f
-#define POPUP_ITEM_SIDEMARGIN 3.0f
-#define POPUP_ITEM_SPACE 4.0f
-#define POPUP_ITEM_TEXT_INDENT 2.0f
-#define POPUP_ITEM_BORDERCOLOR \
- CPWL_Color(COLORTYPE_RGB, 80 / 255.0f, 80 / 255.0f, 80 / 255.0f)
-
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
-
-CPWL_Note_Options::CPWL_Note_Options() : m_pText(NULL) {}
-
-CPWL_Note_Options::~CPWL_Note_Options() {}
-
-void CPWL_Note_Options::SetTextColor(const CPWL_Color& color) {
- CPWL_Wnd::SetTextColor(color);
-
- if (m_pText)
- m_pText->SetTextColor(color);
-}
-
-void CPWL_Note_Options::RePosChildWnd() {
- if (IsValid()) {
- CFX_FloatRect rcClient = GetClientRect();
-
- if (rcClient.Width() > 15.0f) {
- rcClient.right -= 15.0f;
- m_pText->Move(rcClient, TRUE, FALSE);
- m_pText->SetVisible(TRUE);
- } else {
- m_pText->Move(CFX_FloatRect(0, 0, 0, 0), TRUE, FALSE);
- m_pText->SetVisible(FALSE);
- }
- }
-}
-
-void CPWL_Note_Options::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- m_pText = new CPWL_Label;
- PWL_CREATEPARAM tcp = cp;
- tcp.pParentWnd = this;
- tcp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- m_pText->Create(tcp);
-}
-
-void CPWL_Note_Options::SetText(const CFX_WideString& sText) {
- m_pText->SetText(sText.c_str());
-}
-
-void CPWL_Note_Options::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
-
- CFX_FloatRect rcClient = GetClientRect();
- rcClient.left = rcClient.right - 15.0f;
-
- CFX_FloatPoint ptCenter =
- CFX_FloatPoint((rcClient.left + rcClient.right) * 0.5f,
- (rcClient.top + rcClient.bottom) * 0.5f);
-
- CFX_FloatPoint pt1(ptCenter.x - 2.0f, ptCenter.y + 2.0f * 0.5f);
- CFX_FloatPoint pt2(ptCenter.x + 2.0f, ptCenter.y + 2.0f * 0.5f);
- CFX_FloatPoint pt3(ptCenter.x, ptCenter.y - 3.0f * 0.5f);
-
- CFX_PathData path;
-
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
-
- pDevice->DrawPath(
- &path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), 0,
- FXFILL_ALTERNATE);
-}
-
-CFX_FloatRect CPWL_Note_Options::GetContentRect() const {
- CFX_FloatRect rcText = m_pText->GetContentRect();
- rcText.right += 15.0f;
- return rcText;
-}
-
-CPWL_Note_Edit::CPWL_Note_Edit()
- : m_bEnableNotify(TRUE),
- m_fOldItemHeight(0.0f),
- m_bSizeChanged(FALSE),
- m_fOldMin(0.0f),
- m_fOldMax(0.0f) {}
-
-CPWL_Note_Edit::~CPWL_Note_Edit() {}
-
-void CPWL_Note_Edit::RePosChildWnd() {
- m_bEnableNotify = FALSE;
- CPWL_Edit::RePosChildWnd();
- m_bEnableNotify = TRUE;
-
- m_fOldItemHeight = GetContentRect().Height();
-}
-
-void CPWL_Note_Edit::SetText(const FX_WCHAR* csText) {
- m_bEnableNotify = FALSE;
- CPWL_Edit::SetText(csText);
- m_bEnableNotify = TRUE;
- m_fOldItemHeight = GetContentRect().Height();
-}
-
-void CPWL_Note_Edit::OnSetFocus() {
- m_bEnableNotify = FALSE;
- CPWL_Edit::OnSetFocus();
- m_bEnableNotify = TRUE;
-
- EnableSpellCheck(TRUE);
-}
-
-void CPWL_Note_Edit::OnKillFocus() {
- EnableSpellCheck(FALSE);
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) {
- ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
-
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pGrand;
-
- pNoteItem->OnContentsValidate();
- }
- }
-
- CPWL_Edit::OnKillFocus();
-}
-
-void CPWL_Note_Edit::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- if (m_bEnableNotify) {
- if (wParam == SBT_VSCROLL) {
- switch (msg) {
- case PNM_SETSCROLLINFO:
- if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) {
- if (!IsFloatEqual(pInfo->fContentMax, m_fOldMax) ||
- !IsFloatEqual(pInfo->fContentMin, m_fOldMin)) {
- m_bSizeChanged = TRUE;
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
-
- m_fOldMax = pInfo->fContentMax;
- m_fOldMin = pInfo->fContentMin;
- return;
- }
- }
- }
- }
- }
-
- CPWL_Edit::OnNotify(pWnd, msg, wParam, lParam);
-
- if (m_bEnableNotify) {
- switch (msg) {
- case PNM_SETCARETINFO:
- if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
- PWL_CARET_INFO newInfo = *pInfo;
- newInfo.bVisible = TRUE;
- newInfo.ptHead = ChildToParent(pInfo->ptHead);
- newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
- }
- }
- break;
- }
- }
-}
-
-FX_FLOAT CPWL_Note_Edit::GetItemHeight(FX_FLOAT fLimitWidth) {
- if (fLimitWidth > 0) {
- if (!m_bSizeChanged)
- return m_fOldItemHeight;
-
- m_bSizeChanged = FALSE;
-
- EnableNotify(FALSE);
- EnableRefresh(FALSE);
- m_pEdit->EnableNotify(FALSE);
-
- Move(CFX_FloatRect(0, 0, fLimitWidth, 0), TRUE, FALSE);
- FX_FLOAT fRet = GetContentRect().Height();
-
- m_pEdit->EnableNotify(TRUE);
- EnableNotify(TRUE);
- EnableRefresh(TRUE);
-
- return fRet;
- }
-
- return 0;
-}
-
-FX_FLOAT CPWL_Note_Edit::GetItemLeftMargin() {
- return POPUP_ITEM_TEXT_INDENT;
-}
-
-FX_FLOAT CPWL_Note_Edit::GetItemRightMargin() {
- return POPUP_ITEM_TEXT_INDENT;
-}
-
-CPWL_Note_LBBox::CPWL_Note_LBBox() {}
-
-CPWL_Note_LBBox::~CPWL_Note_LBBox() {}
-
-void CPWL_Note_LBBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CFX_FloatRect rcClient = GetClientRect();
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
-
- CFX_PathData pathCross;
-
- pathCross.SetPointCount(4);
- pathCross.SetPoint(0, rcClient.left, rcClient.top, FXPT_MOVETO);
- pathCross.SetPoint(1, rcClient.right, rcClient.bottom, FXPT_LINETO);
- pathCross.SetPoint(2, rcClient.left,
- rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO);
- pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f,
- rcClient.bottom, FXPT_LINETO);
-
- pDevice->DrawPath(
- &pathCross, pUser2Device, &gsd, 0,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- FXFILL_ALTERNATE);
-}
-
-CPWL_Note_RBBox::CPWL_Note_RBBox() {}
-
-CPWL_Note_RBBox::~CPWL_Note_RBBox() {}
-
-void CPWL_Note_RBBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CFX_FloatRect rcClient = GetClientRect();
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
-
- CFX_PathData pathCross;
-
- pathCross.SetPointCount(4);
- pathCross.SetPoint(0, rcClient.right, rcClient.top, FXPT_MOVETO);
- pathCross.SetPoint(1, rcClient.left, rcClient.bottom, FXPT_LINETO);
- pathCross.SetPoint(2, rcClient.right,
- rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO);
- pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f,
- rcClient.bottom, FXPT_LINETO);
-
- pDevice->DrawPath(
- &pathCross, pUser2Device, &gsd, 0,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- FXFILL_ALTERNATE);
-}
-
-CPWL_Note_Icon::CPWL_Note_Icon() : m_nType(0) {}
-
-CPWL_Note_Icon::~CPWL_Note_Icon() {}
-
-void CPWL_Note_Icon::SetIconType(int32_t nType) {
- m_nType = nType;
-}
-
-void CPWL_Note_Icon::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nType, GetClientRect(),
- GetBackgroundColor(), PWL_DEFAULT_BLACKCOLOR,
- GetTransparency());
-}
-
-CPWL_Note_CloseBox::CPWL_Note_CloseBox() : m_bMouseDown(FALSE) {}
-
-CPWL_Note_CloseBox::~CPWL_Note_CloseBox() {}
-
-void CPWL_Note_CloseBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Button::DrawThisAppearance(pDevice, pUser2Device);
-
- CFX_FloatRect rcClient = GetClientRect();
- rcClient = CPWL_Utils::DeflateRect(rcClient, 2.0f);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
-
- CFX_PathData pathCross;
-
- if (m_bMouseDown) {
- rcClient.left += 0.5f;
- rcClient.right += 0.5f;
- rcClient.top -= 0.5f;
- rcClient.bottom -= 0.5f;
- }
-
- pathCross.SetPointCount(4);
- pathCross.SetPoint(0, rcClient.left, rcClient.bottom, FXPT_MOVETO);
- pathCross.SetPoint(1, rcClient.right, rcClient.top, FXPT_LINETO);
- pathCross.SetPoint(2, rcClient.left, rcClient.top, FXPT_MOVETO);
- pathCross.SetPoint(3, rcClient.right, rcClient.bottom, FXPT_LINETO);
-
- pDevice->DrawPath(
- &pathCross, pUser2Device, &gsd, 0,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- FXFILL_ALTERNATE);
-}
-
-FX_BOOL CPWL_Note_CloseBox::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- SetBorderStyle(PBS_INSET);
- InvalidateRect(NULL);
-
- m_bMouseDown = TRUE;
-
- return CPWL_Button::OnLButtonDown(point, nFlag);
-}
-
-FX_BOOL CPWL_Note_CloseBox::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- m_bMouseDown = FALSE;
-
- SetBorderStyle(PBS_BEVELED);
- InvalidateRect(NULL);
-
- return CPWL_Button::OnLButtonUp(point, nFlag);
-}
-
-CPWL_Note_Contents::CPWL_Note_Contents() : m_pEdit(NULL) {}
-
-CPWL_Note_Contents::~CPWL_Note_Contents() {}
-
-CFX_ByteString CPWL_Note_Contents::GetClassName() const {
- return "CPWL_Note_Contents";
-}
-
-void CPWL_Note_Contents::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- m_pEdit = new CPWL_Note_Edit;
- PWL_CREATEPARAM ecp = cp;
- ecp.pParentWnd = this;
- ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_MULTILINE | PES_AUTORETURN |
- PES_TEXTOVERFLOW | PES_UNDO | PES_SPELLCHECK;
-
- m_pEdit->EnableNotify(FALSE);
- m_pEdit->Create(ecp);
- m_pEdit->EnableNotify(TRUE);
-}
-
-void CPWL_Note_Contents::SetText(const CFX_WideString& sText) {
- if (m_pEdit) {
- m_pEdit->EnableNotify(FALSE);
- m_pEdit->SetText(sText.c_str());
- m_pEdit->EnableNotify(TRUE);
- OnNotify(m_pEdit, PNM_NOTEEDITCHANGED, 0, 0);
- }
-}
-
-CFX_WideString CPWL_Note_Contents::GetText() const {
- if (m_pEdit)
- return m_pEdit->GetText();
-
- return L"";
-}
-
-CPWL_NoteItem* CPWL_Note_Contents::CreateSubItem() {
- CPWL_NoteItem* pNoteItem = new CPWL_NoteItem;
- PWL_CREATEPARAM icp = GetCreationParam();
- icp.pParentWnd = this;
- icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND;
- pNoteItem->Create(icp);
-
- pNoteItem->OnCreateNoteItem();
-
- pNoteItem->ResetSubjectName(m_aChildren.GetSize() - 1);
-
- FX_SYSTEMTIME st;
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- st = pSH->GetLocalTime();
- pNoteItem->SetDateTime(st);
-
- pNoteItem->SetContents(L"");
-
- OnNotify(pNoteItem, PNM_NOTEEDITCHANGED, 0, 0);
-
- return pNoteItem;
-}
-
-int32_t CPWL_Note_Contents::CountSubItems() const {
- return m_aChildren.GetSize() - 1;
-}
-
-IPWL_NoteItem* CPWL_Note_Contents::GetSubItems(int32_t index) const {
- int32_t nIndex = index + 1;
-
- if (nIndex > 0 && nIndex < m_aChildren.GetSize()) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(nIndex)) {
- ASSERT(pChild->GetClassName() == "CPWL_NoteItem");
- CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild;
- return pItem;
- }
- }
- return NULL;
-}
-
-void CPWL_Note_Contents::DeleteSubItem(IPWL_NoteItem* pNoteItem) {
- int32_t nIndex = GetItemIndex((CPWL_NoteItem*)pNoteItem);
-
- if (nIndex > 0) {
- if (CPWL_NoteItem* pPWLNoteItem = (CPWL_NoteItem*)pNoteItem) {
- pPWLNoteItem->KillFocus();
- pPWLNoteItem->Destroy();
- delete pPWLNoteItem;
- }
-
- for (int32_t i = nIndex, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- ASSERT(pChild->GetClassName() == "CPWL_NoteItem");
- CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild;
- pItem->ResetSubjectName(i);
- }
- }
-
- OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
-}
-
-IPWL_NoteItem* CPWL_Note_Contents::GetHitNoteItem(const CFX_FloatPoint& point) {
- CFX_FloatPoint pt = ParentToChild(point);
-
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- if (pChild->GetClassName() == "CPWL_NoteItem") {
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
- if (IPWL_NoteItem* pRet = pNoteItem->GetHitNoteItem(pt))
- return pRet;
- }
- }
- }
- return NULL;
-}
-
-void CPWL_Note_Contents::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- switch (msg) {
- case PNM_NOTEEDITCHANGED: {
- int32_t nIndex = GetItemIndex(pWnd);
- if (nIndex < 0)
- nIndex = 0;
-
- m_pEdit->EnableNotify(FALSE);
- ResetContent(nIndex);
- m_pEdit->EnableNotify(TRUE);
-
- for (int32_t i = nIndex + 1, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- pChild->OnNotify(this, PNM_NOTERESET, 0, 0);
- }
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
- }
- return;
- case PNM_SCROLLWINDOW:
- SetScrollPos(CFX_FloatPoint(0.0f, *(FX_FLOAT*)lParam));
- ResetFace();
- InvalidateRect(NULL);
- return;
- case PNM_SETCARETINFO:
- if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
- PWL_CARET_INFO newInfo = *pInfo;
- newInfo.bVisible = TRUE;
- newInfo.ptHead = ChildToParent(pInfo->ptHead);
- newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
- }
- }
- return;
- case PNM_NOTERESET: {
- m_pEdit->EnableNotify(FALSE);
- ResetContent(0);
- m_pEdit->EnableNotify(TRUE);
-
- for (int32_t i = 1, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- pChild->OnNotify(this, PNM_NOTERESET, 0, 0);
- }
-
- m_pEdit->EnableNotify(FALSE);
- ResetContent(0);
- m_pEdit->EnableNotify(TRUE);
- }
- return;
- }
-
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-}
-
-FX_BOOL CPWL_Note_Contents::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (CPWL_Wnd::OnLButtonDown(point, nFlag))
- return TRUE;
-
- if (!m_pEdit->IsFocused()) {
- m_pEdit->SetFocus();
- }
-
- return TRUE;
-}
-
-void CPWL_Note_Contents::SetEditFocus(FX_BOOL bLast) {
- if (!m_pEdit->IsFocused()) {
- m_pEdit->SetFocus();
- m_pEdit->SetCaret(bLast ? m_pEdit->GetTotalWords() : 0);
- }
-}
-
-CPWL_Edit* CPWL_Note_Contents::GetEdit() const {
- return m_pEdit;
-}
-
-void CPWL_Note_Contents::EnableModify(FX_BOOL bEnabled) {
- if (!bEnabled)
- m_pEdit->AddFlag(PWS_READONLY);
- else
- m_pEdit->RemoveFlag(PWS_READONLY);
-
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- if (pChild->GetClassName() == "CPWL_NoteItem") {
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
- pNoteItem->EnableModify(bEnabled);
- }
- }
- }
-}
-
-void CPWL_Note_Contents::EnableRead(FX_BOOL bEnabled) {
- if (!bEnabled)
- m_pEdit->AddFlag(PES_NOREAD);
- else
- m_pEdit->RemoveFlag(PES_NOREAD);
-
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- if (pChild->GetClassName() == "CPWL_NoteItem") {
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
- pNoteItem->EnableRead(bEnabled);
- }
- }
- }
-}
-
-CPWL_NoteItem::CPWL_NoteItem()
- : m_pSubject(NULL),
- m_pDateTime(NULL),
- m_pContents(NULL),
- m_pPrivateData(NULL),
- m_sAuthor(L""),
- m_fOldItemHeight(0.0f),
- m_bSizeChanged(FALSE),
- m_bAllowModify(TRUE) {}
-
-CPWL_NoteItem::~CPWL_NoteItem() {}
-
-CFX_ByteString CPWL_NoteItem::GetClassName() const {
- return "CPWL_NoteItem";
-}
-
-void CPWL_NoteItem::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- CPWL_Color sTextColor;
-
- if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor()))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- m_pSubject = new CPWL_Label;
- PWL_CREATEPARAM scp = cp;
- scp.pParentWnd = this;
- scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP;
- scp.sTextColor = sTextColor;
- m_pSubject->Create(scp);
-
- m_pDateTime = new CPWL_Label;
- PWL_CREATEPARAM dcp = cp;
- dcp.pParentWnd = this;
- dcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_RIGHT | PES_TOP;
- dcp.sTextColor = sTextColor;
- m_pDateTime->Create(dcp);
-
- m_pContents = new CPWL_Note_Contents;
- PWL_CREATEPARAM ccp = cp;
- ccp.pParentWnd = this;
- ccp.sBackgroundColor =
- CPWL_Color(COLORTYPE_RGB, 240 / 255.0f, 240 / 255.0f, 240 / 255.0f);
- ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BACKGROUND;
- m_pContents->Create(ccp);
- m_pContents->SetItemSpace(POPUP_ITEM_SPACE);
- m_pContents->SetTopSpace(POPUP_ITEM_SPACE);
- m_pContents->SetBottomSpace(POPUP_ITEM_SPACE);
-}
-
-void CPWL_NoteItem::RePosChildWnd() {
- if (IsValid()) {
- CFX_FloatRect rcClient = GetClientRect();
-
- CFX_FloatRect rcSubject = rcClient;
- rcSubject.left += POPUP_ITEM_TEXT_INDENT;
- rcSubject.top = rcClient.top;
- rcSubject.right =
- PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f,
- rcClient.right);
- rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height();
- rcSubject.Normalize();
- m_pSubject->Move(rcSubject, TRUE, FALSE);
- m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject));
-
- CFX_FloatRect rcDate = rcClient;
- rcDate.right -= POPUP_ITEM_TEXT_INDENT;
- rcDate.left =
- PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f,
- rcSubject.right);
- rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height();
- rcDate.Normalize();
- m_pDateTime->Move(rcDate, TRUE, FALSE);
- m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate));
-
- CFX_FloatRect rcContents = rcClient;
- rcContents.left += 1.0f;
- rcContents.right -= 1.0f;
- rcContents.top = rcDate.bottom - POPUP_ITEM_HEAD_BOTTOM;
- rcContents.bottom += POPUP_ITEM_BOTTOMWIDTH;
- rcContents.Normalize();
- m_pContents->Move(rcContents, TRUE, FALSE);
- m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents));
- }
-
- SetClipRect(CPWL_Utils::InflateRect(GetWindowRect(), 1.0f));
-}
-
-void CPWL_NoteItem::SetPrivateData(void* pData) {
- m_pPrivateData = pData;
-}
-
-void CPWL_NoteItem::SetBkColor(const CPWL_Color& color) {
- CPWL_Color sBK = color;
- SetBackgroundColor(sBK);
-
- CPWL_Color sTextColor;
-
- if (CPWL_Utils::IsBlackOrWhite(sBK))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- SetTextColor(sTextColor);
- if (m_pSubject)
- m_pSubject->SetTextColor(sTextColor);
- if (m_pDateTime)
- m_pDateTime->SetTextColor(sTextColor);
-
- InvalidateRect(nullptr);
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnSetBkColor(this);
- }
-}
-
-void CPWL_NoteItem::SetSubjectName(const CFX_WideString& sName) {
- if (m_pSubject) {
- m_pSubject->SetText(sName.c_str());
- }
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnSetSubjectName(this);
- }
-}
-
-void CPWL_NoteItem::SetAuthorName(const CFX_WideString& sName) {
- m_sAuthor = sName;
- ResetSubjectName(-1);
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnSetAuthorName(this);
- }
-}
-
-void CPWL_NoteItem::ResetSubjectName(int32_t nItemIndex) {
- if (nItemIndex < 0) {
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- ASSERT(pParent->GetClassName() == "CPWL_Note_Contents");
-
- CPWL_Note_Contents* pContents = (CPWL_Note_Contents*)pParent;
- nItemIndex = pContents->GetItemIndex(this);
- }
- }
-
- const CPWL_Note* pNote = GetNote();
- CFX_WideString sSubject;
- sSubject.Format(pNote->GetReplyString().c_str(), nItemIndex);
-
- if (!m_sAuthor.IsEmpty()) {
- sSubject += L" - ";
- sSubject += m_sAuthor;
- }
- SetSubjectName(sSubject);
- RePosChildWnd();
-}
-
-void CPWL_NoteItem::SetDateTime(FX_SYSTEMTIME time) {
- m_dtNote = time;
-
- CFX_WideString swTime;
- swTime.Format(L"%04d-%02d-%02d %02d:%02d:%02d", time.wYear, time.wMonth,
- time.wDay, time.wHour, time.wMinute, time.wSecond);
- if (m_pDateTime) {
- m_pDateTime->SetText(swTime.c_str());
- }
-
- RePosChildWnd();
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnSetDateTime(this);
- }
-}
-
-void CPWL_NoteItem::SetContents(const CFX_WideString& sContents) {
- if (m_pContents) {
- m_pContents->SetText(sContents);
- }
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnSetContents(this);
- }
-}
-
-CPWL_NoteItem* CPWL_NoteItem::GetParentNoteItem() const {
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) {
- ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
- return (CPWL_NoteItem*)pGrand;
- }
- }
-
- return NULL;
-}
-
-IPWL_NoteItem* CPWL_NoteItem::GetParentItem() const {
- return GetParentNoteItem();
-}
-
-CPWL_Edit* CPWL_NoteItem::GetEdit() const {
- if (m_pContents)
- return m_pContents->GetEdit();
- return NULL;
-}
-
-void* CPWL_NoteItem::GetPrivateData() const {
- return m_pPrivateData;
-}
-
-CFX_WideString CPWL_NoteItem::GetAuthorName() const {
- return m_sAuthor;
-}
-
-CPWL_Color CPWL_NoteItem::GetBkColor() const {
- return GetBackgroundColor();
-}
-
-CFX_WideString CPWL_NoteItem::GetContents() const {
- if (m_pContents)
- return m_pContents->GetText();
-
- return L"";
-}
-
-FX_SYSTEMTIME CPWL_NoteItem::GetDateTime() const {
- return m_dtNote;
-}
-
-CFX_WideString CPWL_NoteItem::GetSubjectName() const {
- if (m_pSubject)
- return m_pSubject->GetText();
-
- return L"";
-}
-
-CPWL_NoteItem* CPWL_NoteItem::CreateNoteItem() {
- if (m_pContents)
- return m_pContents->CreateSubItem();
-
- return NULL;
-}
-
-IPWL_NoteItem* CPWL_NoteItem::CreateSubItem() {
- return CreateNoteItem();
-}
-
-int32_t CPWL_NoteItem::CountSubItems() const {
- if (m_pContents)
- return m_pContents->CountSubItems();
-
- return 0;
-}
-
-IPWL_NoteItem* CPWL_NoteItem::GetSubItems(int32_t index) const {
- if (m_pContents)
- return m_pContents->GetSubItems(index);
-
- return NULL;
-}
-
-void CPWL_NoteItem::DeleteSubItem(IPWL_NoteItem* pNoteItem) {
- KillFocus();
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnItemDelete(pNoteItem);
- }
-
- if (m_pContents)
- m_pContents->DeleteSubItem(pNoteItem);
-}
-
-IPWL_NoteItem* CPWL_NoteItem::GetHitNoteItem(const CFX_FloatPoint& point) {
- CFX_FloatPoint pt = ParentToChild(point);
-
- if (WndHitTest(pt)) {
- if (m_pContents) {
- if (IPWL_NoteItem* pNoteItem = m_pContents->GetHitNoteItem(pt))
- return pNoteItem;
- }
-
- return this;
- }
-
- return NULL;
-}
-
-IPWL_NoteItem* CPWL_NoteItem::GetFocusedNoteItem() const {
- if (const CPWL_Wnd* pWnd = GetFocused()) {
- if (pWnd->GetClassName() == "CPWL_Edit") {
- if (CPWL_Wnd* pParent = pWnd->GetParentWindow()) {
- ASSERT(pParent->GetClassName() == "CPWL_Note_Contents");
-
- if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) {
- ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
- return (CPWL_NoteItem*)pGrand;
- }
- }
- }
- }
-
- return NULL;
-}
-
-FX_FLOAT CPWL_NoteItem::GetItemHeight(FX_FLOAT fLimitWidth) {
- if (fLimitWidth > 0) {
- if (!m_bSizeChanged)
- return m_fOldItemHeight;
-
- m_bSizeChanged = FALSE;
-
- FX_FLOAT fRet = m_pDateTime->GetContentRect().Height();
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- if (fLimitWidth > fBorderWidth * 2)
- fRet += m_pContents->GetContentsHeight(fLimitWidth - fBorderWidth * 2);
- fRet += POPUP_ITEM_HEAD_BOTTOM + POPUP_ITEM_BOTTOMWIDTH + fBorderWidth * 2;
-
- return m_fOldItemHeight = fRet;
- }
-
- return 0;
-}
-
-FX_FLOAT CPWL_NoteItem::GetItemLeftMargin() {
- return POPUP_ITEM_SIDEMARGIN;
-}
-
-FX_FLOAT CPWL_NoteItem::GetItemRightMargin() {
- return POPUP_ITEM_SIDEMARGIN;
-}
-
-FX_BOOL CPWL_NoteItem::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) {
- SetNoteFocus(FALSE);
- }
-
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_NoteItem::OnRButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) {
- SetNoteFocus(FALSE);
- PopupNoteItemMenu(point);
-
- return TRUE;
- }
-
- return CPWL_Wnd::OnRButtonUp(point, nFlag);
-}
-
-void CPWL_NoteItem::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- switch (msg) {
- case PNM_NOTEEDITCHANGED:
- m_bSizeChanged = TRUE;
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
- return;
- case PNM_SETCARETINFO:
- if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
- PWL_CARET_INFO newInfo = *pInfo;
- newInfo.bVisible = TRUE;
- newInfo.ptHead = ChildToParent(pInfo->ptHead);
- newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
- }
- }
- return;
- case PNM_NOTERESET:
- m_bSizeChanged = TRUE;
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
-
- return;
- }
-
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-}
-
-void CPWL_NoteItem::PopupNoteItemMenu(const CFX_FloatPoint& point) {
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- int32_t x, y;
- PWLtoWnd(point, x, y);
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->ClientToScreen(GetAttachedHWnd(), x, y);
- pNotify->OnPopupMenu(this, x, y);
- }
-}
-
-const CPWL_Note* CPWL_NoteItem::GetNote() const {
- if (const CPWL_Wnd* pRoot = GetRootWnd()) {
- ASSERT(pRoot->GetClassName() == "CPWL_NoteItem");
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pRoot;
- if (pNoteItem->IsTopItem()) {
- return (CPWL_Note*)pNoteItem;
- }
- }
-
- return NULL;
-}
-
-IPWL_NoteNotify* CPWL_NoteItem::GetNoteNotify() const {
- if (const CPWL_Note* pNote = GetNote())
- return pNote->GetNoteNotify();
-
- return NULL;
-}
-
-void CPWL_NoteItem::OnCreateNoteItem() {
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnItemCreate(this);
- }
-}
-
-void CPWL_NoteItem::OnContentsValidate() {
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnSetContents(this);
- }
-}
-
-void CPWL_NoteItem::SetNoteFocus(FX_BOOL bLast) {
- m_pContents->SetEditFocus(bLast);
-}
-
-void CPWL_NoteItem::EnableModify(FX_BOOL bEnabled) {
- m_pContents->EnableModify(bEnabled);
- m_bAllowModify = bEnabled;
-}
-
-void CPWL_NoteItem::EnableRead(FX_BOOL bEnabled) {
- m_pContents->EnableRead(bEnabled);
-}
-
-CPWL_Note::CPWL_Note(IPopup_Note* pPopupNote,
- IPWL_NoteNotify* pNoteNotify,
- IPWL_NoteHandler* pNoteHandler)
- : m_pAuthor(NULL),
- m_pIcon(NULL),
- m_pCloseBox(NULL),
- m_pLBBox(NULL),
- m_pRBBox(NULL),
- m_pContentsBar(NULL),
- m_pOptions(NULL),
- m_pNoteNotify(pNoteNotify),
- m_bResizing(FALSE),
- m_bEnableNotify(TRUE) {}
-
-CPWL_Note::~CPWL_Note() {}
-
-IPWL_NoteItem* CPWL_Note::Reply() {
- return CreateNoteItem();
-}
-
-void CPWL_Note::EnableNotify(FX_BOOL bEnabled) {
- m_bEnableNotify = bEnabled;
-}
-
-void CPWL_Note::RePosChildWnd() {
- RePosNoteChildren();
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- ResetScrollBar();
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- if (const CPWL_Wnd* pWnd = GetFocused()) {
- if (pWnd->GetClassName() == "CPWL_Edit") {
- CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
- pEdit->SetCaret(pEdit->GetCaret());
- }
- }
-}
-
-FX_BOOL CPWL_Note::ResetScrollBar() {
- FX_BOOL bScrollChanged = FALSE;
-
- if (ScrollBarShouldVisible()) {
- if (!m_pContentsBar->IsVisible()) {
- m_pContentsBar->SetVisible(TRUE);
- if (m_pContentsBar->IsVisible()) {
- m_pContentsBar->InvalidateRect(NULL);
- bScrollChanged = TRUE;
- }
- }
- } else {
- if (m_pContentsBar->IsVisible()) {
- m_pContentsBar->SetVisible(FALSE);
- m_pContentsBar->InvalidateRect(NULL);
-
- bScrollChanged = TRUE;
- }
- }
-
- if (bScrollChanged) {
- CFX_FloatRect rcNote = GetClientRect();
- CFX_FloatRect rcContents = m_pContents->GetWindowRect();
- rcContents.right = rcNote.right - 3.0f;
- if (m_pContentsBar->IsVisible())
- rcContents.right -= PWL_SCROLLBAR_WIDTH;
- m_pContents->Move(rcContents, TRUE, TRUE);
- m_pContents->SetScrollPos(CFX_FloatPoint(0.0f, 0.0f));
- m_pContents->InvalidateRect(NULL);
- }
-
- return bScrollChanged;
-}
-
-FX_BOOL CPWL_Note::ScrollBarShouldVisible() {
- CFX_FloatRect rcContentsFact = m_pContents->GetScrollArea();
- CFX_FloatRect rcContentsClient = m_pContents->GetClientRect();
-
- return rcContentsFact.Height() > rcContentsClient.Height();
-}
-
-void CPWL_Note::SetOptionsText(const CFX_WideString& sText) {
- if (m_pOptions)
- m_pOptions->SetText(sText);
-
- RePosNoteChildren();
-}
-
-void CPWL_Note::RePosNoteChildren() {
- if (m_bResizing)
- return;
-
- m_bResizing = TRUE;
-
- if (IsValid()) {
- CFX_FloatRect rcClient = GetClientRect();
-
- CFX_FloatRect rcIcon = rcClient;
- rcIcon.top -= 2.0f;
- rcIcon.right = rcIcon.left + 14.0f;
- rcIcon.bottom = rcIcon.top - 14.0f;
- rcIcon.Normalize();
- m_pIcon->Move(rcIcon, TRUE, FALSE);
- m_pIcon->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcIcon));
-
- CFX_FloatRect rcCloseBox = rcClient;
- rcCloseBox.right -= 1.0f;
- rcCloseBox.top -= 1.0f;
- rcCloseBox.left = rcCloseBox.right - 14.0f;
- rcCloseBox.bottom = rcCloseBox.top - 14.0f;
- rcCloseBox.Normalize();
- m_pCloseBox->Move(rcCloseBox, TRUE, FALSE);
- m_pCloseBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcCloseBox));
-
- CFX_FloatRect rcDate = rcClient;
- rcDate.right = rcCloseBox.left - POPUP_ITEM_TEXT_INDENT;
- rcDate.left =
- PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f,
- rcIcon.right + 1.0f);
- rcDate.top = rcClient.top - 2.0f;
- rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height();
- rcDate.Normalize();
- m_pDateTime->Move(rcDate, TRUE, FALSE);
- m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate));
-
- CFX_FloatRect rcSubject = rcClient;
- rcSubject.top = rcClient.top - 2.0f;
- rcSubject.left = rcIcon.right + POPUP_ITEM_TEXT_INDENT;
- rcSubject.right =
- PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f,
- rcDate.left - 1.0f);
- rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height();
- rcSubject.Normalize();
- m_pSubject->Move(rcSubject, TRUE, FALSE);
- m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject));
-
- CFX_FloatRect rcOptions = rcClient;
- rcOptions.left =
- PWL_MAX(rcOptions.right - m_pOptions->GetContentRect().Width(),
- rcIcon.right + 1.0f);
- rcOptions.top = rcSubject.bottom - 4.0f;
- rcOptions.bottom = rcOptions.top - m_pOptions->GetContentRect().Height();
- rcOptions.Normalize();
- m_pOptions->Move(rcOptions, TRUE, FALSE);
- m_pOptions->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcOptions));
-
- CFX_FloatRect rcAuthor = rcClient;
- rcAuthor.top = rcSubject.bottom - 4.0f;
- rcAuthor.left = rcSubject.left;
- rcAuthor.right =
- PWL_MIN(rcSubject.left + m_pAuthor->GetContentRect().Width() + 1.0f,
- rcOptions.left - 1.0f);
- rcAuthor.bottom = rcAuthor.top - m_pAuthor->GetContentRect().Height();
- rcAuthor.Normalize();
- m_pAuthor->Move(rcAuthor, TRUE, FALSE);
- m_pAuthor->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcAuthor));
-
- CFX_FloatRect rcLBBox = rcClient;
- rcLBBox.top = rcLBBox.bottom + 7.0f;
- rcLBBox.right = rcLBBox.left + 7.0f;
- rcLBBox.Normalize();
- m_pLBBox->Move(rcLBBox, TRUE, FALSE);
- m_pLBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcLBBox));
-
- CFX_FloatRect rcRBBox = rcClient;
- rcRBBox.top = rcRBBox.bottom + 7.0f;
- rcRBBox.left = rcRBBox.right - 7.0f;
- rcRBBox.Normalize();
- m_pRBBox->Move(rcRBBox, TRUE, FALSE);
- m_pRBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcRBBox));
-
- CFX_FloatRect rcContents = rcClient;
- rcContents.top = rcAuthor.bottom - POPUP_ITEM_HEAD_BOTTOM;
- rcContents.left += 3.0f;
- rcContents.right -= 3.0f;
- if (m_pContentsBar->IsVisible())
- rcContents.right -= PWL_SCROLLBAR_WIDTH;
- rcContents.bottom += 14.0f;
- rcContents.Normalize();
- m_pContents->Move(rcContents, FALSE, FALSE);
- m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents));
-
- CFX_FloatRect rcContentsBar = rcContents;
- rcContentsBar.right = rcClient.right - 3.0f;
- rcContentsBar.left = rcContentsBar.right - PWL_SCROLLBAR_WIDTH;
- rcContentsBar.Normalize();
- m_pContentsBar->Move(rcContentsBar, TRUE, FALSE);
- }
-
- m_bResizing = FALSE;
-}
-
-void CPWL_Note::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- CPWL_NoteItem::CreateChildWnd(cp);
-
- CPWL_Color sTextColor;
-
- if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor()))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- m_pAuthor = new CPWL_Label;
- PWL_CREATEPARAM acp = cp;
- acp.pParentWnd = this;
- acp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP;
- acp.sTextColor = sTextColor;
- m_pAuthor->Create(acp);
-
- m_pCloseBox = new CPWL_Note_CloseBox;
- PWL_CREATEPARAM ccp = cp;
- ccp.pParentWnd = this;
- ccp.dwBorderWidth = 2;
- ccp.nBorderStyle = PBS_BEVELED;
- ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER;
- ccp.sTextColor = sTextColor;
- m_pCloseBox->Create(ccp);
-
- m_pIcon = new CPWL_Note_Icon;
- PWL_CREATEPARAM icp = cp;
- icp.pParentWnd = this;
- icp.dwFlags = PWS_VISIBLE | PWS_CHILD;
- m_pIcon->Create(icp);
-
- m_pOptions = new CPWL_Note_Options;
- PWL_CREATEPARAM ocp = cp;
- ocp.pParentWnd = this;
- ocp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- ocp.sTextColor = sTextColor;
- m_pOptions->Create(ocp);
-
- m_pLBBox = new CPWL_Note_LBBox;
- PWL_CREATEPARAM lcp = cp;
- lcp.pParentWnd = this;
- lcp.dwFlags = PWS_VISIBLE | PWS_CHILD;
- lcp.eCursorType = FXCT_NESW;
- lcp.sTextColor = sTextColor;
- m_pLBBox->Create(lcp);
-
- m_pRBBox = new CPWL_Note_RBBox;
- PWL_CREATEPARAM rcp = cp;
- rcp.pParentWnd = this;
- rcp.dwFlags = PWS_VISIBLE | PWS_CHILD;
- rcp.eCursorType = FXCT_NWSE;
- rcp.sTextColor = sTextColor;
- m_pRBBox->Create(rcp);
-
- m_pContentsBar = new CPWL_ScrollBar(SBT_VSCROLL);
- PWL_CREATEPARAM scp = cp;
- scp.pParentWnd = this;
- scp.sBackgroundColor =
- CPWL_Color(COLORTYPE_RGB, 240 / 255.0f, 240 / 255.0f, 240 / 255.0f);
- scp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND;
- m_pContentsBar->Create(scp);
- m_pContentsBar->SetNotifyForever(TRUE);
-}
-
-void CPWL_Note::SetSubjectName(const CFX_WideString& sName) {
- CPWL_NoteItem::SetSubjectName(sName);
- RePosChildWnd();
-}
-
-void CPWL_Note::SetAuthorName(const CFX_WideString& sName) {
- if (m_pAuthor) {
- m_pAuthor->SetText(sName.c_str());
- RePosChildWnd();
- }
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- pNotify->OnSetAuthorName(this);
- }
-}
-
-CFX_WideString CPWL_Note::GetAuthorName() const {
- if (m_pAuthor)
- return m_pAuthor->GetText();
-
- return L"";
-}
-
-FX_BOOL CPWL_Note::OnMouseWheel(short zDelta,
- const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CFX_FloatPoint ptScroll = m_pContents->GetScrollPos();
- CFX_FloatRect rcScroll = m_pContents->GetScrollArea();
- CFX_FloatRect rcContents = m_pContents->GetClientRect();
-
- if (rcScroll.top - rcScroll.bottom > rcContents.Height()) {
- CFX_FloatPoint ptNew = ptScroll;
-
- if (zDelta > 0)
- ptNew.y += 30;
- else
- ptNew.y -= 30;
-
- if (ptNew.y > rcScroll.top)
- ptNew.y = rcScroll.top;
- if (ptNew.y < rcScroll.bottom + rcContents.Height())
- ptNew.y = rcScroll.bottom + rcContents.Height();
- if (ptNew.y < rcScroll.bottom)
- ptNew.y = rcScroll.bottom;
-
- if (ptNew.y != ptScroll.y) {
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
- (intptr_t)&ptNew.y);
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
- (intptr_t)&ptNew.y);
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-void CPWL_Note::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- switch (msg) {
- case PNM_NOTEEDITCHANGED: {
- CFX_FloatRect rcScroll = m_pContents->GetScrollArea();
-
- PWL_SCROLL_INFO sInfo;
- sInfo.fContentMin = rcScroll.bottom;
- sInfo.fContentMax = rcScroll.top;
- sInfo.fPlateWidth = m_pContents->GetClientRect().Height();
- sInfo.fSmallStep = 13.0f;
- sInfo.fBigStep = sInfo.fPlateWidth;
-
- if (FXSYS_memcmp(&m_OldScrollInfo, &sInfo, sizeof(PWL_SCROLL_INFO)) !=
- 0) {
- FX_BOOL bScrollChanged = FALSE;
-
- if (lParam < 3) {
- bScrollChanged = ResetScrollBar();
- if (bScrollChanged) {
- lParam++;
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- OnNotify(this, PNM_NOTEEDITCHANGED, 0, lParam);
- }
- }
-
- if (!bScrollChanged) {
- if (m_pContentsBar->IsVisible()) {
- m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLINFO, SBT_VSCROLL,
- (intptr_t)&sInfo);
- m_OldScrollInfo = sInfo;
-
- CFX_FloatPoint ptScroll = m_pContents->GetScrollPos();
- CFX_FloatPoint ptOld = ptScroll;
-
- if (ptScroll.y > sInfo.fContentMax)
- ptScroll.y = sInfo.fContentMax;
- if (ptScroll.y < sInfo.fContentMin + sInfo.fPlateWidth)
- ptScroll.y = sInfo.fContentMin + sInfo.fPlateWidth;
- if (ptScroll.y < sInfo.fContentMin)
- ptScroll.y = sInfo.fContentMin;
-
- if (ptOld.y != ptScroll.y) {
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
- (intptr_t)&ptScroll.y);
- m_pContentsBar->InvalidateRect(NULL);
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
- (intptr_t)&ptScroll.y);
- }
- }
- }
- }
- }
-
- m_pContents->InvalidateRect(NULL);
-
- return;
- case PNM_SCROLLWINDOW:
- if (m_pContents)
- m_pContents->OnNotify(pWnd, msg, wParam, lParam);
- return;
- case PNM_SETSCROLLPOS:
- if (m_pContentsBar)
- m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
- return;
- }
-
- if (msg == PNM_SETCARETINFO && IsValid()) {
- if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
- if (m_pContents) {
- CFX_FloatRect rcClient = m_pContents->GetClientRect();
- if (pInfo->ptHead.y > rcClient.top) {
- CFX_FloatPoint pt = m_pContents->OutToIn(pInfo->ptHead);
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
- (intptr_t)&pt.y);
-
- CFX_FloatPoint ptScroll = m_pContents->GetScrollPos();
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
- (intptr_t)&ptScroll.y);
-
- return;
- }
-
- if (pInfo->ptFoot.y < rcClient.bottom) {
- CFX_FloatPoint pt = m_pContents->OutToIn(pInfo->ptFoot);
- pt.y += rcClient.Height();
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
- (intptr_t)&pt.y);
-
- CFX_FloatPoint ptScroll = m_pContents->GetScrollPos();
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
- (intptr_t)&ptScroll.y);
-
- return;
- }
- }
- }
- }
-
- CPWL_NoteItem::OnNotify(pWnd, msg, wParam, lParam);
-}
-
-void CPWL_Note::SetBkColor(const CPWL_Color& color) {
- CPWL_NoteItem::SetBkColor(color);
-
- CPWL_Color sBK = color;
- CPWL_Color sTextColor;
- if (CPWL_Utils::IsBlackOrWhite(sBK))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- if (m_pCloseBox)
- m_pCloseBox->SetTextColor(sTextColor);
- if (m_pAuthor)
- m_pAuthor->SetTextColor(sTextColor);
- if (m_pOptions)
- m_pOptions->SetTextColor(sTextColor);
- if (m_pLBBox)
- m_pLBBox->SetTextColor(sTextColor);
- if (m_pRBBox)
- m_pRBBox->SetTextColor(sTextColor);
-}
-
-FX_BOOL CPWL_Note::OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) {
- if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point))) {
- if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
- int32_t x, y;
- PWLtoWnd(point, x, y);
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->ClientToScreen(GetAttachedHWnd(), x, y);
- KillFocus();
- pNotify->OnPopupMenu(x, y);
-
- return TRUE;
- }
- }
-
- return CPWL_Wnd::OnLButtonDown(point, nFlag);
-}
-
-FX_BOOL CPWL_Note::OnRButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) {
- return CPWL_Wnd::OnRButtonUp(point, nFlag);
-}
-
-const CPWL_Note* CPWL_Note::GetNote() const {
- return this;
-}
-
-IPWL_NoteNotify* CPWL_Note::GetNoteNotify() const {
- return m_bEnableNotify ? m_pNoteNotify : nullptr;
-}
-
-void CPWL_Note::SetIconType(int32_t nType) {
- if (m_pIcon)
- m_pIcon->SetIconType(nType);
-}
-
-void CPWL_Note::EnableModify(FX_BOOL bEnabled) {
- m_pContents->EnableModify(bEnabled);
-}
-
-void CPWL_Note::EnableRead(FX_BOOL bEnabled) {
- m_pContents->EnableRead(bEnabled);
-}
-
-CFX_WideString CPWL_Note::GetReplyString() const {
- return m_sReplyString;
-}
-
-void CPWL_Note::SetReplyString(const CFX_WideString& str) {
- m_sReplyString = str;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp b/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp
deleted file mode 100644
index 03bf3238fa..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp
+++ /dev/null
@@ -1,1197 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_ScrollBar.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
-
-PWL_FLOATRANGE::PWL_FLOATRANGE() {
- Default();
-}
-
-PWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min, FX_FLOAT max) {
- Set(min, max);
-}
-
-void PWL_FLOATRANGE::Default() {
- fMin = 0;
- fMax = 0;
-}
-
-void PWL_FLOATRANGE::Set(FX_FLOAT min, FX_FLOAT max) {
- if (min > max) {
- fMin = max;
- fMax = min;
- } else {
- fMin = min;
- fMax = max;
- }
-}
-
-FX_BOOL PWL_FLOATRANGE::In(FX_FLOAT x) const {
- return (IsFloatBigger(x, fMin) || IsFloatEqual(x, fMin)) &&
- (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax));
-}
-
-FX_FLOAT PWL_FLOATRANGE::GetWidth() const {
- return fMax - fMin;
-}
-
-PWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA() {
- Default();
-}
-
-void PWL_SCROLL_PRIVATEDATA::Default() {
- ScrollRange.Default();
- fScrollPos = ScrollRange.fMin;
- fClientWidth = 0;
- fBigStep = 10;
- fSmallStep = 1;
-}
-
-void PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min, FX_FLOAT max) {
- ScrollRange.Set(min, max);
-
- if (IsFloatSmaller(fScrollPos, ScrollRange.fMin))
- fScrollPos = ScrollRange.fMin;
- if (IsFloatBigger(fScrollPos, ScrollRange.fMax))
- fScrollPos = ScrollRange.fMax;
-}
-
-void PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width) {
- fClientWidth = width;
-}
-
-void PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step) {
- fSmallStep = step;
-}
-
-void PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step) {
- fBigStep = step;
-}
-
-FX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos) {
- if (ScrollRange.In(pos)) {
- fScrollPos = pos;
- return TRUE;
- }
- return FALSE;
-}
-
-void PWL_SCROLL_PRIVATEDATA::AddSmall() {
- if (!SetPos(fScrollPos + fSmallStep))
- SetPos(ScrollRange.fMax);
-}
-
-void PWL_SCROLL_PRIVATEDATA::SubSmall() {
- if (!SetPos(fScrollPos - fSmallStep))
- SetPos(ScrollRange.fMin);
-}
-
-void PWL_SCROLL_PRIVATEDATA::AddBig() {
- if (!SetPos(fScrollPos + fBigStep))
- SetPos(ScrollRange.fMax);
-}
-
-void PWL_SCROLL_PRIVATEDATA::SubBig() {
- if (!SetPos(fScrollPos - fBigStep))
- SetPos(ScrollRange.fMin);
-}
-
-CPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,
- PWL_SBBUTTON_TYPE eButtonType) {
- m_eScrollBarType = eScrollBarType;
- m_eSBButtonType = eButtonType;
-
- m_bMouseDown = FALSE;
-}
-
-CPWL_SBButton::~CPWL_SBButton() {}
-
-CFX_ByteString CPWL_SBButton::GetClassName() const {
- return "CPWL_SBButton";
-}
-
-void CPWL_SBButton::OnCreate(PWL_CREATEPARAM& cp) {
- cp.eCursorType = FXCT_ARROW;
-}
-
-void CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- if (!IsVisible())
- return;
-
- CFX_ByteTextBuf sButton;
-
- CFX_FloatRect rectWnd = GetWindowRect();
-
- if (rectWnd.IsEmpty())
- return;
-
- sAppStream << "q\n";
-
- CFX_FloatPoint ptCenter = GetCenterPoint();
-
- switch (m_eScrollBarType) {
- case SBT_HSCROLL:
- switch (m_eSBButtonType) {
- case PSBT_MIN: {
- CFX_FloatPoint pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y);
- CFX_FloatPoint pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CFX_FloatPoint pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- } break;
- case PSBT_MAX: {
- CFX_FloatPoint pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y);
- CFX_FloatPoint pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CFX_FloatPoint pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- } break;
- default:
- break;
- }
- break;
- case SBT_VSCROLL:
- switch (m_eSBButtonType) {
- case PSBT_MIN: {
- CFX_FloatPoint pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,
- ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,
- ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt3(ptCenter.x,
- ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- } break;
- case PSBT_MAX: {
- CFX_FloatPoint pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,
- ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,
- ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
- CFX_FloatPoint pt3(ptCenter.x,
- ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- } break;
- default:
- break;
- }
- break;
- default:
- break;
- }
-
- sAppStream << "Q\n";
-}
-
-void CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- if (!IsVisible())
- return;
-
- CFX_FloatRect rectWnd = GetWindowRect();
- if (rectWnd.IsEmpty())
- return;
-
- CFX_FloatPoint ptCenter = GetCenterPoint();
- int32_t nTransparancy = GetTransparency();
-
- switch (m_eScrollBarType) {
- case SBT_HSCROLL:
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
- switch (m_eSBButtonType) {
- case PSBT_MIN: {
- CFX_FloatPoint pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y);
- CFX_FloatPoint pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CFX_FloatPoint pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
- CFX_PathData path;
-
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
-
- pDevice->DrawPath(&path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(
- PWL_DEFAULT_BLACKCOLOR, nTransparancy),
- 0, FXFILL_ALTERNATE);
- }
- } break;
- case PSBT_MAX: {
- CFX_FloatPoint pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y);
- CFX_FloatPoint pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CFX_FloatPoint pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
- ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
- CFX_PathData path;
-
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
-
- pDevice->DrawPath(&path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(
- PWL_DEFAULT_BLACKCOLOR, nTransparancy),
- 0, FXFILL_ALTERNATE);
- }
- } break;
- default:
- break;
- }
- break;
- case SBT_VSCROLL:
- switch (m_eSBButtonType) {
- case PSBT_MIN: {
- // draw border
- CFX_FloatRect rcDraw = rectWnd;
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy, 100, 100, 100),
- 0.0f);
-
- // draw inner border
- rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f);
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy, 255, 255, 255),
- 1.0f);
-
- // draw background
-
- rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f);
-
- if (IsEnabled())
- CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw,
- nTransparancy, 80, 220);
- else
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(255, 255, 255, 255));
-
- // draw arrow
-
- if (rectWnd.top - rectWnd.bottom > 6.0f) {
- FX_FLOAT fX = rectWnd.left + 1.5f;
- FX_FLOAT fY = rectWnd.bottom;
- CFX_FloatPoint pts[7] = {CFX_FloatPoint(fX + 2.5f, fY + 4.0f),
- CFX_FloatPoint(fX + 2.5f, fY + 3.0f),
- CFX_FloatPoint(fX + 4.5f, fY + 5.0f),
- CFX_FloatPoint(fX + 6.5f, fY + 3.0f),
- CFX_FloatPoint(fX + 6.5f, fY + 4.0f),
- CFX_FloatPoint(fX + 4.5f, fY + 6.0f),
- CFX_FloatPoint(fX + 2.5f, fY + 4.0f)};
-
- if (IsEnabled())
- CPWL_Utils::DrawFillArea(
- pDevice, pUser2Device, pts, 7,
- ArgbEncode(nTransparancy, 255, 255, 255));
- else
- CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
- CPWL_Utils::PWLColorToFXColor(
- PWL_DEFAULT_HEAVYGRAYCOLOR, 255));
- }
- } break;
- case PSBT_MAX: {
- // draw border
- CFX_FloatRect rcDraw = rectWnd;
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy, 100, 100, 100),
- 0.0f);
-
- // draw inner border
- rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f);
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy, 255, 255, 255),
- 1.0f);
-
- // draw background
- rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f);
- if (IsEnabled())
- CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw,
- nTransparancy, 80, 220);
- else
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(255, 255, 255, 255));
-
- // draw arrow
-
- if (rectWnd.top - rectWnd.bottom > 6.0f) {
- FX_FLOAT fX = rectWnd.left + 1.5f;
- FX_FLOAT fY = rectWnd.bottom;
-
- CFX_FloatPoint pts[7] = {CFX_FloatPoint(fX + 2.5f, fY + 5.0f),
- CFX_FloatPoint(fX + 2.5f, fY + 6.0f),
- CFX_FloatPoint(fX + 4.5f, fY + 4.0f),
- CFX_FloatPoint(fX + 6.5f, fY + 6.0f),
- CFX_FloatPoint(fX + 6.5f, fY + 5.0f),
- CFX_FloatPoint(fX + 4.5f, fY + 3.0f),
- CFX_FloatPoint(fX + 2.5f, fY + 5.0f)};
-
- if (IsEnabled())
- CPWL_Utils::DrawFillArea(
- pDevice, pUser2Device, pts, 7,
- ArgbEncode(nTransparancy, 255, 255, 255));
- else
- CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
- CPWL_Utils::PWLColorToFXColor(
- PWL_DEFAULT_HEAVYGRAYCOLOR, 255));
- }
- } break;
- case PSBT_POS: {
- // draw border
- CFX_FloatRect rcDraw = rectWnd;
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy, 100, 100, 100),
- 0.0f);
-
- // draw inner border
- rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f);
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy, 255, 255, 255),
- 1.0f);
-
- if (IsEnabled()) {
- // draw shadow effect
-
- CFX_FloatPoint ptTop =
- CFX_FloatPoint(rectWnd.left, rectWnd.top - 1.0f);
- CFX_FloatPoint ptBottom =
- CFX_FloatPoint(rectWnd.left, rectWnd.bottom + 1.0f);
-
- ptTop.x += 1.5f;
- ptBottom.x += 1.5f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 210, 210, 210),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 220, 220, 220),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 240, 240, 240),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 240, 240, 240),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 210, 210, 210),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 180, 180, 180),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 150, 150, 150),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 150, 150, 150),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 180, 180, 180),
- 1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy, 210, 210, 210),
- 1.0f);
- } else {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(255, 255, 255, 255));
- }
-
- // draw friction
-
- if (rectWnd.Height() > 8.0f) {
- FX_COLORREF crStroke = ArgbEncode(nTransparancy, 120, 120, 120);
- if (!IsEnabled())
- crStroke = CPWL_Utils::PWLColorToFXColor(
- PWL_DEFAULT_HEAVYGRAYCOLOR, 255);
-
- FX_FLOAT nFrictionWidth = 5.0f;
- FX_FLOAT nFrictionHeight = 5.5f;
-
- CFX_FloatPoint ptLeft =
- CFX_FloatPoint(ptCenter.x - nFrictionWidth / 2.0f,
- ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
- CFX_FloatPoint ptRight =
- CFX_FloatPoint(ptCenter.x + nFrictionWidth / 2.0f,
- ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
- crStroke, 1.0f);
-
- ptLeft.y += 2.0f;
- ptRight.y += 2.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
- crStroke, 1.0f);
-
- ptLeft.y += 2.0f;
- ptRight.y += 2.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
- crStroke, 1.0f);
- }
- } break;
- default:
- break;
- }
- break;
- default:
- break;
- }
-}
-
-FX_BOOL CPWL_SBButton::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- if (CPWL_Wnd* pParent = GetParentWindow())
- pParent->OnNotify(this, PNM_LBUTTONDOWN, 0, (intptr_t)&point);
-
- m_bMouseDown = TRUE;
- SetCapture();
-
- return TRUE;
-}
-
-FX_BOOL CPWL_SBButton::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonUp(point, nFlag);
-
- if (CPWL_Wnd* pParent = GetParentWindow())
- pParent->OnNotify(this, PNM_LBUTTONUP, 0, (intptr_t)&point);
-
- m_bMouseDown = FALSE;
- ReleaseCapture();
-
- return TRUE;
-}
-
-FX_BOOL CPWL_SBButton::OnMouseMove(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnMouseMove(point, nFlag);
-
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- pParent->OnNotify(this, PNM_MOUSEMOVE, 0, (intptr_t)&point);
- }
-
- return TRUE;
-}
-
-CPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType)
- : m_sbType(sbType),
- m_pMinButton(NULL),
- m_pMaxButton(NULL),
- m_pPosButton(NULL),
- m_bMouseDown(FALSE),
- m_bMinOrMax(FALSE),
- m_bNotifyForever(TRUE) {}
-
-CPWL_ScrollBar::~CPWL_ScrollBar() {}
-
-CFX_ByteString CPWL_ScrollBar::GetClassName() const {
- return "CPWL_ScrollBar";
-}
-
-void CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM& cp) {
- cp.eCursorType = FXCT_ARROW;
-}
-
-void CPWL_ScrollBar::RePosChildWnd() {
- CFX_FloatRect rcClient = GetClientRect();
- CFX_FloatRect rcMinButton, rcMaxButton;
- FX_FLOAT fBWidth = 0;
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- if (rcClient.right - rcClient.left >
- PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH +
- 2) {
- rcMinButton = CFX_FloatRect(rcClient.left, rcClient.bottom,
- rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.top);
- rcMaxButton =
- CFX_FloatRect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.bottom, rcClient.right, rcClient.top);
- } else {
- fBWidth = (rcClient.right - rcClient.left -
- PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) /
- 2;
-
- if (fBWidth > 0) {
- rcMinButton = CFX_FloatRect(rcClient.left, rcClient.bottom,
- rcClient.left + fBWidth, rcClient.top);
- rcMaxButton = CFX_FloatRect(rcClient.right - fBWidth, rcClient.bottom,
- rcClient.right, rcClient.top);
- } else {
- SetVisible(FALSE);
- }
- }
- break;
- case SBT_VSCROLL:
- if (IsFloatBigger(rcClient.top - rcClient.bottom,
- PWL_SCROLLBAR_BUTTON_WIDTH * 2 +
- PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)) {
- rcMinButton = CFX_FloatRect(rcClient.left,
- rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.right, rcClient.top);
- rcMaxButton =
- CFX_FloatRect(rcClient.left, rcClient.bottom, rcClient.right,
- rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH);
- } else {
- fBWidth = (rcClient.top - rcClient.bottom -
- PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) /
- 2;
-
- if (IsFloatBigger(fBWidth, 0)) {
- rcMinButton = CFX_FloatRect(rcClient.left, rcClient.top - fBWidth,
- rcClient.right, rcClient.top);
- rcMaxButton =
- CFX_FloatRect(rcClient.left, rcClient.bottom, rcClient.right,
- rcClient.bottom + fBWidth);
- } else {
- SetVisible(FALSE);
- }
- }
- break;
- }
-
- if (m_pMinButton)
- m_pMinButton->Move(rcMinButton, TRUE, FALSE);
- if (m_pMaxButton)
- m_pMaxButton->Move(rcMaxButton, TRUE, FALSE);
- MovePosButton(FALSE);
-}
-
-void CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CFX_FloatRect rectWnd = GetWindowRect();
-
- if (IsVisible() && !rectWnd.IsEmpty()) {
- CFX_ByteTextBuf sButton;
-
- sButton << "q\n";
- sButton << "0 w\n"
- << CPWL_Utils::GetColorAppStream(GetBackgroundColor(), TRUE);
- sButton << rectWnd.left << " " << rectWnd.bottom << " "
- << rectWnd.right - rectWnd.left << " "
- << rectWnd.top - rectWnd.bottom << " re b Q\n";
-
- sAppStream << sButton;
- }
-}
-
-void CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CFX_FloatRect rectWnd = GetWindowRect();
-
- if (IsVisible() && !rectWnd.IsEmpty()) {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd,
- GetBackgroundColor(), GetTransparency());
-
- CPWL_Utils::DrawStrokeLine(
- pDevice, pUser2Device,
- CFX_FloatPoint(rectWnd.left + 2.0f, rectWnd.top - 2.0f),
- CFX_FloatPoint(rectWnd.left + 2.0f, rectWnd.bottom + 2.0f),
- ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f);
-
- CPWL_Utils::DrawStrokeLine(
- pDevice, pUser2Device,
- CFX_FloatPoint(rectWnd.right - 2.0f, rectWnd.top - 2.0f),
- CFX_FloatPoint(rectWnd.right - 2.0f, rectWnd.bottom + 2.0f),
- ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f);
- }
-}
-
-FX_BOOL CPWL_ScrollBar::OnLButtonDown(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonDown(point, nFlag);
-
- if (HasFlag(PWS_AUTOTRANSPARENT)) {
- if (GetTransparency() != 255) {
- SetTransparency(255);
- InvalidateRect();
- }
- }
-
- CFX_FloatRect rcMinArea, rcMaxArea;
-
- if (m_pPosButton && m_pPosButton->IsVisible()) {
- CFX_FloatRect rcClient = GetClientRect();
- CFX_FloatRect rcPosButton = m_pPosButton->GetWindowRect();
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- rcMinArea =
- CFX_FloatRect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.bottom, rcPosButton.left, rcClient.top);
- rcMaxArea = CFX_FloatRect(rcPosButton.right, rcClient.bottom,
- rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.top);
-
- break;
- case SBT_VSCROLL:
- rcMinArea =
- CFX_FloatRect(rcClient.left, rcPosButton.top, rcClient.right,
- rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH);
- rcMaxArea = CFX_FloatRect(rcClient.left,
- rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.right, rcPosButton.bottom);
- break;
- }
-
- rcMinArea.Normalize();
- rcMaxArea.Normalize();
-
- if (rcMinArea.Contains(point.x, point.y)) {
- m_sData.SubBig();
- MovePosButton(TRUE);
- NotifyScrollWindow();
- }
-
- if (rcMaxArea.Contains(point.x, point.y)) {
- m_sData.AddBig();
- MovePosButton(TRUE);
- NotifyScrollWindow();
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_ScrollBar::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- CPWL_Wnd::OnLButtonUp(point, nFlag);
-
- if (HasFlag(PWS_AUTOTRANSPARENT)) {
- if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) {
- SetTransparency(PWL_SCROLLBAR_TRANSPARANCY);
- InvalidateRect();
- }
- }
-
- EndTimer();
- m_bMouseDown = FALSE;
-
- return TRUE;
-}
-
-void CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-
- switch (msg) {
- case PNM_LBUTTONDOWN:
- if (pWnd == m_pMinButton) {
- OnMinButtonLBDown(*(CFX_FloatPoint*)lParam);
- }
-
- if (pWnd == m_pMaxButton) {
- OnMaxButtonLBDown(*(CFX_FloatPoint*)lParam);
- }
-
- if (pWnd == m_pPosButton) {
- OnPosButtonLBDown(*(CFX_FloatPoint*)lParam);
- }
- break;
- case PNM_LBUTTONUP:
- if (pWnd == m_pMinButton) {
- OnMinButtonLBUp(*(CFX_FloatPoint*)lParam);
- }
-
- if (pWnd == m_pMaxButton) {
- OnMaxButtonLBUp(*(CFX_FloatPoint*)lParam);
- }
-
- if (pWnd == m_pPosButton) {
- OnPosButtonLBUp(*(CFX_FloatPoint*)lParam);
- }
- break;
- case PNM_MOUSEMOVE:
- if (pWnd == m_pMinButton) {
- OnMinButtonMouseMove(*(CFX_FloatPoint*)lParam);
- }
-
- if (pWnd == m_pMaxButton) {
- OnMaxButtonMouseMove(*(CFX_FloatPoint*)lParam);
- }
-
- if (pWnd == m_pPosButton) {
- OnPosButtonMouseMove(*(CFX_FloatPoint*)lParam);
- }
- break;
- case PNM_SETSCROLLINFO: {
- if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) {
- if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PWL_SCROLL_INFO)) != 0) {
- m_OriginInfo = *pInfo;
- FX_FLOAT fMax =
- pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth;
- fMax = fMax > 0.0f ? fMax : 0.0f;
- SetScrollRange(0, fMax, pInfo->fPlateWidth);
- SetScrollStep(pInfo->fBigStep, pInfo->fSmallStep);
- }
- }
- } break;
- case PNM_SETSCROLLPOS: {
- FX_FLOAT fPos = *(FX_FLOAT*)lParam;
- switch (m_sbType) {
- case SBT_HSCROLL:
- fPos = fPos - m_OriginInfo.fContentMin;
- break;
- case SBT_VSCROLL:
- fPos = m_OriginInfo.fContentMax - fPos;
- break;
- }
- SetScrollPos(fPos);
- } break;
- }
-}
-
-void CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM& cp) {
- PWL_CREATEPARAM scp = cp;
- scp.pParentWnd = this;
- scp.dwBorderWidth = 2;
- scp.nBorderStyle = PBS_BEVELED;
-
- scp.dwFlags =
- PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP;
-
- if (!m_pMinButton) {
- m_pMinButton = new CPWL_SBButton(m_sbType, PSBT_MIN);
- m_pMinButton->Create(scp);
- }
-
- if (!m_pMaxButton) {
- m_pMaxButton = new CPWL_SBButton(m_sbType, PSBT_MAX);
- m_pMaxButton->Create(scp);
- }
-
- if (!m_pPosButton) {
- m_pPosButton = new CPWL_SBButton(m_sbType, PSBT_POS);
- m_pPosButton->SetVisible(FALSE);
- m_pPosButton->Create(scp);
- }
-}
-
-FX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const {
- if (!IsVisible())
- return 0;
-
- return PWL_SCROLLBAR_WIDTH;
-}
-
-void CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin,
- FX_FLOAT fMax,
- FX_FLOAT fClientWidth) {
- if (m_pPosButton) {
- m_sData.SetScrollRange(fMin, fMax);
- m_sData.SetClientWidth(fClientWidth);
-
- if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f)) {
- m_pPosButton->SetVisible(FALSE);
- } else {
- m_pPosButton->SetVisible(TRUE);
- MovePosButton(TRUE);
- }
- }
-}
-
-void CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos) {
- FX_FLOAT fOldPos = m_sData.fScrollPos;
-
- m_sData.SetPos(fPos);
-
- if (!IsFloatEqual(m_sData.fScrollPos, fOldPos))
- MovePosButton(TRUE);
-}
-
-void CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep, FX_FLOAT fSmallStep) {
- m_sData.SetBigStep(fBigStep);
- m_sData.SetSmallStep(fSmallStep);
-}
-
-void CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh) {
- ASSERT(m_pMinButton);
- ASSERT(m_pMaxButton);
-
- if (m_pPosButton->IsVisible()) {
- CFX_FloatRect rcClient;
- CFX_FloatRect rcPosArea, rcPosButton;
-
- rcClient = GetClientRect();
- rcPosArea = GetScrollArea();
-
- FX_FLOAT fLeft, fRight, fTop, fBottom;
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- fLeft = TrueToFace(m_sData.fScrollPos);
- fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
-
- if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH)
- fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
-
- if (fRight > rcPosArea.right) {
- fRight = rcPosArea.right;
- fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
- }
-
- rcPosButton =
- CFX_FloatRect(fLeft, rcPosArea.bottom, fRight, rcPosArea.top);
-
- break;
- case SBT_VSCROLL:
- fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
- fTop = TrueToFace(m_sData.fScrollPos);
-
- if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH))
- fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
-
- if (IsFloatSmaller(fBottom, rcPosArea.bottom)) {
- fBottom = rcPosArea.bottom;
- fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
- }
-
- rcPosButton =
- CFX_FloatRect(rcPosArea.left, fBottom, rcPosArea.right, fTop);
-
- break;
- }
-
- m_pPosButton->Move(rcPosButton, TRUE, bRefresh);
- }
-}
-
-void CPWL_ScrollBar::OnMinButtonLBDown(const CFX_FloatPoint& point) {
- m_sData.SubSmall();
- MovePosButton(TRUE);
- NotifyScrollWindow();
-
- m_bMinOrMax = TRUE;
-
- EndTimer();
- BeginTimer(100);
-}
-
-void CPWL_ScrollBar::OnMinButtonLBUp(const CFX_FloatPoint& point) {}
-
-void CPWL_ScrollBar::OnMinButtonMouseMove(const CFX_FloatPoint& point) {}
-
-void CPWL_ScrollBar::OnMaxButtonLBDown(const CFX_FloatPoint& point) {
- m_sData.AddSmall();
- MovePosButton(TRUE);
- NotifyScrollWindow();
-
- m_bMinOrMax = FALSE;
-
- EndTimer();
- BeginTimer(100);
-}
-
-void CPWL_ScrollBar::OnMaxButtonLBUp(const CFX_FloatPoint& point) {}
-
-void CPWL_ScrollBar::OnMaxButtonMouseMove(const CFX_FloatPoint& point) {}
-
-void CPWL_ScrollBar::OnPosButtonLBDown(const CFX_FloatPoint& point) {
- m_bMouseDown = TRUE;
-
- if (m_pPosButton) {
- CFX_FloatRect rcPosButton = m_pPosButton->GetWindowRect();
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- m_nOldPos = point.x;
- m_fOldPosButton = rcPosButton.left;
- break;
- case SBT_VSCROLL:
- m_nOldPos = point.y;
- m_fOldPosButton = rcPosButton.top;
- break;
- }
- }
-}
-
-void CPWL_ScrollBar::OnPosButtonLBUp(const CFX_FloatPoint& point) {
- if (m_bMouseDown) {
- if (!m_bNotifyForever)
- NotifyScrollWindow();
- }
- m_bMouseDown = FALSE;
-}
-
-void CPWL_ScrollBar::OnPosButtonMouseMove(const CFX_FloatPoint& point) {
- FX_FLOAT fOldScrollPos = m_sData.fScrollPos;
-
- FX_FLOAT fNewPos = 0;
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- if (FXSYS_fabs(point.x - m_nOldPos) < 1)
- return;
- fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos);
- break;
- case SBT_VSCROLL:
- if (FXSYS_fabs(point.y - m_nOldPos) < 1)
- return;
- fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos);
- break;
- }
-
- if (m_bMouseDown) {
- switch (m_sbType) {
- case SBT_HSCROLL:
-
- if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) {
- fNewPos = m_sData.ScrollRange.fMin;
- }
-
- if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) {
- fNewPos = m_sData.ScrollRange.fMax;
- }
-
- m_sData.SetPos(fNewPos);
-
- break;
- case SBT_VSCROLL:
-
- if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) {
- fNewPos = m_sData.ScrollRange.fMin;
- }
-
- if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) {
- fNewPos = m_sData.ScrollRange.fMax;
- }
-
- m_sData.SetPos(fNewPos);
-
- break;
- }
-
- if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos)) {
- MovePosButton(TRUE);
-
- if (m_bNotifyForever)
- NotifyScrollWindow();
- }
- }
-}
-
-void CPWL_ScrollBar::NotifyScrollWindow() {
- if (CPWL_Wnd* pParent = GetParentWindow()) {
- FX_FLOAT fPos;
- switch (m_sbType) {
- case SBT_HSCROLL:
- fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos;
- break;
- case SBT_VSCROLL:
- fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos;
- break;
- }
- pParent->OnNotify(this, PNM_SCROLLWINDOW, (intptr_t)m_sbType,
- (intptr_t)&fPos);
- }
-}
-
-CFX_FloatRect CPWL_ScrollBar::GetScrollArea() const {
- CFX_FloatRect rcClient = GetClientRect();
- CFX_FloatRect rcArea;
-
- if (!m_pMinButton || !m_pMaxButton)
- return rcClient;
-
- CFX_FloatRect rcMin = m_pMinButton->GetWindowRect();
- CFX_FloatRect rcMax = m_pMaxButton->GetWindowRect();
-
- FX_FLOAT fMinWidth = rcMin.right - rcMin.left;
- FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom;
- FX_FLOAT fMaxWidth = rcMax.right - rcMax.left;
- FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom;
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) {
- rcArea = CFX_FloatRect(rcClient.left + fMinWidth + 1, rcClient.bottom,
- rcClient.right - fMaxWidth - 1, rcClient.top);
- } else {
- rcArea = CFX_FloatRect(rcClient.left + fMinWidth + 1, rcClient.bottom,
- rcClient.left + fMinWidth + 1, rcClient.top);
- }
- break;
- case SBT_VSCROLL:
- if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2) {
- rcArea = CFX_FloatRect(rcClient.left, rcClient.bottom + fMinHeight + 1,
- rcClient.right, rcClient.top - fMaxHeight - 1);
- } else {
- rcArea =
- CFX_FloatRect(rcClient.left, rcClient.bottom + fMinHeight + 1,
- rcClient.right, rcClient.bottom + fMinHeight + 1);
- }
- break;
- }
-
- rcArea.Normalize();
-
- return rcArea;
-}
-
-FX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue) {
- CFX_FloatRect rcPosArea;
- rcPosArea = GetScrollArea();
-
- FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
- fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
-
- FX_FLOAT fFace = 0;
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- fFace = rcPosArea.left +
- fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth;
- break;
- case SBT_VSCROLL:
- fFace = rcPosArea.top -
- fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth;
- break;
- }
-
- return fFace;
-}
-
-FX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace) {
- CFX_FloatRect rcPosArea;
- rcPosArea = GetScrollArea();
-
- FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
- fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
-
- FX_FLOAT fTrue = 0;
-
- switch (m_sbType) {
- case SBT_HSCROLL:
- fTrue = (fFace - rcPosArea.left) * fFactWidth /
- (rcPosArea.right - rcPosArea.left);
- break;
- case SBT_VSCROLL:
- fTrue = (rcPosArea.top - fFace) * fFactWidth /
- (rcPosArea.top - rcPosArea.bottom);
- break;
- }
-
- return fTrue;
-}
-
-void CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- CreateButtons(cp);
-}
-
-void CPWL_ScrollBar::TimerProc() {
- PWL_SCROLL_PRIVATEDATA sTemp = m_sData;
-
- if (m_bMinOrMax)
- m_sData.SubSmall();
- else
- m_sData.AddSmall();
-
- if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0) {
- MovePosButton(TRUE);
- NotifyScrollWindow();
- }
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Signature.cpp b/fpdfsdk/src/pdfwindow/PWL_Signature.cpp
deleted file mode 100644
index ffb4461878..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Signature.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Signature.h"
-
-#include "fpdfsdk/include/pdfwindow/PWL_Icon.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Label.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-CPWL_Signature_Image::CPWL_Signature_Image() : m_pImage(NULL) {}
-
-CPWL_Signature_Image::~CPWL_Signature_Image() {}
-
-void CPWL_Signature_Image::SetImage(CFX_DIBSource* pImage) {
- m_pImage = pImage;
-}
-
-CFX_DIBSource* CPWL_Signature_Image::GetImage() {
- return m_pImage;
-}
-
-void CPWL_Signature_Image::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
-
- if (m_pImage) {
- CFX_FloatRect rcClient = GetClientRect();
-
- FX_FLOAT x, y;
- pUser2Device->Transform(rcClient.left, rcClient.top, x, y);
-
- pDevice->StretchDIBits(m_pImage, (int32_t)x, (int32_t)y,
- (int32_t)rcClient.Width(),
- (int32_t)rcClient.Height());
- }
-}
-
-void CPWL_Signature_Image::GetThisAppearanceStream(
- CFX_ByteTextBuf& sAppStream) {
- sAppStream << CPWL_Image::GetImageAppStream();
-}
-
-void CPWL_Signature_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) {
- FX_FLOAT fImageW, fImageH;
-
- GetImageSize(fImageW, fImageH);
-
- CFX_FloatRect rcClient = GetClientRect();
-
- fHScale = rcClient.Width() / fImageW;
- fVScale = rcClient.Height() / fImageH;
-}
-
-CPWL_Signature::CPWL_Signature()
- : m_pText(NULL),
- m_pDescription(NULL),
- m_pImage(NULL),
- m_bTextExist(TRUE),
- m_bImageExist(FALSE),
- m_bFlagExist(TRUE) {}
-
-CPWL_Signature::~CPWL_Signature() {}
-
-void CPWL_Signature::SetTextFlag(FX_BOOL bTextExist) {
- m_bTextExist = bTextExist;
-
- RePosChildWnd();
-}
-
-void CPWL_Signature::SetImageFlag(FX_BOOL bImageExist) {
- m_bImageExist = bImageExist;
-
- RePosChildWnd();
-}
-
-void CPWL_Signature::SetFoxitFlag(FX_BOOL bFlagExist) {
- m_bFlagExist = bFlagExist;
-}
-
-void CPWL_Signature::SetText(const FX_WCHAR* sText) {
- m_pText->SetText(sText);
-
- RePosChildWnd();
-}
-
-void CPWL_Signature::SetDescription(const FX_WCHAR* str) {
- m_pDescription->SetText(str);
-
- RePosChildWnd();
-}
-
-void CPWL_Signature::SetImage(CFX_DIBSource* pImage) {
- m_pImage->SetImage(pImage);
-
- RePosChildWnd();
-}
-
-void CPWL_Signature::SetImageStream(CPDF_Stream* pStream,
- const FX_CHAR* sImageAlias) {
- m_pImage->SetPDFStream(pStream);
- m_pImage->SetImageAlias(sImageAlias);
-
- RePosChildWnd();
-}
-
-void CPWL_Signature::RePosChildWnd() {
- CFX_FloatRect rcClient = GetClientRect();
-
- CFX_FloatRect rcText = rcClient;
- CFX_FloatRect rcDescription = rcClient;
-
- FX_BOOL bTextVisible = m_bTextExist && m_pText->GetText().GetLength() > 0;
-
- if ((bTextVisible || m_bImageExist) &&
- m_pDescription->GetText().GetLength() > 0) {
- if (rcClient.Width() >= rcClient.Height()) {
- rcText.right = rcText.left + rcClient.Width() / 2.0f;
- rcDescription.left = rcDescription.right - rcClient.Width() / 2.0f;
- } else {
- rcText.bottom = rcText.top - rcClient.Height() / 2.0f;
- rcDescription.top = rcDescription.bottom + rcClient.Height() / 2.0f;
- }
- }
-
- m_pText->SetVisible(bTextVisible);
- m_pImage->SetVisible(m_bImageExist);
-
- m_pText->Move(rcText, TRUE, FALSE);
- m_pImage->Move(rcText, TRUE, FALSE);
- m_pDescription->Move(rcDescription, TRUE, FALSE);
-}
-
-void CPWL_Signature::CreateChildWnd(const PWL_CREATEPARAM& cp) {
- m_pImage = new CPWL_Signature_Image;
- PWL_CREATEPARAM icp = cp;
- icp.pParentWnd = this;
- icp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- icp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
- m_pImage->Create(icp);
-
- m_pText = new CPWL_Label;
- PWL_CREATEPARAM acp = cp;
- acp.pParentWnd = this;
- acp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE |
- PES_AUTORETURN | PES_MIDDLE | PES_CENTER;
- acp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
- m_pText->Create(acp);
-
- m_pDescription = new CPWL_Label;
- PWL_CREATEPARAM dcp = cp;
- dcp.pParentWnd = this;
- dcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE |
- PES_AUTORETURN | PES_LEFT | PES_CENTER;
- dcp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
- m_pDescription->Create(dcp);
-}
-
-void CPWL_Signature::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
-
- if (m_bFlagExist) {
- CPWL_Utils::DrawIconAppStream(
- pDevice, pUser2Device, PWL_ICONTYPE_FOXIT,
- CPWL_Utils::GetCenterSquare(GetClientRect()),
- CPWL_Color(COLORTYPE_RGB, 0.91f, 0.855f, 0.92f),
- CPWL_Color(COLORTYPE_TRANSPARENT), 255);
- }
-}
-
-void CPWL_Signature::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp b/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp
deleted file mode 100644
index c19a233940..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Button.h"
-#include "fpdfsdk/include/pdfwindow/PWL_SpecialButton.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-CPWL_PushButton::CPWL_PushButton() {}
-
-CPWL_PushButton::~CPWL_PushButton() {}
-
-CFX_ByteString CPWL_PushButton::GetClassName() const {
- return "CPWL_PushButton";
-}
-
-CFX_FloatRect CPWL_PushButton::GetFocusRect() const {
- return CPWL_Utils::DeflateRect(GetWindowRect(), (FX_FLOAT)GetBorderWidth());
-}
-
-CPWL_CheckBox::CPWL_CheckBox() : m_bChecked(false) {}
-
-CPWL_CheckBox::~CPWL_CheckBox() {}
-
-CFX_ByteString CPWL_CheckBox::GetClassName() const {
- return "CPWL_CheckBox";
-}
-
-void CPWL_CheckBox::SetCheck(bool bCheck) {
- m_bChecked = bCheck;
-}
-
-bool CPWL_CheckBox::IsChecked() const {
- return m_bChecked;
-}
-
-FX_BOOL CPWL_CheckBox::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (IsReadOnly())
- return FALSE;
-
- SetCheck(!IsChecked());
- return TRUE;
-}
-
-FX_BOOL CPWL_CheckBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
- SetCheck(!IsChecked());
- return TRUE;
-}
-
-CPWL_RadioButton::CPWL_RadioButton() : m_bChecked(false) {}
-
-CPWL_RadioButton::~CPWL_RadioButton() {}
-
-CFX_ByteString CPWL_RadioButton::GetClassName() const {
- return "CPWL_RadioButton";
-}
-
-FX_BOOL CPWL_RadioButton::OnLButtonUp(const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (IsReadOnly())
- return FALSE;
-
- SetCheck(TRUE);
- return TRUE;
-}
-
-void CPWL_RadioButton::SetCheck(bool bCheck) {
- m_bChecked = bCheck;
-}
-
-bool CPWL_RadioButton::IsChecked() const {
- return m_bChecked;
-}
-
-FX_BOOL CPWL_RadioButton::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
- SetCheck(TRUE);
- return TRUE;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Utils.cpp b/fpdfsdk/src/pdfwindow/PWL_Utils.cpp
deleted file mode 100644
index 926ab3f0b7..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Utils.cpp
+++ /dev/null
@@ -1,3681 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-
-#include <algorithm>
-
-#include "fpdfsdk/include/pdfwindow/PWL_Icon.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
-
-CFX_ByteString CPWL_Utils::GetAppStreamFromArray(const CPWL_PathData* pPathData,
- int32_t nCount) {
- CFX_ByteTextBuf csAP;
-
- for (int32_t i = 0; i < nCount; i++) {
- switch (pPathData[i].type) {
- case PWLPT_MOVETO:
- csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " m\n";
- break;
- case PWLPT_LINETO:
- csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " l\n";
- break;
- case PWLPT_BEZIERTO:
- csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " "
- << pPathData[i + 1].point.x << " " << pPathData[i + 1].point.y
- << " " << pPathData[i + 2].point.x << " "
- << pPathData[i + 2].point.y << " c\n";
-
- i += 2;
- break;
- default:
- break;
- }
- }
-
- return csAP.GetByteString();
-}
-
-void CPWL_Utils::GetPathDataFromArray(CFX_PathData& path,
- const CPWL_PathData* pPathData,
- int32_t nCount) {
- path.SetPointCount(nCount);
-
- for (int32_t i = 0; i < nCount; i++) {
- switch (pPathData[i].type) {
- case PWLPT_MOVETO:
- path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y,
- FXPT_MOVETO);
- break;
- case PWLPT_LINETO:
- path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y,
- FXPT_LINETO);
- break;
- case PWLPT_BEZIERTO:
- path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y,
- FXPT_BEZIERTO);
- break;
- default:
- break;
- }
- }
-}
-
-CFX_FloatRect CPWL_Utils::MaxRect(const CFX_FloatRect& rect1,
- const CFX_FloatRect& rect2) {
- CFX_FloatRect rcRet;
-
- rcRet.left = PWL_MIN(rect1.left, rect2.left);
- rcRet.bottom = PWL_MIN(rect1.bottom, rect2.bottom);
- rcRet.right = PWL_MAX(rect1.right, rect2.right);
- rcRet.top = PWL_MAX(rect1.top, rect2.top);
-
- return rcRet;
-}
-
-CFX_FloatRect CPWL_Utils::OffsetRect(const CFX_FloatRect& rect,
- FX_FLOAT x,
- FX_FLOAT y) {
- return CFX_FloatRect(rect.left + x, rect.bottom + y, rect.right + x,
- rect.top + y);
-}
-
-FX_BOOL CPWL_Utils::ContainsRect(const CFX_FloatRect& rcParent,
- const CFX_FloatRect& rcChild) {
- return rcChild.left >= rcParent.left && rcChild.bottom >= rcParent.bottom &&
- rcChild.right <= rcParent.right && rcChild.top <= rcParent.top;
-}
-
-FX_BOOL CPWL_Utils::IntersectRect(const CFX_FloatRect& rect1,
- const CFX_FloatRect& rect2) {
- FX_FLOAT left = rect1.left > rect2.left ? rect1.left : rect2.left;
- FX_FLOAT right = rect1.right < rect2.right ? rect1.right : rect2.right;
- FX_FLOAT bottom = rect1.bottom > rect2.bottom ? rect1.bottom : rect2.bottom;
- FX_FLOAT top = rect1.top < rect2.top ? rect1.top : rect2.top;
-
- return left < right && bottom < top;
-}
-
-CFX_FloatPoint CPWL_Utils::OffsetPoint(const CFX_FloatPoint& point,
- FX_FLOAT x,
- FX_FLOAT y) {
- return CFX_FloatPoint(point.x + x, point.y + y);
-}
-
-CPVT_WordRange CPWL_Utils::OverlapWordRange(const CPVT_WordRange& wr1,
- const CPVT_WordRange& wr2) {
- CPVT_WordRange wrRet;
-
- if (wr2.EndPos.WordCmp(wr1.BeginPos) < 0 ||
- wr2.BeginPos.WordCmp(wr1.EndPos) > 0)
- return wrRet;
- if (wr1.EndPos.WordCmp(wr2.BeginPos) < 0 ||
- wr1.BeginPos.WordCmp(wr2.EndPos) > 0)
- return wrRet;
-
- if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) {
- wrRet.BeginPos = wr2.BeginPos;
- } else {
- wrRet.BeginPos = wr1.BeginPos;
- }
-
- if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) {
- wrRet.EndPos = wr1.EndPos;
- } else {
- wrRet.EndPos = wr2.EndPos;
- }
-
- return wrRet;
-}
-
-CFX_ByteString CPWL_Utils::GetAP_Check(const CFX_FloatRect& crBBox) {
- const FX_FLOAT fWidth = crBBox.right - crBBox.left;
- const FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_Point pts[8][3] = {{CPWL_Point(0.28f, 0.52f), CPWL_Point(0.27f, 0.48f),
- CPWL_Point(0.29f, 0.40f)},
- {CPWL_Point(0.30f, 0.33f), CPWL_Point(0.31f, 0.29f),
- CPWL_Point(0.31f, 0.28f)},
- {CPWL_Point(0.39f, 0.28f), CPWL_Point(0.49f, 0.29f),
- CPWL_Point(0.77f, 0.67f)},
- {CPWL_Point(0.76f, 0.68f), CPWL_Point(0.78f, 0.69f),
- CPWL_Point(0.76f, 0.75f)},
- {CPWL_Point(0.76f, 0.75f), CPWL_Point(0.73f, 0.80f),
- CPWL_Point(0.68f, 0.75f)},
- {CPWL_Point(0.68f, 0.74f), CPWL_Point(0.68f, 0.74f),
- CPWL_Point(0.44f, 0.47f)},
- {CPWL_Point(0.43f, 0.47f), CPWL_Point(0.40f, 0.47f),
- CPWL_Point(0.41f, 0.58f)},
- {CPWL_Point(0.40f, 0.60f), CPWL_Point(0.28f, 0.66f),
- CPWL_Point(0.30f, 0.56f)}};
-
- for (size_t i = 0; i < FX_ArraySize(pts); ++i) {
- for (size_t j = 0; j < FX_ArraySize(pts[0]); ++j) {
- pts[i][j].x = pts[i][j].x * fWidth + crBBox.left;
- pts[i][j].y *= pts[i][j].y * fHeight + crBBox.bottom;
- }
- }
-
- CFX_ByteTextBuf csAP;
- csAP << pts[0][0].x << " " << pts[0][0].y << " m\n";
-
- for (size_t i = 0; i < FX_ArraySize(pts); ++i) {
- size_t nNext = i < FX_ArraySize(pts) - 1 ? i + 1 : 0;
-
- FX_FLOAT px1 = pts[i][1].x - pts[i][0].x;
- FX_FLOAT py1 = pts[i][1].y - pts[i][0].y;
- FX_FLOAT px2 = pts[i][2].x - pts[nNext][0].x;
- FX_FLOAT py2 = pts[i][2].y - pts[nNext][0].y;
-
- csAP << pts[i][0].x + px1 * FX_BEZIER << " "
- << pts[i][0].y + py1 * FX_BEZIER << " "
- << pts[nNext][0].x + px2 * FX_BEZIER << " "
- << pts[nNext][0].y + py2 * FX_BEZIER << " " << pts[nNext][0].x << " "
- << pts[nNext][0].y << " c\n";
- }
-
- return csAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAP_Circle(const CFX_FloatRect& crBBox) {
- CFX_ByteTextBuf csAP;
-
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CFX_FloatPoint pt1(crBBox.left, crBBox.bottom + fHeight / 2);
- CFX_FloatPoint pt2(crBBox.left + fWidth / 2, crBBox.top);
- CFX_FloatPoint pt3(crBBox.right, crBBox.bottom + fHeight / 2);
- CFX_FloatPoint pt4(crBBox.left + fWidth / 2, crBBox.bottom);
-
- csAP << pt1.x << " " << pt1.y << " m\n";
-
- FX_FLOAT px = pt2.x - pt1.x;
- FX_FLOAT py = pt2.y - pt1.y;
-
- csAP << pt1.x << " " << pt1.y + py * FX_BEZIER << " "
- << pt2.x - px * FX_BEZIER << " " << pt2.y << " " << pt2.x << " " << pt2.y
- << " c\n";
-
- px = pt3.x - pt2.x;
- py = pt2.y - pt3.y;
-
- csAP << pt2.x + px * FX_BEZIER << " " << pt2.y << " " << pt3.x << " "
- << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " c\n";
-
- px = pt3.x - pt4.x;
- py = pt3.y - pt4.y;
-
- csAP << pt3.x << " " << pt3.y - py * FX_BEZIER << " "
- << pt4.x + px * FX_BEZIER << " " << pt4.y << " " << pt4.x << " " << pt4.y
- << " c\n";
-
- px = pt4.x - pt1.x;
- py = pt1.y - pt4.y;
-
- csAP << pt4.x - px * FX_BEZIER << " " << pt4.y << " " << pt1.x << " "
- << pt1.y - py * FX_BEZIER << " " << pt1.x << " " << pt1.y << " c\n";
-
- return csAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAP_Cross(const CFX_FloatRect& crBBox) {
- CFX_ByteTextBuf csAP;
-
- csAP << crBBox.left << " " << crBBox.top << " m\n";
- csAP << crBBox.right << " " << crBBox.bottom << " l\n";
- csAP << crBBox.left << " " << crBBox.bottom << " m\n";
- csAP << crBBox.right << " " << crBBox.top << " l\n";
-
- return csAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAP_Diamond(const CFX_FloatRect& crBBox) {
- CFX_ByteTextBuf csAP;
-
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CFX_FloatPoint pt1(crBBox.left, crBBox.bottom + fHeight / 2);
- CFX_FloatPoint pt2(crBBox.left + fWidth / 2, crBBox.top);
- CFX_FloatPoint pt3(crBBox.right, crBBox.bottom + fHeight / 2);
- CFX_FloatPoint pt4(crBBox.left + fWidth / 2, crBBox.bottom);
-
- csAP << pt1.x << " " << pt1.y << " m\n";
- csAP << pt2.x << " " << pt2.y << " l\n";
- csAP << pt3.x << " " << pt3.y << " l\n";
- csAP << pt4.x << " " << pt4.y << " l\n";
- csAP << pt1.x << " " << pt1.y << " l\n";
-
- return csAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAP_Square(const CFX_FloatRect& crBBox) {
- CFX_ByteTextBuf csAP;
-
- csAP << crBBox.left << " " << crBBox.top << " m\n";
- csAP << crBBox.right << " " << crBBox.top << " l\n";
- csAP << crBBox.right << " " << crBBox.bottom << " l\n";
- csAP << crBBox.left << " " << crBBox.bottom << " l\n";
- csAP << crBBox.left << " " << crBBox.top << " l\n";
-
- return csAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAP_Star(const CFX_FloatRect& crBBox) {
- CFX_ByteTextBuf csAP;
-
- FX_FLOAT fRadius =
- (crBBox.top - crBBox.bottom) / (1 + (FX_FLOAT)cos(FX_PI / 5.0f));
- CFX_FloatPoint ptCenter = CFX_FloatPoint((crBBox.left + crBBox.right) / 2.0f,
- (crBBox.top + crBBox.bottom) / 2.0f);
-
- FX_FLOAT px[5], py[5];
-
- FX_FLOAT fAngel = FX_PI / 10.0f;
-
- for (int32_t i = 0; i < 5; i++) {
- px[i] = ptCenter.x + fRadius * (FX_FLOAT)cos(fAngel);
- py[i] = ptCenter.y + fRadius * (FX_FLOAT)sin(fAngel);
-
- fAngel += FX_PI * 2 / 5.0f;
- }
-
- csAP << px[0] << " " << py[0] << " m\n";
-
- int32_t nNext = 0;
- for (int32_t j = 0; j < 5; j++) {
- nNext += 2;
- if (nNext >= 5)
- nNext -= 5;
- csAP << px[nNext] << " " << py[nNext] << " l\n";
- }
-
- return csAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAP_HalfCircle(const CFX_FloatRect& crBBox,
- FX_FLOAT fRotate) {
- CFX_ByteTextBuf csAP;
-
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CFX_FloatPoint pt1(-fWidth / 2, 0);
- CFX_FloatPoint pt2(0, fHeight / 2);
- CFX_FloatPoint pt3(fWidth / 2, 0);
-
- FX_FLOAT px, py;
-
- csAP << cos(fRotate) << " " << sin(fRotate) << " " << -sin(fRotate) << " "
- << cos(fRotate) << " " << crBBox.left + fWidth / 2 << " "
- << crBBox.bottom + fHeight / 2 << " cm\n";
-
- csAP << pt1.x << " " << pt1.y << " m\n";
-
- px = pt2.x - pt1.x;
- py = pt2.y - pt1.y;
-
- csAP << pt1.x << " " << pt1.y + py * FX_BEZIER << " "
- << pt2.x - px * FX_BEZIER << " " << pt2.y << " " << pt2.x << " " << pt2.y
- << " c\n";
-
- px = pt3.x - pt2.x;
- py = pt2.y - pt3.y;
-
- csAP << pt2.x + px * FX_BEZIER << " " << pt2.y << " " << pt3.x << " "
- << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " c\n";
-
- return csAP.GetByteString();
-}
-
-CFX_FloatRect CPWL_Utils::InflateRect(const CFX_FloatRect& rcRect,
- FX_FLOAT fSize) {
- if (rcRect.IsEmpty())
- return rcRect;
-
- CFX_FloatRect rcNew(rcRect.left - fSize, rcRect.bottom - fSize,
- rcRect.right + fSize, rcRect.top + fSize);
- rcNew.Normalize();
- return rcNew;
-}
-
-CFX_FloatRect CPWL_Utils::DeflateRect(const CFX_FloatRect& rcRect,
- FX_FLOAT fSize) {
- if (rcRect.IsEmpty())
- return rcRect;
-
- CFX_FloatRect rcNew(rcRect.left + fSize, rcRect.bottom + fSize,
- rcRect.right - fSize, rcRect.top - fSize);
- rcNew.Normalize();
- return rcNew;
-}
-
-CFX_FloatRect CPWL_Utils::ScaleRect(const CFX_FloatRect& rcRect,
- FX_FLOAT fScale) {
- FX_FLOAT fHalfWidth = (rcRect.right - rcRect.left) / 2.0f;
- FX_FLOAT fHalfHeight = (rcRect.top - rcRect.bottom) / 2.0f;
-
- CFX_FloatPoint ptCenter = CFX_FloatPoint((rcRect.left + rcRect.right) / 2,
- (rcRect.top + rcRect.bottom) / 2);
-
- return CFX_FloatRect(
- ptCenter.x - fHalfWidth * fScale, ptCenter.y - fHalfHeight * fScale,
- ptCenter.x + fHalfWidth * fScale, ptCenter.y + fHalfHeight * fScale);
-}
-
-CFX_ByteString CPWL_Utils::GetRectFillAppStream(const CFX_FloatRect& rect,
- const CPWL_Color& color) {
- CFX_ByteTextBuf sAppStream;
-
- CFX_ByteString sColor = GetColorAppStream(color, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << sColor;
- sAppStream << rect.left << " " << rect.bottom << " "
- << rect.right - rect.left << " " << rect.top - rect.bottom
- << " re f\nQ\n";
- }
-
- return sAppStream.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetCircleFillAppStream(const CFX_FloatRect& rect,
- const CPWL_Color& color) {
- CFX_ByteTextBuf sAppStream;
-
- CFX_ByteString sColor = GetColorAppStream(color, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << sColor << CPWL_Utils::GetAP_Circle(rect) << "f\nQ\n";
- }
-
- return sAppStream.GetByteString();
-}
-
-CFX_FloatRect CPWL_Utils::GetCenterSquare(const CFX_FloatRect& rect) {
- FX_FLOAT fWidth = rect.right - rect.left;
- FX_FLOAT fHeight = rect.top - rect.bottom;
-
- FX_FLOAT fCenterX = (rect.left + rect.right) / 2.0f;
- FX_FLOAT fCenterY = (rect.top + rect.bottom) / 2.0f;
-
- FX_FLOAT fRadius = (fWidth > fHeight) ? fHeight / 2 : fWidth / 2;
-
- return CFX_FloatRect(fCenterX - fRadius, fCenterY - fRadius,
- fCenterX + fRadius, fCenterY + fRadius);
-}
-
-CFX_ByteString CPWL_Utils::GetEditAppStream(IFX_Edit* pEdit,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange,
- FX_BOOL bContinuous,
- FX_WORD SubWord) {
- return IFX_Edit::GetEditAppearanceStream(pEdit, ptOffset, pRange, bContinuous,
- SubWord);
-}
-
-CFX_ByteString CPWL_Utils::GetEditSelAppStream(IFX_Edit* pEdit,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange) {
- return IFX_Edit::GetSelectAppearanceStream(pEdit, ptOffset, pRange);
-}
-
-static CFX_ByteString GetSquigglyAppearanceStream(FX_FLOAT fStartX,
- FX_FLOAT fEndX,
- FX_FLOAT fY,
- FX_FLOAT fStep) {
- CFX_ByteTextBuf sRet;
-
- sRet << "0 w\n" << fStartX << " " << fY << " m\n";
-
- FX_FLOAT fx;
- int32_t i;
-
- for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) {
- sRet << fx << " " << fY + (i & 1) * fStep << " l\n";
- }
-
- sRet << "S\n";
-
- return sRet.GetByteString();
-}
-
-static CFX_ByteString GetWordSpellCheckAppearanceStream(
- IFX_Edit_Iterator* pIterator,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange& wrWord) {
- CFX_ByteTextBuf sRet;
-
- FX_FLOAT fStartX = 0.0f;
- FX_FLOAT fEndX = 0.0f;
- FX_FLOAT fY = 0.0f;
- FX_FLOAT fStep = 0.0f;
-
- FX_BOOL bBreak = FALSE;
-
- if (pIterator) {
- pIterator->SetAt(wrWord.BeginPos);
-
- do {
- CPVT_WordPlace place = pIterator->GetAt();
-
- CPVT_Line line;
- if (pIterator->GetLine(line)) {
- fY = line.ptLine.y;
- fStep = (line.fLineAscent - line.fLineDescent) / 16.0f;
- }
-
- if (place.LineCmp(wrWord.BeginPos) == 0) {
- pIterator->SetAt(wrWord.BeginPos);
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- fStartX = word.ptWord.x;
- }
- } else {
- fStartX = line.ptLine.x;
- }
-
- if (place.LineCmp(wrWord.EndPos) == 0) {
- pIterator->SetAt(wrWord.EndPos);
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- fEndX = word.ptWord.x + word.fWidth;
- }
-
- bBreak = TRUE;
- } else {
- fEndX = line.ptLine.x + line.fLineWidth;
- }
-
- sRet << GetSquigglyAppearanceStream(
- fStartX + ptOffset.x, fEndX + ptOffset.x, fY + ptOffset.y, fStep);
-
- if (bBreak)
- break;
- } while (pIterator->NextLine());
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetSpellCheckAppStream(
- IFX_Edit* pEdit,
- IPWL_SpellCheck* pSpellCheck,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange) {
- CFX_ByteTextBuf sRet;
-
- if (pRange && pRange->IsExist()) {
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- pIterator->SetAt(pRange->BeginPos);
-
- FX_BOOL bLatinWord = FALSE;
- CPVT_WordPlace wpWordStart;
- CFX_ByteString sWord;
-
- CPVT_WordPlace oldplace;
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- if (FX_EDIT_ISLATINWORD(word.Word)) {
- if (!bLatinWord) {
- wpWordStart = place;
- bLatinWord = TRUE;
- }
-
- sWord += (char)word.Word;
- oldplace = place;
- } else {
- if (bLatinWord) {
- if (!pSpellCheck->CheckWord(sWord)) {
- sRet << GetWordSpellCheckAppearanceStream(
- pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace));
- pIterator->SetAt(place);
- }
- bLatinWord = FALSE;
- }
-
- sWord.Empty();
- }
- } else {
- if (bLatinWord) {
- if (!pSpellCheck->CheckWord(sWord))
- sRet << GetWordSpellCheckAppearanceStream(
- pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace));
- bLatinWord = FALSE;
- sWord.Empty();
- }
- }
- }
-
- if (bLatinWord) {
- if (!pSpellCheck->CheckWord(sWord))
- sRet << GetWordSpellCheckAppearanceStream(
- pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace));
-
- bLatinWord = FALSE;
- sWord.Empty();
- }
- }
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetTextAppStream(const CFX_FloatRect& rcBBox,
- IFX_Edit_FontMap* pFontMap,
- const CFX_WideString& sText,
- int32_t nAlignmentH,
- int32_t nAlignmentV,
- FX_FLOAT fFontSize,
- FX_BOOL bMultiLine,
- FX_BOOL bAutoReturn,
- const CPWL_Color& crText) {
- CFX_ByteTextBuf sRet;
-
- if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
- pEdit->SetFontMap(pFontMap);
- pEdit->SetPlateRect(rcBBox);
- pEdit->SetAlignmentH(nAlignmentH);
- pEdit->SetAlignmentV(nAlignmentV);
- pEdit->SetMultiLine(bMultiLine);
- pEdit->SetAutoReturn(bAutoReturn);
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
- pEdit->SetText(sText.c_str());
-
- CFX_ByteString sEdit =
- CPWL_Utils::GetEditAppStream(pEdit, CFX_FloatPoint(0.0f, 0.0f));
- if (sEdit.GetLength() > 0) {
- sRet << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
- << "ET\n";
- }
- IFX_Edit::DelEdit(pEdit);
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetPushButtonAppStream(const CFX_FloatRect& rcBBox,
- IFX_Edit_FontMap* pFontMap,
- CPDF_Stream* pIconStream,
- CPDF_IconFit& IconFit,
- const CFX_WideString& sLabel,
- const CPWL_Color& crText,
- FX_FLOAT fFontSize,
- int32_t nLayOut) {
- const FX_FLOAT fAutoFontScale = 1.0f / 3.0f;
-
- if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
- pEdit->SetFontMap(pFontMap);
- pEdit->SetAlignmentH(1);
- pEdit->SetAlignmentV(1);
- pEdit->SetMultiLine(FALSE);
- pEdit->SetAutoReturn(FALSE);
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
- pEdit->SetText(sLabel.c_str());
-
- CFX_FloatRect rcLabelContent = pEdit->GetContentRect();
- CPWL_Icon Icon;
- PWL_CREATEPARAM cp;
- cp.dwFlags = PWS_VISIBLE;
- Icon.Create(cp);
- Icon.SetIconFit(&IconFit);
- Icon.SetPDFStream(pIconStream);
-
- CFX_FloatRect rcLabel = CFX_FloatRect(0, 0, 0, 0);
- CFX_FloatRect rcIcon = CFX_FloatRect(0, 0, 0, 0);
- FX_FLOAT fWidth = 0.0f;
- FX_FLOAT fHeight = 0.0f;
-
- switch (nLayOut) {
- case PPBL_LABEL:
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- break;
- case PPBL_ICON:
- rcIcon = rcBBox;
- rcLabel = CFX_FloatRect(0, 0, 0, 0);
- break;
- case PPBL_ICONTOPLABELBOTTOM:
-
- if (pIconStream) {
- if (IsFloatZero(fFontSize)) {
- fHeight = rcBBox.top - rcBBox.bottom;
- rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right,
- rcBBox.bottom + fHeight * fAutoFontScale);
- rcIcon = CFX_FloatRect(rcBBox.left, rcLabel.top, rcBBox.right,
- rcBBox.top);
- } else {
- fHeight = rcLabelContent.Height();
-
- if (rcBBox.bottom + fHeight > rcBBox.top) {
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- rcLabel = rcBBox;
- } else {
- rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right,
- rcBBox.bottom + fHeight);
- rcIcon = CFX_FloatRect(rcBBox.left, rcLabel.top, rcBBox.right,
- rcBBox.top);
- }
- }
- } else {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- }
-
- break;
- case PPBL_LABELTOPICONBOTTOM:
-
- if (pIconStream) {
- if (IsFloatZero(fFontSize)) {
- fHeight = rcBBox.top - rcBBox.bottom;
- rcLabel = CFX_FloatRect(rcBBox.left,
- rcBBox.top - fHeight * fAutoFontScale,
- rcBBox.right, rcBBox.top);
- rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right,
- rcLabel.bottom);
- } else {
- fHeight = rcLabelContent.Height();
-
- if (rcBBox.bottom + fHeight > rcBBox.top) {
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- rcLabel = rcBBox;
- } else {
- rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.top - fHeight,
- rcBBox.right, rcBBox.top);
- rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right,
- rcLabel.bottom);
- }
- }
- } else {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- }
-
- break;
- case PPBL_ICONLEFTLABELRIGHT:
-
- if (pIconStream) {
- if (IsFloatZero(fFontSize)) {
- fWidth = rcBBox.right - rcBBox.left;
- rcLabel = CFX_FloatRect(rcBBox.right - fWidth * fAutoFontScale,
- rcBBox.bottom, rcBBox.right, rcBBox.top);
- rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcLabel.left,
- rcBBox.top);
-
- if (rcLabelContent.Width() < fWidth * fAutoFontScale) {
- } else {
- if (rcLabelContent.Width() < fWidth) {
- rcLabel =
- CFX_FloatRect(rcBBox.right - rcLabelContent.Width(),
- rcBBox.bottom, rcBBox.right, rcBBox.top);
- rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcLabel.left,
- rcBBox.top);
- } else {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- }
- }
- } else {
- fWidth = rcLabelContent.Width();
-
- if (rcBBox.left + fWidth > rcBBox.right) {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- } else {
- rcLabel = CFX_FloatRect(rcBBox.right - fWidth, rcBBox.bottom,
- rcBBox.right, rcBBox.top);
- rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcLabel.left,
- rcBBox.top);
- }
- }
- } else {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- }
-
- break;
- case PPBL_LABELLEFTICONRIGHT:
-
- if (pIconStream) {
- if (IsFloatZero(fFontSize)) {
- fWidth = rcBBox.right - rcBBox.left;
- rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom,
- rcBBox.left + fWidth * fAutoFontScale,
- rcBBox.top);
- rcIcon = CFX_FloatRect(rcLabel.right, rcBBox.bottom, rcBBox.right,
- rcBBox.top);
-
- if (rcLabelContent.Width() < fWidth * fAutoFontScale) {
- } else {
- if (rcLabelContent.Width() < fWidth) {
- rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom,
- rcBBox.left + rcLabelContent.Width(),
- rcBBox.top);
- rcIcon = CFX_FloatRect(rcLabel.right, rcBBox.bottom,
- rcBBox.right, rcBBox.top);
- } else {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- }
- }
- } else {
- fWidth = rcLabelContent.Width();
-
- if (rcBBox.left + fWidth > rcBBox.right) {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- } else {
- rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom,
- rcBBox.left + fWidth, rcBBox.top);
- rcIcon = CFX_FloatRect(rcLabel.right, rcBBox.bottom, rcBBox.right,
- rcBBox.top);
- }
- }
- } else {
- rcLabel = rcBBox;
- rcIcon = CFX_FloatRect(0, 0, 0, 0);
- }
-
- break;
- case PPBL_LABELOVERICON:
- rcLabel = rcBBox;
- rcIcon = rcBBox;
- break;
- }
-
- CFX_ByteTextBuf sAppStream, sTemp;
-
- if (!rcIcon.IsEmpty()) {
- Icon.Move(rcIcon, FALSE, FALSE);
- sTemp << Icon.GetImageAppStream();
- }
-
- Icon.Destroy();
-
- if (!rcLabel.IsEmpty()) {
- pEdit->SetPlateRect(rcLabel);
- CFX_ByteString sEdit =
- CPWL_Utils::GetEditAppStream(pEdit, CFX_FloatPoint(0.0f, 0.0f));
- if (sEdit.GetLength() > 0) {
- sTemp << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
- << "ET\n";
- }
- }
-
- IFX_Edit::DelEdit(pEdit);
-
- if (sTemp.GetSize() > 0) {
- sAppStream << "q\n" << rcBBox.left << " " << rcBBox.bottom << " "
- << rcBBox.right - rcBBox.left << " "
- << rcBBox.top - rcBBox.bottom << " re W n\n";
- sAppStream << sTemp << "Q\n";
- }
-
- return sAppStream.GetByteString();
- }
-
- return "";
-}
-
-CFX_ByteString CPWL_Utils::GetColorAppStream(const CPWL_Color& color,
- const FX_BOOL& bFillOrStroke) {
- CFX_ByteTextBuf sColorStream;
-
- switch (color.nColorType) {
- case COLORTYPE_RGB:
- sColorStream << color.fColor1 << " " << color.fColor2 << " "
- << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG")
- << "\n";
- break;
- case COLORTYPE_GRAY:
- sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G")
- << "\n";
- break;
- case COLORTYPE_CMYK:
- sColorStream << color.fColor1 << " " << color.fColor2 << " "
- << color.fColor3 << " " << color.fColor4 << " "
- << (bFillOrStroke ? "k" : "K") << "\n";
- break;
- }
-
- return sColorStream.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetBorderAppStream(const CFX_FloatRect& rect,
- FX_FLOAT fWidth,
- const CPWL_Color& color,
- const CPWL_Color& crLeftTop,
- const CPWL_Color& crRightBottom,
- int32_t nStyle,
- const CPWL_Dash& dash) {
- CFX_ByteTextBuf sAppStream;
- CFX_ByteString sColor;
-
- FX_FLOAT fLeft = rect.left;
- FX_FLOAT fRight = rect.right;
- FX_FLOAT fTop = rect.top;
- FX_FLOAT fBottom = rect.bottom;
-
- if (fWidth > 0.0f) {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- sAppStream << "q\n";
-
- switch (nStyle) {
- default:
- case PBS_SOLID:
- sColor = CPWL_Utils::GetColorAppStream(color, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
- << fTop - fBottom << " re\n";
- sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " "
- << fRight - fLeft - fWidth * 2 << " "
- << fTop - fBottom - fWidth * 2 << " re\n";
- sAppStream << "f*\n";
- }
- break;
- case PBS_DASH:
- sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fWidth << " w"
- << " [" << dash.nDash << " " << dash.nGap << "] "
- << dash.nPhase << " d\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
- << " m\n";
- sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2
- << " l\n";
- sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2
- << " l\n";
- sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2
- << " l\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
- << " l S\n";
- }
- break;
- case PBS_BEVELED:
- case PBS_INSET:
- sColor = CPWL_Utils::GetColorAppStream(crLeftTop, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
- << " m\n";
- sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth
- << " l\n";
- sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
- << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
- << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
- << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " "
- << fBottom + fHalfWidth * 2 << " l f\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crRightBottom, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
- << " m\n";
- sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth
- << " l\n";
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
- << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " "
- << fBottom + fHalfWidth * 2 << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " "
- << fBottom + fHalfWidth * 2 << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
- << " l f\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(color, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
- << fTop - fBottom << " re\n";
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
- << fRight - fLeft - fHalfWidth * 2 << " "
- << fTop - fBottom - fHalfWidth * 2 << " re f*\n";
- }
- break;
- case PBS_UNDERLINED:
- sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fWidth << " w\n";
- sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n";
- sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n";
- }
- break;
- }
-
- sAppStream << "Q\n";
- }
-
- return sAppStream.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetCircleBorderAppStream(
- const CFX_FloatRect& rect,
- FX_FLOAT fWidth,
- const CPWL_Color& color,
- const CPWL_Color& crLeftTop,
- const CPWL_Color& crRightBottom,
- int32_t nStyle,
- const CPWL_Dash& dash) {
- CFX_ByteTextBuf sAppStream;
- CFX_ByteString sColor;
-
- if (fWidth > 0.0f) {
- sAppStream << "q\n";
-
- switch (nStyle) {
- default:
- case PBS_SOLID:
- case PBS_UNDERLINED: {
- sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_Circle(
- CPWL_Utils::DeflateRect(rect, fWidth / 2.0f))
- << " S\nQ\n";
- }
- } break;
- case PBS_DASH: {
- sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fWidth << " w\n"
- << "[" << dash.nDash << " " << dash.nGap << "] "
- << dash.nPhase << " d\n" << sColor
- << CPWL_Utils::GetAP_Circle(
- CPWL_Utils::DeflateRect(rect, fWidth / 2.0f))
- << " S\nQ\n";
- }
- } break;
- case PBS_BEVELED: {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_HalfCircle(
- CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
- FX_PI / 4.0f)
- << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_HalfCircle(
- CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
- FX_PI * 5 / 4.0f)
- << " S\nQ\n";
- }
- } break;
- case PBS_INSET: {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_HalfCircle(
- CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
- FX_PI / 4.0f)
- << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_HalfCircle(
- CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
- FX_PI * 5 / 4.0f)
- << " S\nQ\n";
- }
- } break;
- }
-
- sAppStream << "Q\n";
- }
-
- return sAppStream.GetByteString();
-}
-
-CPWL_Color CPWL_Utils::SubstractColor(const CPWL_Color& sColor,
- FX_FLOAT fColorSub) {
- CPWL_Color sRet;
- sRet.nColorType = sColor.nColorType;
-
- switch (sColor.nColorType) {
- case COLORTYPE_TRANSPARENT:
- sRet.nColorType = COLORTYPE_RGB;
- sRet.fColor1 = PWL_MAX(1 - fColorSub, 0.0f);
- sRet.fColor2 = PWL_MAX(1 - fColorSub, 0.0f);
- sRet.fColor3 = PWL_MAX(1 - fColorSub, 0.0f);
- break;
- case COLORTYPE_RGB:
- case COLORTYPE_GRAY:
- case COLORTYPE_CMYK:
- sRet.fColor1 = PWL_MAX(sColor.fColor1 - fColorSub, 0.0f);
- sRet.fColor2 = PWL_MAX(sColor.fColor2 - fColorSub, 0.0f);
- sRet.fColor3 = PWL_MAX(sColor.fColor3 - fColorSub, 0.0f);
- sRet.fColor4 = PWL_MAX(sColor.fColor4 - fColorSub, 0.0f);
- break;
- }
-
- return sRet;
-}
-
-CPWL_Color CPWL_Utils::DevideColor(const CPWL_Color& sColor,
- FX_FLOAT fColorDevide) {
- CPWL_Color sRet;
- sRet.nColorType = sColor.nColorType;
-
- switch (sColor.nColorType) {
- case COLORTYPE_TRANSPARENT:
- sRet.nColorType = COLORTYPE_RGB;
- sRet.fColor1 = 1 / fColorDevide;
- sRet.fColor2 = 1 / fColorDevide;
- sRet.fColor3 = 1 / fColorDevide;
- break;
- case COLORTYPE_RGB:
- case COLORTYPE_GRAY:
- case COLORTYPE_CMYK:
- sRet = sColor;
- sRet.fColor1 /= fColorDevide;
- sRet.fColor2 /= fColorDevide;
- sRet.fColor3 /= fColorDevide;
- sRet.fColor4 /= fColorDevide;
- break;
- }
-
- return sRet;
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Check(const CFX_FloatRect& rcBBox,
- const CPWL_Color& crText) {
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
- << CPWL_Utils::GetAP_Check(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Circle(const CFX_FloatRect& rcBBox,
- const CPWL_Color& crText) {
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
- << CPWL_Utils::GetAP_Circle(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Cross(const CFX_FloatRect& rcBBox,
- const CPWL_Color& crText) {
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, FALSE)
- << CPWL_Utils::GetAP_Cross(rcBBox) << "S\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Diamond(const CFX_FloatRect& rcBBox,
- const CPWL_Color& crText) {
- CFX_ByteTextBuf sAP;
- sAP << "q\n1 w\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
- << CPWL_Utils::GetAP_Diamond(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Square(const CFX_FloatRect& rcBBox,
- const CPWL_Color& crText) {
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
- << CPWL_Utils::GetAP_Square(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Star(const CFX_FloatRect& rcBBox,
- const CPWL_Color& crText) {
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
- << CPWL_Utils::GetAP_Star(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetCheckBoxAppStream(const CFX_FloatRect& rcBBox,
- int32_t nStyle,
- const CPWL_Color& crText) {
- CFX_FloatRect rcCenter = GetCenterSquare(rcBBox);
- switch (nStyle) {
- default:
- case PCS_CHECK:
- return GetAppStream_Check(rcCenter, crText);
- case PCS_CIRCLE:
- return GetAppStream_Circle(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
- case PCS_CROSS:
- return GetAppStream_Cross(rcCenter, crText);
- case PCS_DIAMOND:
- return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
- case PCS_SQUARE:
- return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
- case PCS_STAR:
- return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
- }
-}
-
-CFX_ByteString CPWL_Utils::GetRadioButtonAppStream(const CFX_FloatRect& rcBBox,
- int32_t nStyle,
- const CPWL_Color& crText) {
- CFX_FloatRect rcCenter = GetCenterSquare(rcBBox);
- switch (nStyle) {
- default:
- case PCS_CHECK:
- return GetAppStream_Check(rcCenter, crText);
- case PCS_CIRCLE:
- return GetAppStream_Circle(ScaleRect(rcCenter, 1.0f / 2.0f), crText);
- case PCS_CROSS:
- return GetAppStream_Cross(rcCenter, crText);
- case PCS_DIAMOND:
- return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
- case PCS_SQUARE:
- return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
- case PCS_STAR:
- return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
- }
-}
-
-CFX_ByteString CPWL_Utils::GetDropButtonAppStream(const CFX_FloatRect& rcBBox) {
- CFX_ByteTextBuf sAppStream;
-
- if (!rcBBox.IsEmpty()) {
- sAppStream << "q\n" << CPWL_Utils::GetColorAppStream(
- CPWL_Color(COLORTYPE_RGB, 220.0f / 255.0f,
- 220.0f / 255.0f, 220.0f / 255.0f),
- TRUE);
- sAppStream << rcBBox.left << " " << rcBBox.bottom << " "
- << rcBBox.right - rcBBox.left << " "
- << rcBBox.top - rcBBox.bottom << " re f\n";
- sAppStream << "Q\n";
-
- sAppStream << "q\n" << CPWL_Utils::GetBorderAppStream(
- rcBBox, 2, CPWL_Color(COLORTYPE_GRAY, 0),
- CPWL_Color(COLORTYPE_GRAY, 1),
- CPWL_Color(COLORTYPE_GRAY, 0.5), PBS_BEVELED,
- CPWL_Dash(3, 0, 0))
- << "Q\n";
-
- CFX_FloatPoint ptCenter = CFX_FloatPoint((rcBBox.left + rcBBox.right) / 2,
- (rcBBox.top + rcBBox.bottom) / 2);
- if (IsFloatBigger(rcBBox.right - rcBBox.left, 6) &&
- IsFloatBigger(rcBBox.top - rcBBox.bottom, 6)) {
- sAppStream << "q\n"
- << " 0 g\n";
- sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n";
- sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n";
- sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n";
- sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n";
- sAppStream << "Q\n";
- }
- }
-
- return sAppStream.GetByteString();
-}
-
-void CPWL_Utils::ConvertCMYK2GRAY(FX_FLOAT dC,
- FX_FLOAT dM,
- FX_FLOAT dY,
- FX_FLOAT dK,
- FX_FLOAT& dGray) {
- if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 ||
- dK > 1)
- return;
- dGray = 1.0f - std::min(1.0f, 0.3f * dC + 0.59f * dM + 0.11f * dY + dK);
-}
-
-void CPWL_Utils::ConvertGRAY2CMYK(FX_FLOAT dGray,
- FX_FLOAT& dC,
- FX_FLOAT& dM,
- FX_FLOAT& dY,
- FX_FLOAT& dK) {
- if (dGray < 0 || dGray > 1)
- return;
- dC = 0.0f;
- dM = 0.0f;
- dY = 0.0f;
- dK = 1.0f - dGray;
-}
-
-void CPWL_Utils::ConvertGRAY2RGB(FX_FLOAT dGray,
- FX_FLOAT& dR,
- FX_FLOAT& dG,
- FX_FLOAT& dB) {
- if (dGray < 0 || dGray > 1)
- return;
- dR = dGray;
- dG = dGray;
- dB = dGray;
-}
-
-void CPWL_Utils::ConvertRGB2GRAY(FX_FLOAT dR,
- FX_FLOAT dG,
- FX_FLOAT dB,
- FX_FLOAT& dGray) {
- if (dR < 0 || dR > 1 || dG < 0 || dG > 0 || dB < 0 || dB > 1)
- return;
- dGray = 0.3f * dR + 0.59f * dG + 0.11f * dB;
-}
-
-void CPWL_Utils::ConvertCMYK2RGB(FX_FLOAT dC,
- FX_FLOAT dM,
- FX_FLOAT dY,
- FX_FLOAT dK,
- FX_FLOAT& dR,
- FX_FLOAT& dG,
- FX_FLOAT& dB) {
- if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 ||
- dK > 1)
- return;
- dR = 1.0f - std::min(1.0f, dC + dK);
- dG = 1.0f - std::min(1.0f, dM + dK);
- dB = 1.0f - std::min(1.0f, dY + dK);
-}
-
-void CPWL_Utils::ConvertRGB2CMYK(FX_FLOAT dR,
- FX_FLOAT dG,
- FX_FLOAT dB,
- FX_FLOAT& dC,
- FX_FLOAT& dM,
- FX_FLOAT& dY,
- FX_FLOAT& dK) {
- if (dR < 0 || dR > 1 || dG < 0 || dG > 1 || dB < 0 || dB > 1)
- return;
-
- dC = 1.0f - dR;
- dM = 1.0f - dG;
- dY = 1.0f - dB;
- dK = std::min(dC, std::min(dM, dY));
-}
-
-void CPWL_Utils::PWLColorToARGB(const CPWL_Color& color,
- int32_t& alpha,
- FX_FLOAT& red,
- FX_FLOAT& green,
- FX_FLOAT& blue) {
- switch (color.nColorType) {
- case COLORTYPE_TRANSPARENT: {
- alpha = 0;
- } break;
- case COLORTYPE_GRAY: {
- ConvertGRAY2RGB(color.fColor1, red, green, blue);
- } break;
- case COLORTYPE_RGB: {
- red = color.fColor1;
- green = color.fColor2;
- blue = color.fColor3;
- } break;
- case COLORTYPE_CMYK: {
- ConvertCMYK2RGB(color.fColor1, color.fColor2, color.fColor3,
- color.fColor4, red, green, blue);
- } break;
- }
-}
-
-FX_COLORREF CPWL_Utils::PWLColorToFXColor(const CPWL_Color& color,
- int32_t nTransparancy) {
- int32_t nAlpha = nTransparancy;
- FX_FLOAT dRed = 0;
- FX_FLOAT dGreen = 0;
- FX_FLOAT dBlue = 0;
-
- PWLColorToARGB(color, nAlpha, dRed, dGreen, dBlue);
-
- return ArgbEncode(nAlpha, (int32_t)(dRed * 255), (int32_t)(dGreen * 255),
- (int32_t)(dBlue * 255));
-}
-
-void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- const CFX_FloatRect& rect,
- const FX_COLORREF& color) {
- CFX_PathData path;
- CFX_FloatRect rcTemp(rect);
- path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top);
- pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_WINDING);
-}
-
-void CPWL_Utils::DrawFillArea(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- const CFX_FloatPoint* pPts,
- int32_t nCount,
- const FX_COLORREF& color) {
- CFX_PathData path;
- path.SetPointCount(nCount);
-
- path.SetPoint(0, pPts[0].x, pPts[0].y, FXPT_MOVETO);
- for (int32_t i = 1; i < nCount; i++)
- path.SetPoint(i, pPts[i].x, pPts[i].y, FXPT_LINETO);
-
- pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::DrawStrokeRect(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- const CFX_FloatRect& rect,
- const FX_COLORREF& color,
- FX_FLOAT fWidth) {
- CFX_PathData path;
- CFX_FloatRect rcTemp(rect);
- path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::DrawStrokeLine(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- const CFX_FloatPoint& ptMoveTo,
- const CFX_FloatPoint& ptLineTo,
- const FX_COLORREF& color,
- FX_FLOAT fWidth) {
- CFX_PathData path;
- path.SetPointCount(2);
- path.SetPoint(0, ptMoveTo.x, ptMoveTo.y, FXPT_MOVETO);
- path.SetPoint(1, ptLineTo.x, ptLineTo.y, FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- const CFX_FloatRect& rect,
- const CPWL_Color& color,
- int32_t nTransparancy) {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rect,
- PWLColorToFXColor(color, nTransparancy));
-}
-
-void CPWL_Utils::DrawShadow(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- FX_BOOL bVertical,
- FX_BOOL bHorizontal,
- CFX_FloatRect rect,
- int32_t nTransparancy,
- int32_t nStartGray,
- int32_t nEndGray) {
- FX_FLOAT fStepGray = 1.0f;
-
- if (bVertical) {
- fStepGray = (nEndGray - nStartGray) / rect.Height();
-
- for (FX_FLOAT fy = rect.bottom + 0.5f; fy <= rect.top - 0.5f; fy += 1.0f) {
- int32_t nGray = nStartGray + (int32_t)(fStepGray * (fy - rect.bottom));
- CPWL_Utils::DrawStrokeLine(
- pDevice, pUser2Device, CFX_FloatPoint(rect.left, fy),
- CFX_FloatPoint(rect.right, fy),
- ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f);
- }
- }
-
- if (bHorizontal) {
- fStepGray = (nEndGray - nStartGray) / rect.Width();
-
- for (FX_FLOAT fx = rect.left + 0.5f; fx <= rect.right - 0.5f; fx += 1.0f) {
- int32_t nGray = nStartGray + (int32_t)(fStepGray * (fx - rect.left));
- CPWL_Utils::DrawStrokeLine(
- pDevice, pUser2Device, CFX_FloatPoint(fx, rect.bottom),
- CFX_FloatPoint(fx, rect.top),
- ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f);
- }
- }
-}
-
-void CPWL_Utils::DrawBorder(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- const CFX_FloatRect& rect,
- FX_FLOAT fWidth,
- const CPWL_Color& color,
- const CPWL_Color& crLeftTop,
- const CPWL_Color& crRightBottom,
- int32_t nStyle,
- int32_t nTransparancy) {
- FX_FLOAT fLeft = rect.left;
- FX_FLOAT fRight = rect.right;
- FX_FLOAT fTop = rect.top;
- FX_FLOAT fBottom = rect.bottom;
-
- if (fWidth > 0.0f) {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- switch (nStyle) {
- default:
- case PBS_SOLID: {
- CFX_PathData path;
- path.AppendRect(fLeft, fBottom, fRight, fTop);
- path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth,
- fTop - fWidth);
- pDevice->DrawPath(&path, pUser2Device, NULL,
- PWLColorToFXColor(color, nTransparancy), 0,
- FXFILL_ALTERNATE);
- } break;
- case PBS_DASH: {
- CFX_PathData path;
-
- path.SetPointCount(5);
- path.SetPoint(0, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f,
- FXPT_MOVETO);
- path.SetPoint(1, fLeft + fWidth / 2.0f, fTop - fWidth / 2.0f,
- FXPT_LINETO);
- path.SetPoint(2, fRight - fWidth / 2.0f, fTop - fWidth / 2.0f,
- FXPT_LINETO);
- path.SetPoint(3, fRight - fWidth / 2.0f, fBottom + fWidth / 2.0f,
- FXPT_LINETO);
- path.SetPoint(4, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f,
- FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.SetDashCount(2);
- gsd.m_DashArray[0] = 3.0f;
- gsd.m_DashArray[1] = 3.0f;
- gsd.m_DashPhase = 0;
-
- gsd.m_LineWidth = fWidth;
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0,
- PWLColorToFXColor(color, nTransparancy),
- FXFILL_WINDING);
- } break;
- case PBS_BEVELED:
- case PBS_INSET: {
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fHalfWidth;
-
- CFX_PathData pathLT;
-
- pathLT.SetPointCount(7);
- pathLT.SetPoint(0, fLeft + fHalfWidth, fBottom + fHalfWidth,
- FXPT_MOVETO);
- pathLT.SetPoint(1, fLeft + fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
- pathLT.SetPoint(2, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
- pathLT.SetPoint(3, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2,
- FXPT_LINETO);
- pathLT.SetPoint(4, fLeft + fHalfWidth * 2, fTop - fHalfWidth * 2,
- FXPT_LINETO);
- pathLT.SetPoint(5, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2,
- FXPT_LINETO);
- pathLT.SetPoint(6, fLeft + fHalfWidth, fBottom + fHalfWidth,
- FXPT_LINETO);
-
- pDevice->DrawPath(&pathLT, pUser2Device, &gsd,
- PWLColorToFXColor(crLeftTop, nTransparancy), 0,
- FXFILL_ALTERNATE);
-
- CFX_PathData pathRB;
-
- pathRB.SetPointCount(7);
- pathRB.SetPoint(0, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_MOVETO);
- pathRB.SetPoint(1, fRight - fHalfWidth, fBottom + fHalfWidth,
- FXPT_LINETO);
- pathRB.SetPoint(2, fLeft + fHalfWidth, fBottom + fHalfWidth,
- FXPT_LINETO);
- pathRB.SetPoint(3, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2,
- FXPT_LINETO);
- pathRB.SetPoint(4, fRight - fHalfWidth * 2, fBottom + fHalfWidth * 2,
- FXPT_LINETO);
- pathRB.SetPoint(5, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2,
- FXPT_LINETO);
- pathRB.SetPoint(6, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
-
- pDevice->DrawPath(&pathRB, pUser2Device, &gsd,
- PWLColorToFXColor(crRightBottom, nTransparancy), 0,
- FXFILL_ALTERNATE);
-
- CFX_PathData path;
-
- path.AppendRect(fLeft, fBottom, fRight, fTop);
- path.AppendRect(fLeft + fHalfWidth, fBottom + fHalfWidth,
- fRight - fHalfWidth, fTop - fHalfWidth);
-
- pDevice->DrawPath(&path, pUser2Device, &gsd,
- PWLColorToFXColor(color, nTransparancy), 0,
- FXFILL_ALTERNATE);
- } break;
- case PBS_UNDERLINED: {
- CFX_PathData path;
-
- path.SetPointCount(2);
- path.SetPoint(0, fLeft, fBottom + fWidth / 2, FXPT_MOVETO);
- path.SetPoint(1, fRight, fBottom + fWidth / 2, FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0,
- PWLColorToFXColor(color, nTransparancy),
- FXFILL_ALTERNATE);
- } break;
- case PBS_SHADOW: {
- CFX_PathData path;
- path.AppendRect(fLeft, fBottom, fRight, fTop);
- path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth,
- fTop - fWidth);
- pDevice->DrawPath(&path, pUser2Device, NULL,
- PWLColorToFXColor(color, nTransparancy / 2), 0,
- FXFILL_ALTERNATE);
- } break;
- }
- }
-}
-
-static void AddSquigglyPath(CFX_PathData& PathData,
- FX_FLOAT fStartX,
- FX_FLOAT fEndX,
- FX_FLOAT fY,
- FX_FLOAT fStep) {
- PathData.AddPointCount(1);
- PathData.SetPoint(PathData.GetPointCount() - 1, fStartX, fY, FXPT_MOVETO);
-
- FX_FLOAT fx;
- int32_t i;
-
- for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) {
- PathData.AddPointCount(1);
- PathData.SetPoint(PathData.GetPointCount() - 1, fx, fY + (i & 1) * fStep,
- FXPT_LINETO);
- }
-}
-
-static void AddSpellCheckObj(CFX_PathData& PathData,
- IFX_Edit* pEdit,
- const CPVT_WordRange& wrWord) {
- FX_FLOAT fStartX = 0.0f;
- FX_FLOAT fEndX = 0.0f;
- FX_FLOAT fY = 0.0f;
- FX_FLOAT fStep = 0.0f;
-
- FX_BOOL bBreak = FALSE;
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- pIterator->SetAt(wrWord.BeginPos);
-
- do {
- CPVT_WordPlace place = pIterator->GetAt();
-
- CPVT_Line line;
- if (pIterator->GetLine(line)) {
- fY = line.ptLine.y;
- fStep = (line.fLineAscent - line.fLineDescent) / 16.0f;
- }
-
- if (place.LineCmp(wrWord.BeginPos) == 0) {
- pIterator->SetAt(wrWord.BeginPos);
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- fStartX = word.ptWord.x;
- }
- } else {
- fStartX = line.ptLine.x;
- }
-
- if (place.LineCmp(wrWord.EndPos) == 0) {
- pIterator->SetAt(wrWord.EndPos);
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- fEndX = word.ptWord.x + word.fWidth;
- }
-
- bBreak = TRUE;
- } else {
- fEndX = line.ptLine.x + line.fLineWidth;
- }
-
- AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep);
-
- if (bBreak)
- break;
- } while (pIterator->NextLine());
- }
-}
-
-void CPWL_Utils::DrawEditSpellCheck(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- IFX_Edit* pEdit,
- const CFX_FloatRect& rcClip,
- const CFX_FloatPoint& ptOffset,
- const CPVT_WordRange* pRange,
- IPWL_SpellCheck* pSpellCheck) {
- const FX_COLORREF crSpell = ArgbEncode(255, 255, 0, 0);
-
- // for spellcheck
- FX_BOOL bLatinWord = FALSE;
- CPVT_WordPlace wpWordStart;
- CFX_ByteString sLatinWord;
-
- CFX_PathData pathSpell;
-
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty()) {
- CFX_FloatRect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- pDevice->SetClip_Rect(rcTemp.ToFxRect());
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
- if (pEdit->GetFontMap()) {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0)
- break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- if (FX_EDIT_ISLATINWORD(word.Word)) {
- if (!bLatinWord) {
- wpWordStart = place;
- bLatinWord = TRUE;
- }
-
- sLatinWord += (char)word.Word;
- } else {
- if (bLatinWord) {
- if (!sLatinWord.IsEmpty()) {
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) {
- AddSpellCheckObj(pathSpell, pEdit,
- CPVT_WordRange(wpWordStart, oldplace));
- pIterator->SetAt(place);
- }
- }
- bLatinWord = FALSE;
- }
-
- sLatinWord.Empty();
- }
-
- oldplace = place;
- } else {
- if (bLatinWord) {
- if (!sLatinWord.IsEmpty()) {
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) {
- AddSpellCheckObj(pathSpell, pEdit,
- CPVT_WordRange(wpWordStart, oldplace));
- pIterator->SetAt(place);
- }
- }
- bLatinWord = FALSE;
- }
-
- sLatinWord.Empty();
- }
- }
-
- if (!sLatinWord.IsEmpty()) {
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) {
- AddSpellCheckObj(pathSpell, pEdit,
- CPVT_WordRange(wpWordStart, oldplace));
- }
- }
- }
- }
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 0;
- if (pathSpell.GetPointCount() > 0)
- pDevice->DrawPath(&pathSpell, pUser2Device, &gsd, 0, crSpell,
- FXFILL_ALTERNATE);
-
- pDevice->RestoreState();
-}
-
-FX_BOOL CPWL_Utils::IsBlackOrWhite(const CPWL_Color& color) {
- switch (color.nColorType) {
- case COLORTYPE_TRANSPARENT:
- return FALSE;
- case COLORTYPE_GRAY:
- return color.fColor1 < 0.5f;
- case COLORTYPE_RGB:
- return color.fColor1 + color.fColor2 + color.fColor3 < 1.5f;
- case COLORTYPE_CMYK:
- return color.fColor1 + color.fColor2 + color.fColor3 + color.fColor4 >
- 2.0f;
- }
-
- return TRUE;
-}
-
-CPWL_Color CPWL_Utils::GetReverseColor(const CPWL_Color& color) {
- CPWL_Color crRet = color;
-
- switch (color.nColorType) {
- case COLORTYPE_GRAY:
- crRet.fColor1 = 1.0f - crRet.fColor1;
- break;
- case COLORTYPE_RGB:
- crRet.fColor1 = 1.0f - crRet.fColor1;
- crRet.fColor2 = 1.0f - crRet.fColor2;
- crRet.fColor3 = 1.0f - crRet.fColor3;
- break;
- case COLORTYPE_CMYK:
- crRet.fColor1 = 1.0f - crRet.fColor1;
- crRet.fColor2 = 1.0f - crRet.fColor2;
- crRet.fColor3 = 1.0f - crRet.fColor3;
- crRet.fColor4 = 1.0f - crRet.fColor4;
- break;
- }
-
- return crRet;
-}
-
-CFX_ByteString CPWL_Utils::GetIconAppStream(int32_t nType,
- const CFX_FloatRect& rect,
- const CPWL_Color& crFill,
- const CPWL_Color& crStroke) {
- CFX_ByteString sAppStream = CPWL_Utils::GetColorAppStream(crStroke, FALSE);
- sAppStream += CPWL_Utils::GetColorAppStream(crFill, TRUE);
-
- CFX_ByteString sPath;
- CFX_PathData path;
-
- switch (nType) {
- case PWL_ICONTYPE_CHECKMARK:
- GetGraphics_Checkmark(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_CIRCLE:
- GetGraphics_Circle(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_COMMENT:
- GetGraphics_Comment(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_CROSS:
- GetGraphics_Cross(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_HELP:
- GetGraphics_Help(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_INSERTTEXT:
- GetGraphics_InsertText(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_KEY:
- GetGraphics_Key(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_NEWPARAGRAPH:
- GetGraphics_NewParagraph(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_TEXTNOTE:
- GetGraphics_TextNote(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_PARAGRAPH:
- GetGraphics_Paragraph(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_RIGHTARROW:
- GetGraphics_RightArrow(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_RIGHTPOINTER:
- GetGraphics_RightPointer(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_STAR:
- GetGraphics_Star(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_UPARROW:
- GetGraphics_UpArrow(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_UPLEFTARROW:
- GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_GRAPH:
- GetGraphics_Graph(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_PAPERCLIP:
- GetGraphics_Paperclip(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_ATTACHMENT:
- GetGraphics_Attachment(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_TAG:
- GetGraphics_Tag(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_FOXIT:
- GetGraphics_Foxit(sPath, path, rect, PWLPT_STREAM);
- break;
- }
-
- sAppStream += sPath;
- if (crStroke.nColorType != COLORTYPE_TRANSPARENT)
- sAppStream += "B*\n";
- else
- sAppStream += "f*\n";
-
- return sAppStream;
-}
-
-void CPWL_Utils::DrawIconAppStream(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device,
- int32_t nType,
- const CFX_FloatRect& rect,
- const CPWL_Color& crFill,
- const CPWL_Color& crStroke,
- const int32_t nTransparancy) {
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
-
- CFX_ByteString sPath;
- CFX_PathData path;
-
- switch (nType) {
- case PWL_ICONTYPE_CHECKMARK:
- GetGraphics_Checkmark(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_CIRCLE:
- GetGraphics_Circle(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_COMMENT:
- GetGraphics_Comment(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_CROSS:
- GetGraphics_Cross(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_HELP:
- GetGraphics_Help(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_INSERTTEXT:
- GetGraphics_InsertText(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_KEY:
- GetGraphics_Key(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_NEWPARAGRAPH:
- GetGraphics_NewParagraph(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_TEXTNOTE:
- GetGraphics_TextNote(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_PARAGRAPH:
- GetGraphics_Paragraph(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_RIGHTARROW:
- GetGraphics_RightArrow(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_RIGHTPOINTER:
- GetGraphics_RightPointer(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_STAR:
- GetGraphics_Star(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_UPARROW:
- GetGraphics_UpArrow(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_UPLEFTARROW:
- GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_GRAPH:
- GetGraphics_Graph(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_PAPERCLIP:
- GetGraphics_Paperclip(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_ATTACHMENT:
- GetGraphics_Attachment(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_TAG:
- GetGraphics_Tag(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_FOXIT:
- GetGraphics_Foxit(sPath, path, rect, PWLPT_PATHDATA);
- break;
- default:
- return;
- }
-
- pDevice->DrawPath(
- &path, pUser2Device, &gsd, PWLColorToFXColor(crFill, nTransparancy),
- PWLColorToFXColor(crStroke, nTransparancy), FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::GetGraphics_Checkmark(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight * 2 / 5.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 15.0f +
- FX_BEZIER * (fWidth / 7.0f - fWidth / 15.0f),
- crBBox.bottom + fHeight * 2 / 5.0f +
- FX_BEZIER * (fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 4.5f +
- FX_BEZIER * (fWidth / 5.0f - fWidth / 4.5f),
- crBBox.bottom + fHeight / 16.0f +
- FX_BEZIER * (fHeight / 5.0f - fHeight / 16.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f,
- crBBox.bottom + fHeight / 16.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f +
- FX_BEZIER * (fWidth / 4.4f - fWidth / 4.5f),
- crBBox.bottom + fHeight / 16.0f -
- FX_BEZIER * fHeight / 16.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f +
- FX_BEZIER * (fWidth / 4.0f - fWidth / 3.0f),
- crBBox.bottom),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f, crBBox.bottom),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f +
- FX_BEZIER * fWidth * (1 / 7.0f + 2 / 15.0f),
- crBBox.bottom + FX_BEZIER * fHeight * 4 / 5.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f +
- FX_BEZIER * fWidth * (1 / 7.0f - 7 / 15.0f),
- crBBox.bottom + fHeight * 15 / 16.0f +
- FX_BEZIER * (fHeight * 4 / 5.0f -
- fHeight * 15 / 16.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f,
- crBBox.bottom + fHeight * 15 / 16.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(
- crBBox.left + fWidth * 14 / 15.0f +
- FX_BEZIER * (fWidth * 7 / 15.0f - fWidth * 14 / 15.0f),
- crBBox.bottom + fHeight * 15 / 16.0f +
- FX_BEZIER * (fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 3.6f +
- FX_BEZIER * (fWidth / 3.4f - fWidth / 3.6f),
- crBBox.bottom + fHeight / 3.5f +
- FX_BEZIER * (fHeight / 3.5f - fHeight / 3.5f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f,
- crBBox.bottom + fHeight / 3.5f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 3.6f,
- crBBox.bottom + fHeight / 3.5f +
- FX_BEZIER * (fHeight / 4.0f - fHeight / 3.5f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f +
- FX_BEZIER * (fWidth / 3.5f - fWidth / 15.0f),
- crBBox.bottom + fHeight * 2 / 5.0f +
- FX_BEZIER * (fHeight * 3.5f / 5.0f -
- fHeight * 2 / 5.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight * 2 / 5.0f),
- PWLPT_BEZIERTO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 16);
- else
- GetPathDataFromArray(path, PathArray, 16);
-}
-
-void CPWL_Utils::GetGraphics_Circle(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
- FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
- crBBox.top - fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f +
- FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
- crBBox.top - fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.bottom + fHeight / 2.0f -
- FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f +
- FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
- FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight / 2.0f -
- FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f -
- FX_BEZIER * (fWidth / 2.0f - fWidth * 3 / 15.0f),
- crBBox.top - fHeight * 3 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
- crBBox.top - fHeight * 3 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f +
- FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
- crBBox.top - fHeight * 3 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
- crBBox.bottom + fHeight / 2.0f -
- FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f +
- FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
- crBBox.bottom + fHeight * 3 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
- crBBox.bottom + fHeight * 3 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f -
- FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
- crBBox.bottom + fHeight * 3 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
- crBBox.bottom + fHeight / 2.0f -
- FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_BEZIERTO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 26);
- else
- GetPathDataFromArray(path, PathArray, 26);
-}
-
-void CPWL_Utils::GetGraphics_Comment(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.top - fHeight / 6.0f +
- FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f -
- FX_BEZIER * fWidth / 15.0f,
- crBBox.top - fHeight / 10.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
- crBBox.top - fHeight / 10.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
- crBBox.top - fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f +
- FX_BEZIER * fWidth / 15.0f,
- crBBox.top - fHeight / 10.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.top - fHeight / 6 +
- FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.top - fHeight / 6.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.bottom + fHeight / 3.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.bottom + fHeight * 4 / 15.0f +
- FX_BEZIER * fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f +
- FX_BEZIER * fWidth / 15.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f,
- crBBox.bottom + fHeight * 2 / 15 +
- FX_BEZIER * fHeight * 2 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f -
- FX_BEZIER * fWidth * 2 / 15.0f,
- crBBox.bottom + fHeight * 2 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 6 / 30.0f,
- crBBox.bottom + fHeight * 2 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f +
- FX_BEZIER * fWidth / 30.0f,
- crBBox.bottom + fHeight * 2 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f,
- crBBox.bottom + fHeight * 2 / 15.0f +
- FX_BEZIER * fHeight * 2 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f -
- FX_BEZIER * fWidth / 15.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight / 3.0f -
- FX_BEZIER * fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
- crBBox.bottom + fHeight / 3.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
- crBBox.top - fHeight * 8 / 30.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
- crBBox.top - fHeight * 8 / 30.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15,
- crBBox.top - fHeight * 25 / 60.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
- crBBox.top - fHeight * 25 / 60.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 4 / 15.0f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 30);
- else
- GetPathDataFromArray(path, PathArray, 30);
-}
-
-void CPWL_Utils::GetGraphics_Cross(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- CPWL_Point center_point(crBBox.left + fWidth / 2,
- crBBox.bottom + fHeight / 2);
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(center_point.x + fWidth * 0.3f,
- center_point.y + fHeight / 10.0f + fWidth * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f,
- center_point.y + fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f, center_point.y),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f,
- center_point.y - fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(center_point.x + fWidth * 0.3f,
- center_point.y - fHeight / 10.0f - fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(center_point.x, center_point.y - fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth * 0.3f,
- center_point.y - fHeight / 10 - fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10.0f - fWidth * 0.3f,
- center_point.y - fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10, center_point.y),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10 - fWidth * 0.3f,
- center_point.y + fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(center_point.x - fWidth * 0.3f,
- center_point.y + fHeight / 10.0f + fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 13);
- else
- GetPathDataFromArray(path, PathArray, 13);
-}
-
-void CPWL_Utils::GetGraphics_Help(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 60.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
- FX_BEZIER * (fWidth / 2.0f - fWidth / 60.0f),
- crBBox.bottom + fHeight / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
- crBBox.bottom + fHeight / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f +
- FX_BEZIER * fWidth * 29 / 60.0f,
- crBBox.bottom + fHeight / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 60.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * fHeight * 29 / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f +
- FX_BEZIER * fWidth * 29 / 60.0f,
- crBBox.top - fHeight / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
- FX_BEZIER * fWidth * 29 / 60.0f,
- crBBox.top - fHeight / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
- crBBox.bottom + fHeight / 2.0f +
- FX_BEZIER * fHeight * 29 / 60.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
- crBBox.bottom + fHeight / 2.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
- crBBox.top - fHeight * 0.36f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
- crBBox.top - fHeight * 0.36f +
- FX_BEZIER * fHeight * 0.23f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.23f,
- crBBox.bottom + fHeight * 0.87f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
- crBBox.bottom + fHeight * 0.87f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.23f,
- crBBox.bottom + fHeight * 0.87f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f,
- crBBox.top - fHeight * 0.36f +
- FX_BEZIER * fHeight * 0.23f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f,
- crBBox.top - fHeight * 0.36f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.27f - fWidth * 0.08f * 0.2f,
- crBBox.top - fHeight * 0.36f - fHeight * 0.15f * 0.7f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.35f + fWidth * 0.08f * 0.2f,
- crBBox.top - fHeight * 0.51f + fHeight * 0.15f * 0.2f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.35f,
- crBBox.top - fHeight * 0.51f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.35f - fWidth * 0.1f * 0.5f,
- crBBox.top - fHeight * 0.51f - fHeight * 0.15f * 0.3f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.5f,
- crBBox.top - fHeight * 0.68f + fHeight * 0.15f * 0.5f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
- crBBox.top - fHeight * 0.68f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
- crBBox.bottom + fHeight * 0.30f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.45f,
- crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.55f,
- crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f,
- crBBox.bottom + fHeight * 0.30f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f,
- crBBox.top - fHeight * 0.66f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.55f - fWidth * 0.1f * 0.05f,
- crBBox.top - fHeight * 0.66f + fHeight * 0.18f * 0.5f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.05f,
- crBBox.top - fHeight * 0.48f - fHeight * 0.18f * 0.3f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
- crBBox.top - fHeight * 0.48f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.45f + fWidth * 0.08f * 0.2f,
- crBBox.top - fHeight * 0.48f + fHeight * 0.18f * 0.2f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.37f - fWidth * 0.08f * 0.2f,
- crBBox.top - fHeight * 0.36f - fHeight * 0.18f * 0.7f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f,
- crBBox.top - fHeight * 0.36f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f,
- crBBox.top - fHeight * 0.36f +
- FX_BEZIER * fHeight * 0.13f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.13f,
- crBBox.bottom + fHeight * 0.77f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
- crBBox.bottom + fHeight * 0.77f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.13f,
- crBBox.bottom + fHeight * 0.77f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f,
- crBBox.top - fHeight * 0.36f +
- FX_BEZIER * fHeight * 0.13f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f,
- crBBox.top - fHeight * 0.36f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.37f,
- crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.27f,
- crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
- crBBox.top - fHeight * 0.36f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
- crBBox.bottom + fHeight * 0.13f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
- crBBox.bottom + fHeight * 0.13f +
- FX_BEZIER * fHeight * 0.055f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f -
- FX_BEZIER * fWidth * 0.095f,
- crBBox.bottom + fHeight * 0.185f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f,
- crBBox.bottom + fHeight * 0.185f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f +
- FX_BEZIER * fWidth * 0.065f,
- crBBox.bottom + fHeight * 0.185f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
- crBBox.bottom + fHeight * 0.13f +
- FX_BEZIER * fHeight * 0.055f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
- crBBox.bottom + fHeight * 0.13f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
- crBBox.bottom + fHeight * 0.13f -
- FX_BEZIER * fHeight * 0.055f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f +
- FX_BEZIER * fWidth * 0.065f,
- crBBox.bottom + fHeight * 0.075f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f,
- crBBox.bottom + fHeight * 0.075f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f -
- FX_BEZIER * fWidth * 0.065f,
- crBBox.bottom + fHeight * 0.075f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
- crBBox.bottom + fHeight * 0.13f -
- FX_BEZIER * fHeight * 0.055f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
- crBBox.bottom + fHeight * 0.13f),
- PWLPT_BEZIERTO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 59);
- else
- GetPathDataFromArray(path, PathArray, 59);
-}
-
-void CPWL_Utils::GetGraphics_InsertText(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2, crBBox.top - fHeight * 2 / 15),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 10, crBBox.bottom + fHeight / 10),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 4);
- else
- GetPathDataFromArray(path, PathArray, 4);
-}
-
-void CPWL_Utils::GetGraphics_Key(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- FX_FLOAT k = -fHeight / fWidth;
- CPWL_Point tail;
- CPWL_Point CicleCenter;
- tail.x = crBBox.left + fWidth * 0.9f;
- tail.y = k * (tail.x - crBBox.right) + crBBox.bottom;
- CicleCenter.x = crBBox.left + fWidth * 0.15f;
- CicleCenter.y = k * (CicleCenter.x - crBBox.right) + crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 30.0f, -fWidth / 30.0f / k + tail.y),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth / 30.0f - fWidth * 0.18f,
- -k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f + fWidth * 0.07f,
- -fWidth * 0.07f / k - k * fWidth * 0.18f -
- fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 +
- fWidth * 0.07f,
- -fWidth * 0.07f / k - k * fWidth / 20 -
- k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(
- tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20,
- -k * fWidth / 20 - k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(
- tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15,
- -k * fWidth / 15 - k * fWidth / 20 - k * fWidth * 0.18f -
- fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
- fWidth / 15 + fWidth * 0.07f,
- -fWidth * 0.07f / k - k * fWidth / 15 - k * fWidth / 20 -
- k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
- fWidth / 15 - fWidth / 20 + fWidth * 0.07f,
- -fWidth * 0.07f / k + -k * fWidth / 20 + -k * fWidth / 15 -
- k * fWidth / 20 - k * fWidth * 0.18f -
- fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
- fWidth / 15 - fWidth / 20,
- -k * fWidth / 20 + -k * fWidth / 15 - k * fWidth / 20 -
- k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f,
- -k * fWidth * 0.45f - fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f + fWidth * 0.2f,
- -fWidth * 0.4f / k - k * fWidth * 0.45f - fWidth / 30 / k +
- tail.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.2f,
- -fWidth * 0.1f / k + CicleCenter.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60.0f,
- -k * fWidth / 60 + CicleCenter.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60,
- -k * fWidth / 60 + CicleCenter.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(CicleCenter.x - fWidth * 0.22f,
- fWidth * 0.35f / k + CicleCenter.y - fHeight * 0.05f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(tail.x - fWidth / 30 - fWidth * 0.45f - fWidth * 0.18f,
- fWidth * 0.05f / k - k * fWidth * 0.45f + fWidth / 30 / k +
- tail.y - fHeight * 0.05f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(tail.x - fWidth / 30.0f - fWidth * 0.45f,
- -k * fWidth * 0.45f + fWidth / 30.0f / k + tail.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(tail.x - fWidth / 30.0f, fWidth / 30.0f / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth / 30, -fWidth / 30 / k + tail.y),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f,
- k * fWidth * 0.08f + CicleCenter.y),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(CicleCenter.x + fWidth * 0.08f + fWidth * 0.1f,
- -fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(CicleCenter.x + fWidth * 0.22f + fWidth * 0.1f,
- k * fWidth * 0.22f + CicleCenter.y - fWidth * 0.1f / k),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.22f,
- k * fWidth * 0.22f + CicleCenter.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(CicleCenter.x + fWidth * 0.22f - fWidth * 0.1f,
- fWidth * 0.1f / k + k * fWidth * 0.22f + CicleCenter.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(CicleCenter.x + fWidth * 0.08f - fWidth * 0.1f,
- fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f,
- k * fWidth * 0.08f + CicleCenter.y),
- PWLPT_BEZIERTO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 28);
- else
- GetPathDataFromArray(path, PathArray, 28);
-}
-
-void CPWL_Utils::GetGraphics_NewParagraph(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 10.0f, crBBox.top - fHeight / 2.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
- crBBox.top - fHeight / 2.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
- crBBox.bottom + fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f,
- crBBox.bottom + fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.22f,
- crBBox.top - fHeight * 17 / 30.0f - fWidth * 0.14f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
- crBBox.bottom + fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f,
- crBBox.bottom + fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
- crBBox.bottom + fWidth * 0.24f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
- crBBox.bottom + fHeight / 10.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.bottom + fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.97f,
- crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.97f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
- crBBox.top - fHeight * 17 / 30.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
- crBBox.bottom + fHeight / 10.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.85f,
- crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.85f,
- crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 28);
- else
- GetPathDataFromArray(path, PathArray, 28);
-}
-
-void CPWL_Utils::GetGraphics_TextNote(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 10.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
- crBBox.top - fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f,
- crBBox.top - fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
- crBBox.bottom + fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
- crBBox.top - fHeight * 4 / 15.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f,
- crBBox.top - fHeight * 4 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
- crBBox.top - fHeight * 7 / 15.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f,
- crBBox.top - fHeight * 7 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
- crBBox.top - fHeight * 10 / 15.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
- crBBox.top - fHeight * 10 / 15.0f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 17);
- else
- GetPathDataFromArray(path, PathArray, 17);
-}
-
-void CPWL_Utils::GetGraphics_Paragraph(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f,
- crBBox.top - fHeight * 2 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f,
- crBBox.top - fHeight * 2 / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
- crBBox.top - fHeight / 15.0f - fHeight * 0.4f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.2f,
- crBBox.top - fHeight / 15.0f - fHeight * 0.4f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.2f, crBBox.top - fHeight / 15.0f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
- PWLPT_BEZIERTO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 12);
- else
- GetPathDataFromArray(path, PathArray, 12);
-}
-
-void CPWL_Utils::GetGraphics_RightArrow(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.top - fHeight / 2.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
- crBBox.bottom + fHeight / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
- crBBox.bottom + fHeight / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
- crBBox.top - fHeight / 2.0f - fWidth / 25.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f,
- crBBox.top - fHeight / 2.0f - fWidth / 25.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f,
- crBBox.top - fHeight / 2.0f + fWidth / 25.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
- crBBox.top - fHeight / 2.0f + fWidth / 25.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
- crBBox.top - fHeight / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
- crBBox.top - fHeight / 2.0f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 10);
- else
- GetPathDataFromArray(path, PathArray, 10);
-}
-
-void CPWL_Utils::GetGraphics_RightPointer(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f,
- crBBox.top - fHeight / 2.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 30.0f,
- crBBox.bottom + fHeight / 6.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 4 / 15.0f,
- crBBox.top - fHeight / 2.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 30.0f, crBBox.top - fHeight / 6.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f,
- crBBox.top - fHeight / 2.0f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 5);
- else
- GetPathDataFromArray(path, PathArray, 5);
-}
-
-void CPWL_Utils::GetGraphics_Star(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fLongRadius =
- (crBBox.top - crBBox.bottom) / (1 + (FX_FLOAT)cos(FX_PI / 5.0f));
- fLongRadius = fLongRadius * 0.7f;
- FX_FLOAT fShortRadius = fLongRadius * 0.55f;
- CFX_FloatPoint ptCenter = CFX_FloatPoint((crBBox.left + crBBox.right) / 2.0f,
- (crBBox.top + crBBox.bottom) / 2.0f);
-
- FX_FLOAT px1[5], py1[5];
- FX_FLOAT px2[5], py2[5];
-
- FX_FLOAT fAngel = FX_PI / 10.0f;
-
- for (int32_t i = 0; i < 5; i++) {
- px1[i] = ptCenter.x + fLongRadius * (FX_FLOAT)cos(fAngel);
- py1[i] = ptCenter.y + fLongRadius * (FX_FLOAT)sin(fAngel);
-
- fAngel += FX_PI * 2 / 5.0f;
- }
-
- fAngel = FX_PI / 5.0f + FX_PI / 10.0f;
-
- for (int32_t j = 0; j < 5; j++) {
- px2[j] = ptCenter.x + fShortRadius * (FX_FLOAT)cos(fAngel);
- py2[j] = ptCenter.y + fShortRadius * (FX_FLOAT)sin(fAngel);
-
- fAngel += FX_PI * 2 / 5.0f;
- }
-
- CPWL_PathData PathArray[11];
- PathArray[0] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_MOVETO);
- PathArray[1] = CPWL_PathData(CPWL_Point(px2[0], py2[0]), PWLPT_LINETO);
-
- for (int32_t k = 0; k < 4; k++) {
- PathArray[(k + 1) * 2] =
- CPWL_PathData(CPWL_Point(px1[k + 1], py1[k + 1]), PWLPT_LINETO);
- PathArray[(k + 1) * 2 + 1] =
- CPWL_PathData(CPWL_Point(px2[k + 1], py2[k + 1]), PWLPT_LINETO);
- }
-
- PathArray[10] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_LINETO);
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 11);
- else
- GetPathDataFromArray(path, PathArray, 11);
-}
-
-void CPWL_Utils::GetGraphics_UpArrow(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
- crBBox.top - fWidth * 3 / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
- crBBox.top - fWidth * 3 / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
- crBBox.bottom + fHeight / 15.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
- crBBox.top - fWidth * 3 / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 10, crBBox.top - fWidth * 3 / 5.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 8);
- else
- GetPathDataFromArray(path, PathArray, 8);
-}
-
-void CPWL_Utils::GetGraphics_UpLeftArrow(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- CPWL_Point leftup(crBBox.left, crBBox.top);
- CPWL_Point rightdown(crBBox.right, crBBox.bottom);
- FX_FLOAT k = -fHeight / fWidth;
- CPWL_Point tail;
- tail.x = crBBox.left + fWidth * 4 / 5.0f;
- tail.y = k * (tail.x - crBBox.right) + rightdown.y;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(
- crBBox.left + fWidth / 20.0f,
- k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x +
- fWidth / 10.0f + fWidth / 5.0f,
- -fWidth / 5.0f / k + tail.y -
- fWidth / 10.0f / k + fHeight * 17 / 60.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(fHeight * 17 / 60.0f / k + tail.x + fWidth / 10.0f,
- tail.y - fWidth / 10.0f / k + fHeight * 17 / 60.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x + fWidth / 10.0f, tail.y - fWidth / 10.0f / k),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(tail.x - fWidth / 10.0f, tail.y + fWidth / 10.0f / k),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(fHeight * 17 / 60.0f / k + tail.x - fWidth / 10.0f,
- tail.y + fWidth / 10.0f / k + fHeight * 17 / 60.0f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x -
- fWidth / 10.0f - fWidth / 5.0f,
- fWidth / 5.0f / k + tail.y + fWidth / 10.0f / k +
- fHeight * 17 / 60.0f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(
- crBBox.left + fWidth / 20.0f,
- k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 8);
- else
- GetPathDataFromArray(path, PathArray, 8);
-}
-
-void CPWL_Utils::GetGraphics_Graph(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.25f,
- crBBox.top - fHeight * 0.15f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.05f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f),
- PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
- crBBox.top - fWidth * 0.45f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f,
- crBBox.top - fWidth * 0.45f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
- crBBox.top - fWidth * 0.45f),
- PWLPT_LINETO),
-
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight * 0.05f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f),
- PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
- crBBox.top - fWidth * 0.35f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f,
- crBBox.top - fWidth * 0.35f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
- crBBox.bottom + fHeight * 0.08f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
- crBBox.top - fWidth * 0.35f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 20);
- else
- GetPathDataFromArray(path, PathArray, 20);
-}
-
-void CPWL_Utils::GetGraphics_Paperclip(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
- crBBox.bottom + fHeight * 0.25f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
- crBBox.bottom + fHeight * 0.25f -
- fWidth * 57 / 60.0f * 0.35f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30,
- crBBox.bottom + fHeight * 0.25f -
- fWidth * 57 / 60.0f * 0.35f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30,
- crBBox.bottom + fHeight * 0.25f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 30, crBBox.top - fHeight * 0.33f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 30,
- crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
- crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
- crBBox.top - fHeight * 0.33f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
- crBBox.bottom + fHeight * 0.2f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
- crBBox.bottom + fHeight * 0.2f -
- (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
- crBBox.bottom + fHeight * 0.2f -
- (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
- crBBox.bottom + fHeight * 0.2f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
- crBBox.top - fHeight * 0.2f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
- crBBox.top - fHeight * 0.2f +
- (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
- crBBox.top - fHeight * 0.2f +
- (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
- crBBox.top - fHeight * 0.2f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
- crBBox.bottom + fHeight * 0.25f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
- crBBox.bottom + fHeight * 0.25f -
- (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.29f,
- crBBox.bottom + fHeight * 0.25f -
- (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f,
- crBBox.bottom + fHeight * 0.25f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f,
- crBBox.top - fHeight * 0.33f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.29f,
- crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.17f,
- crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
- crBBox.top - fHeight * 0.33f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
- crBBox.bottom + fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
- crBBox.bottom + fHeight * 0.3f -
- fWidth * (14 / 15.0f - 0.29f) * 0.35f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
- crBBox.bottom + fHeight * 0.3f -
- fWidth * (14 / 15.0f - 0.29f) * 0.35f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
- crBBox.bottom + fHeight * 0.3f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
- crBBox.top - fHeight * 0.25f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
- crBBox.top - fHeight * 0.25f +
- fWidth * 0.35f * (11 / 12.0f - 0.12f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
- crBBox.top - fHeight * 0.25f +
- fWidth * 0.35f * (11 / 12.0f - 0.12f)),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f),
- PWLPT_BEZIERTO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 33);
- else
- GetPathDataFromArray(path, PathArray, 33);
-}
-
-void CPWL_Utils::GetGraphics_Attachment(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
- crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
- crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.25f,
- crBBox.top - fHeight * 0.1f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f),
- PWLPT_LINETO),
-
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f - fWidth * 0.25f * 0.4f,
- crBBox.top - fHeight * 0.5f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.15f,
- crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.15f,
- crBBox.top - fHeight * 0.65f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.15f,
- crBBox.top - fHeight * 0.65f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.15f,
- crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.6f + fWidth * 0.25f * 0.4f,
- crBBox.top - fHeight * 0.5f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
- crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
- crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.65f),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
- crBBox.bottom + fHeight * 0.1f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 24);
- else
- GetPathDataFromArray(path, PathArray, 24);
-}
-
-void CPWL_Utils::GetGraphics_Tag(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.1f, crBBox.top - fHeight * 0.5f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.3f,
- crBBox.bottom + fHeight * 0.1f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.1f,
- crBBox.bottom + fHeight * 0.1f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.1f, crBBox.top - fHeight * 0.1f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.3f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.3f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.5f),
- PWLPT_LINETO),
- CPWL_PathData(
- CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.7f),
- PWLPT_MOVETO),
- CPWL_PathData(
- CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.7f),
- PWLPT_LINETO)};
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 12);
- else
- GetPathDataFromArray(path, PathArray, 12);
-}
-
-void CPWL_Utils::GetGraphics_Foxit(CFX_ByteString& sPathData,
- CFX_PathData& path,
- const CFX_FloatRect& crBBox,
- const PWL_PATH_TYPE type) {
- FX_FLOAT fOutWidth = crBBox.right - crBBox.left;
- FX_FLOAT fOutHeight = crBBox.top - crBBox.bottom;
-
- CFX_FloatRect crInBox = crBBox;
- crInBox.left = crBBox.left + fOutWidth * 0.08f;
- crInBox.right = crBBox.right - fOutWidth * 0.08f;
- crInBox.top = crBBox.top - fOutHeight * 0.08f;
- crInBox.bottom = crBBox.bottom + fOutHeight * 0.08f;
-
- FX_FLOAT fWidth = crInBox.right - crInBox.left;
- FX_FLOAT fHeight = crInBox.top - crInBox.bottom;
-
- CPWL_PathData PathArray[] = {
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f, crInBox.top),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f,
- crInBox.top - FX_BEZIER * fHeight * 0.4f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crInBox.left + fWidth * 0.45f - FX_BEZIER * fWidth * 0.45f,
- crInBox.top - fHeight * 0.4f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.4f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f, crInBox.top),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f,
- crInBox.top - FX_BEZIER * fHeight * 0.7f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crInBox.left + fWidth * 0.75f - FX_BEZIER * fWidth * 0.75f,
- crInBox.top - fHeight * 0.7f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.7f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.55f),
- PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + FX_BEZIER * fWidth * 0.60f,
- crInBox.top - fHeight * 0.55f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f,
- crInBox.top - FX_BEZIER * fHeight * 0.55f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top),
- PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top),
- PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f,
- crInBox.top - FX_BEZIER * fHeight * 0.85f),
- PWLPT_BEZIERTO),
- CPWL_PathData(
- CPWL_Point(crInBox.left + fWidth * 0.90f - FX_BEZIER * fWidth * 0.90f,
- crInBox.top - fHeight * 0.85f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.85f),
- PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.bottom), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.right, crInBox.bottom), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.right, crInBox.top), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top),
- PWLPT_LINETO),
- };
-
- if (type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 23);
- else
- GetPathDataFromArray(path, PathArray, 23);
-}
-
-void CPWL_Color::ConvertColorType(int32_t other_nColorType) {
- switch (other_nColorType) {
- case COLORTYPE_TRANSPARENT:
- break;
- case COLORTYPE_GRAY:
- switch (other_nColorType) {
- case COLORTYPE_RGB:
- CPWL_Utils::ConvertGRAY2RGB(fColor1, fColor1, fColor2, fColor3);
- break;
- case COLORTYPE_CMYK:
- CPWL_Utils::ConvertGRAY2CMYK(fColor1, fColor1, fColor2, fColor3,
- fColor4);
- break;
- }
- break;
- case COLORTYPE_RGB:
- switch (other_nColorType) {
- case COLORTYPE_GRAY:
- CPWL_Utils::ConvertRGB2GRAY(fColor1, fColor2, fColor3, fColor1);
- break;
- case COLORTYPE_CMYK:
- CPWL_Utils::ConvertRGB2CMYK(fColor1, fColor2, fColor3, fColor1,
- fColor2, fColor3, fColor4);
- break;
- }
- break;
- case COLORTYPE_CMYK:
- switch (other_nColorType) {
- case COLORTYPE_GRAY:
- CPWL_Utils::ConvertCMYK2GRAY(fColor1, fColor2, fColor3, fColor4,
- fColor1);
- break;
- case COLORTYPE_RGB:
- CPWL_Utils::ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4,
- fColor1, fColor2, fColor3);
- break;
- }
- break;
- }
- nColorType = other_nColorType;
-}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp b/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp
deleted file mode 100644
index 28bd0e04ed..0000000000
--- a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp
+++ /dev/null
@@ -1,1041 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include <map>
-
-#include "fpdfsdk/include/pdfwindow/PWL_ScrollBar.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
-#include "fpdfsdk/include/pdfwindow/PWL_Wnd.h"
-
-static std::map<int32_t, CPWL_Timer*>& GetPWLTimeMap() {
- // Leak the object at shutdown.
- static auto timeMap = new std::map<int32_t, CPWL_Timer*>;
- return *timeMap;
-}
-
-CPWL_Timer::CPWL_Timer(CPWL_TimerHandler* pAttached,
- IFX_SystemHandler* pSystemHandler)
- : m_nTimerID(0), m_pAttached(pAttached), m_pSystemHandler(pSystemHandler) {
- ASSERT(m_pAttached);
- ASSERT(m_pSystemHandler);
-}
-
-CPWL_Timer::~CPWL_Timer() {
- KillPWLTimer();
-}
-
-int32_t CPWL_Timer::SetPWLTimer(int32_t nElapse) {
- if (m_nTimerID != 0)
- KillPWLTimer();
- m_nTimerID = m_pSystemHandler->SetTimer(nElapse, TimerProc);
-
- GetPWLTimeMap()[m_nTimerID] = this;
- return m_nTimerID;
-}
-
-void CPWL_Timer::KillPWLTimer() {
- if (m_nTimerID == 0)
- return;
-
- m_pSystemHandler->KillTimer(m_nTimerID);
- GetPWLTimeMap().erase(m_nTimerID);
- m_nTimerID = 0;
-}
-
-void CPWL_Timer::TimerProc(int32_t idEvent) {
- auto it = GetPWLTimeMap().find(idEvent);
- if (it == GetPWLTimeMap().end())
- return;
-
- CPWL_Timer* pTimer = it->second;
- if (pTimer->m_pAttached)
- pTimer->m_pAttached->TimerProc();
-}
-
-CPWL_TimerHandler::CPWL_TimerHandler() : m_pTimer(NULL) {}
-
-CPWL_TimerHandler::~CPWL_TimerHandler() {
- delete m_pTimer;
-}
-
-void CPWL_TimerHandler::BeginTimer(int32_t nElapse) {
- if (!m_pTimer)
- m_pTimer = new CPWL_Timer(this, GetSystemHandler());
-
- if (m_pTimer)
- m_pTimer->SetPWLTimer(nElapse);
-}
-
-void CPWL_TimerHandler::EndTimer() {
- if (m_pTimer)
- m_pTimer->KillPWLTimer();
-}
-
-void CPWL_TimerHandler::TimerProc() {}
-
-class CPWL_MsgControl {
- friend class CPWL_Wnd;
-
- public:
- explicit CPWL_MsgControl(CPWL_Wnd* pWnd) {
- m_pCreatedWnd = pWnd;
- Default();
- }
-
- ~CPWL_MsgControl() {
- Default();
- }
-
- void Default() {
- m_aMousePath.RemoveAll();
- m_aKeyboardPath.RemoveAll();
- m_pMainMouseWnd = NULL;
- m_pMainKeyboardWnd = NULL;
- }
-
- FX_BOOL IsWndCreated(const CPWL_Wnd* pWnd) const {
- return m_pCreatedWnd == pWnd;
- }
-
- FX_BOOL IsMainCaptureMouse(const CPWL_Wnd* pWnd) const {
- return pWnd == m_pMainMouseWnd;
- }
-
- FX_BOOL IsWndCaptureMouse(const CPWL_Wnd* pWnd) const {
- if (pWnd) {
- for (int32_t i = 0, sz = m_aMousePath.GetSize(); i < sz; i++) {
- if (m_aMousePath.GetAt(i) == pWnd)
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
- FX_BOOL IsMainCaptureKeyboard(const CPWL_Wnd* pWnd) const {
- return pWnd == m_pMainKeyboardWnd;
- }
-
- FX_BOOL IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const {
- if (pWnd) {
- for (int32_t i = 0, sz = m_aKeyboardPath.GetSize(); i < sz; i++) {
- if (m_aKeyboardPath.GetAt(i) == pWnd)
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
- void SetFocus(CPWL_Wnd* pWnd) {
- m_aKeyboardPath.RemoveAll();
-
- if (pWnd) {
- m_pMainKeyboardWnd = pWnd;
-
- CPWL_Wnd* pParent = pWnd;
- while (pParent) {
- m_aKeyboardPath.Add(pParent);
- pParent = pParent->GetParentWindow();
- }
-
- pWnd->OnSetFocus();
- }
- }
-
- void KillFocus() {
- if (m_aKeyboardPath.GetSize() > 0)
- if (CPWL_Wnd* pWnd = m_aKeyboardPath.GetAt(0))
- pWnd->OnKillFocus();
-
- m_pMainKeyboardWnd = NULL;
- m_aKeyboardPath.RemoveAll();
- }
-
- void SetCapture(CPWL_Wnd* pWnd) {
- m_aMousePath.RemoveAll();
-
- if (pWnd) {
- m_pMainMouseWnd = pWnd;
-
- CPWL_Wnd* pParent = pWnd;
- while (pParent) {
- m_aMousePath.Add(pParent);
- pParent = pParent->GetParentWindow();
- }
- }
- }
-
- void ReleaseCapture() {
- m_pMainMouseWnd = NULL;
- m_aMousePath.RemoveAll();
- }
-
- private:
- CFX_ArrayTemplate<CPWL_Wnd*> m_aMousePath;
- CFX_ArrayTemplate<CPWL_Wnd*> m_aKeyboardPath;
- CPWL_Wnd* m_pCreatedWnd;
- CPWL_Wnd* m_pMainMouseWnd;
- CPWL_Wnd* m_pMainKeyboardWnd;
-};
-
-CPWL_Wnd::CPWL_Wnd()
- : m_pVScrollBar(NULL),
- m_rcWindow(),
- m_rcClip(),
- m_bCreated(FALSE),
- m_bVisible(FALSE),
- m_bNotifying(FALSE),
- m_bEnabled(TRUE) {}
-
-CPWL_Wnd::~CPWL_Wnd() {
- ASSERT(m_bCreated == FALSE);
-}
-
-CFX_ByteString CPWL_Wnd::GetClassName() const {
- return "CPWL_Wnd";
-}
-
-void CPWL_Wnd::Create(const PWL_CREATEPARAM& cp) {
- if (!IsValid()) {
- m_sPrivateParam = cp;
-
- OnCreate(m_sPrivateParam);
-
- m_sPrivateParam.rcRectWnd.Normalize();
- m_rcWindow = m_sPrivateParam.rcRectWnd;
- m_rcClip = CPWL_Utils::InflateRect(m_rcWindow, 1.0f);
-
- CreateMsgControl();
-
- if (m_sPrivateParam.pParentWnd)
- m_sPrivateParam.pParentWnd->OnNotify(this, PNM_ADDCHILD);
-
- PWL_CREATEPARAM ccp = m_sPrivateParam;
-
- ccp.dwFlags &= 0xFFFF0000L; // remove sub styles
- ccp.mtChild = CFX_Matrix(1, 0, 0, 1, 0, 0);
-
- CreateScrollBar(ccp);
- CreateChildWnd(ccp);
-
- m_bVisible = HasFlag(PWS_VISIBLE);
-
- OnCreated();
-
- RePosChildWnd();
- m_bCreated = TRUE;
- }
-}
-
-void CPWL_Wnd::OnCreate(PWL_CREATEPARAM& cp) {}
-
-void CPWL_Wnd::OnCreated() {}
-
-void CPWL_Wnd::OnDestroy() {}
-
-void CPWL_Wnd::InvalidateFocusHandler(IPWL_FocusHandler* handler) {
- if (m_sPrivateParam.pFocusHandler == handler)
- m_sPrivateParam.pFocusHandler = nullptr;
-}
-
-void CPWL_Wnd::InvalidateProvider(IPWL_Provider* provider) {
- if (m_sPrivateParam.pProvider == provider)
- m_sPrivateParam.pProvider = nullptr;
-}
-
-void CPWL_Wnd::Destroy() {
- KillFocus();
-
- OnDestroy();
-
- if (m_bCreated) {
- for (int32_t i = m_aChildren.GetSize() - 1; i >= 0; i--) {
- if (CPWL_Wnd* pChild = m_aChildren[i]) {
- pChild->Destroy();
- delete pChild;
- pChild = NULL;
- }
- }
-
- if (m_sPrivateParam.pParentWnd)
- m_sPrivateParam.pParentWnd->OnNotify(this, PNM_REMOVECHILD);
- m_bCreated = FALSE;
- }
-
- DestroyMsgControl();
-
- FXSYS_memset(&m_sPrivateParam, 0, sizeof(PWL_CREATEPARAM));
- m_aChildren.RemoveAll();
- m_pVScrollBar = NULL;
-}
-
-void CPWL_Wnd::Move(const CFX_FloatRect& rcNew,
- FX_BOOL bReset,
- FX_BOOL bRefresh) {
- if (IsValid()) {
- CFX_FloatRect rcOld = GetWindowRect();
-
- m_rcWindow = rcNew;
- m_rcWindow.Normalize();
-
- if (rcOld.left != rcNew.left || rcOld.right != rcNew.right ||
- rcOld.top != rcNew.top || rcOld.bottom != rcNew.bottom) {
- if (bReset) {
- RePosChildWnd();
- }
- }
- if (bRefresh) {
- InvalidateRectMove(rcOld, rcNew);
- }
-
- m_sPrivateParam.rcRectWnd = m_rcWindow;
- }
-}
-
-void CPWL_Wnd::InvalidateRectMove(const CFX_FloatRect& rcOld,
- const CFX_FloatRect& rcNew) {
- CFX_FloatRect rcUnion = rcOld;
- rcUnion.Union(rcNew);
-
- InvalidateRect(&rcUnion);
-}
-
-void CPWL_Wnd::GetAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- if (IsValid() && IsVisible()) {
- GetThisAppearanceStream(sAppStream);
- GetChildAppearanceStream(sAppStream);
- }
-}
-
-// if don't set,Get default apperance stream
-void CPWL_Wnd::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- CFX_FloatRect rectWnd = GetWindowRect();
- if (!rectWnd.IsEmpty()) {
- CFX_ByteTextBuf sThis;
-
- if (HasFlag(PWS_BACKGROUND))
- sThis << CPWL_Utils::GetRectFillAppStream(rectWnd, GetBackgroundColor());
-
- if (HasFlag(PWS_BORDER)) {
- sThis << CPWL_Utils::GetBorderAppStream(
- rectWnd, (FX_FLOAT)GetBorderWidth(), GetBorderColor(),
- GetBorderLeftTopColor(GetBorderStyle()),
- GetBorderRightBottomColor(GetBorderStyle()), GetBorderStyle(),
- GetBorderDash());
- }
-
- sAppStream << sThis;
- }
-}
-
-void CPWL_Wnd::GetChildAppearanceStream(CFX_ByteTextBuf& sAppStream) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- pChild->GetAppearanceStream(sAppStream);
- }
- }
-}
-
-void CPWL_Wnd::DrawAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- if (IsValid() && IsVisible()) {
- DrawThisAppearance(pDevice, pUser2Device);
- DrawChildAppearance(pDevice, pUser2Device);
- }
-}
-
-void CPWL_Wnd::DrawThisAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- CFX_FloatRect rectWnd = GetWindowRect();
- if (!rectWnd.IsEmpty()) {
- if (HasFlag(PWS_BACKGROUND)) {
- CFX_FloatRect rcClient = CPWL_Utils::DeflateRect(
- rectWnd, (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient,
- GetBackgroundColor(), GetTransparency());
- }
-
- if (HasFlag(PWS_BORDER))
- CPWL_Utils::DrawBorder(pDevice, pUser2Device, rectWnd,
- (FX_FLOAT)GetBorderWidth(), GetBorderColor(),
- GetBorderLeftTopColor(GetBorderStyle()),
- GetBorderRightBottomColor(GetBorderStyle()),
- GetBorderStyle(), GetTransparency());
- }
-}
-
-void CPWL_Wnd::DrawChildAppearance(CFX_RenderDevice* pDevice,
- CFX_Matrix* pUser2Device) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- CFX_Matrix mt = pChild->GetChildMatrix();
- if (mt.IsIdentity()) {
- pChild->DrawAppearance(pDevice, pUser2Device);
- } else {
- mt.Concat(*pUser2Device);
- pChild->DrawAppearance(pDevice, &mt);
- }
- }
- }
-}
-
-void CPWL_Wnd::InvalidateRect(CFX_FloatRect* pRect) {
- if (IsValid()) {
- CFX_FloatRect rcRefresh = pRect ? *pRect : GetWindowRect();
-
- if (!HasFlag(PWS_NOREFRESHCLIP)) {
- CFX_FloatRect rcClip = GetClipRect();
- if (!rcClip.IsEmpty()) {
- rcRefresh.Intersect(rcClip);
- }
- }
-
- FX_RECT rcWin = PWLtoWnd(rcRefresh);
- rcWin.left -= PWL_INVALIDATE_INFLATE;
- rcWin.top -= PWL_INVALIDATE_INFLATE;
- rcWin.right += PWL_INVALIDATE_INFLATE;
- rcWin.bottom += PWL_INVALIDATE_INFLATE;
-
- if (IFX_SystemHandler* pSH = GetSystemHandler()) {
- if (FX_HWND hWnd = GetAttachedHWnd()) {
- pSH->InvalidateRect(hWnd, rcWin);
- }
- }
- }
-}
-
-#define PWL_IMPLEMENT_KEY_METHOD(key_method_name) \
- FX_BOOL CPWL_Wnd::key_method_name(FX_WORD nChar, FX_DWORD nFlag) { \
- if (IsValid() && IsVisible() && IsEnabled()) { \
- if (IsWndCaptureKeyboard(this)) { \
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \
- if (IsWndCaptureKeyboard(pChild)) { \
- return pChild->key_method_name(nChar, nFlag); \
- } \
- } \
- } \
- } \
- } \
- return FALSE; \
- }
-
-#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name) \
- FX_BOOL CPWL_Wnd::mouse_method_name(const CFX_FloatPoint& point, \
- FX_DWORD nFlag) { \
- if (IsValid() && IsVisible() && IsEnabled()) { \
- if (IsWndCaptureMouse(this)) { \
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \
- if (IsWndCaptureMouse(pChild)) { \
- return pChild->mouse_method_name(pChild->ParentToChild(point), \
- nFlag); \
- } \
- } \
- } \
- SetCursor(); \
- } else { \
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \
- if (pChild->WndHitTest(pChild->ParentToChild(point))) { \
- return pChild->mouse_method_name(pChild->ParentToChild(point), \
- nFlag); \
- } \
- } \
- } \
- if (WndHitTest(point)) \
- SetCursor(); \
- } \
- } \
- return FALSE; \
- }
-
-PWL_IMPLEMENT_KEY_METHOD(OnKeyDown)
-PWL_IMPLEMENT_KEY_METHOD(OnKeyUp)
-PWL_IMPLEMENT_KEY_METHOD(OnChar)
-
-PWL_IMPLEMENT_MOUSE_METHOD(OnLButtonDblClk)
-PWL_IMPLEMENT_MOUSE_METHOD(OnLButtonDown)
-PWL_IMPLEMENT_MOUSE_METHOD(OnLButtonUp)
-PWL_IMPLEMENT_MOUSE_METHOD(OnMButtonDblClk)
-PWL_IMPLEMENT_MOUSE_METHOD(OnMButtonDown)
-PWL_IMPLEMENT_MOUSE_METHOD(OnMButtonUp)
-PWL_IMPLEMENT_MOUSE_METHOD(OnRButtonDown)
-PWL_IMPLEMENT_MOUSE_METHOD(OnRButtonUp)
-PWL_IMPLEMENT_MOUSE_METHOD(OnMouseMove)
-
-FX_BOOL CPWL_Wnd::OnMouseWheel(short zDelta,
- const CFX_FloatPoint& point,
- FX_DWORD nFlag) {
- if (IsValid() && IsVisible() && IsEnabled()) {
- SetCursor();
- if (IsWndCaptureKeyboard(this)) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- if (IsWndCaptureKeyboard(pChild)) {
- return pChild->OnMouseWheel(zDelta, pChild->ParentToChild(point),
- nFlag);
- }
- }
- }
- }
- }
- return FALSE;
-}
-
-void CPWL_Wnd::AddChild(CPWL_Wnd* pWnd) {
- m_aChildren.Add(pWnd);
-}
-
-void CPWL_Wnd::RemoveChild(CPWL_Wnd* pWnd) {
- for (int32_t i = m_aChildren.GetSize() - 1; i >= 0; i--) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- if (pChild == pWnd) {
- m_aChildren.RemoveAt(i);
- break;
- }
- }
- }
-}
-
-void CPWL_Wnd::OnNotify(CPWL_Wnd* pWnd,
- FX_DWORD msg,
- intptr_t wParam,
- intptr_t lParam) {
- switch (msg) {
- case PNM_ADDCHILD:
- AddChild(pWnd);
- break;
- case PNM_REMOVECHILD:
- RemoveChild(pWnd);
- break;
- default:
- break;
- }
-}
-
-FX_BOOL CPWL_Wnd::IsValid() const {
- return m_bCreated;
-}
-
-const PWL_CREATEPARAM& CPWL_Wnd::GetCreationParam() const {
- return m_sPrivateParam;
-}
-
-CPWL_Wnd* CPWL_Wnd::GetParentWindow() const {
- return m_sPrivateParam.pParentWnd;
-}
-
-CFX_FloatRect CPWL_Wnd::GetWindowRect() const {
- return m_rcWindow;
-}
-
-CFX_FloatRect CPWL_Wnd::GetClientRect() const {
- CFX_FloatRect rcWindow = GetWindowRect();
- CFX_FloatRect rcClient = CPWL_Utils::DeflateRect(
- rcWindow, (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
- if (CPWL_ScrollBar* pVSB = GetVScrollBar())
- rcClient.right -= pVSB->GetScrollBarWidth();
-
- rcClient.Normalize();
- return rcWindow.Contains(rcClient) ? rcClient : CFX_FloatRect();
-}
-
-CFX_FloatPoint CPWL_Wnd::GetCenterPoint() const {
- CFX_FloatRect rcClient = GetClientRect();
- return CFX_FloatPoint((rcClient.left + rcClient.right) * 0.5f,
- (rcClient.top + rcClient.bottom) * 0.5f);
-}
-
-FX_BOOL CPWL_Wnd::HasFlag(FX_DWORD dwFlags) const {
- return (m_sPrivateParam.dwFlags & dwFlags) != 0;
-}
-
-void CPWL_Wnd::RemoveFlag(FX_DWORD dwFlags) {
- m_sPrivateParam.dwFlags &= ~dwFlags;
-}
-
-void CPWL_Wnd::AddFlag(FX_DWORD dwFlags) {
- m_sPrivateParam.dwFlags |= dwFlags;
-}
-
-CPWL_Color CPWL_Wnd::GetBackgroundColor() const {
- return m_sPrivateParam.sBackgroundColor;
-}
-
-void CPWL_Wnd::SetBackgroundColor(const CPWL_Color& color) {
- m_sPrivateParam.sBackgroundColor = color;
-}
-
-void CPWL_Wnd::SetTextColor(const CPWL_Color& color) {
- m_sPrivateParam.sTextColor = color;
-}
-
-void CPWL_Wnd::SetTextStrokeColor(const CPWL_Color& color) {
- m_sPrivateParam.sTextStrokeColor = color;
-}
-
-CPWL_Color CPWL_Wnd::GetTextColor() const {
- return m_sPrivateParam.sTextColor;
-}
-
-CPWL_Color CPWL_Wnd::GetTextStrokeColor() const {
- return m_sPrivateParam.sTextStrokeColor;
-}
-
-int32_t CPWL_Wnd::GetBorderStyle() const {
- return m_sPrivateParam.nBorderStyle;
-}
-
-void CPWL_Wnd::SetBorderStyle(int32_t nBorderStyle) {
- if (HasFlag(PWS_BORDER))
- m_sPrivateParam.nBorderStyle = nBorderStyle;
-}
-
-int32_t CPWL_Wnd::GetBorderWidth() const {
- if (HasFlag(PWS_BORDER))
- return m_sPrivateParam.dwBorderWidth;
-
- return 0;
-}
-
-int32_t CPWL_Wnd::GetInnerBorderWidth() const {
- return 0;
-}
-
-CPWL_Color CPWL_Wnd::GetBorderColor() const {
- if (HasFlag(PWS_BORDER))
- return m_sPrivateParam.sBorderColor;
-
- return CPWL_Color();
-}
-
-const CPWL_Dash& CPWL_Wnd::GetBorderDash() const {
- return m_sPrivateParam.sDash;
-}
-
-void* CPWL_Wnd::GetAttachedData() const {
- return m_sPrivateParam.pAttachedData;
-}
-
-CPWL_ScrollBar* CPWL_Wnd::GetVScrollBar() const {
- if (HasFlag(PWS_VSCROLL))
- return m_pVScrollBar;
-
- return NULL;
-}
-
-void CPWL_Wnd::CreateScrollBar(const PWL_CREATEPARAM& cp) {
- CreateVScrollBar(cp);
-}
-
-void CPWL_Wnd::CreateVScrollBar(const PWL_CREATEPARAM& cp) {
- if (!m_pVScrollBar && HasFlag(PWS_VSCROLL)) {
- PWL_CREATEPARAM scp = cp;
-
- // flags
- scp.dwFlags =
- PWS_CHILD | PWS_BACKGROUND | PWS_AUTOTRANSPARENT | PWS_NOREFRESHCLIP;
-
- scp.pParentWnd = this;
- scp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
- scp.eCursorType = FXCT_ARROW;
- scp.nTransparency = PWL_SCROLLBAR_TRANSPARANCY;
-
- m_pVScrollBar = new CPWL_ScrollBar(SBT_VSCROLL);
- m_pVScrollBar->Create(scp);
- }
-}
-
-void CPWL_Wnd::SetCapture() {
- if (CPWL_MsgControl* pMsgCtrl = GetMsgControl())
- pMsgCtrl->SetCapture(this);
-}
-
-void CPWL_Wnd::ReleaseCapture() {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++)
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- pChild->ReleaseCapture();
-
- if (CPWL_MsgControl* pMsgCtrl = GetMsgControl())
- pMsgCtrl->ReleaseCapture();
-}
-
-void CPWL_Wnd::SetFocus() {
- if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) {
- if (!pMsgCtrl->IsMainCaptureKeyboard(this))
- pMsgCtrl->KillFocus();
- pMsgCtrl->SetFocus(this);
- }
-}
-
-void CPWL_Wnd::KillFocus() {
- if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) {
- if (pMsgCtrl->IsWndCaptureKeyboard(this))
- pMsgCtrl->KillFocus();
- }
-}
-
-void CPWL_Wnd::OnSetFocus() {}
-
-void CPWL_Wnd::OnKillFocus() {}
-
-FX_BOOL CPWL_Wnd::WndHitTest(const CFX_FloatPoint& point) const {
- return IsValid() && IsVisible() && GetWindowRect().Contains(point.x, point.y);
-}
-
-FX_BOOL CPWL_Wnd::ClientHitTest(const CFX_FloatPoint& point) const {
- return IsValid() && IsVisible() && GetClientRect().Contains(point.x, point.y);
-}
-
-const CPWL_Wnd* CPWL_Wnd::GetRootWnd() const {
- if (m_sPrivateParam.pParentWnd)
- return m_sPrivateParam.pParentWnd->GetRootWnd();
-
- return this;
-}
-
-void CPWL_Wnd::SetVisible(FX_BOOL bVisible) {
- if (IsValid()) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- pChild->SetVisible(bVisible);
- }
- }
-
- if (bVisible != m_bVisible) {
- m_bVisible = bVisible;
- RePosChildWnd();
- InvalidateRect();
- }
- }
-}
-
-void CPWL_Wnd::SetClipRect(const CFX_FloatRect& rect) {
- m_rcClip = rect;
- m_rcClip.Normalize();
-}
-
-const CFX_FloatRect& CPWL_Wnd::GetClipRect() const {
- return m_rcClip;
-}
-
-FX_BOOL CPWL_Wnd::IsReadOnly() const {
- return HasFlag(PWS_READONLY);
-}
-
-void CPWL_Wnd::RePosChildWnd() {
- CFX_FloatRect rcContent = CPWL_Utils::DeflateRect(
- GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
-
- CPWL_ScrollBar* pVSB = GetVScrollBar();
-
- CFX_FloatRect rcVScroll =
- CFX_FloatRect(rcContent.right - PWL_SCROLLBAR_WIDTH, rcContent.bottom,
- rcContent.right - 1.0f, rcContent.top);
-
- if (pVSB)
- pVSB->Move(rcVScroll, TRUE, FALSE);
-}
-
-void CPWL_Wnd::CreateChildWnd(const PWL_CREATEPARAM& cp) {}
-
-void CPWL_Wnd::SetCursor() {
- if (IsValid()) {
- if (IFX_SystemHandler* pSH = GetSystemHandler()) {
- int32_t nCursorType = GetCreationParam().eCursorType;
- pSH->SetCursor(nCursorType);
- }
- }
-}
-
-void CPWL_Wnd::CreateMsgControl() {
- if (!m_sPrivateParam.pMsgControl)
- m_sPrivateParam.pMsgControl = new CPWL_MsgControl(this);
-}
-
-void CPWL_Wnd::DestroyMsgControl() {
- if (CPWL_MsgControl* pMsgControl = GetMsgControl())
- if (pMsgControl->IsWndCreated(this))
- delete pMsgControl;
-}
-
-CPWL_MsgControl* CPWL_Wnd::GetMsgControl() const {
- return m_sPrivateParam.pMsgControl;
-}
-
-FX_BOOL CPWL_Wnd::IsCaptureMouse() const {
- return IsWndCaptureMouse(this);
-}
-
-FX_BOOL CPWL_Wnd::IsWndCaptureMouse(const CPWL_Wnd* pWnd) const {
- if (CPWL_MsgControl* pCtrl = GetMsgControl())
- return pCtrl->IsWndCaptureMouse(pWnd);
-
- return FALSE;
-}
-
-FX_BOOL CPWL_Wnd::IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const {
- if (CPWL_MsgControl* pCtrl = GetMsgControl())
- return pCtrl->IsWndCaptureKeyboard(pWnd);
-
- return FALSE;
-}
-
-FX_BOOL CPWL_Wnd::IsFocused() const {
- if (CPWL_MsgControl* pCtrl = GetMsgControl())
- return pCtrl->IsMainCaptureKeyboard(this);
-
- return FALSE;
-}
-
-CFX_FloatRect CPWL_Wnd::GetFocusRect() const {
- return CPWL_Utils::InflateRect(GetWindowRect(), 1);
-}
-
-FX_FLOAT CPWL_Wnd::GetFontSize() const {
- return m_sPrivateParam.fFontSize;
-}
-
-void CPWL_Wnd::SetFontSize(FX_FLOAT fFontSize) {
- m_sPrivateParam.fFontSize = fFontSize;
-}
-
-IFX_SystemHandler* CPWL_Wnd::GetSystemHandler() const {
- return m_sPrivateParam.pSystemHandler;
-}
-
-IPWL_FocusHandler* CPWL_Wnd::GetFocusHandler() const {
- return m_sPrivateParam.pFocusHandler;
-}
-
-IPWL_Provider* CPWL_Wnd::GetProvider() const {
- return m_sPrivateParam.pProvider;
-}
-
-IFX_Edit_FontMap* CPWL_Wnd::GetFontMap() const {
- return m_sPrivateParam.pFontMap;
-}
-
-CPWL_Color CPWL_Wnd::GetBorderLeftTopColor(int32_t nBorderStyle) const {
- CPWL_Color color;
-
- switch (nBorderStyle) {
- case PBS_SOLID:
- break;
- case PBS_DASH:
- break;
- case PBS_BEVELED:
- color = CPWL_Color(COLORTYPE_GRAY, 1);
- break;
- case PBS_INSET:
- color = CPWL_Color(COLORTYPE_GRAY, 0.5f);
- break;
- case PBS_UNDERLINED:
- break;
- }
-
- return color;
-}
-
-CPWL_Color CPWL_Wnd::GetBorderRightBottomColor(int32_t nBorderStyle) const {
- CPWL_Color color;
-
- switch (nBorderStyle) {
- case PBS_SOLID:
- break;
- case PBS_DASH:
- break;
- case PBS_BEVELED:
- color = CPWL_Utils::DevideColor(GetBackgroundColor(), 2);
- break;
- case PBS_INSET:
- color = CPWL_Color(COLORTYPE_GRAY, 0.75f);
- break;
- case PBS_UNDERLINED:
- break;
- }
-
- return color;
-}
-
-int32_t CPWL_Wnd::GetTransparency() {
- return m_sPrivateParam.nTransparency;
-}
-
-void CPWL_Wnd::SetTransparency(int32_t nTransparency) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- pChild->SetTransparency(nTransparency);
- }
- }
-
- m_sPrivateParam.nTransparency = nTransparency;
-}
-
-CFX_Matrix CPWL_Wnd::GetWindowMatrix() const {
- CFX_Matrix mt = GetChildToRoot();
-
- if (IPWL_Provider* pProvider = GetProvider()) {
- mt.Concat(pProvider->GetWindowMatrix(GetAttachedData()));
- return mt;
- }
-
- return mt;
-}
-
-void CPWL_Wnd::PWLtoWnd(const CFX_FloatPoint& point,
- int32_t& x,
- int32_t& y) const {
- CFX_Matrix mt = GetWindowMatrix();
- CFX_FloatPoint pt = point;
- mt.Transform(pt.x, pt.y);
- x = (int32_t)(pt.x + 0.5);
- y = (int32_t)(pt.y + 0.5);
-}
-
-FX_RECT CPWL_Wnd::PWLtoWnd(const CFX_FloatRect& rect) const {
- CFX_FloatRect rcTemp = rect;
- CFX_Matrix mt = GetWindowMatrix();
- mt.TransformRect(rcTemp);
- return FX_RECT((int32_t)(rcTemp.left + 0.5), (int32_t)(rcTemp.bottom + 0.5),
- (int32_t)(rcTemp.right + 0.5), (int32_t)(rcTemp.top + 0.5));
-}
-
-FX_HWND CPWL_Wnd::GetAttachedHWnd() const {
- return m_sPrivateParam.hAttachedWnd;
-}
-
-CFX_FloatPoint CPWL_Wnd::ChildToParent(const CFX_FloatPoint& point) const {
- CFX_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return point;
-
- CFX_FloatPoint pt = point;
- mt.Transform(pt.x, pt.y);
- return pt;
-}
-
-CFX_FloatRect CPWL_Wnd::ChildToParent(const CFX_FloatRect& rect) const {
- CFX_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return rect;
-
- CFX_FloatRect rc = rect;
- mt.TransformRect(rc);
- return rc;
-}
-
-CFX_FloatPoint CPWL_Wnd::ParentToChild(const CFX_FloatPoint& point) const {
- CFX_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return point;
-
- mt.SetReverse(mt);
- CFX_FloatPoint pt = point;
- mt.Transform(pt.x, pt.y);
- return pt;
-}
-
-CFX_FloatRect CPWL_Wnd::ParentToChild(const CFX_FloatRect& rect) const {
- CFX_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return rect;
-
- mt.SetReverse(mt);
- CFX_FloatRect rc = rect;
- mt.TransformRect(rc);
- return rc;
-}
-
-CFX_Matrix CPWL_Wnd::GetChildToRoot() const {
- CFX_Matrix mt(1, 0, 0, 1, 0, 0);
- if (HasFlag(PWS_CHILD)) {
- const CPWL_Wnd* pParent = this;
- while (pParent) {
- mt.Concat(pParent->GetChildMatrix());
- pParent = pParent->GetParentWindow();
- }
- }
- return mt;
-}
-
-CFX_Matrix CPWL_Wnd::GetChildMatrix() const {
- if (HasFlag(PWS_CHILD))
- return m_sPrivateParam.mtChild;
-
- return CFX_Matrix(1, 0, 0, 1, 0, 0);
-}
-
-void CPWL_Wnd::SetChildMatrix(const CFX_Matrix& mt) {
- m_sPrivateParam.mtChild = mt;
-}
-
-const CPWL_Wnd* CPWL_Wnd::GetFocused() const {
- if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) {
- return pMsgCtrl->m_pMainKeyboardWnd;
- }
-
- return NULL;
-}
-
-void CPWL_Wnd::EnableWindow(FX_BOOL bEnable) {
- if (m_bEnabled != bEnable) {
- for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
- pChild->EnableWindow(bEnable);
- }
- }
-
- m_bEnabled = bEnable;
-
- if (bEnable)
- OnEnabled();
- else
- OnDisabled();
- }
-}
-
-FX_BOOL CPWL_Wnd::IsEnabled() {
- return m_bEnabled;
-}
-
-void CPWL_Wnd::OnEnabled() {}
-
-void CPWL_Wnd::OnDisabled() {}
-
-FX_BOOL CPWL_Wnd::IsCTRLpressed(FX_DWORD nFlag) const {
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
- return pSystemHandler->IsCTRLKeyDown(nFlag);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPWL_Wnd::IsSHIFTpressed(FX_DWORD nFlag) const {
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
- return pSystemHandler->IsSHIFTKeyDown(nFlag);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPWL_Wnd::IsALTpressed(FX_DWORD nFlag) const {
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
- return pSystemHandler->IsALTKeyDown(nFlag);
- }
-
- return FALSE;
-}
-
-FX_BOOL CPWL_Wnd::IsINSERTpressed(FX_DWORD nFlag) const {
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
- return pSystemHandler->IsINSERTKeyDown(nFlag);
- }
-
- return FALSE;
-}